| #!/bin/bash |
| # |
| # Licensed to the Apache Software Foundation (ASF) under one |
| # or more contributor license agreements. See the NOTICE file |
| # distributed with this work for additional information |
| # regarding copyright ownership. The ASF licenses this file |
| # to you under the Apache License, Version 2.0 (the |
| # "License"); you may not use this file except in compliance |
| # with the License. You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| # |
| |
| #!/bin/bash |
| set -e |
| |
| function pause(){ |
| read -rsp $'Press any key to continue...\n' -n1 key |
| } |
| |
| function runCmd(){ |
| echo " ----------------- " >> ${DRILL_RELEASE_OUTFILE} |
| echo " ----------------- $1 " |
| echo " ----------------- $1 " >> ${DRILL_RELEASE_OUTFILE} |
| echo " ----------------- " >> ${DRILL_RELEASE_OUTFILE} |
| shift |
| echo "Will execute $@" |
| # run the command, send output to out file |
| "$@" >> ${DRILL_RELEASE_OUTFILE} 2>&1 |
| if [ $? -ne 0 ]; then |
| echo FAILED to run $1 |
| echo FAILED to run $1 >> ${DRILL_RELEASE_OUTFILE} |
| exit 1 |
| fi |
| # Wait for user to verify and continue |
| pause |
| } |
| |
| function copyFiles(){ |
| target_dir=${APACHE_DIST_WORKING_COPY}/${DRILL_RELEASE_VERSION}-rc${RELEASE_ATTEMPT} |
| rm -rf $target_dir |
| mkdir -p $target_dir |
| cp ${DRILL_SRC}/target/apache-drill-${DRILL_RELEASE_VERSION}-src.tar.gz* $target_dir/ && \ |
| cp ${DRILL_SRC}/target/apache-drill-${DRILL_RELEASE_VERSION}-src.zip* $target_dir/ && \ |
| cp ${DRILL_SRC}/distribution/target/apache-drill-${DRILL_RELEASE_VERSION}.tar.gz* $target_dir/ |
| |
| } |
| |
| function checkPassphrase(){ |
| echo "1234" | "$GPG" --batch --passphrase "${GPG_PASSPHRASE}" -o /dev/null -as - |
| if [ $? -ne 0 ]; then |
| echo "Invalid passphrase. Make sure the default key is set to the key you want to use (or make it the first key in the keyring)." |
| exit 1 |
| fi |
| } |
| |
| function createDirectoryIfAbsent() { |
| DIR_NAME="$1" |
| if [ ! -d "${DIR_NAME}" ]; then |
| echo "Creating directory ${DIR_NAME}" |
| mkdir -p "${DIR_NAME}" |
| fi |
| } |
| |
| |
| function readInputAndSetup(){ |
| |
| read -p "JAVA_HOME of the JDK to use for the release : " JAVA_HOME |
| export JAVA_HOME |
| |
| read -p "Drill Working Directory : " WORK_DIR |
| createDirectoryIfAbsent "${WORK_DIR}" |
| |
| read -p "Drill Release Version (e.g. 1.4.0) : " DRILL_RELEASE_VERSION |
| |
| read -p "Drill Development Version (e.g. 1.5.0-SNAPSHOT) : " DRILL_DEV_VERSION |
| |
| read -p "Release Commit SHA : " RELEASE_COMMIT_SHA |
| |
| read -p "Write output to (directory) : " DRILL_RELEASE_OUTDIR |
| createDirectoryIfAbsent "${DRILL_RELEASE_OUTDIR}" |
| |
| read -p "Staging (personal) repo : " MY_REPO |
| |
| read -p "Svn working copy of dist.apache.org/repos/dist/dev/drill : " APACHE_DIST_WORKING_COPY |
| |
| read -p "Apache login : " APACHE_LOGIN |
| |
| read -p "Release candidate attempt : " RELEASE_ATTEMPT |
| |
| read -s -p "GPG Passphrase (Use quotes around a passphrase with spaces) : " GPG_PASSPHRASE |
| |
| DRILL_RELEASE_OUTFILE="${DRILL_RELEASE_OUTDIR}/drill_release.out.txt" |
| DRILL_SRC=${WORK_DIR}/drill-release |
| |
| echo "" |
| echo "-----------------" |
| echo "JAVA_HOME : " ${JAVA_HOME} |
| echo "Drill Working Directory : " ${WORK_DIR} |
| echo "Drill Src Directory : " ${DRILL_SRC} |
| echo "Drill Release Version : " ${DRILL_RELEASE_VERSION} |
| echo "Drill Development Version : " ${DRILL_DEV_VERSION} |
| echo "Release Commit SHA : " ${RELEASE_COMMIT_SHA} |
| echo "Write output to : " ${DRILL_RELEASE_OUTFILE} |
| echo "Staging (personal) repo : " ${MY_REPO} |
| echo "Svn working copy of dist.apache.org/repos/dist dir : " ${APACHE_DIST_WORKING_COPY} |
| |
| touch ${DRILL_RELEASE_OUTFILE} |
| } |
| |
| checkPassphraseNoSpace(){ |
| # The checkPassphrase function does not work for passphrases with embedded spaces. |
| if [ -z "${GPG_PASSPHRASE##* *}" ] ;then |
| echo "Passphrase contains a space - No Validation performed." |
| else |
| echo -n "Validating passphrase .... " |
| checkPassphrase && echo "Passphrase accepted" || echo "Invalid passphrase" |
| fi |
| } |
| |
| cloneRepo(){ |
| cd ${WORK_DIR} |
| rm -rf ./drill-release |
| git clone https://github.com/apache/drill.git drill-release >& ${DRILL_RELEASE_OUTFILE} |
| cd ${DRILL_SRC} |
| git checkout ${RELEASE_COMMIT_SHA} |
| } |
| |
| ###### BEGIN ##### |
| # Location of checksum.sh |
| export CHKSMDIR="$( cd "$(dirname "$0")" && pwd)" |
| |
| # Default GPG command to use |
| GPG="${GPG:-gpg}" |
| |
| readInputAndSetup |
| checkPassphraseNoSpace |
| |
| runCmd "Cloning the repo" cloneRepo |
| |
| runCmd "Checking the build" mvn install -DskipTests |
| |
| export MAVEN_OPTS=-Xmx2g |
| runCmd "Clearing release history" mvn release:clean \ |
| -Papache-release \ |
| -DpushChanges=false \ |
| -DskipTests |
| |
| # Note that -XX:MaxPermSize=512m' is not supported in new JDKs |
| export MAVEN_OPTS=-Xmx4g |
| runCmd "Preparing the release " mvn release:prepare \ |
| -Papache-release \ |
| -DpushChanges=false \ |
| -DdevelopmentVersion=${DRILL_DEV_VERSION} \ |
| -DreleaseVersion=${DRILL_RELEASE_VERSION} \ |
| -Dtag=drill-${DRILL_RELEASE_VERSION} \ |
| -Darguments="-Dgpg.passphrase=${GPG_PASSPHRASE} -DskipTests -Dmaven.javadoc.skip=false" |
| |
| runCmd "Pushing to private repo ${MY_REPO}" git push ${MY_REPO} drill-${DRILL_RELEASE_VERSION} |
| |
| runCmd "Performing the release to ${MY_REPO}" mvn release:perform \ |
| -DconnectionUrl=scm:git:${MY_REPO} \ |
| -DlocalCheckout=true \ |
| -Darguments="-Dgpg.passphrase=${GPG_PASSPHRASE} -DskipTests" |
| |
| runCmd "Checking out release commit" git checkout drill-${DRILL_RELEASE_VERSION} |
| |
| # Remove surrounding quotes |
| tempGPG_PASSPHRASE="${GPG_PASSPHRASE%\"}" |
| tempGPG_PASSPHRASE="${tempGPG_PASSPHRASE#\"}" |
| runCmd "Deploying ..." mvn deploy \ |
| -Papache-release \ |
| -DskipTests \ |
| -Dgpg.passphrase="${tempGPG_PASSPHRASE}" |
| |
| runCmd "Verifying artifacts are signed correctly" ${CHKSMDIR}/checksum.sh ${DRILL_SRC}/distribution/target/apache-drill-${DRILL_RELEASE_VERSION}.tar.gz |
| pause |
| |
| runCmd "Copying release files to your working copy of dist.apache.org/repos/dist/dev/drill" copyFiles |
| |
| echo "Go to the Apache maven staging repo and close the new jar release" |
| echo "and go to ${APACHE_DIST_WORKING_COPY} and svn add/commit the new" |
| echo "release candidate after checking the pending changes there." |
| pause |
| |
| echo "Start the vote \(good luck\)\n" |