#!/bin/bash # work around a maven-scm bug with git while releasing # this might also be necessary: git config --add status.displayCommentPrefix true # see https://jira.codehaus.org/browse/SCM-740 export LANG=C export MAVEN_OPTS="-XX:MaxPermSize=1g" # check setup if [ "" = "$PMD_SF_USER" ]; then echo "No env variable PMD_SF_USER specified. This is the sourceforge account name needed" echo "during the release process to upload files via ssh/scp/rsync." echo echo "Please set the variable, e.g. in your ~/.bashrc:" echo echo "PMD_SF_USER=sfuser" echo "export PMD_SF_USER" echo exit 1 fi if [ "" = "$PMD_GPG_KEY" ]; then echo "No env variable PMD_GPG_KEY specified. This is your gpg key, that will be used" echo "to sign the created release artifacts before uploading to maven central." echo echo "Please set the variable, e.g. in your ~/.bashrc:" echo echo "PMD_GPG_KEY=AB123CDE" echo "export PMD_GPG_KEY" echo exit 1 fi # verify the current directory if [ ! -f pom.xml -o ! -d ../pmd.github.io ]; then echo "You seem to be in the work working directory or you don't have pmd.github.io checked out..." echo echo "Expected:" echo "* You are currently in the pmd repository" echo "* ../pmd.github.io is the pmd.github.io repository" echo exit 1 fi ########################################################################## RELEASE_VERSION= DEVELOPMENT_VERSION= CURRENT_BRANCH= echo "-------------------------------------------" echo "Releasing PMD" echo "-------------------------------------------" MVN_VERSION=$(mvn --version | grep "Java version: 1.6") if [ $? -ne 0 ]; then echo "Wrong java version!" echo "Expected 1.6, but was:" mvn --version exit 1 fi if [ "" = "$RELEASE_VERSION" ]; then echo -n "What is the release version of PMD? (e.g. 5.4.0) " read RELEASE_VERSION fi if [ "" = "$DEVELOPMENT_VERSION" ]; then echo -n "What is the next development version of PMD? (e.g. 5.5.0-SNAPSHOT) " read DEVELOPMENT_VERSION fi if [ "" = "$CURRENT_BRANCH" ]; then echo -n "What is the branch you want to release from? (e.g. master or pmd/5.3.x) " read CURRENT_BRANCH fi export RELEASE_VERSION export DEVELOPMENT_VERSION export CURRENT_BRANCH echo echo echo "* Update version/release info in **src/site/markdown/changelog.md**." echo echo " ## $(date -u +%d-%B-%Y) - ${RELEASE_VERSION}" echo echo "* Ensure all the new rules are listed in a the proper file:" echo " pmd-core/src/main/resources/rulesets/releases/${RELEASE_VERSION}.xml file." echo echo "* Update **../pmd.github.io/latest/index.html** of our website, to redirect to the new version" echo echo "redirect_to: https://pmd.github.io/pmd-${RELEASE_VERSION}/" echo echo "* Update **../pmd.github.io/index.html** to mention the new release" echo echo echo "Press enter to continue..." read echo "first - running a test install..." mvn clean install if [ $? -ne 0 ]; then echo "Failure during test install...." exit 1 fi ( cd pmd-dist/target unzip pmd-bin-*.zip cd pmd-bin-* ./bin/run.sh pmd -d ../../../pmd-java/src/main/java -language java -f xml -R rulesets/java/unusedcode.xml ) echo echo "---- OK?" echo "Press enter to continue..." read echo "Committing current changes (pmd)" git commit -a -m "Prepare pmd release ${RELEASE_VERSION}" ( echo "Committing current changes (pmd.github.io)" cd ../pmd.github.io git commit -a -m "Prepare pmd release ${RELEASE_VERSION}" ) mvn -B release:clean release:prepare \ -Dtag=pmd_releases/${RELEASE_VERSION} \ -DreleaseVersion=${RELEASE_VERSION} \ -DdevelopmentVersion=${DEVELOPMENT_VERSION} mvn -B release:perform ( cd target/checkout/ ( cd pmd-dist/target unzip pmd-bin-${RELEASE_VERSION}.zip cd pmd-bin-${RELEASE_VERSION} ./bin/run.sh pmd -d ../../../pmd-java/src/main/java -language java -f xml -R rulesets/java/unusedcode.xml ) echo echo "Verify once again..." echo "---- OK?" echo "Press enter to continue..." read echo echo "Generating site..." mvn site site:stage echo echo "Press enter to continue..." read echo echo "* Login to " echo " Close and Release the staging repository" echo " Check here: " echo echo "Press enter to continue..." read echo echo "Creating the pmd-doc-${RELEASE_VERSION}.zip archive..." ( cd target mv staging pmd-doc-${RELEASE_VERSION} zip -r pmd-doc-${RELEASE_VERSION}.zip pmd-doc-${RELEASE_VERSION}/ ) echo echo "Adding the site to pmd.github.io..." rsync -avhP target/pmd-doc-${RELEASE_VERSION}/ ../../../pmd.github.io/pmd-${RELEASE_VERSION}/ ( cd ../../../pmd.github.io git add pmd-${RELEASE_VERSION} git commit -m "Added pmd-${RELEASE_VERSION}" ) echo echo "Uploading the zip files..." rsync -avhP pmd-dist/target/pmd-*-${RELEASE_VERSION}.zip target/pmd-doc-${RELEASE_VERSION}.zip $SFUSER@web.sourceforge.net:/home/frs/project/pmd/pmd/${RELEASE_VERSION}/ rsync -avhP src/site/markdown/overview/changelog.md $SFUSER@web.sourceforge.net:/home/frs/project/pmd/pmd/${RELEASE_VERSION}/ReadMe.md echo if [ ! "" = "$PMD_LOCAL_BINARIES" -a -d $PMD_LOCAL_BINARIES ]; then echo "Copying the files to local storage directory $PMD_LOCAL_BINARIES..." cp -av pmd-dist/target/pmd-*-${RELEASE_VERSION}.zip target/pmd-doc-${RELEASE_VERSION}.zip $PMD_LOCAL_BINARIES echo fi echo echo "Verify the md5sums: " md5sum pmd-dist/target/pmd-*-${RELEASE_VERSION}.zip target/pmd-doc-${RELEASE_VERSION}.zip echo echo "and make the new binary pmd zip file the default download for all platforms." echo echo "Press enter to continue..." read ) echo echo "Submit news to SF on page. You can use" echo "the following template:" echo cat <" echo echo "Press enter to continue..." read echo "Last step - next development version:" echo "* Move version/release info from **src/site/markdown/overview/changelog.md** to **src/site/markdown/overview/changelog-old.md**." echo "* Update version/release info in **src/site/markdown/overview/changelog.md**." echo "* Update pmd-{java8,ui}/pom.xml - the version is probably wrong - set it to the parent's=next development version: ${DEVELOPMENT_VERSION}." echo cat <" echo echo " * Set the title: PMD ${RELEASE_VERSION} ($(date -u +%d-%B-%Y))" echo " * copy/paste the changelog.md" echo " * Upload the binary zip file" echo " * Upload the doc zip file" echo echo "Press enter to continue..." read echo echo "------------------------------------------" echo "Done." echo "------------------------------------------" echo