blob: c18bacf044b6a5291af10532f47fb40d4497b13d [file] [log] [blame]
#!/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="https://gitbox.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
release_major=$(echo ${release_short} | cut -d '.' -f 1)
release_minor=$(echo ${release_short} | cut -d '.' -f 2)
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_major}${release_minor}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_major}.${release_minor}"
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 $asf_git_repo?p=cassandra.git;a=blob_plain;f=CHANGES.txt;hb=refs/tags/cassandra-$release" >> $mail_file
echo "[2]: NEWS.txt $asf_git_repo?p=cassandra.git;a=blob_plain;f=NEWS.txt;hb=refs/tags/cassandra-$release" >> $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"
echo " 8) update #cassandra topic on slack"
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"