blob: 4cae5025536ecb9f6eb9c111b640acdb0ce2c247 [file] [log] [blame]
<!DOCTYPE HTML>
<html lang="en-US">
<head>
<meta http-equiv="CACHE-CONTROL" content="NO-CACHE">
<meta charset="UTF-8">
<title>Mnemonic Release Workflow</title>
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="generator" content="Jekyll v2.4.0">
<link rel="stylesheet" href="/css/font-awesome.min.css">
<link rel="stylesheet" href="/css/screen.css">
<link rel="icon" type="image/x-icon" href="/favicon.ico">
<script src="/js/jquery-3.2.1.min.js"></script>
<!--[if lt IE 9]>
<script src="/js/html5shiv.min.js"></script>
<script src="/js/respond.min.js"></script>
<![endif]-->
<script src="/js/screen.js"></script>
<script type="text/javascript" src="/assets/javascripts/bundle.js" charset="utf-8"></script>
</head>
<body>
<header role="banner">
<nav class="mobile-nav show-on-mobiles">
<ul>
<li class="">
<a href="/">Home</a>
</li>
<li class="">
<a href="/docs/">Doc<span class="show-on-mobiles">s</span><span class="hide-on-mobiles">umentation</span></a>
</li>
</li>
<li class="">
<a href="/downloads/">Downloads</a>
</li>
<li class="">
<a href="/talks/">Talks</a>
</li>
<li class="">
<a href="/news/">News</a>
</li>
<li class="current">
<a href="/develop/">Develop</a>
</li>
<li class="">
<a href="/help/">Help</a>
</li>
</ul>
</nav>
<div class="grid">
<div class="unit one-third center-on-mobiles">
<h1>
<a href="/">
<span class="sr-only">Apache Mnemonic</span>
<img src="/img/mnemonic_logo_v2.png" width="289" alt="Mnemonic Logo" class="logo">
</a>
<a href="https://www.apache.org/events/current-event.html">
<img src="https://www.apache.org/events/current-event-234x60.png"/>
</a>
</h1>
</div>
<nav class="main-nav unit two-thirds hide-on-mobiles">
<ul>
<li class="">
<a href="/">Home</a>
</li>
<li class="">
<a href="/docs/">Doc<span class="show-on-mobiles">s</span><span class="hide-on-mobiles">umentation</span></a>
</li>
</li>
<li class="">
<a href="/downloads/">Downloads</a>
</li>
<li class="">
<a href="/talks/">Talks</a>
</li>
<li class="">
<a href="/news/">News</a>
</li>
<li class="current">
<a href="/develop/">Develop</a>
</li>
<li class="">
<a href="/help/">Help</a>
</li>
</ul>
</nav>
</div>
<!-- Return to Top -->
<a href="#top" id="return-to-top"><i class="fa fa-chevron-up"></i></a>
</header>
<section class="standalone">
<div class="grid">
<div class="unit whole">
<article>
<h1>Mnemonic Release Workflow</h1>
<p>To release a new version of Mnemonic, please refer to following steps.</p>
<ul>
<li>
<p>1.Get familiar with Apache <a href="https://infra.apache.org/release-publishing.html" target="_blank">releasing process</a></p>
</li>
<li>
<p>2.Verify the whole project.</p>
</li>
<li>
<p>3.Vote on preparing a release candidate.</p>
</li>
<li>
<p>4.(One time setup) Generate a <a href="https://infra.apache.org/openpgp.html#generate-key" target="_blank">OpenPGP key</a> if the release manager has not yet got one.</p>
</li>
<li>
<p>5.(One time setup) Configure the deployment repositories of Maven and copy the following snippet to settings.xml under &lt;home folder&gt;/.m2/</p>
<p><code class="xml">
&lt;settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 https://maven.apache.org/xsd/settings-1.0.0.xsd"&gt;
&lt;profiles&gt;
&lt;profile&gt;
&lt;id&gt;apache-release&lt;/id&gt;
&lt;properties&gt;
&lt;altSnapshotDeploymentRepository&gt;snapshots::default::file:///${env.HOME}/ws/maven-repository/snapshots&lt;/altSnapshotDeploymentRepository&gt;
&lt;altReleaseDeploymentRepository&gt;releases::default::file:///${env.HOME}/ws/maven-repository/releases&lt;/altReleaseDeploymentRepository&gt;
&lt;/properties&gt;
&lt;/profile&gt;
&lt;/profiles&gt;
&lt;/settings&gt;
</code></p>
</li>
<li>
<p>6.Make sure the OpenJDK has been deployed in release machine.</p>
</li>
<li>
<p>7.Configure the signing key in git toolchain (see example below).</p>
<p><code>
$ git config --global user.signingkey &lt;your gpg key id&gt;
</code></p>
</li>
<li>
<p>8.Use release.sh script to prepare a release candidate (see example below).</p>
<p><code>
$ tools/release.sh candidate 0.14.0 rc1 no
</code></p>
</li>
<li>
<p>9.Make sure the tickets belong to current release that got marked in the field of fixed version.</p>
</li>
<li>
<p>11.Collect the change log of current version from <a href="https://issues.apache.org/jira/projects/MNEMONIC/versions/">Apache JIRA</a></p>
</li>
<li>
<p>12.Check in the generated release candidate artifacts to Apache stage repository, add to change log file, and update the key file with new generated key if not included.</p>
</li>
<li>
<p>13.Vote on the release candidate.</p>
</li>
<li>
<p>14.Check the latest candidate to Apache release repository as formal new version release.</p>
</li>
<li>
<p>15.Perform formal release in git (see example below).</p>
<p><code>
$ tools/release.sh bump 1.14.0 rc1 0.15.0
</code></p>
</li>
<li>
<p>16.Announce the new release version with the link of release repository.</p>
</li>
<li>
<p>17.Update the download page in project website.</p>
</li>
</ul>
</article>
</div>
<div class="clear"></div>
</div>
</section>
<footer role="contentinfo">
<p><div align="center">Apache Mnemonic, Mnemonic, Apache, and the Mnemonic logo are trademarks of The Apache Software Foundation.</div>
<div align="center"> Copyright &copy;&nbsp;2021 <a href="https://www.apache.org/">The Apache Software Foundation</a></div></p>
</footer>
<script>
var anchorForId = function (id) {
var anchor = document.createElement("a");
anchor.className = "header-link";
anchor.href = "#" + id;
anchor.innerHTML = "<span class=\"sr-only\">Permalink</span><i class=\"fa fa-link\"></i>";
anchor.title = "Permalink";
return anchor;
};
var linkifyAnchors = function (level, containingElement) {
var headers = containingElement.getElementsByTagName("h" + level);
for (var h = 0; h < headers.length; h++) {
var header = headers[h];
if (typeof header.id !== "undefined" && header.id !== "") {
header.appendChild(anchorForId(header.id));
}
}
};
document.onreadystatechange = function () {
if (this.readyState === "complete") {
var contentBlock = document.getElementsByClassName("docs")[0] || document.getElementsByClassName("news")[0];
if (!contentBlock) {
return;
}
for (var level = 1; level <= 6; level++) {
linkifyAnchors(level, contentBlock);
}
}
};
</script>
</body>
</html>