Updated Branches: refs/heads/wicket-6.x 0fa7cb72a -> 05d0bae3d
Added release script for bug releases Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/05d0bae3 Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/05d0bae3 Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/05d0bae3 Branch: refs/heads/wicket-6.x Commit: 05d0bae3db1980d94f9397d6c77bf362efeb1dc7 Parents: 0fa7cb7 Author: Martijn Dashorst <martijn.dasho...@gmail.com> Authored: Mon Jul 8 22:24:46 2013 +0200 Committer: Martijn Dashorst <martijn.dasho...@gmail.com> Committed: Mon Jul 8 22:25:16 2013 +0200 ---------------------------------------------------------------------- patch-dashorst.sh | 283 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 283 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/05d0bae3/patch-dashorst.sh ---------------------------------------------------------------------- diff --git a/patch-dashorst.sh b/patch-dashorst.sh new file mode 100755 index 0000000..c6c80b0 --- /dev/null +++ b/patch-dashorst.sh @@ -0,0 +1,283 @@ +#!/bin/sh +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +log=/tmp/wicketrelease.out + +function fail { + echo "$1" + if [ -f $log ] ; then + echo "" + cat $log + fi + exit +} + +function setup_gpg { + gpg --armor --detach-sign --use-agent --sign pom.xml >& $log + if [ $? -ne 0 ] ; then + fail "ERROR: Unable to run gpg properly" + fi + + gpg --verify pom.xml.asc >& $log + if [ $? -ne 0 ]; then + rm pom.xml.asc + fail "It appears that you fat-fingered your GPG passphrase" + fi + rm pom.xml.asc +} + +function getVersion { + cat << EOF | xmllint --noent --shell pom.xml | grep content | cut -f2 -d= +setns pom=http://maven.apache.org/POM/4.0.0 +xpath /pom:project/pom:version/text() +EOF +} + +# set -e + +echo "Apache Wicket Release script" +echo "----------------------------" +echo "Building a release for Apache Wicket." +echo "" +echo "This script assumes you are running on OS X, it hasn't been tested on any other" +echo "operating systems, and you can bet it won't work on Windows..." +echo "" +echo "REQUIREMENTS:" +echo "" +echo " - a pure JDK 6 environment, JDK 7 or newer won't cut it" +echo " - Maven 3.0.4 (older releases are b0rked, just don't bother)" +echo " - gpg, gpg-agent and pinentry for signing" +echo "" + +agentcount=`ps aux|grep gpg-agent|wc -l` + +current_version=$(getVersion) +major_version=$(expr $current_version : '\(.*\)\..*\..*\-SNAPSHOT') +minor_version=$(expr $current_version : '.*\.\(.*\)\..*\-SNAPSHOT') +bugfix_version=$(expr $current_version : '.*\..*\.\(.*\)-SNAPSHOT') +version="$major_version.$minor_version.$bugfix_version" +current_version="$major_version.$minor_version.$((bugfix_version - 1))" + +echo "This script will create a patch release: Apache Wicket $version from $current_version" +echo "" +echo "Press enter to continue or CTRL-C to abort \c" +read + +branch="build/wicket-$version" +tag="wicket-$version" + +if [ "$agentcount" -ne 1 ]; then + echo "Found gpg-agent running, killing all agents" + killall gpg-agent +fi + +echo "" +echo "You are asked twice for your passphrase, one for scripting purposes, and one " +echo "for gpg-agent using pinentry such that gpg and git are able to sign things." +echo "" +echo "Enter your GPG passphrase (input will be hidden) \c" +stty_orig=`stty -g` +stty -echo +read passphrase +stty $stty_orig + +# test the GPGP passphrase to fail-fast: +echo "$passphrase" | gpg --passphrase-fd 0 --armor --output pom.xml.asc --detach-sig pom.xml +gpg --verify pom.xml.asc +if [ $? -ne 0 ]; then + echo "It appears that you fat-fingered your GPG passphrase" + rm pom.xml.asc + exit $? +fi +rm pom.xml.asc + +echo "Starting new gpg-agent" +eval $(gpg-agent --daemon --pinentry-program $(which pinentry)) +if [ $? -ne 0 ] ; then + fail "ERROR: Unable to start gpg-agent" +fi + +setup_gpg + +echo "Ensuring we are starting from builds/wicket-$current_version" +# otherwise we can't remove a previous release branch that failed +git checkout build/wicket-$current_version + +echo "Cleaning up any release artifacts that might linger" +mvn -q release:clean + +echo "Removing previous release tag $tag (if exists)" +oldtag=`git tag -l |grep -e "$tag"|wc -l` +[ "$oldtag" -ne 0 ] && git tag -d $tag + +echo "Removing previous build branch $branch (if exists)" +oldbranch=`git branch |grep -e "$branch"|wc -l` +[ "$oldbranch" -ne 0 ] && git branch -D $branch + +git checkout -b $branch + +# Clear the current NOTICE.txt file +echo "Creating notice file." + +NOTICE=NOTICE +> $NOTICE +echo "Apache Wicket" >> $NOTICE +echo "Copyright 2006-$(date +%Y) The Apache Software Foundation" >> $NOTICE +echo "" >> $NOTICE +echo "This product includes software developed at" >> $NOTICE +echo "The Apache Software Foundation (http://www.apache.org/)." >> $NOTICE +echo "" >> $NOTICE +echo "This is an aggregated NOTICE file for the Apache Wicket projects included" >> $NOTICE +echo "in this distribution." >> $NOTICE +echo "" >> $NOTICE +echo "NB: DO NOT ADD LICENSES/NOTICES/ATTRIBUTIONS TO THIS FILE, BUT IN THE" >> $NOTICE +echo " NOTICE FILE OF THE CORRESPONDING PROJECT. THE RELEASE PROCEDURE WILL" >> $NOTICE +echo " AUTOMATICALLY INCLUDE THE NOTICE IN THIS FILE." >> $NOTICE +echo "" >> $NOTICE + +# next concatenate all NOTICE files from sub projects to the root file +for i in `find . -name "NOTICE" -not -regex ".*/target/.*" -not -regex "./NOTICE"` +do + echo "---------------------------------------------------------------------------" >> $NOTICE + echo "src/"$i | sed -e "s/\/src.*//g" >> $NOTICE + echo "---------------------------------------------------------------------------" >> $NOTICE + cat $i >> $NOTICE + echo >> $NOTICE +done + +echo "Fixing the quickstart to use the correct wicket version" +sed -e "s/\<wicket\.version\>.*\<\/wicket\.version\>/\<wicket.version\>$version\<\/wicket.version\>/g" -i "" archetypes/quickstart/src/main/resources/archetype-resources/pom.xml + +echo "Committing changes" +git commit -am "Changes to notice files and quickstart archetype" + +# clean all projects +echo "Clean all projects" +mvn -q clean -Pall + +# package and assemble the release +echo "Prepare the release" +mvn --batch-mode release:prepare -DpreparationGoals="clean" -Dtag=$tag +if [ $? -ne 0 ] ; then + fail "ERROR: mvn release:prepare was not successful" +fi + +# this needs to be done before signing the tag otherwise the snapshot version +# is tagged +#echo "Rollback the last commit of the release plugin" +#git reset HEAD^ --hard >> $log + +#echo "Sign the tag" +# TODO the git tag --sign doesn't utilize the gpg-agent for some reason +#git tag --sign --force --message "Signed release tag for Apache Wicket $version" $tag >> $log + +echo "Performing the release using Maven" +mvn -Dgpg.passphrase="$passphrase" -ff -l $log release:perform -DlocalCheckout=true -Dtag=$tag +if [ $? -ne 0 ] ; then + fail "ERROR: mvn release:perform was not successful" +fi + +echo "Create and sign the source tarballs" + +mkdir -p target/dist/binaries + +git archive --format=tar.gz --prefix=apache-wicket-$version/ -o target/dist/apache-wicket-$version.tar.gz $tag +git archive --format=zip --prefix=apache-wicket-$version/ -o target/dist/apache-wicket-$version.zip $tag +gpg --armor --detach-sign --use-agent --sign target/dist/apache-wicket-$version.tar.gz +gpg --armor --detach-sign --use-agent --sign target/dist/apache-wicket-$version.zip +gpg --print-md SHA1 target/dist/apache-wicket-$version.tar.gz > target/dist/apache-wicket-$version.tar.gz.sha +gpg --print-md MD5 target/dist/apache-wicket-$version.tar.gz > target/dist/apache-wicket-$version.tar.gz.md5 +gpg --print-md SHA1 target/dist/apache-wicket-$version.zip > target/dist/apache-wicket-$version.zip.sha +gpg --print-md MD5 target/dist/apache-wicket-$version.zip > target/dist/apache-wicket-$version.zip.md5 + +echo "Create and sign the binaries" +mkdir target/apache-wicket-$version-bin +pushd target/apache-wicket-$version-bin +find ../checkout ! \( -type d -name "WEB-INF" -prune \) -regex ".*wicket-.*.[jw]ar" ! -name "*-sources*" ! -name "*-javadoc*" ! -name "*wicket-archetype-quickstart*" ! -name "wicket-common-tests*" -type f -exec cp {} . \; +find ../checkout ! \( -type d -name "WEB-INF" -prune \) -regex ".*wicket-.*.[jw]ar\.asc" ! -name "*-sources*" ! -name "*-javadoc*" ! -name "*wicket-archetype-quickstart*" ! -name "wicket-common-tests*" -type f -exec cp {} . \; +cp ../../LICENSE . +cp ../../README . +cp ../../NOTICE . +cp ../../CHANGELOG* . +popd + +pushd target + +tar cfz dist/binaries/apache-wicket-$version-bin.tar.gz apache-wicket-$version-bin +zip -r dist/binaries/apache-wicket-$version-bin.zip apache-wicket-$version-bin +gpg --armor --detach-sign --use-agent --sign dist/binaries/apache-wicket-$version-bin.tar.gz +gpg --armor --detach-sign --use-agent --sign dist/binaries/apache-wicket-$version-bin.zip +gpg --print-md SHA1 dist/binaries/apache-wicket-$version-bin.tar.gz > dist/binaries/apache-wicket-$version-bin.tar.gz.sha +gpg --print-md MD5 dist/binaries/apache-wicket-$version-bin.tar.gz > dist/binaries/apache-wicket-$version-bin.tar.gz.md5 +gpg --print-md SHA1 dist/binaries/apache-wicket-$version-bin.zip > dist/binaries/apache-wicket-$version-bin.zip.sha +gpg --print-md MD5 dist/binaries/apache-wicket-$version-bin.zip > dist/binaries/apache-wicket-$version-bin.zip.md5 +popd + +echo "Uploading release" +pushd target/dist +svn mkdir https://dist.apache.org/repos/dist/dev/wicket/$version -m "Create $version release staging area" +svn co --force --depth=empty https://dist.apache.org/repos/dist/dev/wicket/$version . +cp ../../CHANGELOG* . +svn add * +svn commit -m "Upload wicket-$version to staging area" +popd + +echo "" +echo "The release has been created. It is up to you to check if the release is up" +echo "to par, and perform the following commands yourself when you start the vote" +echo "to enable future development during the vote and after." +echo "" +echo "You can find the distribution in target/dist" +echo "" +echo " cd target/dist" +echo "" +echo "To verify all signatures:" +echo "" +echo " find . -name \"*.asc\" -exec gpg --verify {} \; " +echo "" +echo "To push the release branch to ASF git servers" +echo "" +echo " git push origin $branch:refs/heads/$branch" +echo "" + +echo "To move the release from staging to the mirrors:" +echo "" +echo " svn mv https://dist.apache.org/repos/dist/dev/wicket/$version https://dist.apache.org/repos/dist/release/wicket -m \"Upload release to the mirrors\"" +echo "" + +echo "To sign the release tag issue the following three commands: " +echo "" +echo " git checkout $tag" +echo " git tag --sign --force --message \"Signed release tag for Apache Wicket $version\" $tag >> $log" +echo " git checkout $branch" +echo "" + +mvn_version_to_replace="$major_version.$minor_version.1-SNAPSHOT" +next_dev_version="$major_version.$(expr $minor_version + 1).0-SNAPSHOT" + +echo "To renumber the next development iteration $next_dev_version:" +echo "" +echo " git checkout wicket-6.x" +echo " mvn release:update-versions --batch-mode" +echo " find . ! \\( -type d -name \"target\" -prune \\) -name pom.xml -exec sed -i \"\" -E \"s/$mvn_version_to_replace/$next_dev_version/g\" {} \\;" +# do the same for the original snapshot version, as our maven release +# plugin friend doesn't do that for us in the dependency management section +mvn_version_to_replace="$major_version.$minor_version.0-SNAPSHOT" +echo " find . ! \\( -type d -name \"target\" -prune \\) -name pom.xml -exec sed -i \"\" -E \"s/$mvn_version_to_replace/$next_dev_version/g\" {} \\;" +echo " git add \`find . ! \\( -type d -name \"target\" -prune \\) -name pom.xml\`" +echo " git commit -m \"Start next development version\"" +echo " git push" +echo ""