| #!/usr/bin/env 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. |
| |
| |
| # Script that assembles all you need to make an RC. Does build of the tar.gzs |
| # which it stashes into a dir above $(pwd) named for the script with a |
| # timestamp suffix. Deploys builds to maven. |
| # |
| # To finish, check what was build. If good copy to people.apache.org and |
| # close the maven repos. Call a vote. |
| # |
| # Presumes your settings.xml all set up so can sign artifacts published to mvn, etc. |
| set -e |
| # Set mvn and mvnopts |
| mvn=mvn |
| if [ "$MAVEN" != "" ]; then |
| mvn="${MAVEN}" |
| fi |
| mvnopts="-Xmx1g" |
| if [ "$MAVEN_OPTS" != "" ]; then |
| mvnopts="${MAVEN_OPTS}" |
| fi |
| |
| mvnGet() { |
| ${mvn} -q -Dexec.executable="echo" -Dexec.args="\${${1}}" --non-recursive \ |
| org.codehaus.mojo:exec-maven-plugin:1.6.0:exec 2>/dev/null |
| } |
| |
| |
| # Check project name |
| projectname=$(mvnGet project.name) |
| projectversion=$(mvnGet project.version) |
| if [ "${projectname}" = "Apache Ratis" ]; then |
| echo |
| echo "Prepare release artifacts for $projectname ${projectversion}" |
| echo |
| else |
| echo "Unexpected project name \"${projectname}\"." |
| echo |
| echo "Please run this script ($0) under the root directory of Apache Ratis." |
| exit 1; |
| fi |
| |
| if [ ! "$RATISVERSION" ]; then |
| echo "Please set the RATISVERSION environment variable (eg. export RATISVERSION=0.3.0)" |
| exit 1 |
| fi |
| |
| if [ ! "$RC" ]; then |
| echo "Please set the RC number. (eg. export RC=\"-rc2\")" |
| exit 1 |
| fi |
| |
| |
| # Set projectdir and archivedir |
| projectdir=$(pwd) |
| echo "Project dir: ${projectdir}" |
| WORKINGDIR="${projectdir}/../$(basename "${projectdir}").${RATISVERSION}${RC}" |
| echo "Archive dir: ${WORKINGDIR}" |
| |
| # Set repodir |
| repodir=${MVN_REPO_DIR:-${projectdir}/../$(basename "${projectdir}").repository} |
| echo "Repo dir: ${repodir}" |
| |
| SVNDISTDIR=${SVNDISTDIR:-$projectdir/../svndistratis} |
| if [ ! -d "$SVNDISTDIR" ]; then |
| svn co https://dist.apache.org/repos/dist/dev/ratis "$SVNDISTDIR" |
| fi |
| |
| |
| if [ ! "$CODESIGNINGKEY" ]; then |
| echo "Please specify your signing key ID in the CODESIGNINGKEY environment variable" |
| exit 1 |
| fi |
| |
| |
| mvnFun() { |
| MAVEN_OPTS="${mvnopts}" ${mvn} -Dmaven.repo.local="${repodir}" "$@" |
| } |
| |
| prepare-src() { |
| cd "$projectdir" |
| git reset --hard |
| git clean -fdx |
| mvnFun versions:set -DnewVersion="$RATISVERSION" |
| git commit -a -m "Change version for the version $RATISVERSION $RC" |
| |
| git config user.signingkey "${CODESIGNINGKEY}" |
| git tag -s -m "Release $RATISVERSION $RC" ratis-"${RATISVERSION}${RC}" |
| git reset --hard ratis-"${RATISVERSION}${RC}" |
| |
| git clean -fdx |
| |
| #grep -r SNAPSHOT --include=pom.xml |
| |
| mvnFun clean install assembly:single -DskipTests=true -Prelease -Papache-release -Dgpg.keyname="${CODESIGNINGKEY}" |
| } |
| |
| prepare-bin() { |
| echo "Cleaning up workingdir $WORKINGDIR" |
| rm -rf "$WORKINGDIR" |
| mkdir -p "$WORKINGDIR" |
| cd "$WORKINGDIR" |
| tar zvxf "$projectdir/ratis-assembly/target/apache-ratis-${RATISVERSION}-src.tar.gz" |
| cd "apache-ratis-${RATISVERSION}" |
| |
| mvnFun clean install assembly:single -DskipTests=true -Prelease -Papache-release -Dgpg.keyname="${CODESIGNINGKEY}" |
| } |
| |
| assembly() { |
| cd "$SVNDISTDIR" |
| RCDIR="$SVNDISTDIR/${RATISVERSION}/${RC#-}" |
| mkdir -p "$RCDIR" |
| cd "$RCDIR" |
| cp "$WORKINGDIR/apache-ratis-${RATISVERSION}/ratis-assembly/target/apache-ratis-${RATISVERSION}-bin.tar.gz" "apache-ratis-${RATISVERSION}-bin.tar.gz" |
| cp "$projectdir/ratis-assembly/target/apache-ratis-${RATISVERSION}-src.tar.gz" "apache-ratis-${RATISVERSION}-src.tar.gz" |
| for i in *.tar.gz; do gpg -u "${CODESIGNINGKEY}" --armor --output "${i}.asc" --detach-sig "${i}"; done |
| for i in *.tar.gz; do gpg --print-md SHA512 "${i}" > "${i}.sha512"; done |
| for i in *.tar.gz; do gpg --print-mds "${i}" > "${i}.mds"; done |
| cd "$SVNDISTDIR" |
| svn add "${RATISVERSION}" || svn add "${RATISVERSION}/${RC#-}" |
| } |
| |
| publish-git(){ |
| cd "$projectdir" |
| git push apache "ratis-${RATISVERSION}${RC}" |
| } |
| |
| publish-svn() { |
| cd "${SVNDISTDIR}" |
| svn commit -m "Publish proposed version of the next Ratis release ${RATISVERSION}${RC}" |
| } |
| |
| publish-mvn(){ |
| cd "$projectdir" |
| mvnFun -X clean deploy assembly:single -DskipTests=true -Prelease -Papache-release -Dgpg.keyname="${CODESIGNINGKEY}" |
| } |
| |
| if [ "$#" -ne 1 ]; then |
| cat << EOF |
| |
| Please choose from available phases (eg. make_rc.sh prepare-src): |
| |
| 1. prepare-src: This is the first step. It modifies the mvn version, creates the git tag and |
| builds the project to create the source artifacts. |
| IT INCLUDES A GIT RESET + CLEAN. ALL THE LOCAL CHANGES WILL BE LOST! |
| |
| 2. prepare-bin: The source artifact is copied to the $WORKINGDIR and the binary artifact is created from the source. |
| This is an additional check as the the released source artifact should be enough to build the whole project. |
| |
| 3. assembly : This step copies all the required artifacts to the svn directory and ($SVNDISTDIR) creates the signatures/checksum files. |
| |
| 4. publish-git: The first remote step, only do it if everything is fine. It pushes the rc tag to the repository. |
| |
| 5. publish-svn: Uploads the artifacts to the apache dev staging area to start the vote. |
| |
| 6. publish-mvn: Uploads the artifacts to the maven staging repository |
| |
| The next steps of the release process are not scripted: |
| |
| 7. Close the staging maven repository at https://repository.apache.org/ |
| |
| 8. Send out the vote mail to the ratis-dev list |
| |
| 9. Summarize the vote after the given period. |
| |
| 10. (If the vote passed): Move the staged artifacts in svn from the dev area to the dist area. |
| |
| 11. Publish maven repository at https://repository.apache.org/ |
| |
| |
| |
| |
| |
| EOF |
| else |
| set -x |
| eval "$1" |
| fi |