You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by mc...@apache.org on 2020/04/24 13:20:34 UTC

[cassandra-builds] branch master updated: Source and build artifacts are published with sha512 checksums

This is an automated email from the ASF dual-hosted git repository.

mck pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cassandra-builds.git


The following commit(s) were added to refs/heads/master by this push:
     new 0bdc460  Source and build artifacts are published with sha512 checksums
0bdc460 is described below

commit 0bdc460cba741a47abb0634905aa7bcd5310f13a
Author: mck <mc...@apache.org>
AuthorDate: Wed Nov 13 14:36:06 2019 +0100

    Source and build artifacts are published with sha512 checksums
    
    The distribution artifacts are no longer deployed to the maven staging repository. Instead they are just gpg signed, and prepare_release.sh commits them into the asf dev dist location.
    Build both the deb/rpm packages and repositories before vote, each in the separate debian/ and redhat/ subdirectoroes. Do the bintray upload inside of finish_release.sh
    Add `dch -r -D unstable` into prepare_relase.sh script (CASSANDRA-15541)
    
     patch by Mick Semb Wever; reviewed by Michael Shuler for CASSANDRA-14970
---
 cassandra-release/README.md          |   2 +-
 cassandra-release/finish_release.sh  | 165 ++++++++++++-------
 cassandra-release/prepare_release.sh | 301 ++++++++++++++++++++++++++---------
 cassandra-release/upload_bintray.sh  |  22 ---
 docker/centos7-image.docker          |   4 +-
 5 files changed, 336 insertions(+), 158 deletions(-)

diff --git a/cassandra-release/README.md b/cassandra-release/README.md
index d443cf8..aac043d 100644
--- a/cassandra-release/README.md
+++ b/cassandra-release/README.md
@@ -1,5 +1,5 @@
 Cassandra release scripts
 =========================
 
-For release managers of cassandra.
+For release managers of cassandra. See http://cassandra.apache.org/doc/latest/development/release_process.html
 
diff --git a/cassandra-release/finish_release.sh b/cassandra-release/finish_release.sh
index c18bacf..75edfe2 100755
--- a/cassandra-release/finish_release.sh
+++ b/cassandra-release/finish_release.sh
@@ -4,21 +4,24 @@
 
 asf_username="$USER"
 
+# your username to log into bintray (your account needs access to the "apache" organisation)
+BINTRAY_USER="$USER"
+# get your bintray API Key from https://bintray.com/profile/edit/apikey
+BINTRAY_KEY="XXXXXXXX"
+
 # 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"
+###################
+# prerequisites
+command -v svn >/dev/null 2>&1 || { echo >&2 "subversion needs to be installed"; exit 1; }
+command -v git >/dev/null 2>&1 || { echo >&2 "git needs to be installed"; exit 1; }
 
 ###################
 
 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
@@ -30,14 +33,14 @@ fake_mode=0
 show_help()
 {
     local name=`basename $0`
-    echo "$name [options] <release_version> <staging_number>"
+    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 ""
-    echo "Example: $name 2.0.3 1024"
+    echo "Example: $name 2.0.3"
 }
 
 while getopts ":hvf" opt; do
@@ -61,7 +64,6 @@ done
 shift $(($OPTIND-1))
 
 release=$1
-staging_number=$2
 deb_release=${release/-/\~}
 
 if [ -z "$release" ]
@@ -70,14 +72,8 @@ then
     show_help
     exit 1
 fi
-if [ -z "$staging_number" ]
-then
-    echo "Missing argument <staging_number>"
-    show_help
-    exit 1
-fi
 
-if [ "$#" -gt 2 ]
+if [ "$#" -gt 1 ]
 then
     shift
     echo "Too many arguments. Don't know what to do with '$@'"
@@ -96,9 +92,9 @@ fi
 
 if [ "$release" == "$deb_release" ]
 then
-    echo "Publishing release $release using staging number $staging_number"
+    echo "Publishing release $release"
 else
-    echo "Publishing release $release (debian uses $deb_release) using staging number $staging_number"
+    echo "Publishing release $release (debian uses $deb_release)"
 fi
 
 # "Saves" stdout to other descriptor since we might redirect them below
@@ -127,29 +123,14 @@ execute()
     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
+cassandra_dir=$PWD
 
-cd $start_dir
+#
+# Rename the git tag, removing the -tenative suffix
+#
+
+execute "cd $cassandra_dir"
 
 echo "Tagging release ..." 1>&3 2>&4
 execute "git checkout $release-tentative"
@@ -162,19 +143,82 @@ 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"
 
+#
+# Move staging artifacts to release distribution location
+#
+
+tmp_dir=`mktemp -d`
+cd $tmp_dir
+echo "Apache Cassandra $release release" > "_tmp_msg_"
+execute "svn mv -F _tmp_msg_ https://dist.apache.org/repos/dist/dev/cassandra/$release https://dist.apache.org/repos/dist/release/cassandra/"
+rm _tmp_msg_
+
+#
+# Public deploy the Debian packages
+#
+
 echo "Deploying debian packages ..." 1>&3 2>&4
 
-current_dir=`pwd`
+# Upload to bintray
+debian_dist_dir=$tmp_dir/cassandra-dist-$release
+[ -e "$debian_dist_dir" ] || mkdir $debian_dist_dir # create it for fake mode, to satisfy `find …` command below
+execute "cd $debian_dist_dir"
+
+ROOTLEN=$(( ${#debian_dist_dir} + 1))
+
+for i in $(find ${debian_dist_dir}/ -mindepth 2 -type f -mtime -10 -not -path "*/.svn/*" -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"
+    	execute "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
+cd $tmp_dir
+
+# Move to dist release top-level debian directory
+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)
+repo_series="${release_major}${release_minor}x"
+
+echo "performing a server-side: svn mv ^/dist/release/cassandra/$release/debian/pool/main/c/cassandra/* ^/dist/release/cassandra/debian/pool/main/c/cassandra/"
+
+for f in $( svn list "https://dist.apache.org/repos/dist/release/cassandra/$release/debian/pool/main/c/cassandra/" )
+do
+	echo "Apache Cassandra $release debian artifact $f" > "_tmp_msg_"
+	echo "svn mv -F _tmp_msg_ https://dist.apache.org/repos/dist/release/cassandra/$release/debian/pool/main/c/cassandra/$f https://dist.apache.org/repos/dist/release/cassandra/debian/pool/main/c/cassandra/"
+	execute "svn mv -F _tmp_msg_ https://dist.apache.org/repos/dist/release/cassandra/$release/debian/pool/main/c/cassandra/$f https://dist.apache.org/repos/dist/release/cassandra/debian/pool/main/c/cassandra/"
+done
+
+echo "Apache Cassandra $release debian artifacts" > "_tmp_msg_"
+execute "svn rm -F _tmp_msg_ https://dist.apache.org/repos/dist/release/cassandra/debian/dists/$repo_series"
+execute "svn mv -F _tmp_msg_ https://dist.apache.org/repos/dist/release/cassandra/$release/debian/dists/$repo_series https://dist.apache.org/repos/dist/release/cassandra/debian/dists/"
+execute "svn rm -F _tmp_msg_ https://dist.apache.org/repos/dist/release/cassandra/$release/debian/dists"
+execute "svn rm -F _tmp_msg_ https://dist.apache.org/repos/dist/release/cassandra/$release/debian/pool"
+
+#
+# Public deploy the RedHat packages
+#
 
-debian_series="${release_major}${release_minor}x"
+echo "Deploying redhat packages ..." 1>&3 2>&4
 
-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"
+# Move to dist release top-level redhat directory
+echo "Apache Cassandra $release redhat artifacts" > "_tmp_msg_"
+execute "svn rm -F _tmp_msg_ https://dist.apache.org/repos/dist/release/cassandra/redhat/$repo_series"
+execute "svn mv -F _tmp_msg_ https://dist.apache.org/repos/dist/release/cassandra/$release/redhat https://dist.apache.org/repos/dist/release/cassandra/redhat/$repo_series"
 
-execute "cd $current_dir"
+# Cleaning up
+execute "cd $cassandra_dir"
+rm -rf $tmp_dir
 
 # Restore stdout/stderr (and close temporary descriptors) if not verbose
 [ $verbose -eq 1 ] || exec 1>&3 3>&- 2>&4 4>&-
@@ -204,18 +248,17 @@ echo "[2]: NEWS.txt $asf_git_repo?p=cassandra.git;a=blob_plain;f=NEWS.txt;hb=ref
 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"
+echo 'Done deploying artifacts. Please make sure to:'
+echo ' 1) release artifacts from repository.apache.org'
+echo ' 2) wait for the artifacts to sync at https://downloads.apache.org/cassandra/'
+echo ' 3) login to bintray and \"publish\" the uploaded artifacts'
+echo ' 4) update the website (TODO provide link)'  # 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_file'
+echo ' 8) update #cassandra topic on slack'
+echo ' 9) tweet from @cassandra'
+echo ' 10) release version in JIRA'
+echo ' 11) remove old version (eg: `svn co https://dist.apache.org/repos/dist/release/cassandra/ cassandra-dist; svn rm <previous_version> debian/pool/main/c/cassandra/<previous_version>*`)'
+echo ' 12) increment build.xml base.version for the next release'
 
diff --git a/cassandra-release/prepare_release.sh b/cassandra-release/prepare_release.sh
index 9a2a7ff..4de3d78 100755
--- a/cassandra-release/prepare_release.sh
+++ b/cassandra-release/prepare_release.sh
@@ -11,14 +11,23 @@ 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"
-
 ###################
+# prerequisites
+command -v svn >/dev/null 2>&1 || { echo >&2 "subversion needs to be installed"; exit 1; }
+command -v git >/dev/null 2>&1 || { echo >&2 "git needs to be installed"; exit 1; }
+command -v ant >/dev/null 2>&1 || { echo >&2 "ant needs to be installed"; exit 1; }
+command -v dpkg-buildpackage >/dev/null 2>&1 || { echo >&2 "dpkg needs to be installed"; exit 1; }
+command -v dpatch >/dev/null 2>&1 || { echo >&2 "dpatch needs to be installed"; exit 1; } # can be removed after 2.2 EOL
+command -v debsign >/dev/null 2>&1 || { echo >&2 "devscripts needs to be installed"; exit 1; }
+command -v reprepro >/dev/null 2>&1 || { echo >&2 "reprepro needs to be installed"; exit 1; }
+command -v rpmsign >/dev/null 2>&1 || { echo >&2 "rpmsign needs to be installed"; exit 1; }
+command -v docker >/dev/null 2>&1 || { echo >&2 "docker needs to be installed"; exit 1; }
+command -v createrepo >/dev/null 2>&1 || { echo >&2 "createrepo needs to be installed"; exit 1; }
+(docker info >/dev/null 2>&1) || { echo >&2 "docker needs to running"; exit 1; }
 
+###################
 asf_git_repo="https://gitbox.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
@@ -27,6 +36,7 @@ OPTIND=1
 verbose=0
 fake_mode=0
 only_deb=0
+only_rpm=0
 
 show_help()
 {
@@ -38,11 +48,12 @@ show_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 "  -r: only build the rpm package"
     echo ""
     echo "Example: $name 2.0.3"
 }
 
-while getopts ":hvfd" opt; do
+while getopts ":hvfdr" opt; do
     case "$opt" in
     h)
         show_help
@@ -54,6 +65,8 @@ while getopts ":hvfd" opt; do
         ;;
     d)  only_deb=1
         ;;
+    r)  only_rpm=1
+        ;;
     \?)
         echo "Invalid option: -$OPTARG" >&2
         show_help
@@ -62,6 +75,12 @@ while getopts ":hvfd" opt; do
     esac
 done
 
+if [ $only_deb -eq 1 ] && [ $only_rpm -eq 1 ]
+then
+    echo "Options '-d' and '-r' are mutually exclusive"
+    exit 1
+fi
+
 shift $(($OPTIND-1))
 
 release=$1
@@ -91,31 +110,41 @@ then
     exit 1
 fi
 
-head_commit=`git log --pretty=oneline -1 | cut - -d " " -f 1`
+if ! git diff-index --quiet HEAD --
+then
+    echo "This git Cassandra directory has uncommitted changes."
+    echo "You must run this from a clean Cassandra git source repository."
+    exit 1
+fi
 
-if [ "$release" == "$deb_release" ]
+if [ $only_deb -eq 0 ] && [ $only_rpm -eq 0 ]
 then
-    echo "Preparing release for $release from commit:"
-else
-    echo "Preparing release for $release (debian will use $deb_release) from commit:"
+    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
 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 
+    # Not verbose, redirect all output to a logfile
     logfile="vote-${release}.log"
     [ ! -e "$logfile" ] || rm $logfile
     touch $logfile
@@ -137,11 +166,34 @@ execute()
 }
 
 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'`
+cassandra_builds_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )/.."
+tmp_dir=`mktemp -d`
+build_dir=${tmp_dir}/cassandra/build
+debian_package_dir="${tmp_dir}/debian"
+rpm_package_dir="${tmp_dir}/rpm"
+
+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)
 
-if [ $only_deb -eq 0 ]
+
+if [ $only_deb -eq 0 ] && [ $only_rpm -eq 0 ]
 then
+    echo "Update debian changelog, please correct changelog, name, and email."
+    read -n 1 -s -r -p "press any key to continue…" 1>&3 2>&4
+    execute "dch -r -D unstable"
+    echo "Prepare debian changelog for $release" > "_tmp_msg_"
+    execute "git commit -F _tmp_msg_ debian/changelog"
+    execute "rm _tmp_msg_"
+    head_commit=`git log --pretty=oneline -1 | cut -d " " -f 1`
+    # this commit needs to be forward merged and atomic pushed (see reminders at bottom)
+
     echo "Tagging release ..." 1>&3 2>&4
     execute "git tag $release-tentative"
     execute "git push $git_asf_remote refs/tags/$release-tentative"
@@ -158,70 +210,173 @@ then
     execute "ant publish -Drelease=true -Dbase.version=$release"
 
     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
 
-read -p "staging number? " staging_number 1>&3 2>&4
+    execute "cd $tmp_dir"
+    execute "svn co https://dist.apache.org/repos/dist/dev/cassandra cassandra-dist-dev"
+    execute "mkdir cassandra-dist-dev/${release}"
+    execute "cp ${build_dir}/apache-cassandra-${release}-src.tar.gz* cassandra-dist-dev/${release}/"
+    execute "cp ${build_dir}/apache-cassandra-${release}-bin.tar.gz* cassandra-dist-dev/${release}/"
+    execute "svn add cassandra-dist-dev/${release}"
+    echo "staging cassandra $release" > "_tmp_msg_"
+    execute "svn ci -F _tmp_msg_ cassandra-dist-dev/${release}"
+    execute "rm _tmp_msg_"
+    execute "cd $current_dir"
+fi
 
 ## Debian Stuffs ##
 
-execute "cd $debian_package_dir"
+if [ $only_rpm -eq 0 ]
+then
+    execute "cd $tmp_dir"
+    execute "svn co https://dist.apache.org/repos/dist/dev/cassandra cassandra-dist-dev"
+
+    execute "mkdir -p $debian_package_dir"
+    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 "mkdir -p $build_dir"
+    execute "cp $tmp_dir/cassandra-dist-dev/${release}/apache-cassandra-$release-src.tar.gz ${build_dir}/"
+    execute "tar xvzf ${build_dir}/apache-cassandra-${release}-src.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
+
+    execute "mkdir $tmp_dir/cassandra-dist-dev/${release}/debian"
+    execute "cp cassandra* $tmp_dir/cassandra-dist-dev/${release}/debian/"
+
+    echo "Building debian repository ..." 1>&3 2>&4
+    debian_series="${release_major}${release_minor}x"
+
+    echo "Origin: Apache Cassandra Packages" > $tmp_dir/distributions
+    echo "Label: Apache Cassandra Packages" >> $tmp_dir/distributions
+    echo "Codename: $debian_series" >> $tmp_dir/distributions
+    echo "Architectures: i386 amd64 source" >> $tmp_dir/distributions
+    echo "Components: main" >> $tmp_dir/distributions
+    echo "Description: Apache Cassandra APT Repository" >> $tmp_dir/distributions
+    echo "SignWith: $gpg_key" >> $tmp_dir/distributions
+
+    execute "cd $tmp_dir/cassandra-dist-dev/${release}/debian/"
+    execute "mkdir conf"
+    execute "mv $tmp_dir/distributions conf/"
+    execute "reprepro --ignore=wrongdistribution include $debian_series cassandra_${deb_release}_*.changes"
+    execute "rm -R db conf"
 
-deb_dir=cassandra_${release}_debian
-[ ! -e "$deb_dir" ] || rm -rf $deb_dir
-execute "mkdir $deb_dir"
-execute "cd $deb_dir"
+    execute "cd $tmp_dir"
+    execute "svn add --force cassandra-dist-dev/${release}/debian"
+    echo "staging cassandra debian packages for $release" > "_tmp_msg_"
+    execute "svn ci -F _tmp_msg_ cassandra-dist-dev/${release}/debian"
+    execute "cd $current_dir"
+fi
 
-echo "Building debian package ..." 1>&3 2>&4
+## RPM Stuff ##
 
-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
+if [ $only_deb -eq 0 ]
+then
+
+    execute "cd $tmp_dir"
+    execute "svn co https://dist.apache.org/repos/dist/dev/cassandra cassandra-dist-dev"
 
-echo "Uploading debian package ..." 1>&3 2>&4
+    execute "mkdir -p $rpm_package_dir"
+    execute "cd $rpm_package_dir"
 
-cat > /tmp/sftpbatch.txt <<EOF
-cd public_html
-put cassandra* 
-EOF
+    rpm_dir=$rpm_package_dir/cassandra_${release}_rpm
+    [ ! -e "$rpm_dir" ] || rm -rf $rpm_dir
+    execute "mkdir $rpm_dir"
+
+    execute "cd $cassandra_builds_dir"
+    if [[ $(docker images -f label=org.cassandra.buildenv=centos -q) ]]
+    then
+        execute "docker image rm -f  `docker images -f label=org.cassandra.buildenv=centos -q`"
+    fi
+    execute "docker build -f docker/centos7-image.docker docker/"
+    execute "docker run --rm -v ${rpm_dir}:/dist `docker images -f label=org.cassandra.buildenv=centos -q` /home/build/build-rpms.sh ${release}-tentative"
+    execute "rpmsign --addsign ${rpm_dir}/*.rpm"
 
+    execute "mkdir $tmp_dir/cassandra-dist-dev/${release}/redhat"
+    execute "cp ${rpm_dir}/*.rpm  $tmp_dir/cassandra-dist-dev/${release}/redhat/"
 
-execute "sftp -b /tmp/sftpbatch.txt ${asf_username}@${apache_host}"
+    echo "Building redhat repository ..." 1>&3 2>&4
 
-execute "cd $current_dir"
+    execute "cd $tmp_dir/cassandra-dist-dev/${release}/redhat/"
+    execute "createrepo ."
 
-# Restore stdout/stderr (and close temporary descriptors) if not verbose
-[ $verbose -eq 1 ] || exec 1>&3 3>&- 2>&4 4>&-
+    # FIXME - put into execute "…"
+    [ $fake_mode -eq 1 ] || for f in repodata/repomd.xml repodata/*.bz2 repodata/*.gz ; do gpg --detach-sign --armor $f ; done
 
-# Cleaning up
-rm -rf $tmp_dir
+    execute "cd $tmp_dir"
+    execute "svn add --force cassandra-dist-dev/${release}/redhat"
+    echo "staging cassandra rpm packages for $release" > "_tmp_msg_"
+    execute "svn ci -F _tmp_msg_ cassandra-dist-dev/${release}/redhat"
+    execute "cd $current_dir"
+fi
 
-## Email for vote ##
+if [ $only_deb -eq 0 ] && [ $only_rpm -eq 0 ]
+then
 
-mail_file="$mail_dir/mail_vote_$release"
-[ ! -e "$mail_file" ] || rm $mail_file
+    # 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 templates ##
+
+    [ ! -e "$mail_dir" ] || rm -rf $mail_dir
+    mkdir $mail_dir
+    mail_test_announce_file="$mail_dir/mail_stage_announce_$release"
+    mail_vote_file="$mail_dir/mail_vote_$release"
+
+    echo "[ANNOUNCE] Apache Cassandra $release test artifact available" > $mail_test_announce_file
+    echo "" >> $mail_test_announce_file
+    echo "The test build of Cassandra ${release} is available." >> $mail_test_announce_file
+    echo "" >> $mail_test_announce_file
+    echo "sha1: $head_commit" >> $mail_test_announce_file
+    echo "Git: $asf_git_repo?p=cassandra.git;a=shortlog;h=refs/tags/$release-tentative" >> $mail_test_announce_file
+    echo "Maven Artifacts: $staging_repo/orgapachecassandra-$staging_number/org/apache/cassandra/cassandra-all/$release/" >> $mail_test_announce_file
+    echo "" >> $mail_test_announce_file
+    echo "The Source and Build Artifacts, and the Debian and RPM packages and repositories, are available here: https://dist.apache.org/repos/dist/dev/cassandra/$release/" >> $mail_test_announce_file
+    echo "" >> $mail_test_announce_file
+    echo "A vote of this test build will be initiated within the next couple of days." >> $mail_test_announce_file
+    echo "" >> $mail_test_announce_file
+    echo "[1]: CHANGES.txt: $asf_git_repo?p=cassandra.git;a=blob_plain;f=CHANGES.txt;hb=refs/tags/$release-tentative" >> $mail_test_announce_file
+    echo "[2]: NEWS.txt: $asf_git_repo?p=cassandra.git;a=blob_plain;f=NEWS.txt;hb=refs/tags/$release-tentative" >> $mail_test_announce_file
+
+    echo "Test announcement mail written to $mail_test_announce_file"
+
+
+    echo "[VOTE] Release Apache Cassandra $release" > $mail_vote_file
+    echo "" >> $mail_vote_file
+    echo "Proposing the test build of Cassandra ${release} for release." >> $mail_vote_file
+    echo "" >> $mail_vote_file
+    echo "sha1: $head_commit" >> $mail_vote_file
+    echo "Git: $asf_git_repo?p=cassandra.git;a=shortlog;h=refs/tags/$release-tentative" >> $mail_vote_file
+    echo "Maven Artifacts: $staging_repo/orgapachecassandra-$staging_number/org/apache/cassandra/cassandra-all/$release/" >> $mail_vote_file
+    echo "" >> $mail_vote_file
+    echo "The Source and Build Artifacts, and the Debian and RPM packages and repositories, are available here: https://dist.apache.org/repos/dist/dev/cassandra/$release/" >> $mail_vote_file
+    echo "" >> $mail_vote_file
+    echo "The vote will be open for 72 hours (longer if needed). Everyone who has tested the build is invited to vote. Votes by PMC members are considered binding. A vote passes if there are at least three binding +1s." >> $mail_vote_file
+    echo "" >> $mail_vote_file
+    echo "[1]: CHANGES.txt: $asf_git_repo?p=cassandra.git;a=blob_plain;f=CHANGES.txt;hb=refs/tags/$release-tentative" >> $mail_vote_file
+    echo "[2]: NEWS.txt: $asf_git_repo?p=cassandra.git;a=blob_plain;f=NEWS.txt;hb=refs/tags/$release-tentative" >> $mail_vote_file
+
+    echo "Vote mail written to $mail_vote_file"
+fi
 
-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 and RPM 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: $asf_git_repo?p=cassandra.git;a=blob_plain;f=CHANGES.txt;hb=refs/tags/$release-tentative" >> $mail_file
-echo "[2]: NEWS.txt: $asf_git_repo?p=cassandra.git;a=blob_plain;f=NEWS.txt;hb=refs/tags/$release-tentative" >> $mail_file
 
-echo "Mail written to $mail_file"
+echo "Done cutting and staging release artifacts. Please make sure to:"
+echo " 1) verify all staged artifacts"
+echo " 2) close the nexus staging repository $staging_number"
+echo " 3) forward merge and atomic push the debian/changelog commit"
+echo " 4) email the announcement email"
+echo " 5) after a couple of days, email the vote email"
diff --git a/cassandra-release/upload_bintray.sh b/cassandra-release/upload_bintray.sh
deleted file mode 100755
index f985a07..0000000
--- a/cassandra-release/upload_bintray.sh
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/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 -mtime -10 -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
-
diff --git a/docker/centos7-image.docker b/docker/centos7-image.docker
index 47a7e87..27b716e 100644
--- a/docker/centos7-image.docker
+++ b/docker/centos7-image.docker
@@ -11,6 +11,7 @@ VOLUME ${RPM_DIST_DIR}
 
 # install deps
 RUN yum -y install \
+   yum-plugin-ovl \
    ant \
    ant-junit \
    epel-release \
@@ -20,7 +21,8 @@ RUN yum -y install \
    java-11-openjdk-devel \
    make \
    rpm-build \
-   sudo
+   sudo \
+   ; yum clean all
 
 # fix yum error after installing epel-release:
 #  Cannot retrieve metalink for repository: epel/x86_64. Please verify its path and try again


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org