You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@quickstep.apache.org by zu...@apache.org on 2017/03/01 22:32:38 UTC
[2/3] incubator-quickstep git commit: Init release scripts Includes:
Script to do common release tasks - subcommand to create artifacts -
subcommand to publish release candidates - subcommand to test a release
candidate
Init release scripts
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
Project: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/commit/6a240fcd
Tree: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/tree/6a240fcd
Diff: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/diff/6a240fcd
Branch: refs/heads/dist-fix
Commit: 6a240fcd1452abb7870a9e8ec82ed8f60f75e9c4
Parents: e896b61
Author: cramja <ma...@gmail.com>
Authored: Tue Feb 28 11:13:30 2017 -0600
Committer: cramja <ma...@gmail.com>
Committed: Wed Mar 1 16:07:58 2017 -0600
----------------------------------------------------------------------
.gitattributes | 1 +
release/.gitignore | 3 +
release/README.md | 34 +++++++
release/release_cmds.sh | 172 +++++++++++++++++++++++++++++++++++
release/release_manager.profile | 29 ++++++
5 files changed, 239 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/6a240fcd/.gitattributes
----------------------------------------------------------------------
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000..c0aaef0
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1 @@
+release export-ignore
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/6a240fcd/release/.gitignore
----------------------------------------------------------------------
diff --git a/release/.gitignore b/release/.gitignore
new file mode 100644
index 0000000..0716d9f
--- /dev/null
+++ b/release/.gitignore
@@ -0,0 +1,3 @@
+.release_manager.profile
+svn-*
+apache-*
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/6a240fcd/release/README.md
----------------------------------------------------------------------
diff --git a/release/README.md b/release/README.md
new file mode 100644
index 0000000..5776e09
--- /dev/null
+++ b/release/README.md
@@ -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/
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/6a240fcd/release/release_cmds.sh
----------------------------------------------------------------------
diff --git a/release/release_cmds.sh b/release/release_cmds.sh
new file mode 100755
index 0000000..d23b4ef
--- /dev/null
+++ b/release/release_cmds.sh
@@ -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
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/6a240fcd/release/release_manager.profile
----------------------------------------------------------------------
diff --git a/release/release_manager.profile b/release/release_manager.profile
new file mode 100644
index 0000000..6b51003
--- /dev/null
+++ b/release/release_manager.profile
@@ -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
\ No newline at end of file