blob: 987297db1ffcf384ea1488db2a05e255168df61e [file] [log] [blame]
<!DOCTYPE html>
<html class="no-js" lang="en">
<head>
<title>Apache NiFi Release Guidelines</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="shortcut icon" href="/assets/images/nifi16.ico"/>
<link rel="stylesheet" href="/stylesheets/app.min.27f785d2dfa83c24896261ad5106f3c19ee004c4d04b8a1c4b22e03a3a9fcb2a.css">
<link rel="stylesheet" href="/assets/stylesheets/font-awesome.min.css">
<script src="/assets/js/modernizr.js"></script>
<script src="/assets/js/webfontloader.js"></script>
<script>
var _paq = window._paq = window._paq || [];
_paq.push(['disableCookies']);
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
(function() {
var baseUri = "//matomo.privacy.apache.org/";
_paq.push(['setTrackerUrl', baseUri + 'matomo.php']);
_paq.push(['setSiteId', '28']);
var trackerElement = document.createElement('script');
var firstScriptElement = document.getElementsByTagName('script')[0];
trackerElement.async = true;
trackerElement.src = baseUri + 'matomo.js';
var firstScriptElement = document.getElementsByTagName('script')[0];
if (window.location.host === 'nifi.apache.org') {
firstScriptElement.parentNode.insertBefore(trackerElement, firstScriptElement);
}
})();
</script>
</head>
<body><div class="sticky contain-to-grid">
<nav class="top-bar" data-topbar role="navigation">
<ul class="title-area">
<li class="name">
<h1>
<a href="index.html">
<img id="logo-top-bar" src="/assets/images/nifi-drop-white.svg" alt="Apache NiFi"/>
</a>
</h1>
</li>
<li class="toggle-topbar menu-icon"><a href="#"><span></span></a></li>
</ul>
<section class="top-bar-section">
<ul class="right">
<li class="has-dropdown">
<a href="#">Documentation</a>
<ul class="dropdown">
<li><a href="project-documentation.html">Project Documentation 2.0.0-M1</a></li>
<li><a href="docs.html">Project Documentation 1.24.0</a></li>
<li><a href="security.html">Security Reporting</a></li>
<li><a href="faq.html">FAQ</a></li>
<li><a href="videos.html">Videos</a></li>
<li><a href="https://cwiki.apache.org/confluence/display/NIFI"><i class="fa fa-external-link external-link"></i>Wiki</a></li>
</ul>
</li>
<li class="has-dropdown">
<a href="#">Downloads</a>
<ul class="dropdown">
<li><a href="download.html">Download NiFi</a></li>
<li><a href="https://cwiki.apache.org/confluence/display/NIFI/Release+Notes"><i class="fa fa-external-link external-link"></i>Release Notes</a></li>
</ul>
</li>
<li class="has-dropdown">
<a href="#">Community</a>
<ul class="dropdown">
<li><a href="https://cwiki.apache.org/confluence/display/NIFI/Contributor+Guide"><i class="fa fa-external-link external-link"></i>Contributor Guide</a></li>
<li><a href="mailing_lists.html">Mailing Lists &amp; Chat</a></li>
<li><a href="people.html">People</a></li>
<li><a href="powered-by-nifi.html">Powered by NiFi</a></li>
</ul>
</li>
<li class="has-dropdown">
<a href="#">Development</a>
<ul class="dropdown">
<li><a href="quickstart.html">Quickstart</a></li>
<li><a href="developer-guide.html">Developer Guide</a></li>
<li><a href="gpg.html">GPG Guide</a></li>
<li><a href="release-guide.html">Release Guide</a></li>
<li><a href="nifi-maven-release-guide.html">NAR Maven Plugin Release Guide</a></li>
<li><a href="fds-release-guide.html">FDS Release Guide</a></li>
<li><a href="licensing-guide.html">Licensing Guide</a></li>
<li><a href="https://gitbox.apache.org/repos/asf/nifi.git"><i class="fa fa-external-link external-link"></i>Source</a></li>
<li><a href="https://issues.apache.org/jira/browse/NIFI"><i class="fa fa-external-link external-link"></i>Issues</a></li>
<li><a href="https://github.com/apache/nifi"><i class="fa fa-external-link external-link"></i>GitHub</a></li>
</ul>
</li>
<li class="has-dropdown">
<a href="#">Subprojects</a>
<ul class="dropdown">
<li><a href="minifi/index.html">MiNiFi</a></li>
<li><a href="registry.html">Registry</a></li>
<li><a href="fds.html">FDS</a></li>
</ul>
</li>
<li class="has-dropdown">
<a href="#">Apache</a>
<ul class="dropdown">
<li><a href="https://www.apache.org"><i class="fa fa-external-link external-link"></i>Apache Software Foundation</a></li>
<li><a href="https://www.apache.org/licenses/"><i class="fa fa-external-link external-link"></i>License</a></li>
<li><a href="https://privacy.apache.org/policies/privacy-policy-public.html"><i class="fa fa-external-link external-link"></i>Privacy Policy</a></li>
<li><a href="https://www.apache.org/foundation/sponsorship.html"><i class="fa fa-external-link external-link"></i>Sponsorship</a></li>
<li><a href="https://www.apache.org/security/"><i class="fa fa-external-link external-link"></i>Security</a></li>
<li><a href="https://www.apache.org/foundation/thanks.html"><i class="fa fa-external-link external-link"></i>Thanks</a></li>
</ul>
</li>
</ul>
</section>
</nav>
</div>
<div class="row">
<div class="large-12 columns">
<div class="large-space"></div>
<h1 id="apache-nifi-release-guidelines">Apache NiFi Release Guidelines</h1>
<p>This document describes the steps required to build and release an official version of the project.</p>
<h2 id="objective">Objective</h2>
<p>Produce an official Apache NiFi release from a current source branch.</p>
<h1 id="background-information">Background Information</h1>
<p>Following the release guide requires understanding several important terms and procedures.</p>
<h2 id="reference-documentation">Reference Documentation</h2>
<ul>
<li>Licensing
<ul>
<li><a href="https://apache.org/licenses/LICENSE-2.0">Apache License V2.0</a></li>
<li><a href="https://www.apache.org/legal/resolved.html">Apache Legal License/Resolved</a></li>
<li><a href="https://www.apache.org/dev/apply-license.html">Apache How-to Apply License</a></li>
</ul>
</li>
<li>Release Policy and Guidelines
<ul>
<li><a href="https://www.apache.org/licenses/exports/">Apache Export Classifications</a></li>
<li><a href="https://www.apache.org/dev/release.html">Apache Release Policy</a></li>
<li><a href="https://www.apache.org/dev/release-publishing">Apache Release Guide</a></li>
</ul>
</li>
<li>Environment Configuration and Release Process
<ul>
<li><a href="https://www.apache.org/dev/openpgp.html">Apache Cryptography with OpenPGP</a></li>
<li><a href="http://www.apache.org/dev/release-signing.html">Apache Signing Releases</a></li>
<li><a href="https://www.apache.org/dev/publishing-maven-artifacts.html">Apache Publishing Maven Releases</a></li>
</ul>
</li>
</ul>
<h2 id="glossary-of-terms">Glossary of Terms</h2>
<ul>
<li><strong>Release Manager</strong> (RM) - PMC Member acting as <a href="https://www.apache.org/dev/release-publishing.html#release_manager">Release Manager</a> for a particular version</li>
<li><strong>Release Candidate</strong> (RC) - Tagged iteration of the source branch proposed for a vote by the project community</li>
<li><strong>Community</strong> - <a href="https://www.apache.org/foundation/glossary.html#Community">Group of people</a> interested in the project, both users and maintainers</li>
<li><strong>PMC</strong> - <a href="https://www.apache.org/foundation/glossary.html#PMC">Project Management Committee</a> members who oversee the project</li>
<li><strong>Committer</strong> - <a href="https://www.apache.org/foundation/glossary.html#Committer">Committers</a> have the privilege to commit changes to the project repository</li>
</ul>
<h2 id="variable-references">Variable References</h2>
<p>The release guide references names and values that vary for each version. These values have been written as shell
variable references.</p>
<p>For example, when referencing a variable named <code>${NIFI_VERSION}</code> in a tag such as <code>nifi-${NIFI_VERSION}</code>, the
variable reference should be replaced with the current value for the Release Candidate build. When preparing a release
of Apache NiFi <code>0.7.0</code>, the tag would be rendered as <code>nifi-0.7.0</code>.</p>
<p>The example values reflect the release details for Apache NiFi 0.7.0 Release Candidate 2.</p>
<table>
<thead>
<tr>
<th>Variable</th>
<th>Example Value</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>${BRANCH}</td>
<td>main</td>
<td>Source development branch on which the release is based</td>
</tr>
<tr>
<td>${NIFI_VERSION}</td>
<td>0.7.0</td>
<td>Version number targeted for release</td>
</tr>
<tr>
<td>${NEXT_VERSION}</td>
<td>0.8.0-SNAPSHOT</td>
<td>Future version number for development after the release</td>
</tr>
<tr>
<td>${JIRA_TICKET}</td>
<td>NIFI-2112</td>
<td>Jira issue number for tracking release tasks</td>
</tr>
<tr>
<td>${RC}</td>
<td>2</td>
<td>Release Candidate number starting with 1 for the first build</td>
</tr>
<tr>
<td>${RC_TAG_COMMIT_ID}</td>
<td></td>
<td>Hexadecimal Git commit hash of the Release Candidate tag</td>
</tr>
<tr>
<td>${STAGING_REPO_ID}</td>
<td>orgapachenifi-1000</td>
<td>Nexus Repository identifier for staged Maven artifacts</td>
</tr>
<tr>
<td>${RM_USERID}</td>
<td>username</td>
<td>Apache account identifier of the Release Manager</td>
</tr>
<tr>
<td>${RELEASE_TAG}</td>
<td>rel/nifi-0.7.0</td>
<td>Git repository tag associated with the source to be released</td>
</tr>
<tr>
<td>${VOTE_THREAD_URL}</td>
<td></td>
<td>URL for the Apache Mailing List archive of the release vote thread</td>
</tr>
</tbody>
</table>
<h1 id="release-overview">Release Overview</h1>
<p>The release process includes steps performed by the Release Manager as well as the project community.</p>
<h2 id="process-summary">Process Summary</h2>
<ol>
<li>Community member suggests a release timeline and initiates a discussion email thread</li>
<li>PMC member volunteers to act as the Release Manager for the version</li>
<li>RM validates the source branch and stages the code, Maven artifacts, and distributable files for an RC build</li>
<li>RM sends a vote email thread for the RC build</li>
<li>PMC members and community contributors vote to approve or reject the RC build
<ol>
<li>RM cancels a vote thread for a rejected RC build</li>
<li>RM identifies issues for resolution and prepares a new RC build</li>
</ol>
</li>
<li>RM publishes build artifacts for an approved RC build</li>
</ol>
<h1 id="release-candidate-preparation">Release Candidate Preparation</h1>
<p>The Release Manager is responsible for creating, signing, and staging artifacts for a Release Candidate build.</p>
<h2 id="configure-environment">Configure Environment</h2>
<ul>
<li>
<p>Follow the steps outlined in the <a href="https://nifi.apache.org/quickstart.html">Quickstart Guide</a> to prepare the development system</p>
</li>
<li>
<p>Configure Maven <code>settings.xml</code> with a profile named <code>signing</code> profile and a <code>server</code> entry for
<code>repository.apache.org</code> as shown. <a href="http://blog.sonatype.com/2009/10/maven-tips-and-tricks-encrypting-passwords">Sonatype</a> provides instructions for encrypting Maven
passwords</p>
</li>
</ul>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-xml" data-lang="xml"><span style="color:#008000;font-weight:bold">&lt;profile&gt;</span>
<span style="color:#008000;font-weight:bold">&lt;id&gt;</span>signing<span style="color:#008000;font-weight:bold">&lt;/id&gt;</span>
<span style="color:#008000;font-weight:bold">&lt;properties&gt;</span>
<span style="color:#008000;font-weight:bold">&lt;mavenExecutorId&gt;</span>forked-path<span style="color:#008000;font-weight:bold">&lt;/mavenExecutorId&gt;</span>
<span style="color:#008000;font-weight:bold">&lt;gpg.keyname&gt;</span>${RM_USERID}@apache.org<span style="color:#008000;font-weight:bold">&lt;/gpg.keyname&gt;</span>
<span style="color:#008000;font-weight:bold">&lt;gpg.passphrase&gt;</span>REPLACE-WITH-ENCRYPTED-GPG-PASSPHRASE<span style="color:#008000;font-weight:bold">&lt;/gpg.passphrase&gt;</span>
<span style="color:#008000;font-weight:bold">&lt;/properties&gt;</span>
<span style="color:#008000;font-weight:bold">&lt;/profile&gt;</span>
<span style="color:#008000;font-weight:bold">&lt;servers&gt;</span>
<span style="color:#008000;font-weight:bold">&lt;server&gt;</span>
<span style="color:#008000;font-weight:bold">&lt;id&gt;</span>repository.apache.org<span style="color:#008000;font-weight:bold">&lt;/id&gt;</span>
<span style="color:#008000;font-weight:bold">&lt;username&gt;</span>${RM_USERID}<span style="color:#008000;font-weight:bold">&lt;/username&gt;</span>
<span style="color:#008000;font-weight:bold">&lt;password&gt;</span>REPLACE-WITH-ENCRYPTED-REPOSITORY-PASSWORD<span style="color:#008000;font-weight:bold">&lt;/password&gt;</span>
<span style="color:#008000;font-weight:bold">&lt;/server&gt;</span>
<span style="color:#008000;font-weight:bold">&lt;/servers&gt;</span>
</code></pre></div><ul>
<li>Confirm that the local Git workspace is configured with an <code>origin</code> remote pointing to a personal fork of the
project source, and an <code>upstream</code> remote pointing to the Apache Git Repository</li>
</ul>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash">git remote -v
upstream https://gitbox.apache.org/repos/asf/nifi.git <span style="color:#666">(</span>fetch<span style="color:#666">)</span>
upstream https://gitbox.apache.org/repos/asf/nifi.git <span style="color:#666">(</span>push<span style="color:#666">)</span>
origin https://github.com/<span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">RM_USERID</span><span style="color:#b68;font-weight:bold">}</span>/nifi.git <span style="color:#666">(</span>fetch<span style="color:#666">)</span>
origin https://github.com/<span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">RM_USERID</span><span style="color:#b68;font-weight:bold">}</span>/nifi.git <span style="color:#666">(</span>push<span style="color:#666">)</span>
</code></pre></div><h2 id="update-tracking">Update Tracking</h2>
<ul>
<li>
<p>Create a <a href="https://issues.apache.org/jira/browse/NIFI">Jira issue</a> for tracking the release process with the
<code>Fix Version</code> field set to <code>${NIFI_VERSION}</code>. The Jira issue number will be referenced as <code>${JIRA_TICKET}</code> in subsequent
steps</p>
</li>
<li>
<p>Create a new version under
<a href="https://issues.apache.org/jira/projects/NIFI?selectedItem=com.atlassian.jira.jira-projects-plugin:release-page&amp;status=unreleased">Jira Releases</a>
with the <code>Version name</code> set to the next minor release version number</p>
</li>
<li>
<p>Create a new version section in project <a href="https://cwiki.apache.org/confluence/display/NIFI/Release+Notes">Release Notes</a> highlighting notable features and fixes</p>
</li>
</ul>
<h2 id="build-artifacts">Build Artifacts</h2>
<ul>
<li>Create a new Release Candidate branch from the source development branch named with the Jira issue and RC number</li>
</ul>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash">git checkout -b <span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">JIRA_TICKET</span><span style="color:#b68;font-weight:bold">}</span>-RC<span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">RC</span><span style="color:#b68;font-weight:bold">}</span> <span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">BRANCH</span><span style="color:#b68;font-weight:bold">}</span>
</code></pre></div><ul>
<li>Run Maven build with <code>include-grpc</code> and <code>contrib-check</code> profiles</li>
</ul>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash">./mvnw -T 2C -Pinclude-grpc,contrib-check clean install
</code></pre></div><h2 id="stage-artifacts">Stage Artifacts</h2>
<ul>
<li>Set the <code>GPG_TTY</code> environment variable to allow <code>gpg</code> password prompts for artifact signing</li>
</ul>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash"><span style="color:#a2f">export</span> <span style="color:#b8860b">GPG_TTY</span><span style="color:#666">=</span><span style="color:#a2f;font-weight:bold">$(</span>tty<span style="color:#a2f;font-weight:bold">)</span>
</code></pre></div><ul>
<li>Run Maven release preparation with <code>signing</code> and <code>include-grpc</code> profiles using RC version numbers</li>
</ul>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash">./mvnw release:prepare -Psigning,include-grpc <span style="color:#b62;font-weight:bold">\
</span><span style="color:#b62;font-weight:bold"></span>-DscmCommentPrefix<span style="color:#666">=</span><span style="color:#b44">&#34;</span><span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">JIRA_TICKET</span><span style="color:#b68;font-weight:bold">}</span><span style="color:#b44">-RC</span><span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">RC</span><span style="color:#b68;font-weight:bold">}</span><span style="color:#b44"> &#34;</span> <span style="color:#b62;font-weight:bold">\
</span><span style="color:#b62;font-weight:bold"></span>-Dtag<span style="color:#666">=</span><span style="color:#b44">&#34;nifi-</span><span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">NIFI_VERSION</span><span style="color:#b68;font-weight:bold">}</span><span style="color:#b44">-RC</span><span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">RC</span><span style="color:#b68;font-weight:bold">}</span><span style="color:#b44">&#34;</span> <span style="color:#b62;font-weight:bold">\
</span><span style="color:#b62;font-weight:bold"></span>-DreleaseVersion<span style="color:#666">=</span><span style="color:#b44">&#34;</span><span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">NIFI_VERSION</span><span style="color:#b68;font-weight:bold">}</span><span style="color:#b44">&#34;</span> <span style="color:#b62;font-weight:bold">\
</span><span style="color:#b62;font-weight:bold"></span>-DdevelopmentVersion<span style="color:#666">=</span><span style="color:#b44">&#34;</span><span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">NEXT_VERSION</span><span style="color:#b68;font-weight:bold">}</span><span style="color:#b44">&#34;</span> <span style="color:#b62;font-weight:bold">\
</span><span style="color:#b62;font-weight:bold"></span>-Darguments<span style="color:#666">=</span><span style="color:#b44">&#34;-DskipTests&#34;</span>
</code></pre></div><ul>
<li>
<p>Review release preparation results and use <a href="https://maven.apache.org/maven-release/maven-release-plugin/rollback-mojo.html">rollback</a>
and <a href="https://maven.apache.org/maven-release/maven-release-plugin/clean-mojo.html">clean</a> commands when necessary to
start over when encountering failures</p>
</li>
<li>
<p>Run Maven release with <code>signing</code> and <code>include-grpc</code> profiles to deploy artifacts to the Apache Nexus Repository</p>
</li>
</ul>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash">./mvnw release:perform -Psigning,include-grpc <span style="color:#b62;font-weight:bold">\
</span><span style="color:#b62;font-weight:bold"></span>-DscmCommentPrefix<span style="color:#666">=</span><span style="color:#b44">&#34;</span><span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">JIRA_TICKET</span><span style="color:#b68;font-weight:bold">}</span><span style="color:#b44">-RC</span><span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">RC</span><span style="color:#b68;font-weight:bold">}</span><span style="color:#b44"> &#34;</span> <span style="color:#b62;font-weight:bold">\
</span><span style="color:#b62;font-weight:bold"></span>-Darguments<span style="color:#666">=</span><span style="color:#b44">&#34;-DskipTests&#34;</span>
</code></pre></div><ul>
<li>Open the Apache Nexus <a href="https://repository.apache.org/#stagingRepositories">Staging Repository</a> and login to view the staging repository that
Maven release created</li>
</ul>
<h2 id="validate-artifacts">Validate Artifacts</h2>
<ul>
<li>Create local staging directory</li>
</ul>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash"><span style="color:#b8860b">STAGING_DIR</span><span style="color:#666">=</span>~/staging
mkdir <span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">STAGING_DIR</span><span style="color:#b68;font-weight:bold">}</span>
<span style="color:#a2f">cd</span> <span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">STAGING_DIR</span><span style="color:#b68;font-weight:bold">}</span>
</code></pre></div><ul>
<li>Download the source release and signature from the Apache Nexus Staging Repository</li>
</ul>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash"><span style="color:#b8860b">SOURCE_RELEASE_ZIP</span><span style="color:#666">=</span><span style="color:#b44">&#34;https://repository.apache.org/service/local/repositories/</span><span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">STAGING_REPO_ID</span><span style="color:#b68;font-weight:bold">}</span><span style="color:#b44">/content/org/apache/nifi/nifi/</span><span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">NIFI_VERSION</span><span style="color:#b68;font-weight:bold">}</span><span style="color:#b44">/nifi-</span><span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">NIFI_VERSION</span><span style="color:#b68;font-weight:bold">}</span><span style="color:#b44">-source-release.zip&#34;</span>
wget <span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">SOURCE_RELEASE_ZIP</span><span style="color:#b68;font-weight:bold">}</span>
wget <span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">SOURCE_RELEASE_ZIP</span><span style="color:#b68;font-weight:bold">}</span>.asc
</code></pre></div><ul>
<li>Verify the source release signature using the <code>gpg</code> command</li>
</ul>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash"><span style="color:#b8860b">SOURCE_RELEASE_ZIP_FILE</span><span style="color:#666">=</span><span style="color:#b44">&#34;nifi-</span><span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">NIFI_VERSION</span><span style="color:#b68;font-weight:bold">}</span><span style="color:#b44">-source-release.zip&#34;</span>
gpg --verify <span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">SOURCE_RELEASE_ZIP_FILE</span><span style="color:#b68;font-weight:bold">}</span>.asc <span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">SOURCE_RELEASE_ZIP_FILE</span><span style="color:#b68;font-weight:bold">}</span>
</code></pre></div><ul>
<li>Extract source release archive files</li>
</ul>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash">unzip <span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">SOURCE_RELEASE_ZIP_FILE</span><span style="color:#b68;font-weight:bold">}</span>
<span style="color:#a2f">cd</span> nifi-<span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">NIFI_VERSION</span><span style="color:#b68;font-weight:bold">}</span>
</code></pre></div><ul>
<li>Run Maven command to package binaries</li>
</ul>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash">./mvnw package -P include-grpc -pl <span style="color:#b62;font-weight:bold">\
</span><span style="color:#b62;font-weight:bold"></span>:minifi-assembly,<span style="color:#b62;font-weight:bold">\
</span><span style="color:#b62;font-weight:bold"></span>:minifi-c2-assembly,<span style="color:#b62;font-weight:bold">\
</span><span style="color:#b62;font-weight:bold"></span>:minifi-tookit-assembly,<span style="color:#b62;font-weight:bold">\
</span><span style="color:#b62;font-weight:bold"></span>:nifi-assembly,<span style="color:#b62;font-weight:bold">\
</span><span style="color:#b62;font-weight:bold"></span>:nifi-kafka-connector-assembly,<span style="color:#b62;font-weight:bold">\
</span><span style="color:#b62;font-weight:bold"></span>:nifi-toolkit-assembly,<span style="color:#b62;font-weight:bold">\
</span><span style="color:#b62;font-weight:bold"></span>:nifi-registry-assembly,<span style="color:#b62;font-weight:bold">\
</span><span style="color:#b62;font-weight:bold"></span>:nifi-registry-toolkit-assembly,<span style="color:#b62;font-weight:bold">\
</span><span style="color:#b62;font-weight:bold"></span>:nifi-stateless-assembly
</code></pre></div><ul>
<li>Copy binaries to local artifacts directory</li>
</ul>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash"><span style="color:#b8860b">ARTIFACTS_DIR</span><span style="color:#666">=</span>~/staging/artifacts
mkdir <span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">ARTIFACTS_DIR</span><span style="color:#b68;font-weight:bold">}</span>
cp minifi/minifi-assembly/target/minifi-<span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">NIFI_VERSION</span><span style="color:#b68;font-weight:bold">}</span>-bin.zip <span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">ARTIFACTS_DIR</span><span style="color:#b68;font-weight:bold">}</span>
cp minifi/minifi-c2/minifi-c2-assembly/target/minifi-c2-<span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">NIFI_VERSION</span><span style="color:#b68;font-weight:bold">}</span>-bin.zip <span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">ARTIFACTS_DIR</span><span style="color:#b68;font-weight:bold">}</span>
cp minifi/minifi-toolkit/minifi-toolkit-assembly/target/minifi-toolkit-<span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">NIFI_VERSION</span><span style="color:#b68;font-weight:bold">}</span>-bin.zip <span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">ARTIFACTS_DIR</span><span style="color:#b68;font-weight:bold">}</span>
cp nifi-assembly/target/nifi-<span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">NIFI_VERSION</span><span style="color:#b68;font-weight:bold">}</span>-bin.zip <span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">ARTIFACTS_DIR</span><span style="color:#b68;font-weight:bold">}</span>
cp nifi-external/nifi-kafka-connector-assembly/target/nifi-kafka-connector-assembly-<span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">NIFI_VERSION</span><span style="color:#b68;font-weight:bold">}</span>.zip <span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">ARTIFACTS_DIR</span><span style="color:#b68;font-weight:bold">}</span>
cp nifi-registry/nifi-registry-assembly/target/nifi-registry-<span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">NIFI_VERSION</span><span style="color:#b68;font-weight:bold">}</span>-bin.zip <span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">ARTIFACTS_DIR</span><span style="color:#b68;font-weight:bold">}</span>
cp nifi-registry/nifi-registry-toolkit/nifi-registry-toolkit-assembly/target/nifi-registry-toolkit-<span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">NIFI_VERSION</span><span style="color:#b68;font-weight:bold">}</span>-bin.zip <span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">ARTIFACTS_DIR</span><span style="color:#b68;font-weight:bold">}</span>
cp nifi-stateless/nifi-stateless-assembly/target/nifi-stateless-<span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">NIFI_VERSION</span><span style="color:#b68;font-weight:bold">}</span>-bin.zip <span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">ARTIFACTS_DIR</span><span style="color:#b68;font-weight:bold">}</span>
cp nifi-toolkit/nifi-toolkit-assembly/target/nifi-toolkit-<span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">NIFI_VERSION</span><span style="color:#b68;font-weight:bold">}</span>-bin.zip <span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">ARTIFACTS_DIR</span><span style="color:#b68;font-weight:bold">}</span>
cp <span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">STAGING_DIR</span><span style="color:#b68;font-weight:bold">}</span>/nifi-<span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">NIFI_VERSION</span><span style="color:#b68;font-weight:bold">}</span>-source-release.zip <span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">ARTIFACTS_DIR</span><span style="color:#b68;font-weight:bold">}</span>
cp <span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">STAGING_DIR</span><span style="color:#b68;font-weight:bold">}</span>/nifi-<span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">NIFI_VERSION</span><span style="color:#b68;font-weight:bold">}</span>-source-release.zip.asc <span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">ARTIFACTS_DIR</span><span style="color:#b68;font-weight:bold">}</span>
<span style="color:#a2f">cd</span> <span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">ARTIFACTS_DIR</span><span style="color:#b68;font-weight:bold">}</span>
</code></pre></div><ul>
<li>Create OpenPGP signatures for binary files from the cloned repository directory</li>
</ul>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash">gpg -a -b --digest-algo<span style="color:#666">=</span>SHA512 minifi-<span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">NIFI_VERSION</span><span style="color:#b68;font-weight:bold">}</span>-bin.zip
gpg -a -b --digest-algo<span style="color:#666">=</span>SHA512 minifi-c2-<span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">NIFI_VERSION</span><span style="color:#b68;font-weight:bold">}</span>-bin.zip
gpg -a -b --digest-algo<span style="color:#666">=</span>SHA512 minifi-toolkit-<span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">NIFI_VERSION</span><span style="color:#b68;font-weight:bold">}</span>-bin.zip
gpg -a -b --digest-algo<span style="color:#666">=</span>SHA512 nifi-<span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">NIFI_VERSION</span><span style="color:#b68;font-weight:bold">}</span>-bin.zip
gpg -a -b --digest-algo<span style="color:#666">=</span>SHA512 nifi-kafka-connector-assembly-<span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">NIFI_VERSION</span><span style="color:#b68;font-weight:bold">}</span>.zip
gpg -a -b --digest-algo<span style="color:#666">=</span>SHA512 nifi-registry-<span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">NIFI_VERSION</span><span style="color:#b68;font-weight:bold">}</span>-bin.zip
gpg -a -b --digest-algo<span style="color:#666">=</span>SHA512 nifi-registry-toolkit-<span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">NIFI_VERSION</span><span style="color:#b68;font-weight:bold">}</span>-bin.zip
gpg -a -b --digest-algo<span style="color:#666">=</span>SHA512 nifi-stateless-<span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">NIFI_VERSION</span><span style="color:#b68;font-weight:bold">}</span>-bin.zip
gpg -a -b --digest-algo<span style="color:#666">=</span>SHA512 nifi-toolkit-<span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">NIFI_VERSION</span><span style="color:#b68;font-weight:bold">}</span>-bin.zip
</code></pre></div><ul>
<li>Create SHA-256 hashes for binary files from the cloned repository directory</li>
</ul>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash">sh -c <span style="color:#b44">&#39;sha256sum $1 | cut -d &#34; &#34; -f 1 &gt; $1.sha256&#39;</span> -- minifi-<span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">NIFI_VERSION</span><span style="color:#b68;font-weight:bold">}</span>-bin.zip
sh -c <span style="color:#b44">&#39;sha256sum $1 | cut -d &#34; &#34; -f 1 &gt; $1.sha256&#39;</span> -- minifi-c2-<span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">NIFI_VERSION</span><span style="color:#b68;font-weight:bold">}</span>-bin.zip
sh -c <span style="color:#b44">&#39;sha256sum $1 | cut -d &#34; &#34; -f 1 &gt; $1.sha256&#39;</span> -- minifi-toolkit-<span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">NIFI_VERSION</span><span style="color:#b68;font-weight:bold">}</span>-bin.zip
sh -c <span style="color:#b44">&#39;sha256sum $1 | cut -d &#34; &#34; -f 1 &gt; $1.sha256&#39;</span> -- nifi-<span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">NIFI_VERSION</span><span style="color:#b68;font-weight:bold">}</span>-source-release.zip
sh -c <span style="color:#b44">&#39;sha256sum $1 | cut -d &#34; &#34; -f 1 &gt; $1.sha256&#39;</span> -- nifi-<span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">NIFI_VERSION</span><span style="color:#b68;font-weight:bold">}</span>-bin.zip
sh -c <span style="color:#b44">&#39;sha256sum $1 | cut -d &#34; &#34; -f 1 &gt; $1.sha256&#39;</span> -- nifi-kafka-connector-assembly-<span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">NIFI_VERSION</span><span style="color:#b68;font-weight:bold">}</span>.zip
sh -c <span style="color:#b44">&#39;sha256sum $1 | cut -d &#34; &#34; -f 1 &gt; $1.sha256&#39;</span> -- nifi-registry-<span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">NIFI_VERSION</span><span style="color:#b68;font-weight:bold">}</span>-bin.zip
sh -c <span style="color:#b44">&#39;sha256sum $1 | cut -d &#34; &#34; -f 1 &gt; $1.sha256&#39;</span> -- nifi-registry-toolkit-<span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">NIFI_VERSION</span><span style="color:#b68;font-weight:bold">}</span>-bin.zip
sh -c <span style="color:#b44">&#39;sha256sum $1 | cut -d &#34; &#34; -f 1 &gt; $1.sha256&#39;</span> -- nifi-stateless-<span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">NIFI_VERSION</span><span style="color:#b68;font-weight:bold">}</span>-bin.zip
sh -c <span style="color:#b44">&#39;sha256sum $1 | cut -d &#34; &#34; -f 1 &gt; $1.sha256&#39;</span> -- nifi-toolkit-<span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">NIFI_VERSION</span><span style="color:#b68;font-weight:bold">}</span>-bin.zip
</code></pre></div><ul>
<li>Create SHA-512 hashes for binary files from the cloned repository directory</li>
</ul>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash">sh -c <span style="color:#b44">&#39;sha512sum $1 | cut -d &#34; &#34; -f 1 &gt; $1.sha256&#39;</span> -- minifi-<span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">NIFI_VERSION</span><span style="color:#b68;font-weight:bold">}</span>-bin.zip
sh -c <span style="color:#b44">&#39;sha512sum $1 | cut -d &#34; &#34; -f 1 &gt; $1.sha256&#39;</span> -- minifi-c2-<span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">NIFI_VERSION</span><span style="color:#b68;font-weight:bold">}</span>-bin.zip
sh -c <span style="color:#b44">&#39;sha512sum $1 | cut -d &#34; &#34; -f 1 &gt; $1.sha256&#39;</span> -- minifi-toolkit-<span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">NIFI_VERSION</span><span style="color:#b68;font-weight:bold">}</span>-bin.zip
sh -c <span style="color:#b44">&#39;sha512sum $1 | cut -d &#34; &#34; -f 1 &gt; $1.sha256&#39;</span> -- nifi-<span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">NIFI_VERSION</span><span style="color:#b68;font-weight:bold">}</span>-source-release.zip
sh -c <span style="color:#b44">&#39;sha512sum $1 | cut -d &#34; &#34; -f 1 &gt; $1.sha256&#39;</span> -- nifi-<span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">NIFI_VERSION</span><span style="color:#b68;font-weight:bold">}</span>-bin.zip
sh -c <span style="color:#b44">&#39;sha512sum $1 | cut -d &#34; &#34; -f 1 &gt; $1.sha256&#39;</span> -- nifi-kafka-connector-assembly-<span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">NIFI_VERSION</span><span style="color:#b68;font-weight:bold">}</span>.zip
sh -c <span style="color:#b44">&#39;sha512sum $1 | cut -d &#34; &#34; -f 1 &gt; $1.sha256&#39;</span> -- nifi-registry-<span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">NIFI_VERSION</span><span style="color:#b68;font-weight:bold">}</span>-bin.zip
sh -c <span style="color:#b44">&#39;sha512sum $1 | cut -d &#34; &#34; -f 1 &gt; $1.sha256&#39;</span> -- nifi-registry-toolkit-<span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">NIFI_VERSION</span><span style="color:#b68;font-weight:bold">}</span>-bin.zip
sh -c <span style="color:#b44">&#39;sha512sum $1 | cut -d &#34; &#34; -f 1 &gt; $1.sha256&#39;</span> -- nifi-stateless-<span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">NIFI_VERSION</span><span style="color:#b68;font-weight:bold">}</span>-bin.zip
sh -c <span style="color:#b44">&#39;sha512sum $1 | cut -d &#34; &#34; -f 1 &gt; $1.sha256&#39;</span> -- nifi-toolkit-<span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">NIFI_VERSION</span><span style="color:#b68;font-weight:bold">}</span>-bin.zip
</code></pre></div><h2 id="publish-artifacts">Publish Artifacts</h2>
<ul>
<li>Push the Release Candidate branch to the Apache Git Repository</li>
</ul>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash">git push upstream <span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">JIRA_TICKET</span><span style="color:#b68;font-weight:bold">}</span>-RC<span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">RC</span><span style="color:#b68;font-weight:bold">}</span>
</code></pre></div><ul>
<li>Push the Release Candidate tag to the Apache Git Repository</li>
</ul>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash">git push upstream nifi-<span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">NIFI_VERSION</span><span style="color:#b68;font-weight:bold">}</span>-RC<span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">RC</span><span style="color:#b68;font-weight:bold">}</span>
</code></pre></div><ul>
<li>Checkout Apache Distribution Repository using Subversion</li>
</ul>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash"><span style="color:#a2f">cd</span> <span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">STAGING_DIR</span><span style="color:#b68;font-weight:bold">}</span>
svn checkout https://dist.apache.org/repos/dist/dev/nifi
<span style="color:#a2f">cd</span> nifi
</code></pre></div><ul>
<li>Copy and commit binaries to Apache Distribution Repository</li>
</ul>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash">cp -r <span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">ARTIFACTS_DIR</span><span style="color:#b68;font-weight:bold">}</span> nifi-<span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">NIFI_VERSION</span><span style="color:#b68;font-weight:bold">}</span>
svn add nifi-<span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">NIFI_VERSION</span><span style="color:#b68;font-weight:bold">}</span>
svn commit -m <span style="color:#b44">&#34;</span><span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">JIRA_TICKET</span><span style="color:#b68;font-weight:bold">}</span><span style="color:#b44"> Uploaded NiFi </span><span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">NIFI_VERSION</span><span style="color:#b68;font-weight:bold">}</span><span style="color:#b44">-RC</span><span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">RC</span><span style="color:#b68;font-weight:bold">}</span><span style="color:#b44"> artifacts&#34;</span>
</code></pre></div><h2 id="release-candidate-voting">Release Candidate Voting</h2>
<p>The release vote process should take place for <strong>72 hours</strong> under standard circumstances.</p>
<p>The Release Manager is responsible for sending the initial vote thread and tabulating results.</p>
<p>The Release Manager sends an email to the NiFi Developers Mailing List calling for a vote on the Release Candidate.</p>
<pre tabindex="0"><code>TO: dev@nifi.apache.org
SUBJECT: [VOTE] Release Apache NiFi ${NIFI_VERSION}
</code></pre><pre tabindex="0"><code>Team,
I am pleased to be calling this vote for the source release of Apache NiFi ${NIFI_VERSION}.
Please review the following guide for how to verify a release candidate build:
https://cwiki.apache.org/confluence/display/NIFI/Release+Candidate+Verification
The source being voted on and the convenicen binaries are available in the Apache Repository:
https://dist.apache.org/repos/dist/dev/nifi/nifi-${NIFI_VERSION}
The build artifacts are available in the Apache Nexus Repository:
https://repository.apache.org/content/repositories/${STAGING_REPO_ID}
Git Tag: nifi-${NIFI_VERSION}-RC${RC}
Git Commit ID: ${RC_TAG_COMMIT_ID}
GitHub Commit: https://github.com/apache/nifi/commit/${RC_TAG_COMMIT_ID}
Checksums of nifi-${NIFI_VERSION}-source-release.zip:
SHA256: ${SHA256_HASH}
SHA512: ${SHA512_HASH}
Release artifacts are signed with the following key:
https://people.apache.org/keys/committer/${RM_USERID}.asc
KEYS file is available in the Apache Repository:
https://dist.apache.org/repos/dist/release/nifi/KEYS
Issues resolved in this version: ${ISSUES_RESOLVED}
https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12316020&amp;version=12329307
Release note highlights can be found on the project wiki:
https://cwiki.apache.org/confluence/display/NIFI/Release+Notes
The vote will be open for 72 hours.
Please download the release candidate and evaluate the necessary items including checking
hashes, signatures, build from source, and test.
Please vote:
[ ] +1 Release this package as nifi-${NIFI_VERSION}
[ ] +0 no opinion
[ ] -1 Do not release this package because...
</code></pre><p>PMC members can cast <strong>binding</strong> votes. Committers and community members can cast <strong>non-binding</strong> votes.</p>
<p>The Release Manager can cancel a vote in response to negative findings. Canceling a vote requires sending an email with
<code>[CANCEL]</code> in the subject line as follows:</p>
<pre tabindex="0"><code>SUBJECT: [CANCEL][VOTE] Release Apache NiFi ${NIFI_VERSION}-RC${RC}
</code></pre><p>Approving a Release Candidate build requires at least <strong>3 binding</strong> positive votes from project PMC members and more
positive votes than negative votes.</p>
<p>The Release Manager sends an email to the NiFi Developers Mailing List with the vote results.</p>
<pre tabindex="0"><code>TO: dev@nifi.apache.org
SUBJECT: [RESULT][VOTE] Release Apache NiFi ${NIFI_VERSION}-RC${RC}
</code></pre><pre tabindex="0"><code>Apache NiFi Community,
I am pleased to announce that the ${NIFI_VERSION} release of Apache NiFi passes:
X +1 (binding) votes
Y +1 (non-binding) votes
0 0 votes
0 -1 votes
Thanks to all who helped make this release possible!
Here is the vote thread: ${VOTE_THREAD_URL}
</code></pre><h2 id="release-artifacts">Release Artifacts</h2>
<ul>
<li>
<p>Release Maven artifacts contained in Staging Repository on the <a href="https://repository.apache.org/#stagingRepositories">Apache Nexus Repository</a></p>
</li>
<li>
<p>Move source and binary artifacts to the release directory on the Apache Distribution Repository</p>
</li>
</ul>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash"><span style="color:#b8860b">DIST_DEV_URL</span><span style="color:#666">=</span>https://dist.apache.org/repos/dist/dev/nifi/nifi-<span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">NIFI_VERSION</span><span style="color:#b68;font-weight:bold">}</span>
<span style="color:#b8860b">DIST_RELEASE_URL</span><span style="color:#666">=</span>https://dist.apache.org/repos/dist/release/nifi/<span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">NIFI_VERSION</span><span style="color:#b68;font-weight:bold">}</span>
svn move -m <span style="color:#b44">&#34;</span><span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">JIRA_TICKET</span><span style="color:#b68;font-weight:bold">}</span><span style="color:#b44">&#34;</span> <span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">DIST_DEV_URL</span><span style="color:#b68;font-weight:bold">}</span> <span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">DIST_RELEASE_URL</span><span style="color:#b68;font-weight:bold">}</span>
</code></pre></div><ul>
<li>Merge the Release Candidate branch into the source development branch</li>
</ul>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash">git checkout <span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">BRANCH</span><span style="color:#b68;font-weight:bold">}</span>
git merge --no-ff <span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">JIRA_TICKET</span><span style="color:#b68;font-weight:bold">}</span>-RC<span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">RC</span><span style="color:#b68;font-weight:bold">}</span>
git push upstream <span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">BRANCH</span><span style="color:#b68;font-weight:bold">}</span>
</code></pre></div><ul>
<li>Create signed Git tag for the release version</li>
</ul>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash"><span style="color:#a2f">export</span> <span style="color:#b8860b">GPG_TTY</span><span style="color:#666">=</span><span style="color:#a2f;font-weight:bold">$(</span>tty<span style="color:#a2f;font-weight:bold">)</span>
<span style="color:#b8860b">COMMIT_ID</span><span style="color:#666">=</span><span style="color:#b44">`</span>git rev-list -n <span style="color:#666">1</span> nifi-<span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">NIFI_VERSION</span><span style="color:#b68;font-weight:bold">}</span>-RC<span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">RC</span><span style="color:#b68;font-weight:bold">}</span><span style="color:#b44">`</span>
<span style="color:#b8860b">RELEASE_TAG</span><span style="color:#666">=</span><span style="color:#b44">&#34;rel/nifi-</span><span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">NIFI_VERSION</span><span style="color:#b68;font-weight:bold">}</span><span style="color:#b44">&#34;</span>
git tag -s <span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">RELEASE_TAG</span><span style="color:#b68;font-weight:bold">}</span> -m <span style="color:#b44">&#34;</span><span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">JIRA_TICKET</span><span style="color:#b68;font-weight:bold">}</span><span style="color:#b44"> Tagged NiFi </span><span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">NIFI_VERSION</span><span style="color:#b68;font-weight:bold">}</span><span style="color:#b44"> </span><span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">COMMIT_ID</span><span style="color:#b68;font-weight:bold">}</span><span style="color:#b44">&#34;</span>
</code></pre></div><ul>
<li>Push Git tag to the Apache Git Repository</li>
</ul>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash">git push upstream <span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">RELEASE_TAG</span><span style="color:#b68;font-weight:bold">}</span>
</code></pre></div><ul>
<li>Delete previous release version from the Apache Distribution Repository</li>
</ul>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash"><span style="color:#b8860b">PREVIOUS_VERSION</span><span style="color:#666">=</span><span style="color:#b44">&#34;0.6.0&#34;</span>
<span style="color:#b8860b">PREVIOUS_RELEASE_URL</span><span style="color:#666">=</span><span style="color:#b44">&#34;https://dist.apache.org/repos/dist/release/nifi/</span><span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">PREVIOUS_VERSION</span><span style="color:#b68;font-weight:bold">}</span><span style="color:#b44">&#34;</span>
svn delete -m <span style="color:#b44">&#34;</span><span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">JIRA_TICKET</span><span style="color:#b68;font-weight:bold">}</span><span style="color:#b44">&#34;</span> <span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">PREVIOUS_RELEASE_URL</span><span style="color:#b68;font-weight:bold">}</span>
</code></pre></div><ul>
<li>
<p>Update Docker files with the next release version</p>
</li>
<li>
<p>Commit and push Docker version changes to the Apache Git Repository</p>
</li>
</ul>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash">git commit -m <span style="color:#b44">&#34;</span><span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">JIRA_TICKET</span><span style="color:#b68;font-weight:bold">}</span><span style="color:#b44"> Updated Docker version to </span><span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">NEXT_VERSION</span><span style="color:#b68;font-weight:bold">}</span><span style="color:#b44">&#34;</span>
git push upstream <span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">BRANCH</span><span style="color:#b68;font-weight:bold">}</span>
</code></pre></div><h2 id="update-documentation">Update Documentation</h2>
<ul>
<li>
<p>Follow the <a href="https://cwiki.apache.org/confluence/display/NIFI/Website+Publishing">website publishing</a> instructions for
generating and updating project documentation</p>
</li>
<li>
<p>Clone the <a href="https://github.com/apache/nifi-site/">Apache NiFi Website</a> repository</p>
</li>
</ul>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash">git clone https://gitbox.apache.org/repos/asf/nifi-site.git
<span style="color:#a2f">cd</span> nifi-site
</code></pre></div><ul>
<li>
<p>Update the current and previous version variables in
<a href="https://github.com/apache/nifi-site/blob/main/config.toml">config.toml</a></p>
</li>
<li>
<p>Update the documentation <code>RewriteRule</code> to the new released version in
<a href="https://github.com/apache/nifi-site/blob/main/static/.htaccess">.htaccess</a></p>
</li>
<li>
<p>Push changes to the <code>main</code> branch for automated build and publication</p>
</li>
</ul>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash">git push origin main
</code></pre></div><h2 id="update-notes">Update Notes</h2>
<ul>
<li>
<p>Update
<a href="https://issues.apache.org/jira/projects/NIFI?selectedItem=com.atlassian.jira.jira-projects-plugin:release-page&amp;status=unreleased">Jira Releases</a>
using the <code>Actions</code> button to <code>Release</code> the selected version</p>
</li>
<li>
<p>Update the <a href="https://cwiki.apache.org/confluence/display/NIFI/Migration+Guidance">Migration Guide</a> instructions</p>
</li>
<li>
<p>Update project <a href="https://cwiki.apache.org/confluence/display/NIFI/Release+Notes">Release Notes</a> with the date of the release</p>
</li>
</ul>
<h2 id="announce-release">Announce Release</h2>
<p>The Release Manager sends an email to the Apache Announcements List as well as project mailing lists.</p>
<pre tabindex="0"><code>TO: announce@apache.org, users@nifi.apache.org, dev@nifi.apache.org
SUBJECT: [ANNOUNCE] Apache NiFi ${NIFI_VERSION} Released
</code></pre><pre tabindex="0"><code>The Apache NiFi Team is pelased to announce the release of Apache NiFi ${NIFI_VERSION}.
Apache NiFi is an easy to use, powerful, and reliable system to process and distribute
data.
https://nifi.apache.org
The release artifacts can be downloaded from the project website.
https://nifi.apache.org/download.html
Maven artifacts have been released and mirrored according to Apache distribution processes.
Issues resolved in Apache NiFi ${NIFI_VERSION} are listed in Jira Release Notes.
https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12316020&amp;version=12329373
Highlights of the release are available on the project wiki.
https://cwiki.apache.org/confluence/display/NIFI/Release+Notes
Thank you,
The Apache NiFi Team
</code></pre>
</div>
</div>
<div class="row">
<div class="large-12 columns footer">
<a href="https://www.apache.org">
<img id="asf-logo" alt="Apache Software Foundation" src="/assets/images/asf_logo.png" width="200" style="margin:0px 10px" />
</a>
<a href="https://www.apache.org/events/current-event.html">
<img src="https://www.apache.org/events/current-event-234x60.png" style="margin:0px 10px" />
</a>
<div id="copyright">
<p>Copyright &#169; 2023 The Apache Software Foundation, Licensed under the <a
href="https://www.apache.org/licenses/">Apache License, Version 2.0</a>.<br/>Apache, the
Apache feather logo, NiFi, Apache NiFi and the project logo are trademarks of The Apache Software
Foundation.</p>
</div>
</div>
</div>
<script src="/assets/js/jquery.min.js"></script>
<script src="/assets/js/foundation.js"></script>
<script src="/assets/js/app.js"></script>
</body>
</html>