blob: 4ac84120181e165164e0cf6611a0023c5f0b3ddf [file] [log] [blame]
<!DOCTYPE html>
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Release Process &mdash; Apache Cassandra Documentation v4.1</title>
<script type="text/javascript" src="../_static/js/modernizr.min.js"></script>
<script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
<script type="text/javascript" src="../_static/jquery.js"></script>
<script type="text/javascript" src="../_static/underscore.js"></script>
<script type="text/javascript" src="../_static/doctools.js"></script>
<script type="text/javascript" src="../_static/language_data.js"></script>
<script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script>
<script type="text/javascript" src="../_static/js/theme.js"></script>
<link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../_static/extra.css" type="text/css" />
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="Frequently Asked Questions" href="../faq/index.html" />
<link rel="prev" title="Dependency Management" href="dependencies.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../index.html" class="icon icon-home"> Apache Cassandra
</a>
<div class="version">
4.1
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div>
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../getting_started/index.html">Getting Started</a></li>
<li class="toctree-l1"><a class="reference internal" href="../new/index.html">New Features in Apache Cassandra 4.0</a></li>
<li class="toctree-l1"><a class="reference internal" href="../architecture/index.html">Architecture</a></li>
<li class="toctree-l1"><a class="reference internal" href="../cql/index.html">The Cassandra Query Language (CQL)</a></li>
<li class="toctree-l1"><a class="reference internal" href="../data_modeling/index.html">Data Modeling</a></li>
<li class="toctree-l1"><a class="reference internal" href="../configuration/index.html">Configuring Cassandra</a></li>
<li class="toctree-l1"><a class="reference internal" href="../operating/index.html">Operating Cassandra</a></li>
<li class="toctree-l1"><a class="reference internal" href="../tools/index.html">Cassandra Tools</a></li>
<li class="toctree-l1"><a class="reference internal" href="../troubleshooting/index.html">Troubleshooting</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="index.html">Contributing to Cassandra</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="gettingstarted.html">Getting Started</a></li>
<li class="toctree-l2"><a class="reference internal" href="ide.html">Building and IDE Integration</a></li>
<li class="toctree-l2"><a class="reference internal" href="testing.html">Testing</a></li>
<li class="toctree-l2"><a class="reference internal" href="patches.html">Contributing Code Changes</a></li>
<li class="toctree-l2"><a class="reference internal" href="code_style.html">Code Style</a></li>
<li class="toctree-l2"><a class="reference internal" href="license_compliance.html">License Compliance</a></li>
<li class="toctree-l2"><a class="reference internal" href="how_to_review.html">Review Checklist</a></li>
<li class="toctree-l2"><a class="reference internal" href="how_to_commit.html">How-to Commit</a></li>
<li class="toctree-l2"><a class="reference internal" href="documentation.html">Working on Documentation</a></li>
<li class="toctree-l2"><a class="reference internal" href="ci.html">Jenkins CI Environment</a></li>
<li class="toctree-l2"><a class="reference internal" href="dependencies.html">Dependency Management</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">Release Process</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#prerequisites">Prerequisites</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#create-and-publish-your-gpg-key">Create and publish your GPG key</a></li>
<li class="toctree-l4"><a class="reference internal" href="#artifactory-account-with-access-to-apache-organisation">Artifactory account with access to Apache organisation</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#create-release-artifacts">Create Release Artifacts</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#perform-the-release">Perform the Release</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#call-for-a-vote">Call for a Vote</a></li>
<li class="toctree-l3"><a class="reference internal" href="#post-vote-operations">Post-vote operations</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#publish-artifacts">Publish Artifacts</a></li>
<li class="toctree-l4"><a class="reference internal" href="#promote-nexus-repository">Promote Nexus Repository</a></li>
<li class="toctree-l4"><a class="reference internal" href="#update-and-publish-website">Update and Publish Website</a></li>
<li class="toctree-l4"><a class="reference internal" href="#release-version-in-jira">Release version in JIRA</a></li>
<li class="toctree-l4"><a class="reference internal" href="#update-to-next-development-version">Update to Next Development Version</a></li>
<li class="toctree-l4"><a class="reference internal" href="#wait-for-artifacts-to-sync">Wait for Artifacts to Sync</a></li>
<li class="toctree-l4"><a class="reference internal" href="#send-release-announcement">Send Release Announcement</a></li>
<li class="toctree-l4"><a class="reference internal" href="#update-slack-cassandra-topic">Update Slack Cassandra topic</a></li>
<li class="toctree-l4"><a class="reference internal" href="#tweet-from-cassandra">Tweet from &#64;Cassandra</a></li>
<li class="toctree-l4"><a class="reference internal" href="#delete-old-releases">Delete Old Releases</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../faq/index.html">Frequently Asked Questions</a></li>
<li class="toctree-l1"><a class="reference internal" href="../plugins/index.html">Third-Party Plugins</a></li>
<li class="toctree-l1"><a class="reference internal" href="../bugs.html">Reporting Bugs</a></li>
<li class="toctree-l1"><a class="reference internal" href="../contactus.html">Contact us</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
<nav class="wy-nav-top" aria-label="top navigation">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../index.html">Apache Cassandra</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="breadcrumbs navigation">
<ul class="wy-breadcrumbs">
<li><a href="../index.html">Docs</a> &raquo;</li>
<li><a href="index.html">Contributing to Cassandra</a> &raquo;</li>
<li>Release Process</li>
<li class="wy-breadcrumbs-aside">
<a href="../_sources/development/release_process.rst.txt" rel="nofollow"> View page source</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="section" id="release-process">
<h1><a class="toc-backref" href="#id1">Release Process</a><a class="headerlink" href="#release-process" title="Permalink to this headline"></a></h1>
<div class="contents topic" id="contents">
<p class="topic-title">Contents</p>
<ul class="simple">
<li><p><a class="reference internal" href="#release-process" id="id1">Release Process</a></p>
<ul>
<li><p><a class="reference internal" href="#prerequisites" id="id2">Prerequisites</a></p>
<ul>
<li><p><a class="reference internal" href="#create-and-publish-your-gpg-key" id="id3">Create and publish your GPG key</a></p></li>
<li><p><a class="reference internal" href="#artifactory-account-with-access-to-apache-organisation" id="id4">Artifactory account with access to Apache organisation</a></p></li>
</ul>
</li>
<li><p><a class="reference internal" href="#create-release-artifacts" id="id5">Create Release Artifacts</a></p>
<ul>
<li><p><a class="reference internal" href="#perform-the-release" id="id6">Perform the Release</a></p></li>
</ul>
</li>
<li><p><a class="reference internal" href="#call-for-a-vote" id="id7">Call for a Vote</a></p></li>
<li><p><a class="reference internal" href="#post-vote-operations" id="id8">Post-vote operations</a></p>
<ul>
<li><p><a class="reference internal" href="#publish-artifacts" id="id9">Publish Artifacts</a></p></li>
<li><p><a class="reference internal" href="#promote-nexus-repository" id="id10">Promote Nexus Repository</a></p></li>
<li><p><a class="reference internal" href="#update-and-publish-website" id="id11">Update and Publish Website</a></p></li>
<li><p><a class="reference internal" href="#release-version-in-jira" id="id12">Release version in JIRA</a></p></li>
<li><p><a class="reference internal" href="#update-to-next-development-version" id="id13">Update to Next Development Version</a></p></li>
<li><p><a class="reference internal" href="#wait-for-artifacts-to-sync" id="id14">Wait for Artifacts to Sync</a></p></li>
<li><p><a class="reference internal" href="#send-release-announcement" id="id15">Send Release Announcement</a></p></li>
<li><p><a class="reference internal" href="#update-slack-cassandra-topic" id="id16">Update Slack Cassandra topic</a></p></li>
<li><p><a class="reference internal" href="#tweet-from-cassandra" id="id17">Tweet from &#64;Cassandra</a></p></li>
<li><p><a class="reference internal" href="#delete-old-releases" id="id18">Delete Old Releases</a></p></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
<div class="line-block">
<div class="line"><br /></div>
<div class="line"><br /></div>
</div>
<p>The steps for Release Managers to create, vote and publish releases for Apache Cassandra.</p>
<p>While a committer can perform the initial steps of creating and calling a vote on a proposed release, only a PMC member can complete the process of publishing and announcing the release.</p>
<div class="section" id="prerequisites">
<h2><a class="toc-backref" href="#id2">Prerequisites</a><a class="headerlink" href="#prerequisites" title="Permalink to this headline"></a></h2>
<dl class="simple">
<dt>Background docs</dt><dd><ul class="simple">
<li><p><a class="reference external" href="http://www.apache.org/legal/release-policy.html">ASF Release Policy</a></p></li>
<li><p><a class="reference external" href="http://www.apache.org/dev/release-distribution">ASF Release Distribution Policy</a></p></li>
<li><p><a class="reference external" href="http://www.eu.apache.org/dev/release-publishing.html">ASF Release Best Practices</a></p></li>
</ul>
</dd>
</dl>
<p>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.</p>
<div class="section" id="create-and-publish-your-gpg-key">
<h3><a class="toc-backref" href="#id3">Create and publish your GPG key</a><a class="headerlink" href="#create-and-publish-your-gpg-key" title="Permalink to this headline"></a></h3>
<p>To create a GPG key, follow the <a class="reference external" href="http://www.apache.org/dev/openpgp.html">guidelines</a>.
The key must be 4096 bit RSA.
Include your public key in:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>https://dist.apache.org/repos/dist/release/cassandra/KEYS
</pre></div>
</div>
<p>Publish your GPG key in a PGP key server, such as <a class="reference external" href="http://pgp.mit.edu/">MIT Keyserver</a>.</p>
</div>
<div class="section" id="artifactory-account-with-access-to-apache-organisation">
<h3><a class="toc-backref" href="#id4">Artifactory account with access to Apache organisation</a><a class="headerlink" href="#artifactory-account-with-access-to-apache-organisation" title="Permalink to this headline"></a></h3>
<p>Publishing a successfully voted upon release requires Artifactory access using your Apache LDAP credentials. Please verify that you have logged into Artifactory <a class="reference external" href="https://apache.jfrog.io/">here</a>.</p>
</div>
</div>
<div class="section" id="create-release-artifacts">
<h2><a class="toc-backref" href="#id5">Create Release Artifacts</a><a class="headerlink" href="#create-release-artifacts" title="Permalink to this headline"></a></h2>
<p>Any committer can perform the following steps to create and call a vote on a proposed release.</p>
<p>Check that there are no open urgent jira tickets currently being worked on. Also check with the PMC that there’s security vulnerabilities currently being worked on in private.’
Current project habit is to check the timing for a new release on the dev mailing lists.</p>
<div class="section" id="perform-the-release">
<h3><a class="toc-backref" href="#id6">Perform the Release</a><a class="headerlink" href="#perform-the-release" title="Permalink to this headline"></a></h3>
<p>Run the following commands to generate and upload release artifacts, to the ASF nexus staging repository and dev distribution location:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>cd ~/git
git clone https://github.com/apache/cassandra-builds.git
git clone https://github.com/apache/cassandra.git
# Edit the variables at the top of the `prepare_release.sh` file
edit cassandra-builds/cassandra-release/prepare_release.sh
# Ensure your 4096 RSA key is the default secret key
edit ~/.gnupg/gpg.conf # update the `default-key` line
edit ~/.rpmmacros # update the `%gpg_name &lt;key_id&gt;` line
# Ensure DEBFULLNAME and DEBEMAIL is defined and exported, in the debian scripts configuration
edit ~/.devscripts
# 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.
cd cassandra
git switch cassandra-&lt;version-branch&gt;
# The following cuts the release artifacts (including deb and rpm packages) and deploy to staging environments
../cassandra-builds/cassandra-release/prepare_release.sh -v &lt;version&gt;
</pre></div>
</div>
<p>Follow the prompts.</p>
<p>If building the deb or rpm packages fail, those steps can be repeated individually using the <cite>-d</cite> and <cite>-r</cite> flags, respectively.</p>
</div>
</div>
<div class="section" id="call-for-a-vote">
<h2><a class="toc-backref" href="#id7">Call for a Vote</a><a class="headerlink" href="#call-for-a-vote" title="Permalink to this headline"></a></h2>
<p>Fill out the following email template and send to the dev mailing list:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>I propose the following artifacts for release as &lt;version&gt;.
sha1: &lt;git-sha&gt;
Git: https://gitbox.apache.org/repos/asf?p=cassandra.git;a=shortlog;h=refs/tags/&lt;version&gt;-tentative
Artifacts: https://repository.apache.org/content/repositories/orgapachecassandra-&lt;nexus-id&gt;/org/apache/cassandra/apache-cassandra/&lt;version&gt;/
Staging repository: https://repository.apache.org/content/repositories/orgapachecassandra-&lt;nexus-id&gt;/
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=&lt;version&gt;-tentative
[2]: (NEWS.txt) https://git1-us-west.apache.org/repos/asf?p=cassandra.git;a=blob_plain;f=NEWS.txt;hb=&lt;version&gt;-tentative
</pre></div>
</div>
</div>
<div class="section" id="post-vote-operations">
<h2><a class="toc-backref" href="#id8">Post-vote operations</a><a class="headerlink" href="#post-vote-operations" title="Permalink to this headline"></a></h2>
<p>Any PMC member can perform the following steps to formalize and publish a successfully voted release.</p>
<div class="section" id="publish-artifacts">
<h3><a class="toc-backref" href="#id9">Publish Artifacts</a><a class="headerlink" href="#publish-artifacts" title="Permalink to this headline"></a></h3>
<p>Run the following commands to publish the voted release artifacts:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>cd ~/git
# edit the variables at the top of the `finish_release.sh` file
edit cassandra-builds/cassandra-release/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 &lt;version&gt;-tentative
../cassandra-builds/cassandra-release/finish_release.sh -v &lt;version&gt;
</pre></div>
</div>
<p>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.</p>
</div>
<div class="section" id="promote-nexus-repository">
<h3><a class="toc-backref" href="#id10">Promote Nexus Repository</a><a class="headerlink" href="#promote-nexus-repository" title="Permalink to this headline"></a></h3>
<ul class="simple">
<li><p>Login to <a class="reference external" href="https://repository.apache.org">Nexus repository</a> again.</p></li>
<li><p>Click on “Staging” and then on the repository with id “cassandra-staging”.</p></li>
<li><p>Find your closed staging repository, right click on it and choose “Promote”.</p></li>
<li><p>Select the “Releases” repository and click “Promote”.</p></li>
<li><p>Next click on “Repositories”, select the “Releases” repository and validate that your artifacts exist as you expect them.</p></li>
</ul>
</div>
<div class="section" id="update-and-publish-website">
<h3><a class="toc-backref" href="#id11">Update and Publish Website</a><a class="headerlink" href="#update-and-publish-website" title="Permalink to this headline"></a></h3>
<p>See <a class="reference external" href="https://svn.apache.org/repos/asf/cassandra/site/src/README">docs</a> for building and publishing the website.</p>
<p>Also update the CQL doc if appropriate.</p>
</div>
<div class="section" id="release-version-in-jira">
<h3><a class="toc-backref" href="#id12">Release version in JIRA</a><a class="headerlink" href="#release-version-in-jira" title="Permalink to this headline"></a></h3>
<p>Release the JIRA version.</p>
<ul class="simple">
<li><p>In JIRA go to the version that you want to release and release it.</p></li>
<li><p>Create a new version, if it has not been done before.</p></li>
</ul>
</div>
<div class="section" id="update-to-next-development-version">
<h3><a class="toc-backref" href="#id13">Update to Next Development Version</a><a class="headerlink" href="#update-to-next-development-version" title="Permalink to this headline"></a></h3>
<p>Update the codebase to point to the next development version:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>cd ~/git/cassandra/
git checkout cassandra-&lt;version-branch&gt;
edit build.xml # update `&lt;property name=&quot;base.version&quot; value=&quot;…&quot;/&gt; `
edit debian/changelog # add entry for new version
edit CHANGES.txt # add entry for new version, move up any entries that were added after the release was cut and staged
git commit -m &quot;Increment version to &lt;next-version&gt;&quot; build.xml debian/changelog CHANGES.txt
# …and forward merge and push per normal procedure
</pre></div>
</div>
</div>
<div class="section" id="wait-for-artifacts-to-sync">
<h3><a class="toc-backref" href="#id14">Wait for Artifacts to Sync</a><a class="headerlink" href="#wait-for-artifacts-to-sync" title="Permalink to this headline"></a></h3>
<p>Wait for the artifacts to sync at <a class="reference external" href="https://downloads.apache.org/cassandra/">https://downloads.apache.org/cassandra/</a></p>
</div>
<div class="section" id="send-release-announcement">
<h3><a class="toc-backref" href="#id15">Send Release Announcement</a><a class="headerlink" href="#send-release-announcement" title="Permalink to this headline"></a></h3>
<p>Fill out the following email template and send to both user and dev mailing lists:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>The Cassandra team is pleased to announce the release of Apache Cassandra version &lt;version&gt;.
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 &lt;the first|a bug fix&gt; release[1] on the &lt;version-base&gt; 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=&lt;version&gt;
[2]: (NEWS.txt) https://git1-us-west.apache.org/repos/asf?p=cassandra.git;a=blob_plain;f=NEWS.txt;hb=&lt;version&gt;
[3]: https://issues.apache.org/jira/browse/CASSANDRA
</pre></div>
</div>
</div>
<div class="section" id="update-slack-cassandra-topic">
<h3><a class="toc-backref" href="#id16">Update Slack Cassandra topic</a><a class="headerlink" href="#update-slack-cassandra-topic" title="Permalink to this headline"></a></h3>
<dl class="simple">
<dt>Update topic in <code class="docutils literal notranslate"><span class="pre">cassandra</span></code> <a class="reference internal" href="../contactus.html#slack"><span class="std std-ref">Slack room</span></a></dt><dd><p>/topic cassandra.apache.org | Latest releases: 3.11.4, 3.0.18, 2.2.14, 2.1.21 | ask, don’t ask to ask</p>
</dd>
</dl>
</div>
<div class="section" id="tweet-from-cassandra">
<h3><a class="toc-backref" href="#id17">Tweet from &#64;Cassandra</a><a class="headerlink" href="#tweet-from-cassandra" title="Permalink to this headline"></a></h3>
<p>Tweet the new release, from the &#64;Cassandra account</p>
</div>
<div class="section" id="delete-old-releases">
<h3><a class="toc-backref" href="#id18">Delete Old Releases</a><a class="headerlink" href="#delete-old-releases" title="Permalink to this headline"></a></h3>
<p>As described in <a class="reference external" href="http://www.apache.org/dev/release.html#when-to-archive">When to Archive</a>.</p>
<p>An example of removing old releases:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>svn rm https://dist.apache.org/repos/dist/release/cassandra/&lt;previous_version&gt;
</pre></div>
</div>
</div>
</div>
</div>
</div>
</div>
<footer>
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
<a href="../faq/index.html" class="btn btn-neutral float-right" title="Frequently Asked Questions" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a>
<a href="dependencies.html" class="btn btn-neutral float-left" title="Dependency Management" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a>
</div>
<hr/>
<div role="contentinfo">
<p>
&copy; Copyright 2020, The Apache Cassandra team
</p>
</div>
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script type="text/javascript">
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>