cassandra-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From mshu...@apache.org
Subject cassandra-builds git commit: Add cassandra-release scripts to repo
Date Thu, 16 Feb 2017 17:51:13 GMT
Repository: cassandra-builds
Updated Branches:
  refs/heads/master 145fa130a -> ac05c7153


Add cassandra-release scripts to repo


Project: http://git-wip-us.apache.org/repos/asf/cassandra-builds/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra-builds/commit/ac05c715
Tree: http://git-wip-us.apache.org/repos/asf/cassandra-builds/tree/ac05c715
Diff: http://git-wip-us.apache.org/repos/asf/cassandra-builds/diff/ac05c715

Branch: refs/heads/master
Commit: ac05c7153bb290572cf1f7a98ea9fc652ca965e4
Parents: 145fa13
Author: Michael Shuler <michael@pbandjelly.org>
Authored: Thu Feb 16 11:50:42 2017 -0600
Committer: Michael Shuler <michael@pbandjelly.org>
Committed: Thu Feb 16 11:50:42 2017 -0600

----------------------------------------------------------------------
 cassandra-release/README.md          |   5 +
 cassandra-release/finish_release.sh  | 221 ++++++++++++++++++++++++++++
 cassandra-release/prepare_release.sh | 229 ++++++++++++++++++++++++++++++
 cassandra-release/upload_bintray.sh  |  22 +++
 4 files changed, 477 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra-builds/blob/ac05c715/cassandra-release/README.md
----------------------------------------------------------------------
diff --git a/cassandra-release/README.md b/cassandra-release/README.md
new file mode 100644
index 0000000..d443cf8
--- /dev/null
+++ b/cassandra-release/README.md
@@ -0,0 +1,5 @@
+Cassandra release scripts
+=========================
+
+For release managers of cassandra.
+

http://git-wip-us.apache.org/repos/asf/cassandra-builds/blob/ac05c715/cassandra-release/finish_release.sh
----------------------------------------------------------------------
diff --git a/cassandra-release/finish_release.sh b/cassandra-release/finish_release.sh
new file mode 100755
index 0000000..99655c1
--- /dev/null
+++ b/cassandra-release/finish_release.sh
@@ -0,0 +1,221 @@
+#!/bin/bash
+
+##### TO EDIT #####
+
+asf_username="$USER"
+
+# The name of remote for the asf remote in your git repo
+git_asf_remote="origin"
+
+# Same as for .prepare_release.sh
+mail_dir="$HOME/Mail"
+debian_package_dir="$HOME/tmp/debian"
+
+# The directory for reprepro
+reprepro_dir="$debian_package_dir/packages"
+artifacts_svn_dir="$HOME/svn/cassandra-dist"
+
+###################
+
+asf_git_repo="http://git-wip-us.apache.org/repos/asf"
+apache_host="people.apache.org"
+
+# Reset getopts in case it has been used previously in the shell.
+OPTIND=1
+
+# Initialize our own variables:
+verbose=0
+fake_mode=0
+
+show_help()
+{
+    local name=`basename $0`
+    echo "$name [options] <release_version> <staging_number>"
+    echo ""
+    echo "where [options] are:"
+    echo "  -h: print this help"
+    echo "  -v: verbose mode (show everything that is going on)"
+    echo "  -f: fake mode, print any output but don't do anything (for debugging)"
+    echo ""
+    echo "Example: $name 2.0.3 1024"
+}
+
+while getopts ":hvf" opt; do
+    case "$opt" in
+    h)
+        show_help
+        exit 0
+        ;;
+    v)  verbose=1
+        ;;
+    f)  fake_mode=1
+        ;;
+    \?)
+        echo "Invalid option: -$OPTARG" >&2
+        show_help
+        exit 1
+        ;;
+    esac
+done
+
+shift $(($OPTIND-1))
+
+release=$1
+staging_number=$2
+deb_release=${release/-/\~}
+
+if [ -z "$release" ]
+then
+    echo "Missing argument <release_version>"
+    show_help
+    exit 1
+fi
+if [ -z "$staging_number" ]
+then
+    echo "Missing argument <staging_number>"
+    show_help
+    exit 1
+fi
+
+if [ "$#" -gt 2 ]
+then
+    shift
+    echo "Too many arguments. Don't know what to do with '$@'"
+    show_help
+    exit 1
+fi
+
+# Somewhat lame way to check we're in a git repo but that will do
+git log -1 &> /dev/null
+if [ $? -ne 0 ]
+then
+    echo "The current directory does not appear to be a git repository."
+    echo "You must run this from the Cassandra git source repository."
+    exit 1
+fi
+
+if [ "$release" == "$deb_release" ]
+then
+    echo "Publishing release $release using staging number $staging_number"
+else
+    echo "Publishing release $release (debian uses $deb_release) using staging number $staging_number"
+fi
+
+# "Saves" stdout to other descriptor since we might redirect them below
+exec 3>&1 4>&2
+
+if [ $verbose -eq 0 ]
+then
+    # Not verbose, redirect all ouptut to a logfile 
+    logfile="release-${release}.log"
+    [ ! -e "$logfile" ] || rm $logfile
+    touch $logfile
+    exec > $logfile
+    exec 2> $logfile
+fi
+
+execute()
+{
+    local cmd=$1
+
+    echo ">> $cmd"
+    [ $fake_mode -eq 1 ] || $cmd
+    if [ $? -ne 0 ]
+    then
+        echo "Error running $cmd" 1>&3 2>&4
+        exit $?
+    fi
+}
+
+idx=`expr index "$release" -`
+if [ $idx -eq 0 ]
+then
+    release_short=${release}
+else
+    release_short=${release:0:$((idx-1))}
+fi
+
+echo "Deploying artifacts ..." 1>&3 2>&4
+start_dir=$PWD
+cd $artifacts_svn_dir
+mkdir $release_short
+cd $release_short
+for type in bin src; do
+    for part in gz gz.md5 gz.sha1 gz.asc gz.asc.md5 gz.asc.sha1; do
+        echo "Downloading apache-cassandra-${release}-$type.tar.$part..." 1>&3 2>&4
+        curl -O https://repository.apache.org/content/repositories/orgapachecassandra-${staging_number}/org/apache/cassandra/apache-cassandra/${release}/apache-cassandra-${release}-$type.tar.$part
+    done
+done
+
+cd $start_dir
+
+echo "Tagging release ..." 1>&3 2>&4
+execute "git checkout $release-tentative"
+
+# Ugly but somehow 'execute "git tag -a cassandra-$release -m 'Apache Cassandra $release
release' "' doesn't work
+echo "Apache Cassandra $release release" > "_tmp_msg_"
+execute "git tag -a cassandra-$release -F _tmp_msg_"
+rm _tmp_msg_
+execute "git push $git_asf_remote refs/tags/cassandra-$release"
+execute "git tag -d $release-tentative"
+execute "git push $git_asf_remote :refs/tags/$release-tentative"
+
+echo "Deploying debian packages ..." 1>&3 2>&4
+
+current_dir=`pwd`
+
+debian_series="${release_short:0:1}${release_short:2:2}x"
+
+execute "cd $reprepro_dir"
+execute "reprepro --ignore=wrongdistribution include $debian_series $debian_package_dir/cassandra_${release}_debian/cassandra_${deb_release}_*.changes"
+execute "cp -p pool/main/c/cassandra/cassandra*_${deb_release}* ${artifacts_svn_dir}/debian/pool/main/c/cassandra"
+execute "cp -p ${artifacts_svn_dir}/$release_short/apache-cassandra-${release}-src.tar.gz.asc
${artifacts_svn_dir}/debian/pool/main/c/cassandra/cassandra_${deb_release}.orig.tar.gz.asc"
+execute "cp -a dists/$debian_series ${artifacts_svn_dir}/debian/dists"
+
+execute "cd $current_dir"
+
+# Restore stdout/stderr (and close temporary descriptors) if not verbose
+[ $verbose -eq 1 ] || exec 1>&3 3>&- 2>&4 4>&-
+
+mail_file="$mail_dir/mail_release_$release"
+[ ! -e "$mail_file" ] || rm $mail_file
+
+echo "[RELEASE] Apache Cassandra $release released" > $mail_file
+echo "" >> $mail_file
+echo "The Cassandra team is pleased to announce the release of Apache Cassandra version $release."
>> $mail_file
+echo "" >> $mail_file
+echo "Apache Cassandra is a fully distributed database. It is the right choice when you need
scalability and high availability without compromising performance." >> $mail_file
+echo "" >> $mail_file
+echo " http://cassandra.apache.org/" >> $mail_file
+echo "" >> $mail_file
+echo "Downloads of source and binary distributions are listed in our download section:" >>
$mail_file
+echo "" >> $mail_file
+echo " http://cassandra.apache.org/download/" >> $mail_file
+echo "" >> $mail_file
+series="${release_short:0:1}.${release_short:2:1}"
+echo "This version is a bug fix release[1] on the $series series. As always, please pay attention
to the release notes[2] and Let us know[3] if you were to encounter any problem." >>
$mail_file
+echo "" >> $mail_file
+echo "Enjoy!" >> $mail_file
+echo "" >> $mail_file
+echo "[1]: (CHANGES.txt)" >> $mail_file
+echo "[2]: (NEWS.txt)" >> $mail_file
+echo "[3]: https://issues.apache.org/jira/browse/CASSANDRA" >> $mail_file
+
+
+echo "Done deploying artifacts. Please make sure to:"
+echo " 0) commit changes to ${artifacts_svn_dir}"
+echo " 1) release artifacts from repository.apache.org"
+echo " 2) wait for the artifacts to sync at http://www.apache.org/dist/cassandra/"
+echo " 3) upload debian repo to bintray: ./upload_bintray.sh ${artifacts_svn_dir}/debian"
+echo " 4) update the website (~/Git/hyde/hyde.py -g -s src/ -d publish/)"  # TODO - this
is old info and needs updating..
+echo " 5) update CQL doc if appropriate"
+echo " 6) update wikipedia page if appropriate"
+echo " 7) send announcement email: draft in $mail_dir/mail_release_$release, misses short
links for"
+echo "    > CHANGES.txt: $asf_git_repo?p=cassandra.git;a=blob_plain;f=CHANGES.txt;hb=refs/tags/cassandra-$release"
+echo "    > NEWS.txt:    $asf_git_repo?p=cassandra.git;a=blob_plain;f=NEWS.txt;hb=refs/tags/cassandra-$release"
+echo " 8) update #cassandra topic on irc (/msg chanserv op #cassandra)"
+echo " 9) tweet from @cassandra"
+echo " 10) release version in JIRA"
+echo " 11) remove old version from people.apache.org (in /www/www.apache.org/dist/cassandra
and debian)"
+echo " 12) increment build.xml base.version for the next release"
+

http://git-wip-us.apache.org/repos/asf/cassandra-builds/blob/ac05c715/cassandra-release/prepare_release.sh
----------------------------------------------------------------------
diff --git a/cassandra-release/prepare_release.sh b/cassandra-release/prepare_release.sh
new file mode 100755
index 0000000..c9d8979
--- /dev/null
+++ b/cassandra-release/prepare_release.sh
@@ -0,0 +1,229 @@
+#!/bin/bash
+
+##### TO EDIT #####
+
+asf_username="$USER"
+gpg_key="XXXXXXXX"
+
+# The name of remote for the asf remote in your git repo
+git_asf_remote="origin"
+
+# Where you want to put the mail draft that this script generate
+mail_dir="$HOME/Mail"
+
+# Where you want to put the debian files
+debian_package_dir="$HOME/tmp/debian"
+
+###################
+
+asf_git_repo="http://git-wip-us.apache.org/repos/asf"
+staging_repo="https://repository.apache.org/content/repositories"
+apache_host="people.apache.org"
+
+# Reset getopts in case it has been used previously in the shell.
+OPTIND=1
+
+# Initialize our own variables:
+verbose=0
+fake_mode=0
+only_deb=0
+
+show_help()
+{
+    local name=`basename $0`
+    echo "$name [options] <release_version>"
+    echo ""
+    echo "where [options] are:"
+    echo "  -h: print this help"
+    echo "  -v: verbose mode (show everything that is going on)"
+    echo "  -f: fake mode, print any output but don't do anything (for debugging)"
+    echo "  -d: only build the debian package"
+    echo ""
+    echo "Example: $name 2.0.3"
+}
+
+while getopts ":hvfd" opt; do
+    case "$opt" in
+    h)
+        show_help
+        exit 0
+        ;;
+    v)  verbose=1
+        ;;
+    f)  fake_mode=1
+        ;;
+    d)  only_deb=1
+        ;;
+    \?)
+        echo "Invalid option: -$OPTARG" >&2
+        show_help
+        exit 1
+        ;;
+    esac
+done
+
+shift $(($OPTIND-1))
+
+release=$1
+deb_release=${release/-/\~}
+
+if [ -z "$release" ]
+then
+    echo "Missing argument <release_version>"
+    show_help
+    exit 1
+fi
+
+if [ "$#" -gt 1 ]
+then
+    shift
+    echo "Too many arguments. Don't know what to do with '$@'"
+    show_help
+    exit 1
+fi
+
+# Somewhat lame way to check we're in a git repo but that will do
+git log -1 &> /dev/null
+if [ $? -ne 0 ]
+then
+    echo "The current directory does not appear to be a git repository."
+    echo "You must run this from the Cassandra git source repository."
+    exit 1
+fi
+
+head_commit=`git log --pretty=oneline -1 | cut - -d " " -f 1`
+
+if [ "$release" == "$deb_release" ]
+then
+    echo "Preparing release for $release from commit:"
+else
+    echo "Preparing release for $release (debian will use $deb_release) from commit:"
+fi
+echo ""
+git show $head_commit
+
+echo "Is this what you want?"
+select yn in "Yes" "No"; do
+    case $yn in
+        Yes) break;;
+        No) echo "Alright, come back when you've made up your mind"; exit 0;;
+    esac
+done
+
+# "Saves" stdout to other descriptor since we might redirect them below
+exec 3>&1 4>&2
+
+if [ $verbose -eq 0 ]
+then
+    # Not verbose, redirect all ouptut to a logfile 
+    logfile="vote-${release}.log"
+    [ ! -e "$logfile" ] || rm $logfile
+    touch $logfile
+    exec > $logfile
+    exec 2> $logfile
+fi
+
+execute()
+{
+    local cmd=$1
+
+    echo ">> $cmd"
+    [ $fake_mode -eq 1 ] || $cmd
+    if [ $? -ne 0 ]
+    then
+        echo "Error running $cmd" 1>&3 2>&4
+        exit $?
+    fi
+}
+
+current_dir=`pwd`
+# This appear to be the simpler way to make this work for both linux and OSX (http://goo.gl/9RKld3)
+tmp_dir=`mktemp -d 2>/dev/null || mktemp -d -t 'release'`
+
+if [ $only_deb -eq 0 ]
+then
+    echo "Tagging release ..." 1>&3 2>&4
+    execute "git tag $release-tentative"
+    execute "git push $git_asf_remote refs/tags/$release-tentative"
+
+    echo "Cloning fresh repository ..." 1>&3 2>&4
+    execute "cd $tmp_dir"
+    ## We clone from the original repository to make extra sure we're not screwing, even
if that's definitively slower
+    execute "git clone $asf_git_repo/cassandra.git"
+
+    echo "Building and uploading artifacts ..." 1>&3 2>&4
+    execute "cd cassandra"
+    execute "git checkout $release-tentative"
+    execute "ant realclean"
+    execute "ant publish -Drelease=true"
+
+    echo "Artifacts uploaded, please close release on repository.apache.org and indicate
the staging number:" 1>&3 2>&4
+else
+    echo "Please indicate staging number:" 1>&3 2>&4
+fi
+
+read -p "staging number? " staging_number 1>&3 2>&4
+
+## Debian Stuffs ##
+
+execute "cd $debian_package_dir"
+
+deb_dir=cassandra_${release}_debian
+[ ! -e "$deb_dir" ] || rm -rf $deb_dir
+execute "mkdir $deb_dir"
+execute "cd $deb_dir"
+
+echo "Building debian package ..." 1>&3 2>&4
+
+execute "wget $staging_repo/orgapachecassandra-$staging_number/org/apache/cassandra/apache-cassandra/$release/apache-cassandra-$release-src.tar.gz"
+execute "mv apache-cassandra-$release-src.tar.gz cassandra_${deb_release}.orig.tar.gz"
+execute "tar xvzf cassandra_${deb_release}.orig.tar.gz"
+execute "cd apache-cassandra-${release}-src"
+execute "dpkg-buildpackage -rfakeroot -us -uc"
+execute "cd .."
+# Debsign might ask the passphrase on stdin so don't hide what he says even if no verbose
+# (I haven't tested carefully but I've also seen it fail unexpectedly with it's output redirected.
+execute "debsign -k$gpg_key cassandra_${deb_release}_amd64.changes" 1>&3 2>&4
+
+echo "Uploading debian package ..." 1>&3 2>&4
+
+cat > /tmp/sftpbatch.txt <<EOF
+cd public_html
+put cassandra* 
+EOF
+
+
+execute "sftp -b /tmp/sftpbatch.txt ${asf_username}@${apache_host}"
+
+execute "cd $current_dir"
+
+# Restore stdout/stderr (and close temporary descriptors) if not verbose
+[ $verbose -eq 1 ] || exec 1>&3 3>&- 2>&4 4>&-
+
+# Cleaning up
+rm -rf $tmp_dir
+
+## Email for vote ##
+
+mail_file="$mail_dir/mail_vote_$release"
+[ ! -e "$mail_file" ] || rm $mail_file
+
+echo "[VOTE] Release Apache Cassandra $release" > $mail_file
+echo "" >> $mail_file
+echo "I propose the following artifacts for release as $release." >> $mail_file
+echo "" >> $mail_file
+echo "sha1: $head_commit" >> $mail_file
+echo "Git: $asf_git_repo?p=cassandra.git;a=shortlog;h=refs/tags/$release-tentative" >>
$mail_file
+echo "Artifacts: $staging_repo/orgapachecassandra-$staging_number/org/apache/cassandra/apache-cassandra/$release/"
>> $mail_file
+echo "Staging repository: $staging_repo/orgapachecassandra-$staging_number/" >> $mail_file
+echo "" >> $mail_file
+echo "The Debian packages are available here: http://$apache_host/~$asf_username" >>
$mail_file
+echo "" >> $mail_file
+echo "The vote will be open for 72 hours (longer if needed)." >> $mail_file
+echo "" >> $mail_file
+echo "[1]: (CHANGES.txt) " >> $mail_file
+echo "[2]: (NEWS.txt) " >> $mail_file
+
+echo "Mail written to $mail_file. You will need to complete with short links to:"
+echo "  1) CHANGES.txt: $asf_git_repo?p=cassandra.git;a=blob_plain;f=CHANGES.txt;hb=refs/tags/$release-tentative"
+echo "  2) NEWS.txt:    $asf_git_repo?p=cassandra.git;a=blob_plain;f=NEWS.txt;hb=refs/tags/$release-tentative"

http://git-wip-us.apache.org/repos/asf/cassandra-builds/blob/ac05c715/cassandra-release/upload_bintray.sh
----------------------------------------------------------------------
diff --git a/cassandra-release/upload_bintray.sh b/cassandra-release/upload_bintray.sh
new file mode 100755
index 0000000..151eb71
--- /dev/null
+++ b/cassandra-release/upload_bintray.sh
@@ -0,0 +1,22 @@
+#!/bin/bash
+
+BINTRAY_USER="$USER"
+BINTRAY_KEY="XXXXXXXX"
+
+#Example:
+#./upload_bintray.sh ~/workspace/cassandra-dist-svn/debian
+
+ROOTDIR=`cd -P -- "$(dirname -- "$1")" && printf '%s\n' "$(pwd -P)/$(basename --
"$1")"`
+ROOTLEN=$(( ${#ROOTDIR} + 1))
+
+for i in $(find ${ROOTDIR} -type f -printf "%T@ %p\n" | sort -n -r | cut -d' ' -f 2); do
+	IFILE=`echo $(basename -- "$i") | cut -c 1`
+    if [[ $IFILE != "." ]]; 
+    then
+    	FDIR=`echo $i | cut -c ${ROOTLEN}-${#i}`
+    	echo "Uploading $FDIR"
+    	curl -X PUT -T $i -u${BINTRAY_USER}:${BINTRAY_KEY} "https://api.bintray.com/content/apache/cassandra/debian/prod${FDIR}?override=1"
+    	sleep 1
+    fi
+done
+


Mime
View raw message