Release Process¶
Contents
- Release Process
- Prerequisites
- Create Release Artifacts
- Call for a Vote
- Post-vote operations
- Publish Artifacts
- Promote Nexus Repository
- Sign and Upload Distribution Packages to Bintray
- Update and Publish Website
- Release version in JIRA
- Update to Next Development Version
- Wait for Artifacts to Sync
- Send Release Announcement
- Update IRC #cassandra topic
- Tweet from @Cassandra
- Delete Old Releases
Attention
- WORK IN PROGRESS
- A number of these steps still have been finalised/tested.
- The use of people.apache.org needs to be replaced with svnpubsub and dist.apache.org
The steps for Release Managers to create, vote and publish releases for Apache Cassandra.
While a committer can perform the initial steps of creating and calling a vote on a proposed release, only a PMC can complete the process of publishing and announcing the release.
Prerequisites¶
A debian based linux OS is required to run the release steps from. Debian-based distros provide the required RPM, dpkg and repository management tools.
Create and publish your GPG key¶
To create a GPG key, follow the guidelines. Include your public key in:
https://dist.apache.org/repos/dist/cassandra/KEYS
Publish your GPG key in a PGP key server, such as MIT Keyserver.
Create Release Artifacts¶
Any committer can perform the following steps to create and call a vote on a proposed release.
Check that no open jira tickets are urgent and currently being worked on. Also check with a PMC that there’s security vulnerabilities currently being worked on in private.
Perform the Release¶
Run the following commands to generate and upload release artifacts, to a nexus staging repository and distribution location:
cd ~/git
git clone https://github.com/apache/cassandra-builds.git
# Edit the variables at the top of `cassandra-builds/cassandra-release/prepare_release.sh`
# After cloning cassandra-builds repo, the prepare_release.sh is run from the actual cassandra git checkout,
# on the branch/commit that we wish to tag for the tentative release along with version number to tag.
# For example here <version-branch> might be `3.11` and <version> `3.11.3`
cd ~/git/cassandra/
git checkout cassandra-<version-branch>
../cassandra-builds/cassandra-release/prepare_release.sh -v <version>
If successful, take note of the email text output which can be used in the next section “Call for a Vote”.
The prepare_release.sh
script does not yet generate and upload the rpm distribution packages.
To generate and upload them do:
cd ~/git/cassandra-build
docker build -f docker/centos7-image.docker docker/
docker run --rm -v `pwd`/dist:/dist `docker images -f label=org.cassandra.buildenv=centos -q` /home/build/build-rpms.sh <version>-tentative
rpmsign --addsign dist/*.rpm
For more information on the above steps see the cassandra-builds documentation. The next step is to copy and commit these binaries to staging svnpubsub:
# FIXME the following commands is wrong while people.apache.org is still used instead of svnpubsub and dist.apache.org
cd ~/git
svn co https://dist.apache.org/repos/dist/dev/cassandra cassandra-dist-dev
mkdir cassandra-dist-dev/<version>
cp cassandra-build/dist/*.rpm cassandra-dist-dev/<version>/
svn add cassandra-dist-dev/<version>
svn ci cassandra-dist-dev/<version>
Call for a Vote¶
Fill out the following email template and send to the dev mailing list:
I propose the following artifacts for release as <version>.
sha1: <git-sha>
Git: http://git-wip-us.apache.org/repos/asf?p=cassandra.git;a=shortlog;h=refs/tags/<version>-tentative
Artifacts: https://repository.apache.org/content/repositories/orgapachecassandra-<nexus-id>/org/apache/cassandra/apache-cassandra/<version>/
Staging repository: https://repository.apache.org/content/repositories/orgapachecassandra-<nexus-id>/
The distribution packages are available here: https://dist.apache.org/repos/dist/dev/cassandra/${version}/
The vote will be open for 72 hours (longer if needed).
[1]: (CHANGES.txt) https://git1-us-west.apache.org/repos/asf?p=cassandra.git;a=blob_plain;f=CHANGES.txt;hb=<version>-tentative
[2]: (NEWS.txt) https://git1-us-west.apache.org/repos/asf?p=cassandra.git;a=blob_plain;f=NEWS.txt;hb=<version>-tentative
Post-vote operations¶
Any PMC can perform the following steps to formalize and publish a successfully voted release.
Publish Artifacts¶
Run the following commands to publish the voted release artifacts:
cd ~/git
git clone https://github.com/apache/cassandra-builds.git
# edit the variables at the top of `finish_release.sh`
# After cloning cassandra-builds repo, `finish_release.sh` is run from the actual cassandra git checkout,
# on the tentative release tag that we wish to tag for the final release version number tag.
cd ~/git/cassandra/
git checkout <version>-tentative
../cassandra-builds/cassandra-release/finish_release.sh -v <version> <staging_number>
If successful, take note of the email text output which can be used in the next section “Send Release Announcement”. The output will also list the next steps that are required. The first of these is to commit changes made to your https://dist.apache.org/repos/dist/release/cassandra/ checkout.
Promote Nexus Repository¶
- Login to Nexus repository again.
- Click on “Staging” and then on the repository with id “cassandra-staging”.
- Find your closed staging repository, right click on it and choose “Promote”.
- Select the “Releases” repository and click “Promote”.
- Next click on “Repositories”, select the “Releases” repository and validate that your artifacts exist as you expect them.
Sign and Upload Distribution Packages to Bintray¶
Run the following command:
cd ~/git
# FIXME the next command is wrong while people.apache.org is used instead of svnpubsub and dist.apache.org
svn mv https://dist.apache.org/repos/dist/dev/cassandra/<version> https://dist.apache.org/repos/dist/release/cassandra/
# Create the yum metadata, sign the metadata, and sign some files within the signed repo metadata that the ASF sig tool errors out on
svn co https://dist.apache.org/repos/dist/release/cassandra/redhat/ cassandra-dist-redhat
cd cassandra-dist-redhat/<abbreviated-version>x/
createrepo .
gpg --detach-sign --armor repodata/repomd.xml
for f in `find repodata/ -name *.bz2`; do
gpg --detach-sign --armor $f;
done
svn co https://dist.apache.org/repos/dist/release/cassandra/<version> cassandra-dist-<version>
cd cassandra-dist-<version>
cassandra-build/cassandra-release/upload_bintray.sh cassandra-dist-<version>
Update and Publish Website¶
See `docs https://svn.apache.org/repos/asf/cassandra/site/src/README`_ for building and publishing the website. Also update the CQL doc if appropriate.
Release version in JIRA¶
Release the JIRA version.
- In JIRA go to the version that you want to release and release it.
- Create a new version, if it has not been done before.
Update to Next Development Version¶
Edit and commit build.xml
so the base.version property points to the next version.
Wait for Artifacts to Sync¶
Wait for the artifacts to sync at http://www.apache.org/dist/cassandra/
Send Release Announcement¶
Fill out the following email template and send to both user and dev mailing lists:
The Cassandra team is pleased to announce the release of Apache Cassandra version <version>.
Apache Cassandra is a fully distributed database. It is the right choice
when you need scalability and high availability without compromising
performance.
http://cassandra.apache.org/
Downloads of source and binary distributions are listed in our download
section:
http://cassandra.apache.org/download/
This version is <the first|a bug fix> release[1] on the <version-base> series. As always,
please pay attention to the release notes[2] and let us know[3] if you
were to encounter any problem.
Enjoy!
[1]: (CHANGES.txt) https://git1-us-west.apache.org/repos/asf?p=cassandra.git;a=blob_plain;f=CHANGES.txt;hb=<version>
[2]: (NEWS.txt) https://git1-us-west.apache.org/repos/asf?p=cassandra.git;a=blob_plain;f=NEWS.txt;hb=<version>
[3]: https://issues.apache.org/jira/browse/CASSANDRA
Update IRC #cassandra topic¶
- Update #cassandra topic on irc::
- /msg chanserv op #cassandra /topic #cassandra “cassandra.apache.org | Latest: 3.11.2 (https://goo.gl/M34ZbG) | Stable: 3.0.16 (https://goo.gl/B4Zumg) | Oldstable: 2.2.12 (https://goo.gl/Uf3GVw) | ask, don’t ask to ask”
Tweet from @Cassandra¶
Tweet the new release, from the @Cassandra account
Delete Old Releases¶
As described in When to Archive. Also check people.apache.org as previous release scripts used it.