blob: dcc6f5172eb1917a70348d21bc50cc13b063a2d4 [file] [log] [blame]
<html lang="en"><head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
<meta name="description" content="Apex is an enterprise grade native YARN big data-in-motion platform that unifies stream processing as well as batch processing.">
<meta name="author" content="Apache Software Foundation">
<link rel="icon" href="favicon.ico">
<title>Apache Apex</title>
<!-- Main Stylesheet -->
<link href="css/main.css" rel="stylesheet">
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-85540278-1', 'auto');
ga('send', 'pageview');
</script>
</head>
<body>
<nav class="navbar navbar-default navbar-static-top" id="main-nav">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="/">
<img src="images/apex-logo.svg" class="logo" alt="Apache Apex Logo">
Apache Apex<span class="trademark">&trade;</span>
</a>
</div>
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<ul class="nav navbar-right navbar-nav">
<li class="nav-item">
<a class="nav-link " href="/">Home</a>
</li>
<li class="nav-item">
<a class="nav-link " href="/docs.html">Documentation</a>
</li>
<li class="nav-item">
<a class="nav-link " href="/powered-by-apex.html">Powered By Apex</a>
</li>
<li class="nav-item">
<a class="nav-link " href="/roadmap.html">Roadmap</a>
</li>
<li class="nav-item nav-mouseover">
<ul class="dropdown-menu">
<li class=""><a href="/community.html#mailing-lists">Mailing Lists</a></li>
<li class=""><a href="/community.html#issue-tracking">Issue Tracking</a></li>
<li class=""><a href="http://stackoverflow.com/questions/tagged/apache-apex">Stack Overflow</a></li>
<li class=""><a href="/community.html#events">Events</a></li>
<li class=""><a href="/community.html#contributing">Contributing</a></li>
<li class=""><a href="http://www.apache.org/foundation/how-it-works.html">Apache Foundation</a></li>
</ul>
<a href="/community.html" class="nav-link">Community</a>
</li>
<li class="nav-item nav-mouseover">
<ul class="dropdown-menu">
<li class=""><a href="https://github.com/apache/apex-core">Apex Core</a></li>
<li class=""><a href="https://github.com/apache/apex-malhar">Apex Malhar</a></li>
<li class=""><a href="https://github.com/apache/apex-site">Apex Site</a></li>
</ul>
<a href="https://github.com/apache/apex-core" class="nav-link">Github</a>
</li>
<li class="nav-item">
<a class="nav-link btn btn-success btn-download" href="/downloads.html">Download</a>
</li>
</ul>
</div>
</nav>
<div class="container">
<h1 id="how-to-release-apache-apex">How to release Apache Apex</h1>
<p>For general information on ASF releases, see: <a href="http://www.apache.org/dev/release.html">http://www.apache.org/dev/release.html</a></p>
<h2 id="creating-release-branch">Creating Release Branch</h2>
<p>If this is a minor release (X.Y.0), start with creating a new branch. Example for 3.4.0:</p>
<pre><code class="lang-bash">git checkout master &amp;&amp; git pull
git checkout -b release-3.4 master
git push apache release-3.4
</code></pre>
<p>Replace version in master branch:</p>
<pre><code>git checkout master
git grep -l &quot;3.4.0-SNAPSHOT&quot;
</code></pre><p>For informational purpose, this should yield the list of files that needs the version number replaced to X.(Y+1).0 next version. Note that the replacement step is different between the repositories due to an open issue. See:</p>
<p><a href="https://issues.apache.org/jira/browse/APEXCORE-34">https://issues.apache.org/jira/browse/APEXCORE-34</a></p>
<p>For -core:</p>
<pre><code class="lang-bash">dv=3.4.0-SNAPSHOT
rv=3.5.0-SNAPSHOT
for a in `git grep -l &quot;${dv}&quot;`; do echo $a; sed -i &#39;s/&#39;&quot;${dv}&quot;&#39;/&#39;&quot;${rv}&quot;&#39;/g&#39; $a; done
</code></pre>
<p>For -malhar:</p>
<pre><code>mvn versions:set -DnewVersion=${rv} -Pall-modules
</code></pre><p>Commit and push the change:</p>
<pre><code>git commit --author &quot;Apex Dev &lt;dev@apex.apache.org&gt;&quot; -am &quot;Preparing for 3.5.0 development&quot;
git push apache master
</code></pre><h2 id="preparing-release-candidate">Preparing Release Candidate</h2>
<pre><code>git checkout release-3.4
</code></pre><h3 id="add-missing-since-tags">Add missing @since tags</h3>
<p>For Java classes added since the last release, the @since tags need to be added. The javadoc plugin inserts missing tags, but does not play well with the license header when no class level documentation block is present. This is tracked as</p>
<p><a href="https://issues.apache.org/jira/browse/APEXCORE-183">https://issues.apache.org/jira/browse/APEXCORE-183</a></p>
<p>It also removes the custom @tags doclet tag when the existing JavaDoc is malformed, <strong>do not use this to make changes in Malhar</strong>. Until these problems are resolved, use the following Ruby script to do the replacement: <a href="https://issues.apache.org/jira/secure/attachment/12781158/add-since.rb">https://issues.apache.org/jira/secure/attachment/12781158/add-since.rb</a></p>
<pre><code>ruby ~/add-since.rb `pwd` -s 3.4.0
</code></pre><h3 id="update-changelog-from-jira">Update CHANGELOG from JIRA</h3>
<p>Navigate to the unreleased version, example:</p>
<p><a href="https://issues.apache.org/jira/browse/APEXMALHAR/fixforversion/12334589">https://issues.apache.org/jira/browse/APEXMALHAR/fixforversion/12334589</a></p>
<p>Obtain the release notes (text mode):</p>
<p><a href="https://issues.apache.org/jira/secure/ReleaseNote.jspa?version=12334589&amp;styleName=Text&amp;projectId=12318824">https://issues.apache.org/jira/secure/ReleaseNote.jspa?version=12334589&amp;styleName=Text&amp;projectId=12318824</a></p>
<p>Shorten any wrapping and overly long titles to fit width. Copy the report and insert new release section into <code>CHANGELOG.md</code> with the release date set to 72 hours ahead to reflect the time for the vote.</p>
<p>Create shortlink for the JIRA release notes on <a href="http://s.apache.org/">http://s.apache.org/</a> for use in the VOTE thread.
Example: <a href="http://s.apache.org/8uT">http://s.apache.org/8uT</a></p>
<p>Commit tags and change log:</p>
<pre><code>git commit --author &quot;Apex Dev &lt;dev@apex.apache.org&gt;&quot; -am &quot;Add @since tags and update change log for release 3.4.0&quot;
</code></pre><h3 id="update-version-number-for-rc">Update version number for RC</h3>
<pre><code>dv=3.4.0-SNAPSHOT
rv=3.4.0
</code></pre><p>As mentioned earlier, use the following for -core releases:</p>
<pre><code>for a in `git grep -l &quot;${dv}&quot;`; do echo $a; sed -i &#39;s/&#39;&quot;${dv}&quot;&#39;/&#39;&quot;${rv}&quot;&#39;/g&#39; $a; done
</code></pre><p>And this for -malhar releases:</p>
<pre><code>mvn versions:set -Pall-modules -DnewVersion=${rv}
</code></pre><p>Commit version change:</p>
<pre><code>git commit --author &quot;Apex Dev &lt;dev@apex.apache.org&gt;&quot; -am &quot;Preparing to release ${rv}-RC1&quot;
git tag -a &quot;v${rv}-RC1&quot; -m &quot;Release ${rv}-RC1&quot;
</code></pre><p>Push to fork (as temporary branch), open pull request, wait for Travis CI build to succeed. Then push the tag.</p>
<pre><code>git push apache &quot;v${rv}-RC1&quot;
</code></pre><p>The only difference between release branch and tag are this final version number change and the change log commit. The branch stays at <code>-SNAPSHOT</code> version.</p>
<h2 id="build-and-deploy-release-candidate">Build and Deploy Release Candidate</h2>
<p>Prerequisites:</p>
<ul>
<li>GPG key needs to be in <a href="https://dist.apache.org/repos/dist/release/apex/KEYS">https://dist.apache.org/repos/dist/release/apex/KEYS</a></li>
<li>Credentials for <code>apache.staging.https</code> server distribution management in <code>~/.m2/settings.xml</code></li>
<li>Tag pushed to ASF git</li>
<li>The correct version of the JDK is installed and maven is using the right java version</li>
</ul>
<p>Build and deploy release candidate from RC tag:</p>
<pre><code>git checkout &quot;v${rv}-RC1&quot;
git clean -d -f
mvn clean apache-rat:check deploy -Papache-release -Pall-modules -DskipTests
</code></pre><p>Some recent versions of the GPG might result in the following error message when the above maven deploy command is invoked.</p>
<pre><code>gpg: signing failed: Inappropriate ioctl for device
</code></pre><p>Setting the GPG terminal fixes this. GPG terminal can be set using </p>
<pre><code>GPG_TTY=$(tty)
export GPG_TTY
</code></pre><p>Confirm no archives are included in source release (rat:check reports them in target/rat.txt but does not fail the build):</p>
<pre><code>unzip -l target/*-source-release.zip | grep -e &quot;.zip\|.jar&quot;
</code></pre><p>Log on to <a href="https://repository.apache.org">https://repository.apache.org</a> and look for Staging Repositories. &quot;Close&quot; the newly created orgapacheapex-xxxx staging repository to obtain the temporary URL, note it down for the VOTE thread.</p>
<p>Example URL: <a href="https://repository.apache.org/content/repositories/orgapacheapex-1000/">https://repository.apache.org/content/repositories/orgapacheapex-1000/</a></p>
<p>Copy files to distribution dir and create signatures and checksums.
(Note this is per policy to stage these files outside of the Maven repository, otherwise everything below would happen automatically as defined in the parent POM.)</p>
<p>For -core releases:</p>
<pre><code>RNAME=apache-apex-core-${rv}
</code></pre><p>For -malhar releases:</p>
<pre><code>RNAME=apache-apex-malhar-${rv}
</code></pre><pre><code class="lang-bash">cd target
md5sum ${RNAME}-source-release.tar.gz &gt; ${RNAME}-source-release.tar.gz.md5
md5sum ${RNAME}-source-release.zip &gt; ${RNAME}-source-release.zip.md5
shasum -a 512 ${RNAME}-source-release.tar.gz &gt; ${RNAME}-source-release.tar.gz.sha512
shasum -a 512 ${RNAME}-source-release.zip &gt; ${RNAME}-source-release.zip.sha512
gpg --yes --armor --output ${RNAME}-source-release.tar.gz.asc --detach-sig ${RNAME}-source-release.tar.gz
gpg --yes --armor --output ${RNAME}-source-release.zip.asc --detach-sig ${RNAME}-source-release.zip
</code></pre>
<p>Check files into the dist staging area:</p>
<pre><code class="lang-bash">mkdir svn-dist &amp;&amp; cp *-source-* svn-dist/
svn import svn-dist https://dist.apache.org/repos/dist/dev/apex/${RNAME}-RC1 -m &quot;Apache Apex v${rv}-RC1&quot;
</code></pre>
<h2 id="build-and-deploy-documentation">Build and Deploy Documentation</h2>
<h3 id="javadoc">Javadoc</h3>
<p>Javadoc will be automatically deployed for registered branches. For minor releases, add the new branch to the buildbot configuration:</p>
<p><a href="https://svn.apache.org/repos/infra/infrastructure/buildbot/aegis/buildmaster/master1/projects/apex.conf">https://svn.apache.org/repos/infra/infrastructure/buildbot/aegis/buildmaster/master1/projects/apex.conf</a></p>
<p>This essentially means that the file above needs to be edited for the release number in the array of releases. Ensure that you verify the success of the build in the build bot <a href="https://ci.apache.org/builders">url</a>
Also note that the build bot is a nightly trigger. Wait for atleast the next build trigger to kick in before raising a ticket with the infra team if you see that the javadoc is not appearing as expected.</p>
<h3 id="user-documentation">User Documentation</h3>
<p>The documentation will be generated as static HTML files into the <code>apex-site</code> repository, <a href="https://github.com/apache/apex-site/tree/asf-site/docs">separated by version (X.Y)</a>.</p>
<p><strong>Note</strong> You need Python 2.7+ and <a href="http://www.mkdocs.org/">mkdocs</a> with patch for issue <a href="https://github.com/mkdocs/mkdocs/issues/859">mkdocs #859</a> on top of the currently available version 0.15.3. After installing mkdocs with pip, run the following to obtain this build:</p>
<pre><code>sudo pip install --upgrade git+https://github.com/sashadt/mkdocs.git
</code></pre><p>Do the following setup steps before building and deploying the documentation. </p>
<ol>
<li><p>Clone the apex-site repository into a folder called <code>apex-site</code> at the same level as the current repository. </p>
</li>
<li><p>Set the following environment variables.</p>
<p> For -core releases:</p>
<pre><code> REPO_NAME=apex-core
DOC_NAME=apex
</code></pre><p> For -malhar releases:</p>
<pre><code> REPO_NAME=apex-malhar
DOC_NAME=malhar
</code></pre><p> The <code>REPO_NAME</code> variable above should match the folder name of the cloned apex module being built.</p>
</li>
</ol>
<p>Build and deploy the documentation in the release directory:</p>
<pre><code class="lang-bash"># build docs in ${REPO_NAME}, they will be generated in a site sub-folder
mkdocs build --clean
# Calculate the major.minor version
docv=`echo ${rv} | sed &#39;s/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)/\1\.\2/&#39;`
# copy docs from site folder into target folder on apex-site
cd ../apex-site
git checkout asf-site
rm -rf docs/${DOC_NAME}-${docv}
cp -r ../${REPO_NAME}/site docs/${DOC_NAME}-${docv}
git add -A
git commit --author &quot;Apex Dev &lt;dev@apex.apache.org&gt;&quot; -m &quot;Adding ${DOC_NAME}-${rv} documentation&quot;
git push
</code></pre>
<p>After <a href="https://github.com/apache/apex-site/tree/master#contributing">publishing the site</a> the new documentation will be available at <code>https://apex.apache.org/docs/${DOC_NAME}-${docv}/</code></p>
<h2 id="voting">Voting</h2>
<p>Vote call sample:
<a href="https://lists.apache.org/thread.html/bee03103dfdd94ffeb9dafdd2e0e468609948f59649534db2d99b464@%3Cdev.apex.apache.org%3E">https://lists.apache.org/thread.html/bee03103dfdd94ffeb9dafdd2e0e468609948f59649534db2d99b464@%3Cdev.apex.apache.org%3E</a></p>
<p>Vote result:
<a href="https://lists.apache.org/thread.html/2887965dba350e181d06aa02af19d8d47c82eb6f0b47eef8dce14fe8@%3Cdev.apex.apache.org%3E">https://lists.apache.org/thread.html/2887965dba350e181d06aa02af19d8d47c82eb6f0b47eef8dce14fe8@%3Cdev.apex.apache.org%3E</a></p>
<p>Note that the vote result email should have the subject prefixed with <code>[RESULT]</code>.</p>
<p>If the vote is not successful, a new RC needs to be built and new vote called. Once the PMC vote passes, proceed with promoting and announcing the release.</p>
<h2 id="promote-release">Promote Release</h2>
<p>Release Nexus staging repository: <a href="http://central.sonatype.org/pages/releasing-the-deployment.html#close-and-drop-or-release-your-staging-repository">http://central.sonatype.org/pages/releasing-the-deployment.html#close-and-drop-or-release-your-staging-repository</a></p>
<p>Move source release from dist staging to release folder (to be done by PMC member):</p>
<pre><code>rv=3.4.0
RNAME=apache-apex-core-${rv}
svn mv https://dist.apache.org/repos/dist/dev/apex/${RNAME}-RC1 https://dist.apache.org/repos/dist/release/apex/${RNAME} -m &quot;Release ${RNAME}&quot;
</code></pre><h3 id="jira-to-be-done-by-a-pmc-member-">JIRA (To be done by a PMC member)</h3>
<p>The closing of the JIRA item has to be done by a PMC member as the turn off notification for bulk changes in JIRA is an option available only for the PMC members.
Request a PMC member to close release and all associated tickets (using bulk change workflow transition and <strong>turn off notification</strong> at bottom of page to not flood the mailing list).
Create version number X.Y.Z+1 for next release (also to be done by PMC member).</p>
<h3 id="git">git</h3>
<p>Create final release tag:</p>
<p>Note that the value of RC2 in the example below assumes that the second release candidate RC2 is the final release tag. Change this value accordingly.</p>
<pre><code class="lang-bash">rv=3.4.0
git tag -a &quot;v${rv}&quot; -m &quot;Release ${rv}&quot; &quot;v${rv}-RC2&quot;
git push apache &quot;v${rv}&quot;
</code></pre>
<p>Cherry-pick <code>@since</code> tag and change log commit from release tag and bump patch version number in release branch (X.Y.Z+1 - otherwise same as when creating new release branch):</p>
<pre><code class="lang-bash">git checkout release-3.4
dv=3.4.0-SNAPSHOT
rv=3.4.1-SNAPSHOT
for a in `git grep -l &quot;${dv}&quot;`; do echo $a; sed -i &#39;s/&#39;&quot;${dv}&quot;&#39;/&#39;&quot;${rv}&quot;&#39;/g&#39; $a; done
</code></pre>
<p>If there are new artifacts published to Maven repositories consider enabling semantic versioning check for the newly
published libraries.</p>
<p>Commit all changes and push them to the remote git repository:</p>
<pre><code class="lang-bash">git commit --author &quot;Apex Dev &lt;dev@apex.apache.org&gt;&quot; -am &quot;Preparing for 3.4.1 development&quot;
git push apache
</code></pre>
<p>Cherry-pick <code>@since</code> tag and change log changes from release tag to <code>master</code>.
Push the changes to apache</p>
<h3 id="documentation">Documentation</h3>
<p>If this is a minor or a major release, link the release documentation as latest on the web site. Otherwise it is a patch release and this step can be skipped (documentation is already reflected in the website).</p>
<p>Under the <code>apex-site</code> folder (<code>asf-site</code> branch):</p>
<pre><code class="lang-bash"># docv major.minor version calculated in the build step
cd docs
# Set the release version to be the latest available version
ln -nsf ${DOC_NAME}-${docv} ${DOC_NAME}
git add -A
git commit --author &quot;Apex Dev &lt;dev@apex.apache.org&gt;&quot; -m &quot;Promoting ${DOC_NAME}-${docv} documentation&quot;
git push
</code></pre>
<h3 id="update-web-site">Update Web Site</h3>
<p>Update the download page to reflect the new release: <a href="https://github.com/apache/apex-site#updating-downloads-page">https://github.com/apache/apex-site#updating-downloads-page</a></p>
<p>Publish the web site, see <a href="https://github.com/apache/apex-site#contributing">apex-site repository</a> for instructions.</p>
<p>Publishing the site involves running the build.sh script from the master branch and performing a git push from the asf-site branch. The local repo is automatically switched to the asf-site branch when the build.sh script is invoked from the master.</p>
<h2 id="announce-release">Announce Release</h2>
<p>Send the announcement email, example:
<a href="http://mail-archives.apache.org/mod_mbox/www-announce/201605.mbox/%3CCA%2B5xAo1ZYso6azUBJOkpVtJqM%3DAnJFr_RtjKk9_VusBwgYNS8A%40mail.gmail.com%3E">http://mail-archives.apache.org/mod_mbox/www-announce/201605.mbox/%3CCA%2B5xAo1ZYso6azUBJOkpVtJqM%3DAnJFr_RtjKk9_VusBwgYNS8A%40mail.gmail.com%3E</a></p>
<p>Please include the announce@apache.org as one of the recipients. Also make sure that the email is being sent from the youremail@apache.org email id. Note that the email to announce@apache.org will bounce back if youremail@apache.org email is not configured for the alias address from which you are sending this email.
The release email must be visible under <a href="https://lists.apache.org/list.html?announce@apache.org">announce mailing list</a></p>
<h2 id="anouncements-page">Anouncements page</h2>
<p>Edit the announcements page to publish the feed about the new release by editing the markup file announcements-latest.md under the source tree. Consider removing one or multiple old announcements at the same time.</p>
<h2 id="removing-old-releases">Removing old Releases</h2>
<p>As part of publishing new releases, please determine whether old releases should be deleted. See <a href="http://www.apache.org/dev/release.html#when-to-archive">release archiving policy</a> for details why. </p>
<p>With a new patch release, the previous patch release can be removed. For example, once 3.4.1 patch is released, we no longer need to have 3.4.0 on the download page. </p>
<p>Once a release branch is no longer supported, we can also remove the last release in that line. For example once <code>release-3.4</code> branch is EOL, releases 3.4.1 (or whatever the latest patch was) can be removed from downloads. </p>
</div>
<hr>
<div class="container">
<footer id="main-footer">
<p>
Copyright &copy; <span id="copyright-year">2015</span> <a href="http://apache.org">The Apache Software Foundation</a>,
Licensed under the Apache License, Version 2.0<br>
Apache and the Apache feather logo are trademarks of The Apache Software Foundation. | <a href="/privacy.html">Privacy Policy</a><br>
<a class="footer-link-img" href="http://apache.org"><img src="/images/asf_logo.svg" alt="The Apache Software Foundation"></a>
</p>
</footer>
</div> <!-- /container -->
<!-- Placed at the end of the document so the pages load faster -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="/js/bootstrap.min.js"></script>
<script src="js/docs.js"></script>
<script>
$('#copyright-year').text((new Date()).getFullYear());
$('.btn-download').click(function(e){
ga('send', {
hitType: 'event',
eventCategory: 'Download Button',
eventAction: 'Button Click',
eventLabel: 'Page Header'
});
});
</script>
</body>
</html>