This repository has been archived by the owner on Feb 8, 2019. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 62
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Includes: Script to do common release tasks - subcommand to create artifacts - subcommand to publish release candidates - subcommand to test a release candidate All commands are parameterized by the .profile file
- Loading branch information
Showing
5 changed files
with
239 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
release export-ignore |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
.release_manager.profile | ||
svn-* | ||
apache-* |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
## Scripts to help release Quickstep | ||
|
||
### Preqs | ||
|
||
You must fill out `release_manager.profile` first. | ||
|
||
You'll need: | ||
* md5sum | ||
* shasum | ||
* svn | ||
* gpg | ||
* tar | ||
* gzip | ||
|
||
This is of course in addition to the regular build tools. | ||
|
||
### Usage Overview | ||
|
||
``` | ||
# Test a candidate | ||
./release_cmds.sh test | ||
# Create candidate artifacts | ||
./release_cmds.sh create | ||
# Publish candidate artifacts (after you've created them) | ||
./release_cmds.sh publish | ||
``` | ||
|
||
* A full guide to releases can be found on [confluence][cwiki-howto]. | ||
* PGP key generation is discussed [here][pgp-keys] | ||
|
||
[cwiki-howto]: https://cwiki.apache.org/confluence/display/QUICKSTEP/How+To+Release | ||
[pgp-keys]: http://quickstep.apache.org/release-signing/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,172 @@ | ||
#!/usr/bin/env bash | ||
|
||
# Functions for Releasing Quickstep | ||
# Usage: Fill out your details in release_manager.profile. | ||
# ./release_cmds [create|publish|test] | ||
# | ||
# Note: This script is a scratch pad with most of the relevent commands. Modify | ||
# it to see fit. We'll finalize it when we understand the process better. | ||
# | ||
# Everything in this script assumes that you are running in the release/ | ||
# folder of your quickstep directory. | ||
# | ||
# PREREQS: | ||
# - full details on how to do a release is in a confluence article: How to Release | ||
# - You must have previously created a pgp key using your apache username | ||
# and uploaded it to a keyserver [http://quickstep.apache.org/release-signing/] | ||
# | ||
|
||
### Helper functions | ||
|
||
create_artifacts() { | ||
# Updates submodules, archives everything, signs it using your key (requires | ||
# user input), makes checksums, moves artifacts to release/ folder | ||
# | ||
|
||
export RELEASE_DIR=`pwd` | ||
cd .. | ||
|
||
# need the submodules to be included for the compile to work. | ||
# likely, this will be a no-op | ||
git submodule init | ||
git submodule update | ||
|
||
# you'll need to push this if you want the tag to be visible to committers | ||
# the tag is necesary for the archiving to work correctly | ||
git tag -a rc-$VERSION -m 'release candidate $VERSION' | ||
git archive --format "tar" --prefix=$PROJECT_NAME-$VERSION/ -o $PROJECT_NAME-$VERSION.tar rc-$VERSION | ||
git submodule foreach --recursive 'git archive --verbose --prefix=$PROJECT_NAME-$VERSION/$path/ --format tar master --output $RELEASE_DIR/submodule-$sha1.tar' | ||
if [[ $(ls submodule-*.tar | wc -l) != 0 ]]; then | ||
# combine all archives into one tar | ||
tar --concatenate --file $PROJECT_NAME-$VERSION.tar submodule-*.tar | ||
# remove sub tars | ||
rm -rf submodule-*.tar | ||
fi | ||
|
||
# gzip final tar | ||
gzip --force --verbose $PROJECT_NAME-$VERSION.tar | ||
|
||
# Make the signature. This requires human input | ||
gpg -u $APACHE_USERNAME@apache.org --armor --output $PROJECT_NAME-$VERSION.tar.gz.asc --detach-sign $PROJECT_NAME-$VERSION.tar.gz | ||
# Make hashes | ||
md5sum $PROJECT_NAME-$VERSION.tar.gz > $PROJECT_NAME-$VERSION.tar.gz.md5 | ||
sha1sum $PROJECT_NAME-$VERSION.tar.gz > $PROJECT_NAME-$VERSION.tar.gz.sha | ||
|
||
|
||
# Make sure these three artifacts are good | ||
gpg --verify $PROJECT_NAME-$VERSION.tar.gz.asc | ||
md5sum --check $PROJECT_NAME-$VERSION.tar.gz.md5 | ||
sha1sum --check $PROJECT_NAME-$VERSION.tar.gz.sha | ||
|
||
mv $PROJECT_NAME-$VERSION.tar.gz* $RELEASE_DIR | ||
|
||
cd $RELEASE_DIR | ||
} | ||
|
||
publish_candidate() { | ||
# push a RC to subversion. We use SVN sparse directories so as not to pull | ||
# every artifact ever. Assumes that you have already created the artifacts | ||
# and they reside in the release/ folder. | ||
# directory layout is x.y.z/RCw, where w is the release candidate number | ||
# | ||
|
||
if [ ! -d "$SVN_DEV" ]; then | ||
svn checkout --depth immediates $SVN_DEV_URL $SVN_DEV | ||
fi | ||
|
||
BASE_DIR=`pwd` | ||
cd $SVN_DEV | ||
|
||
if [ ! -d "$VERSION" ]; then | ||
mkdir $VERSION | ||
cd $VERSION | ||
else | ||
cd $VERSION | ||
svn update --set-depth immediates . | ||
fi | ||
|
||
# now in $VERSION folder | ||
|
||
RCFOLDER=RC$CANDIDATE | ||
mkdir $RCFOLDER | ||
cd $RCFOLDER | ||
cp $BASE_DIR/$PROJECT_NAME-$VERSION.tar.gz* ./ | ||
cd .. | ||
|
||
svn add $VERSION/$RCFOLDER | ||
svn commit --username=$APACHE_USERNAME -m "Quickstep-$VERSION RC$CANDIDATE" | ||
|
||
cd $BASE_DIR | ||
} | ||
|
||
test_candidate() { | ||
# This is best run in /tmp | ||
# tries checking out a release candidate and building | ||
# | ||
|
||
svn checkout --depth immediates $SVN_DEV_URL $SVN_DEV | ||
cd $SVN_DEV | ||
|
||
# add the KEYS file from quickstep to your gpg key ring | ||
gpg --import KEYS | ||
|
||
cd $VERSION | ||
svn update --set-depth infinity RC$CANDIDATE | ||
cd RC$CANDIDATE | ||
|
||
tar -xzf $PROJECT_NAME-$VERSION.tar.gz | ||
|
||
# verify artifacts | ||
gpg --verify $PROJECT_NAME-$VERSION.tar.gz.asc | ||
md5sum --check $PROJECT_NAME-$VERSION.tar.gz.md5 | ||
sha1sum --check $PROJECT_NAME-$VERSION.tar.gz.sha | ||
|
||
# now build the release artifacts | ||
cd $PROJECT_NAME-$VERSION | ||
|
||
# first download third_party, then do your normal build | ||
cd third_party/ | ||
./download_and_patch_prerequisites.sh | ||
cd .. | ||
cd build | ||
cmake .. | ||
make | ||
} | ||
|
||
usage() { | ||
echo "usage: $0 [create|publish|test]" | ||
exit $1 | ||
} | ||
|
||
### main | ||
|
||
source release_manager.profile | ||
if [ -z $APACHE_USERNAME ] || [ -z $VERSION ] || [ -z $CANDIDATE ]; then | ||
echo "please set release_manager.profile" | ||
exit 1 | ||
fi | ||
|
||
alias svn="svn --non-interactive" | ||
|
||
set -e | ||
|
||
if [ -z $1 ] ; then | ||
usage 0 | ||
fi | ||
|
||
echo "user: $APACHE_USERNAME" | ||
echo "version: $VERSION" | ||
echo "candidate: $CANDIDATE" | ||
|
||
if [ "create" == "$1" ] ; then | ||
echo "creating artifacts ..." | ||
create_artifacts | ||
elif [ "publish" == "$1" ] ; then | ||
echo "publishing candidate artifacts ..." | ||
publish_candidate | ||
elif [ "test" == "$1" ] ; then | ||
echo "testing candidate artifacts ..." | ||
test_candidate | ||
else | ||
usage 0 | ||
fi |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
# Profile for Releasing Quickstep | ||
# | ||
# This script is for release managers. It is to be used in conjunction with | ||
# the release_cmds script. | ||
# | ||
# Usage: Fill out this file with your apache details. Then source this file. | ||
# Sourcing the release_cmds file will automatically source this. | ||
# | ||
|
||
# you must be registered with apache | ||
export APACHE_USERNAME= | ||
|
||
# quickstep version, Major.Minor.Increment | ||
export VERSION= | ||
|
||
# release candidate number. For a new version, this starts at 0 | ||
export CANDIDATE= | ||
|
||
# folders corresponding to SVN repos where we keep our release artifacts | ||
export SVN_DEV=svn-quickstep-dev | ||
export SVN_REL=svn-quickstep-rel | ||
|
||
# you probably will not need to change things below this line | ||
export PROJECT_NAME=apache-quickstep-incubating | ||
|
||
# path to apache repo with quickstep releases | ||
|
||
export SVN_DEV_URL=https://dist.apache.org/repos/dist/dev/incubator/quickstep | ||
export SVN_REL_URL=https://dist.apache.org/repos/dist/rel/incubator/quickstep |