123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405 |
- #!/bin/bash
- set -e
- function usage() {
- echo "$0 [options] <tag> <user> <email>"
- echo
- echo " tag : Release tag (eg: 2.14.4, 2.15-beta1, ...)"
- echo " user: Git username"
- echo " email: Git email"
- echo
- echo "Options:"
- echo " -h : Print usage"
- echo " -b <branch> : Branch to release from (eg: trunk, 2.14.x, ...)"
- echo " -r <rev> : Revision to release (eg: 12345)"
- echo " -g <ver> : GeoTools version/revision (eg: 20.4, master:12345)"
- echo " -w <ver> : GeoWebCache version/revision (eg: 1.14.4, 1.14.x:abcd)"
- echo
- echo "Environment variables:"
- echo " SKIP_BUILD : Skips main release build"
- echo " SKIP_COMMUNITY : Skips community release build"
- echo " SKIP_TAG : Skips tag on release branch"
- echo " SKIP_GT : Skips the GeoTools build, as used to build revision"
- echo " SKIP_GWC : Skips the GeoWebCache build, as used to build revision"
- echo " MAVEN_FLAGS : Used to supply additional option, like -U or -X to build process."
- }
- while getopts "hb:r:g:w:" opt; do
- case $opt in
- h)
- usage
- exit
- ;;
- b)
- branch=$OPTARG
- ;;
- r)
- rev=$OPTARG
- ;;
- g)
- gt_ver=$OPTARG
- ;;
- w)
- gwc_ver=$OPTARG
- ;;
- \?)
- usage
- exit 1
- ;;
- :)
- echo "Option -$OPTARG requires an argument"
- exit 1
- ;;
- esac
- done
- shift $(( OPTIND -1 ))
- tag=$1
- git_user=$2
- git_email=$3
- if [ -z $tag ] || [ -z $git_user ] || [ -z $git_email ] || [ ! -z $4 ]; then
- usage
- exit 1
- fi
- . "$( cd "$( dirname "$0" )" && pwd )"/properties
- . "$( cd "$( dirname "$0" )" && pwd )"/functions
- # more sanity checks
- if [ `is_version_num $tag` == "0" ]; then
- echo "$tag is a not a valid release tag"
- exit 1
- fi
- if [ `is_primary_branch_num $tag` == "1" ]; then
- echo "$tag is a not a valid release tag, can't be same as primary branch name"
- exit 1
- fi
- #checkout branch locally if it doesn't exist
- if ! git show-ref refs/heads/$branch; then
- echo "checkout branch #branch locally"
- git fetch origin $branch:$branch
- fi
- jira_id=`get_jira_id $tag`
- if [ -z $jira_id ]; then
- echo "Could not locate release $tag in JIRA"
- exit -1
- fi
- pushd .. > /dev/null
- dist=`pwd`/distribution/$tag
- mkdir -p $dist/plugins
- echo "Building release with following parameters:"
- echo " branch = $branch"
- echo " revision = $rev"
- echo " tag = $tag"
- echo " geotools = $gt_ver"
- echo " geowebcache = $gwc_ver"
- echo " jira id = $jira_id"
- echo " distribution = $dist"
- echo
- echo "maven/java settings:"
- mvn -version $MAVEN_FLAGS
- echo "maven opts:"
- echo "$MAVEN_OPTS"
- echo "maven flags:"
- echo "$MAVEN_FLAGS"
- echo "maven localRepository:"
- mvn help:evaluate $MAVEN_FLAGS -Dexpression=settings.localRepository -N --no-transfer-progress -B | grep -v '\[INFO\]'
- git reset --hard HEAD
- git checkout $branch
- git pull origin $branch
- if [ `git branch --list rel_$tag | wc -l` == 1 ]; then
- echo "branch rel_$tag exists, deleting it"
- git branch -D rel_$tag
- fi
- git checkout $branch
- if [ $rev != "HEAD" ]; then
- set +e
- git log | grep $rev
- if [ $? != 0 ]; then
- echo "Revision $rev not a revision on branch $branch"
- exit -1
- fi
- set -e
- fi
- git checkout -b rel_$tag $rev
- if [ -z $SKIP_GT ]; then
- if [ ! -z $gt_ver ]; then
-
- if [ "`is_version_num $gt_ver`" == "1" ]; then
- gt_tag=$gt_ver
- fi
-
- if [ -z $gt_tag ]; then
- arr=(${gt_ver//@/ })
- if [ "${#arr[@]}" != "2" ]; then
- echo "Bad version $gt_ver, must be specified as <branch>@<revision>"
- exit 1
- fi
- gt_branch=${arr[0]}
- gt_rev=${arr[1]}
- gt_dir=build/geotools/$gt_branch/$gt_rev
- if [ ! -e $gt_dir ]; then
- echo "cloning geotools repo from $GT_GIT_URL"
- git clone $GT_GIT_URL $gt_dir
- fi
-
- pushd $gt_dir > /dev/null
- echo "checking out geotools ${gt_branch}@${gt_rev}"
- git checkout $gt_rev
-
- mvn clean install $MAVEN_FLAGS -Dall -DskipTests
- popd > /dev/null
-
- gt_tag=`get_pom_version $git_dir/pom.xml`
- fi
- fi
- fi
- if [ ! -z $gt_tag ]; then
- echo "GeoTools version = $gt_tag"
- fi
- if [ ! -z $gt_tag ]; then
- sed -i "s/\(<gt.version>\).*\(<\/gt.version>\)/\1$gt_tag\2/g" src/pom.xml
- else
-
- gt_tag=`cat src/pom.xml | grep "<gt.version>" | sed 's/ *<gt.version>\(.*\)<\/gt.version>/\1/g'`
- fi
- if [ -z $SKIP_GWC ]; then
- if [ ! -z $gwc_ver ]; then
-
- if [ "`is_version_num $gwc_ver`" == "1" ]; then
- gwc_tag=$gwc_ver
- fi
-
- if [ -z $gwc_tag ]; then
- arr=(${gwc_ver//@/ })
- if [ "${#arr[@]}" != "2" ]; then
- echo "Bad version $gwc_ver, must be specified as <branch>:<revision>"
- exit 1
- fi
- gwc_branch=${arr[0]}
- gwc_rev=${arr[1]}
- gwc_dir=build/geowebcache/$gwc_branch/$gwc_rev
- if [ ! -e $gwc_dir -o ! -e $gwc_dir/geowebcache ]; then
- rm -rf $gwc_dir
- mkdir -p $gwc_dir
- echo "checking out geowebache ${gwc_branch}@${gwc_rev}"
- git clone $GWC_GIT_URL $gwc_dir
- pushd $gwc_dir > /dev/null
- git checkout $gwc_rev
- popd > /dev/null
- fi
-
- pushd $gwc_dir/geowebcache > /dev/null
- mvn clean install $MAVEN_FLAGS -DskipTests
-
- gwc_tag=`get_pom_version pom.xml`
- popd > /dev/null
- fi
- fi
- fi
- if [ ! -z $gwc_tag ]; then
- echo "GeoWebCache version = $gwc_tag"
- fi
- if [ ! -z $gwc_tag ]; then
- sed -i "s/\(<gwc.version>\).*\(<\/gwc.version>\)/\1$gwc_tag\2/g" src/pom.xml
- else
- gwc_tag=`cat src/pom.xml | grep "<gwc.version>" | sed 's/ *<gwc.version>\(.*\)<\/gwc.version>/\1/g'`
- fi
- old_ver=`get_pom_version src/pom.xml`
- echo "updating version numbers from $old_ver to $tag"
- find src -name pom.xml -exec sed -i "s/$old_ver/$tag/g" {} \;
- find doc -name conf.py -exec sed -i "s/$old_ver/$tag/g" {} \;
- find doc -name pom.xml -exec sed -i "s/$old_ver/$tag/g" {} \;
- pushd src/release > /dev/null
- shopt -s extglob
- shopt -u extglob
- popd > /dev/null
- pushd src > /dev/null
- if [ -z $SKIP_BUILD ]; then
- echo "building release"
- mvn clean install $MAVEN_FLAGS -DskipTests -P release
-
-
- mvn javadoc:aggregate $MAVEN_FLAGS
-
-
-
- pushd ../doc/en > /dev/null
-
-
-
- mvn clean compile $MAVEN_FLAGS
- mvn package $MAVEN_FLAGS
-
- popd > /dev/null
- else
- echo "Skipping mvn clean install $MAVEN_FLAGS -DskipTests -P release"
- fi
- if [ -z $SKIP_COMMUNITY ]; then
- pushd community > /dev/null
- set +e
- mvn clean install $MAVEN_FLAGS -P communityRelease -DskipTests || true
- set -e
- popd > /dev/null
- else
- echo "Skipping mvn clean install $MAVEN_FLAGS -P communityRelease -DskipTests"
- fi
- echo "Assemble artifacts"
- mvn assembly:single $MAVEN_FLAGS -N
- artifacts=`pwd`/target/release
- echo "artifacts = $artifacts"
- pushd release/installer/mac > /dev/null
- zip -q -r $artifacts/geoserver-$tag-mac.zip *
- popd > /dev/null
- pushd release/installer/win > /dev/null
- zip -q -r $artifacts/geoserver-$tag-win.zip *
- popd > /dev/null
- pushd $artifacts > /dev/null
- htmldoc=geoserver-$tag-htmldoc.zip
- if [ -e ../../../doc/en/target/$htmldoc ]; then
- echo "Using $htmldoc assembly"
-
- cp ../../../doc/en/target/$htmldoc $htmldoc
- else
- echo "Creating $htmldoc"
-
- if [ -e user ]; then
- unlink user
- fi
- if [ -e developer ]; then
- unlink developer
- fi
- ln -sf ../../../doc/en/target/user/html user
- ln -sf ../../../doc/en/target/developer/html developer
- ln -sf ../../../doc/en/release/README.txt readme
- if [ -e $htmldoc ]; then
- rm -f $htmldoc
- fi
- zip -q -r $htmldoc user developer readme
- unlink user
- unlink developer
- unlink readme
- fi
- popd > /dev/null
- echo "copying artifacts to $dist"
- cp $artifacts/*-plugin.zip $dist/plugins
- for a in `ls $artifacts/*.zip | grep -v plugin`; do
- cp $a $dist
- done
- cp $artifacts/../../../doc/en/target/user/latex/manual.pdf $dist/geoserver-$tag-user-manual.pdf || true
- echo "generated artifacts:"
- ls -la $dist
- pushd .. > /dev/null
- init_git $git_user $git_email
- git add doc
- git add src
- git commit -m "updating version numbers and release notes for $tag" .
- if [ -z $SKIP_TAG ]; then
-
- git fetch origin refs/tags/$tag:refs/tags/$tag --no-tags || true
-
- if [ `git tag --list $tag | wc -l` == 1 ]; then
- echo "tag $tag exists, deleting it"
- git tag -d $tag
- fi
- if [ `git ls-remote --refs --tags origin tags/$tag | wc -l` == 1 ]; then
- echo "tag $tag exists on $GIT_ROOT, deleting it"
- git push --delete origin $tag
- fi
-
- git tag $tag
-
- git push origin $tag
- fi
- popd > /dev/null
- popd > /dev/null
- echo "build complete, artifacts available at $DIST_URL/distribution/$tag"
- exit 0
|