| #!/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}" | |