blob: 9d29171dae53b048bfc04227e00ea69615e3097e [file] [log] [blame]
<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>How to Prepare a Release · Apache SINGA</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;!--- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the &quot;License&quot;); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --&gt;"/><meta name="docsearch:version" content="3.0.0.rc1"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="How to Prepare a Release · Apache SINGA"/><meta property="og:type" content="website"/><meta property="og:url" content="https://feynmandna.github.io/"/><meta property="og:description" content="&lt;!--- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the &quot;License&quot;); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --&gt;"/><meta property="og:image" content="https://feynmandna.github.io/img/singa_twitter_banner.jpeg"/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://feynmandna.github.io/img/singa_twitter_banner.jpeg"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link rel="alternate" type="application/atom+xml" href="https://feynmandna.github.io/blog/atom.xml" title="Apache SINGA Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://feynmandna.github.io/blog/feed.xml" title="Apache SINGA Blog RSS Feed"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script src="https://unpkg.com/vanilla-back-to-top@7.1.14/dist/vanilla-back-to-top.min.js"></script><script>
document.addEventListener('DOMContentLoaded', function() {
addBackToTop(
{"zIndex":100}
)
});
</script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/singa.png" alt="Apache SINGA"/></a><a href="/versions"><h3>3.0.0.rc1</h3></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-internal"><li class="siteNavGroupActive"><a href="/docs/installation" target="_self">Docs</a></li><li class=""><a href="/docs/source-repository" target="_self">Community</a></li><li class=""><a href="/blog/" target="_self">News</a></li><li class=""><a href="https://apache-singa.readthedocs.io/en/latest/" target="_self">API</a></li><li class=""><a target="_self"></a></li><li class=""><a href="https://github.com/apache/singa-doc" target="_self">GitHub</a></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line1"></div><div class="line2"></div><div class="line3"></div></div></div><h2><i></i><span>Development</span></h2><div class="tocToggler" id="tocToggler"><i class="icon-toc"></i></div></div><div class="navGroups"><div class="navGroup"><h3 class="navGroupCategoryTitle">Getting Started</h3><ul class=""><li class="navListItem"><a class="navItem" href="/docs/installation">Installation</a></li><li class="navListItem"><a class="navItem" href="/docs/software-stack">Software Stack</a></li><li class="navListItem"><a class="navItem" href="/docs/examples">Examples</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle">Guides</h3><ul class=""><li class="navListItem"><a class="navItem" href="/docs/device">Device</a></li><li class="navListItem"><a class="navItem" href="/docs/tensor">Tensor</a></li><li class="navListItem"><a class="navItem" href="/docs/autograd">Autograd</a></li><li class="navListItem"><a class="navItem" href="/docs/graph">Computational Graph</a></li><li class="navListItem"><a class="navItem" href="/docs/dist-train">Distributed Training</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle">Development</h3><ul class=""><li class="navListItem"><a class="navItem" href="/docs/download-singa">Download SINGA</a></li><li class="navListItem"><a class="navItem" href="/docs/build">Build SINGA from Source</a></li><li class="navListItem"><a class="navItem" href="/docs/contribute-code">How to Contribute Code</a></li><li class="navListItem"><a class="navItem" href="/docs/contribute-docs">How to Contribute to Documentation</a></li><li class="navListItem navListItemActive"><a class="navItem" href="/docs/how-to-release">How to Prepare a Release</a></li><li class="navListItem"><a class="navItem" href="/docs/git-workflow">Git Workflow</a></li></ul></div></div></section></div><script>
var coll = document.getElementsByClassName('collapsible');
var checkActiveCategory = true;
for (var i = 0; i < coll.length; i++) {
var links = coll[i].nextElementSibling.getElementsByTagName('*');
if (checkActiveCategory){
for (var j = 0; j < links.length; j++) {
if (links[j].classList.contains('navListItemActive')){
coll[i].nextElementSibling.classList.toggle('hide');
coll[i].childNodes[1].classList.toggle('rotate');
checkActiveCategory = false;
break;
}
}
}
coll[i].addEventListener('click', function() {
var arrow = this.childNodes[1];
arrow.classList.toggle('rotate');
var content = this.nextElementSibling;
content.classList.toggle('hide');
});
}
document.addEventListener('DOMContentLoaded', function() {
createToggler('#navToggler', '#docsNav', 'docsSliderActive');
createToggler('#tocToggler', 'body', 'tocActive');
var headings = document.querySelector('.toc-headings');
headings && headings.addEventListener('click', function(event) {
var el = event.target;
while(el !== headings){
if (el.tagName === 'A') {
document.body.classList.remove('tocActive');
break;
} else{
el = el.parentNode;
}
}
}, false);
function createToggler(togglerSelector, targetSelector, className) {
var toggler = document.querySelector(togglerSelector);
var target = document.querySelector(targetSelector);
if (!toggler) {
return;
}
toggler.onclick = function(event) {
event.preventDefault();
target.classList.toggle(className);
};
}
});
</script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://github.com/apache/singa-doc/blob/master/docs/how-to-release.md" target="_blank" rel="noreferrer noopener">Edit</a><h1 id="__docusaurus" class="postHeaderTitle">How to Prepare a Release</h1></header><article><div><span><!--- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -->
<p>This is a guide for the
<a href="http://www.apache.org/dev/release-publishing.html">release preparing process</a>
in SINGA.</p>
<ol>
<li><p>Select a release manager. The release manager (RM) is the coordinator for the
release process. It is the RM's signature (.asc) that is uploaded together
with the release. The RM generates KEY (RSA 4096-bit) and uploads it to a
public key server. The RM needs to get his key endorsed (signed) by other
Apache user, to be connected to the web of trust. He should first ask the
mentor to help signing his key.
<a href="http://www.apache.org/dev/release-signing.html">How to generate the key</a>?</p></li>
<li><p>Check license. <a href="https://www.apache.org/legal/src-headers.html#faq-docs">FAQ</a>;
<a href="https://issues.apache.org/jira/projects/SINGA/issues/SINGA-447">SINGA Issue</a></p>
<ul>
<li>The codebase does not include third-party code which is not compatible to
APL;</li>
<li>The dependencies are compatible with APL. GNU-like licenses are NOT
compatible;</li>
<li>All source files written by us MUST include the Apache license header:
<a href="http://www.apache.org/legal/src-headers.html">http://www.apache.org/legal/src-headers.html</a>. There's a script in there
which helps propagating the header to all files.</li>
<li>Update the LICENSE file. If we include any third party code in the release
package which is not APL, must state it at the end of the NOTICE file.</li>
</ul></li>
<li><p>Bump the version. Check code and documentation</p>
<ul>
<li>The build process is error-free.</li>
<li>Unit tests are included (as much as possible)</li>
<li>Conda packages run without errors.</li>
<li>The online documentation on the Apache website is up to date.</li>
</ul></li>
<li><p>Prepare the RELEASE_NOTES file. Include the following items, Introduction,
Features, Bugs (link to JIRA or Github PR), Changes, Dependency list,
Incompatibility issues. Follow this
<a href="http://commons.apache.org/proper/commons-digester/commons-digester-3.0/RELEASE-NOTES.txt">example</a>.</p></li>
<li><p>Prepare DISCLAIMER file. Modify from the
<a href="http://incubator.apache.org/guides/branding.html#disclaimers">template</a></p></li>
<li><p>Package the release candidate. The release should be packaged into :
apache-singa-VERSION.tar.gz. The release should not include any binary files
including git files. Upload the release to for
<a href="https://dist.apache.org/repos/dist/dev/VERSION/">stage</a>. The tar file,
signature, KEY and SHA256 checksum file should be included. MD5 is no longer
used. Policy is
<a href="http://www.apache.org/dev/release-distribution#sigs-and-sums">here</a></p>
<ul>
<li>apache-singa-VERSION.tar.gz</li>
<li>KEY</li>
<li>XX.acs</li>
<li>.SHA256</li>
</ul></li>
<li><p>Call for vote by sending an email</p>
<pre><code class="hljs">To: dev@singa.apache.org
Subject: [VOTE] <span class="hljs-keyword">Release</span> apache-singa-X.Y.Z (<span class="hljs-keyword">release</span> candidate N)
Hi <span class="hljs-keyword">all</span>,
I have created a <span class="hljs-keyword">build</span> <span class="hljs-keyword">for</span> Apache SINGA X.Y.Z, <span class="hljs-keyword">release</span> candidate N.
The artifacts <span class="hljs-keyword">to</span> be voted <span class="hljs-keyword">on</span> <span class="hljs-keyword">are</span> located here: xxxx
The hashes <span class="hljs-keyword">of</span> the artifacts <span class="hljs-keyword">are</span> <span class="hljs-keyword">as</span> <span class="hljs-keyword">follows</span>: xxx
<span class="hljs-keyword">Release</span> artifacts <span class="hljs-keyword">are</span> signed <span class="hljs-keyword">with</span> the <span class="hljs-keyword">following</span> <span class="hljs-keyword">key</span>: xxx
Please vote <span class="hljs-keyword">on</span> releasing this package. The vote <span class="hljs-keyword">is</span> <span class="hljs-keyword">open</span> <span class="hljs-keyword">for</span> <span class="hljs-keyword">at</span> <span class="hljs-keyword">least</span>
<span class="hljs-number">72</span> <span class="hljs-keyword">hours</span> <span class="hljs-keyword">and</span> passes <span class="hljs-keyword">if</span> a majority <span class="hljs-keyword">of</span> <span class="hljs-keyword">at</span> <span class="hljs-keyword">least</span> three +<span class="hljs-number">1</span> votes <span class="hljs-keyword">are</span> cast.
[ ] +<span class="hljs-number">1</span> <span class="hljs-keyword">Release</span> this <span class="hljs-keyword">package</span> <span class="hljs-keyword">as</span> Apache SINGA X.Y.Z
[ ] <span class="hljs-number">0</span> I don<span class="hljs-string">'t feel strongly about it, but I'</span>m okay <span class="hljs-keyword">with</span> the <span class="hljs-keyword">release</span>
[ ] <span class="hljs-number">-1</span> <span class="hljs-keyword">Do</span> <span class="hljs-keyword">not</span> <span class="hljs-keyword">release</span> this <span class="hljs-keyword">package</span> because...
Here <span class="hljs-keyword">is</span> my vote:
+<span class="hljs-number">1</span>
</code></pre></li>
<li><p>Wait at least 48 hours for test responses. Any PMC, committer or contributor
can test features for releasing, and feedback. Everyone should check these
before vote +1. If the vote passes, then send the result email. Otherwise,
repeat from the beginning.</p>
<pre><code class="hljs"><span class="hljs-attribute">To</span>: dev@singa.apache.org
<span class="hljs-attribute">Subject</span>: [RESULT] [VOTE] Release apache-singa-X.Y.Z (release candidate N)
<span class="routeros">Thanks <span class="hljs-keyword">to</span> everyone who has voted <span class="hljs-keyword">and</span> given their comments.
The tally is as follows.
N binding +1s:
&lt;names&gt;
N non-binding +1s:
&lt;names&gt;
<span class="hljs-literal">No</span> 0s <span class="hljs-keyword">or</span> -1s.
I am delighted <span class="hljs-keyword">to</span> announce that the<span class="hljs-built_in"> proposal </span><span class="hljs-keyword">to</span> release
Apache SINGA X.Y.Z has passed.
</span></code></pre></li>
<li><p>Upload the package for
<a href="http://www.apache.org/dev/release-publishing.html#distribution">distribution</a>
to <a href="https://dist.apache.org/repos/dist/release/VERSION/">https://dist.apache.org/repos/dist/release/VERSION/</a>.</p></li>
<li><p>Update the Download page of SINGA website. The tar.gz file MUST be
downloaded from mirror, using closer.cgi script; other artifacts MUST be
downloaded from main Apache site. More details
<a href="http://www.apache.org/dev/release-download-pages.html">here</a>. Some feedback
we got during the previous releases: &quot;Download pages must only link to
formal releases, so must not include links to GitHub.&quot;, &quot;Links to KEYS, sigs
and hashes must not use dist.apache.org; instead use
<a href="https://www.apache.org/dist/singa/">https://www.apache.org/dist/singa/</a>...;&quot;, &quot;Also you only need one KEYS link,
and there should be a description of how to use KEYS + sig or hash to verify
the downloads.&quot;</p></li>
<li><p>Remove the RC tag and compile the conda packages.</p></li>
<li><p>Publish the release information.</p>
<pre><code class="hljs"><span class="hljs-attribute">To</span>: announce<span class="hljs-variable">@apache</span>.org, dev<span class="hljs-variable">@singa</span>.apache.org
<span class="hljs-attribute">Subject</span>: [ANNOUNCE] Apache SINGA X.Y.Z released
We are pleased to announce that SINGA X.Y.Z is released.
SINGA is a general distributed deep learning platform
for training big deep learning models over large datasets.
The release is available <span class="hljs-attribute">at</span>: <span class="hljs-attribute">http</span>:<span class="hljs-comment">//singa.apache.org/downloads.html</span>
The main features of this release include XXX
We look forward to hearing your feedback, suggestions,
and contributions to the project.
On behalf of the SINGA team, {SINGA Team Member Name}
</code></pre></li>
</ol>
</span></div></article></div><div class="docLastUpdate"><em>Last updated on 4/2/2020</em></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/contribute-docs"><span class="arrow-prev"></span><span>How to Contribute to Documentation</span></a><a class="docs-next button" href="/docs/git-workflow"><span>Git Workflow</span><span class="arrow-next"></span></a></div></div></div><nav class="onPageNav"></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/singa-logo-square.png" alt="Apache SINGA" width="66" height="58"/></a><div><h5>Docs</h5><a href="/docs/installation">Getting Started</a><a href="/docs/device">Guides</a><a href="/en/#">API Reference (coming soon)</a><a href="/docs/model-zoo-cnn-cifar10">Model Zoo</a><a href="/docs/download-singa">Development</a></div><div><h5>Community</h5><a href="/en/users.html">User Showcase</a><a href="/docs/history-singa">SINGA History</a><a href="/docs/team-list">SINGA Team</a><a href="/news">SINGA News</a><a href="https://github.com/apache/singa-doc">GitHub</a><div class="social"><a class="github-button" href="https://github.com/apache/singa-doc" data-count-href="/apache/singa/stargazers" data-show-count="true" data-count-aria-label="# stargazers on GitHub" aria-label="Star this project on GitHub">apache/singa-doc</a></div><div class="social"><a href="https://twitter.com/ApacheSINGA" class="twitter-follow-button">Follow @ApacheSINGA</a></div></div><div><h5>Apache Software Foundation</h5><a href="https://apache.org/" target="_blank" rel="noreferrer noopener">Foundation</a><a href="http://www.apache.org/licenses/" target="_blank" rel="noreferrer noopener">License</a><a href="http://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noreferrer noopener">Sponsorship</a><a href="http://www.apache.org/foundation/thanks.html" target="_blank" rel="noreferrer noopener">Thanks</a><a href="http://www.apache.org/events/current-event" target="_blank" rel="noreferrer noopener">Events</a><a href="http://www.apache.org/security/" target="_blank" rel="noreferrer noopener">Security</a></div></section><div style="width:100%;text-align:center"><a href="https://apache.org/" target="_blank" rel="noreferrer noopener" class="ApacheOpenSource"><img src="/img/asf_logo_wide.svg" alt="Apache Open Source"/></a><section class="copyright" style="max-width:60%;margin:0 auto">Copyright © 2020
The Apache Software Foundation. All rights reserved.
Apache SINGA, Apache, the Apache feather logo, and
the Apache SINGA project logos are trademarks of The
Apache Software Foundation. All other marks mentioned
may be trademarks or registered trademarks of their
respective owners.</section></div></footer></div><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter-wjs'));</script></body></html>