| #!/bin/bash |
| |
| set -e |
| |
| function user_continue() { |
| read -p "Do you want to continue? [y/n]" -n 1 -r |
| echo |
| if [[ ! $REPLY =~ ^[Yy]$ ]]; then |
| exit 1 |
| fi |
| } |
| |
| if [ "$#" -ne 5 ]; then |
| echo "USAGE: `basename $0` <branch> <release-version> <next-version> <sonatype-user> <sonatype-passwd>" |
| exit |
| fi |
| |
| PROJECT="cryptacular" |
| BRANCH="${1}" |
| if [ ! $(git rev-parse --abbrev-ref HEAD) = "${BRANCH}" ]; then |
| echo "The current branch must be ${BRANCH}" |
| exit |
| fi |
| RELEASE_VERSION="${2}" |
| if [[ ! "${RELEASE_VERSION}" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then |
| echo "<release-version> must be of the form 'MAJOR.MINOR.REVISION'" |
| exit |
| fi |
| NEXT_VERSION="${3}" |
| if [[ ! "${NEXT_VERSION}" =~ ^[0-9]+\.[0-9]+\.[0-9]+-SNAPSHOT$ ]]; then |
| echo "<next-version> must be of the form 'MAJOR.MINOR.REVISION-SNAPSHOT'" |
| exit |
| fi |
| SONATYPE_USER="${4}" |
| SONATYPE_PASSWORD="${5}" |
| |
| if [ -z $(git config --get user.signingkey) ]; then |
| echo "Git signing must be enabled. Add user.signingkey to ~/.gitconfig" |
| exit |
| fi |
| |
| if [ $(git tag -l | grep "$RELEASE_VERSION") ]; then |
| echo "Tag ${RELEASE_VERSION} already exists" |
| exit |
| fi |
| |
| echo "=================================================================" |
| echo "BEGIN RELEASE" |
| echo "PROJECT: ${PROJECT}" |
| echo "BRANCH TO TAG: ${BRANCH}" |
| echo "RELEASE VERSION: ${RELEASE_VERSION}" |
| echo "NEXT VERSION: ${NEXT_VERSION}" |
| echo "=================================================================" |
| user_continue |
| |
| # update pom to release version |
| if ! mvn clean; then |
| echo "maven clean command failed, check your environment" |
| exit |
| fi |
| mvn versions:set -DnewVersion=${RELEASE_VERSION} -DgenerateBackupPoms=false |
| echo "Updated pom to release version ${RELEASE_VERSION}" |
| |
| POM_VERSION=$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout) |
| if [ "${POM_VERSION}" != "${RELEASE_VERSION}" ]; then |
| echo "POM version ${POM_VERSION} does not equal ${RELEASE_VERSION}" |
| exit |
| fi |
| user_continue |
| |
| # commit pom changes |
| git commit pom.xml -m "Update version for ${RELEASE_VERSION} release." |
| |
| # tag the release version |
| git tag -s v${RELEASE_VERSION} -m "Tagging ${RELEASE_VERSION} release." |
| echo "Tagged release ${RELEASE_VERSION}" |
| |
| # update pom to the next version |
| mvn versions:set -DnewVersion=${NEXT_VERSION} -DgenerateBackupPoms=false |
| echo "Updated pom to next version ${NEXT_VERSION}" |
| |
| # commit pom changes |
| git commit pom.xml -m "Bump version to ${NEXT_VERSION}." |
| |
| # push commits |
| git push origin ${BRANCH} |
| |
| # push release tag |
| git push origin v${RELEASE_VERSION} |
| |
| # checkout the release tag |
| git checkout v${RELEASE_VERSION} |
| echo "Switched to the tag version ${RELEASE_VERSION}" |
| |
| # build the release distribution |
| mvn -Dsign=true repository:bundle-create |
| gpg --armor --detach-sign target/${PROJECT}-${RELEASE_VERSION}-dist.tar.gz |
| gpg --armor --detach-sign target/${PROJECT}-${RELEASE_VERSION}-dist.zip |
| |
| # update the javadocs |
| echo "Updating javadocs" |
| user_continue |
| |
| git checkout gh-pages |
| git pull origin gh-pages |
| # remove root directory javadocs |
| git rm -r javadocs/org javadocs/*.html javadocs/*.css javadocs/*.js javadocs/package-list |
| # add new javadocs to root directory |
| cp -Rp target/apidocs/ javadocs |
| # add new javadocs to release version directory |
| cp -Rp target/apidocs/ javadocs/${RELEASE_VERSION} |
| git add javadocs |
| git commit -a -m "Updated javadocs for ${RELEASE_VERSION} release." |
| echo "Committed new javadocs" |
| |
| # add new binaries |
| echo "Adding release binaries" |
| user_continue |
| |
| mkdir downloads/${RELEASE_VERSION} |
| cp target/*-dist* downloads/${RELEASE_VERSION} |
| git add downloads/${RELEASE_VERSION} |
| git commit -a -m "Added binaries for ${RELEASE_VERSION} release." |
| echo "Committed new release binaries" |
| |
| # push changes to the server |
| git push origin gh-pages |
| |
| # upload bundle jar to sonatype |
| echo "Uploading bundle jar to sonatype" |
| user_continue |
| |
| curl -i -u ${SONATYPE_USER}:${SONATYPE_PASSWORD} \ |
| -F "file=@target/${PROJECT}-"${RELEASE_VERSION}"-bundle.jar" \ |
| "https://oss.sonatype.org/service/local/staging/bundle_upload" |
| |
| echo "Finished release ${RELEASE_VERSION} for ${PROJECT}" |
| |