blob: 2d5b16f39a9a3e6fe77337833cc97cee8ff472bc [file] [log] [blame]
---
title: Contribute | Release guide
layout: default
---
<!-- Marketing messaging and featurettes
================================================== -->
<!-- Wrap the rest of the page in another container to center all the content. -->
<div class="container">
<!-- CONTRIBUTE -->
<div class="row mb-5 mt-5 pt-3">
<div class="col-2 sidenav-menu pt-3">
<div class="pb-3 text-uppercase"><strong>Contribute</strong></div>
<ul class="list-unstyled mb-3">
<li><a href="contribute.html">Get started contributing</a></li>
<li class="sidenav-menu-sub-title">Technical Docs</li>
<li>
<ul class="list-unstyled sidenav-menu-sub-list">
<li><a href="contribute-testing.html">Testing guide</a></li>
<li><a href="contribute-dependencies-guide.html">Dependencies guide</a></li>
</ul>
</li>
<li class="sidenav-menu-sub-title">Policies</li>
<li>
<ul class="list-unstyled sidenav-menu-sub-list">
<li><a href="contribute-pre-commit-test-policies.html">Pre-commit test policies</a></li>
<li><a href="contribute-post-commit-test-policies.html">Post-commit test policies</a></li>
</ul>
</li>
<li class="sidenav-menu-sub-title">Committers</li>
<li>
<ul class="list-unstyled sidenav-menu-sub-list">
<li><a href="contribute-become-a-committer.html">Become a committer</a></li>
<li><a href="contribute-committer-guide.html">Committer guide</a></li>
<li><a href="contribute-release-guide.html">Release guide</a></li>
</ul>
</li>
</ul>
</div>
<div class="col-8 pt-3 offset-4">
<h2 id="apache-unomi-release-guide">Apache Unomi Release Guide</h2>
<p>The Apache Unomi project periodically declares and publishes releases. A release is one or more packages of the project artifact(s) that are approved for general public distribution and use. They may come with various degrees of caveat regarding their perceived quality and potential for change, such as "alpha", "beta", "stable", etc.</p>
<p>The Unomi community treats releases with great importance. They are a public face of the project and most users interact with the project only through the releases. Releases are signed off by the entire Unomi community in a public vote.</p>
<p>Each release is executed by a <em>Release Manager</em>, who is selected among the Unomi committers. This document describes the process that the Release Manager follows to perform a release. Any changes to this process should be discussed and adopted on the <a href="community.html">dev@ mailing list</a>.</p>
<p>Please remember that publishing software has legal consequences. This guide complements the foundation-wide <a href="https://www.apache.org/dev/release.html" target="_blank">Product Release Policy</a> and <a href="https://www.apache.org/dev/release-distribution" target="_blank">Release Distribution Policy</a>.</p>
<h2 id="overview">Overview</h2>
<p><img src="assets/images/release-guide.png" alt="Apache Unomi release guide" title="Release Process" class="img-fluid" /></p>
<p>The release process consists of several steps:</p>
<ol>
<li>Decide to release</li>
<li>Prepare for the release</li>
<li>Build a release candidate</li>
<li>Vote on the release candidate</li>
<li>During vote process, run validation tests</li>
<li>If necessary, fix any issues and go back to step 3.</li>
<li>Finalize the release</li>
<li>Promote the release</li>
</ol>
<hr />
<h2 id="decide-to-release">Decide to release</h2>
<p>Deciding to release and selecting a Release Manager is the first step of the release process. This is a consensus-based decision of the entire community.</p>
<p>Anybody can propose a release on the dev@ mailing list, giving a solid argument and nominating a committer as the Release Manager (including themselves). There's no formal process, no vote requirements, and no timing requirements. Any objections should be resolved by consensus before starting the release.</p>
<p>In general, the community prefers to have a rotating set of 3-5 Release Managers. Keeping a small core set of managers allows enough people to build expertise in this area and improve processes over time, without Release Managers needing to re-learn the processes for each release. That said, if you are a committer interested in serving the community in this way, please reach out to the community on the dev@ mailing list.</p>
<p>Basically we will be following the procedure described <a href="https://www.apache.org/dev/publishing-maven-artifacts.html" target="_blank">here</a> with a few more steps and details before and after.</p>
<h3 id="checklist-to-proceed-to-the-next-step">Checklist to proceed to the next step</h3>
<ol>
<li>Community agrees to release</li>
<li>Community selects a Release Manager</li>
</ol>
<hr />
<h2 id="prepare-for-the-release">Prepare for the release</h2>
<h3 id="prepare-jira">Jira</h3>
<ol>
<li>Setup new version in JIRA project</li>
<li>Update all JIRAs, close the ones that are still not closed, review tickets that can be closed, postpone to another release tickets that are not managed now</li>
</ol>
<h3 id="prepare-git">Git</h3>
<ol>
<li>Clone and checkout the project using:
<pre class="alert alert-primary"><code>git clone https://gitbox.apache.org/repos/asf/unomi.git</code></pre>
in a separate directory, to make sure you don’t have any additional files in the build (such as allCountries.zip or other binary files that should not be there)</li>
</ol>
<h3 id="prepare-build">Build the project</h3>
<ol>
<li>Tests source, javadocs and signature generation using:
<pre class="alert alert-primary"><code>mvn clean install -P apache-release,integration-tests</code></pre>
</li>
<li>Make sure we generate all sub-projects using:
<pre class="alert alert-primary"><code>mvn clean install -DskipTests=true
-P integration-tests,performance-tests,rat,apache-release</code></pre>
</li>
<li>Check that there are no JARs or ZIP files in the source code, you can do this by looking at the generated RAT report here :
<pre class="alert alert-primary"><code>less target/unomi-root-1.4.0-SNAPSHOT.rat</code></pre>
</li>
<li>Check that the KEYS file only contains signatures with @apache.org addresses (if there are non @apache.org don’t remove them because they have
been used to sign older releases)
</li>
<li>Update the copyright notice years in the NOTICE file and anywhere else where it might be</li>
<li>If you get JavaDoc errors or other errors you must correct all of them before proceeding further</li>
<li>If you get a error while signing despite having the proper keys install that looks like this:
<pre class="alert alert-primary"><code>[INFO] --- maven-gpg-plugin:1.5:sign (default) @ unomi-root ---
gpg: 'echec de la signature : Inappropriate ioctl for device
gpg: signing failed: Inappropriate ioctl for device</code></pre>
you can either try to sign a file like this:
<pre class="alert alert-primary"><code>gpg -ab test.txt</code></pre>
this will ask for your password and remember it in the agent for a while, or if you want a more permanent solution: <a href="https://dan.cx/2016/11/gpg-inappropriate-ioctl-for-device-errors" target="_blank">https://dan.cx/2016/11/gpg-inappropriate-ioctl-for-device-errors</a>
</li>
</ol>
<h2 id="publish-the-release">Publish the release</h2>
<h3 id="publish-repository">Repository</h3>
<ol>
<li>Setup server passwords for publishing as document here:
<a href="https://www.apache.org/dev/publishing-maven-artifacts.html" target="_blank">https://www.apache.org/dev/publishing-maven-artifacts.html</a> and <a href="https://maven.apache.org/guides/mini/guide-encryption.html#How_to_encrypt_server_passwords" target="_blank">https://maven.apache.org/guides/mini/guide-encryption.html#How_to_encrypt_server_passwords</a>
</li>
<li>Check into the target directory and unzip the source release and compile it using:
<pre class="alert alert-primary"><code>cd target
unzip unomi-root-1.4.0-SNAPSHOT-source-release.zip
cd unomi-root-1.4.0-SNAPSHOT
mvn clean install</code></pre>
to check that the packaged source build properly
</li>
<li>Go back to the root project directory and run:
<pre class="alert alert-primary"><code>mvn release:prepare -DskipTests=true -DdryRun=true
-P apache-release,integration-tests,performance-tests</code></pre>
</li>
<li>Publish a snapshot to test the deployment passwords:
<pre class="alert alert-primary"><code>mvn deploy</code></pre>
</li>
<li>Delete the release.properties file
<pre class="alert alert-primary"><code>rm release.properties</code></pre>
</li>
<li>
<pre class="alert alert-primary"><code>mvn -P apache-release,integration-tests release:prepare</code></pre>
</li>
<li>
<pre class="alert alert-primary"><code>mvn -DskipITs=true -DskipTests=true -P integration-tests release:perform</code></pre>
</li>
<li>If something fails, make sure you first drop the staging repository created here: <a href="https://repository.apache.org/#stagingRepositories" target="_blank">https://repository.apache.org/#stagingRepositories</a>.<br>
If you need to relaunch the <code>release:perform</code> and don’t have a release.properties, create a <code>release.properties</code> file with the following contents:
<pre class="alert alert-primary"><code>scm.url=scm:git:https://gitbox.apache.org/repos/asf?p=unomi.git
scm.tag=unomi-root-1.4.0
and run mvn release:perform</code></pre>
</li>
<li>Make sure you uploaded your public PGP key using:
<pre class="alert alert-primary"><code>gpg --keyserver hkp://pgp.mit.edu --send-keys KEY_IDENTIFIER</code></pre>(get the identifier using gpg --list-secret-keys).<br>This will be used by the Apache Nexus Repository Manager to validate the JARs uploaded in the staging repository.
</li>
<li>Connect to <a href="https://repository.apache.org/#stagingRepositories" target="_blank">https://repository.apache
.org/#stagingRepositories</a> and look for the open staging repositories, you should have two (one for everything and the other for KAR/features) for releases &lt;= 1.2 and just one for versions &gt;= 1.3.0 (because of changes in the Karaf plugins). Close the repositories and given a meaningful comment when closing such as:<br>
<strong>Apache Unomi 1.4.0 Release</strong>
</li>
</ol>
<h3 id="publish-vote">Vote</h3>
<ol>
<li>Send out to the Unomi mailing list a mail to start the voting process, see <a href="#mail-1">[1]</a></li>
<li>Send out a vote summary in the same thread to the Unomi mailing list once the voting period has expired, see <a href="#mail-2">[2]</a></li>
<li>Upload the source and binary distributions to the Apache Dist repository before the PMC vote:
<pre class="alert alert-primary"><code>svn checkout https://dist.apache.org/repos/dist/dev/unomi unomi-dev</code></pre>
</li>
<li>
<pre class="alert alert-primary"><code>cd unomi-dev
mkdir 1.4.0</code></pre>
</li>
<li>
Copy all the Zip and Tarbars including SHA1/ASC (but do not copy the MD5 sum) files from:
<a href="https://repository.apache.org/content/repositories/orgapacheunomi-1014/org/apache/unomi/unomi/1.4.0/" target="_blank">https://repository.apache.org/content/repositories/orgapacheunomi-1014/org/apache/unomi/unomi/1.4.0/</a>
and
<a href="https://repository.apache.org/content/repositories/orgapacheunomi-1014/org/apache/unomi/unomi-root/1.4.0/" target="_blank">https://repository.apache.org/content/repositories/orgapacheunomi-1014/org/apache/unomi/unomi-root/1.4.0/</a>
</li>
<li>
Rename the source files to something shorter and consistent with previous releases:
<pre class="alert alert-primary"><code>
mv unomi-root-1.4.0-source-release.zip unomi-1.4.0-src.zip
mv unomi-root-1.4.0-source-release.zip.asc unomi-1.4.0-src.zip.asc
mv unomi-root-1.4.0-source-release.zip.md5 unomi-1.4.0-src.zip.md5
mv unomi-root-1.4.0-source-release.zip.sha1 unomi-1.4.0-src.zip.sha1
</code></pre>
</li>
<li>
<pre class="alert alert-primary"><code>cd ..
svn add 1.4.0</code></pre>
</li>
<li>
If needed, update the KEYS file (that is in the svn checkout <code>https://dist.apache.org/repos/dist/release/unomi</code>)
</li>
<li>
<pre class="alert alert-primary"><code>svn commit -m "Apache 1.4.0 Release (for PMC voting)"</code></pre>
</li>
<li>
If the vote is refused, you will need to restart the release process. Make sure you remove the staging repositories as well as the release tag. You will also need to reset the version in the project using:
<pre class="alert alert-primary"><code>mvn versions:set</code></pre>
</li>
<li>
Promote the staging repositories now that the release is approved
</li>
</ol>
<h2 id="finalize-release">Finalize the release</h2>
<ol>
<li>
Move the files uploaded to the unomi-dev repository to the unomi-release repository by doing the following:
<pre class="alert alert-primary"><code>svn mv https://dist.apache.org/repos/dist/dev/unomi/1.4.0
https://dist.apache.org/repos/dist/release/unomi/1.4.0
-m "Apache Unomi 1.4.0 Release"</code></pre>
</li>
<li>
Update Jenkins
</li>
<li>
In JIRA mark the version as released and add a release date
</li>
<li>
Connect to <a href="https://repository.apache.org/#stagingRepositories" target="_blank">https://repository.apache.org/#stagingRepositories</a> and look for the open staging repositories, you should have one. Select the staging repositoriy and click on <code>release</code>.
</li>
<li>Update the website to point to the new release on the download page by first copying the current release to the archive page. Make sure you change the links to use the archive.apache.org instead of the closer.lua script (see other archived versions for example). Then you can update the download page with the proper links to the new release (no direct links to <code>www.apache.org/dist</code>, make sure you use the closer.lua script). Be careful with links that contain & (ampersand) characters, they must be replaced with &amp; Finally on the home page update the news section to add the release.
</li>
</ol>
<h3 id="final-documentation">Documentation</h3>
<ol>
<li>Check the generated site by opening <code>target/staging/index.html</code> and check your changes and verify that there are no broken links
</li>
<li>WAIT FOR THE MIRRORS TO SYNC (at least 24 hours)</li>
<li>
Upload the site modification by using:
<pre class="alert alert-primary"><code>./generate-site-and-upload.sh APACHE_LDAP_USERNAME APACHE_LDAP_PASSWORD</code></pre>
</li>
</ol>
<h3 id="rollback">Rollback</h3>
<ol>
<li>Delete the tag:
<pre class="alert alert-primary"><code>git push --delete origin unomi-root-1.4.0
git tag --delete unomi-root-1.4.0</code></pre>
</li>
<li>Reset to the previous commit before the release preparation:
<pre class="alert alert-primary"><code>git reset --hard c65f9897ec5f31d9d22ad639738c7db9d109aa77
git push origin -f</code></pre>
</li>
</ol>
<h2 id="final">Announce</h2>
<ol>
<li>Send an announce to the project mailing list and the incubator mailing list to announce the new release using mail template <a href="#mail-3">[3]</a></li>
<li>If you were releasing from a branch, make sure you merge all the branch changes for the release back to the master.</li>
</ol>
<h3 id="social-media">Social media</h3>
<p>Tweet, post on Facebook, LinkedIn, and other platforms. Ask other contributors to do the same.</p>
<!--<p>Also, update <a target="_blank" href="https://en.wikipedia.org/wiki/Apache_Unomi">the Wikipedia article on Apache Unomi</a>.</p>-->
<h3 id="checklist-to-declare-the-process-completed">Checklist to declare the process completed</h3>
<ol>
<li>Release announced on the user@ mailing list.</li>
<li>Release recorded in reporter.apache.org.</li>
<li>Release announced on social media.</li>
<li>Completion declared on the dev@ mailing list.</li>
<!--<li>Update Wikipedia Apache Unomi article.</li>-->
</ol>
<h2 id="improve-the-process">Improve the process</h2>
<p>It is important that we improve the release processes over time. Once you’ve finished the release, please take a step back and look what areas of this process and be improved. Perhaps some part of the process can be simplified. Perhaps parts of this guide can be clarified.</p>
<p>If we have specific ideas, please start a discussion on the dev@ mailing list and/or propose a pull request to update this guide. Thanks!</p>
<hr />
<h2 id="mail-template">Mail templates</h2>
<h6 id="mail-1" class="pt-3">[1] Mail template for the Unomi PMC vote:</h6>
<pre class="alert alert-primary"><code>
Subject: [VOTE] Apache Unomi 1.4.0 release [TAKE2]
Body:
Hi all,
I submit Apache Unomi 1.4.0 release [TAKE2] to your vote.
The following corrections were done since TAKE 1:
NOTICE year (2016) has been updated to 2018
unexpected binaries inside zip file [1] : zip file has been completely removed
All artefacts are now signed in an apache email address
Staging Repository:
*https://repository.apache.org/content/repositories/orgapacheunomi-1021/
&lt;https://repository.apache.org/content/repositories/orgapacheunomi-1021/&gt;*
You can find the sources here :
*https://repository.apache.org/content/repositories/orgapacheunomi-1021/org/apache/
unomi/unomi-root/1.4.0/unomi-root-1.4.0-source-release.zip
&lt;https://repository.apache.org/content/repositories/orgapacheunomi-1021/org/apache/
unomi/unomi-root/1.4.0/unomi-root-1.4.0-source-release.zip&gt;*
Convenience binaries are also available here:
*https://repository.apache.org/content/repositories/orgapacheunomi-1021/org/apache/
unomi/unomi/1.4.0/
&lt;https://repository.apache.org/content/repositories/orgapacheunomi-1021/org/apache/
unomi/unomi/1.4.0/&gt;*
Git tag:
unomi-root-1.4.0
Release Notes:
https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12319220&
version=12341610
Please vote to approve this release:
[ ] +1 Approve the release
[ ] -1 Don't approve the release (please provide specific comments)
This vote will be open for at least 72 hours, or until the necessary number
of binding votes (3 +1) is reached.
Please let me know if you have any questions.
Thanks,
Regards
</code></pre>
<h6 id="mail-2" class="pt-3">[2] Mail template for the results of the Unomi PMC vote:</h6>
<pre class="alert alert-primary"><code>
Subject: [RESULT][VOTE] Apache Unomi 1.4.0 release [TAKE2]
Body:
Hi,
Thank you for your votes.
Here's the summary :
3 binding votes +1:
John Doe 1
John Doe 2
John Doe 3
2 non-binding vote +1:
John Doe 4
John Doe 5
No 0 or -1.
The proposal to release Unomi 1.4.0 is approved by the team.
Thanks,
John Doe 1
</code></pre>
<h6 id="mail-3" class="pt-3">[3] Announce mailing list template:</h6>
<pre class="alert alert-primary"><code>
Subject : [ANNOUNCE] Apache Unomi 1.4.0 Release
Body:
The Apache Unomi team would like to announce the release of Apache
Unomi 1.4.0.
Release notes are here:
https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12319220&
version=12338361
Apache Unomi is a Java Open Source customer data platform, a Java server
designed to manage customers, leads and visitors’ data and help personalize customers’
experiences.
More details regarding Apache Unomi can be found here:
http://unomi.apache.org/
The release artifacts can be downloaded here:
https://dist.apache.org/repos/dist/release/incubator/unomi/1.4.0/
All JIRAs completed for this release are tagged with 'FixVersion =
1.4.0'; the JIRA release notes can be found here:
https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12319220&
version=12338361
Thanks!
The Apache Unomi Team
</code></pre>
</div>
</div>
</div>