blob: 26ee1cdb6194a74fd34e129dfdb1da513ef3dfea [file] [log] [blame] [edit]
#!/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}"