<!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.92da7048339401bf53463b01188254399d9c8a2138949712827fee24e79c12e4.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="#">Project</a>
                    <ul class="dropdown">
                        <li><a href="index.html">Home</a></li>
                        <li><a href="https://blogs.apache.org/nifi/"><i class="fa fa-external-link external-link"></i>Apache NiFi Blog</a></li>
                        <li><a href="https://www.apache.org/licenses/"><i class="fa fa-external-link external-link"></i>License</a></li>
                    </ul>
                </li>
                <li class="has-dropdown">
                    <a href="#">Documentation</a>
                    <ul class="dropdown">
                        <li><a href="faq.html">FAQ</a></li>
                        <li><a href="videos.html">Videos</a></li>
                        <li><a href="docs.html">NiFi Docs</a></li>
                        <li><a href="https://cwiki.apache.org/confluence/display/NIFI"><i class="fa fa-external-link external-link"></i>Wiki</a></li>
                        <li><a href="security.html">NiFi Security Reports</a></li>
                        <li><a href="registry-security.html">NiFi Registry Security Reports</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="release-guide.html">Release Guide</a></li>
                        <li><a href="gpg.html">GPG 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="developer-guide.html">Developer 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="#">ASF Links</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://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>
                <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>
            </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>The purpose of this document is to capture and describe the steps involved in producing
an official release of Apache NiFi.  It is written specifically to someone acting in the
capacity of a <a href="https://www.apache.org/dev/release-publishing.html#release_manager">Release Manager</a> (RM).</p>
<h2 id="the-objective">The objective</h2>
<p>Our aim is to produce an official Apache release from an existing release branch.</p>
<h2 id="background-material">Background Material</h2>
<ul>
<li>
<p>These documents are necessary for all committers to be familiar with</p>
<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>
<p>These documents are necessary for someone acting as the RM</p>
<ul>
<li><a href="https://www.apache.org/licenses/exports/">Apache Encryption Software / ECCN Info</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>
<p>These documents are helpful for general environmental setup to perform releases</p>
<ul>
<li><a href="https://www.apache.org/dev/openpgp.html">Apache PGP Info</a></li>
<li><a href="http://www.apache.org/dev/release-signing.html">Apache Release Signing</a></li>
<li><a href="https://www.apache.org/dev/publishing-maven-artifacts.html">Apache Guide to publish Maven Artifacts</a></li>
</ul>
</li>
</ul>
<h2 id="terms">Terms</h2>
<ul>
<li><strong>Release Manager</strong> (RM) - the Apache NiFi PMC Member or Committer acting as <a href="https://www.apache.org/dev/release-publishing.html#release_manager">Release Manager</a>
for a particular release of Apache NiFi.</li>
<li><strong>Release Candidate</strong> (RC) - an iteration of the release process that is proposed for a vote by the Apache NiFi
Community.</li>
<li><strong>Community</strong> - the <a href="https://www.apache.org/foundation/glossary.html#Community">community</a> of people with an interest
in the improvement and advancement of Apache NiFi, including end-users, developers, evangelists, and advisers.</li>
<li><strong>PMC</strong> - within the Apache NiFi community, members of the <a href="https://www.apache.org/foundation/glossary.html#PMC">PMC</a> oversee the ongoing project.</li>
<li><strong>Committer</strong> - within the Apache NiFi community, <a href="https://www.apache.org/foundation/glossary.html#Committer">committers</a> have gained the privilege to commit changes to the Apache NiFi codebase.</li>
</ul>
<h2 id="high-level-flow-of-a-release">High level flow of a release</h2>
<ul>
<li>The Apache NiFi community is constantly contributing to JIRA tickets assigned to the next release.</li>
<li>At some point the number of tickets open/remaining for the next release begins to approach zero.</li>
<li>A member of the community suggests a release and initiates a discussion.</li>
<li>Someone volunteers to perform the Release Manager (RM) role for the release.  (This can be a committer but Apache
guides indicate a preference for a PMC member.)</li>
<li>The RM validates the proposed release and stages the source code, Maven artifacts, and distributable files for a
Release Candidate (RC).</li>
<li>The RM initiates a vote on the RC by the NiFi community.</li>
<li>If the NiFi community rejects the RC, the issues noted are resolved and another RC is generated.</li>
<li>If the NiFi community accepts the RC, the staged source code, artifacts, and distribution files are moved to the
appropriately locations for public release.</li>
</ul>
<h2 id="variable-reference-substitutions">Variable reference substitutions</h2>
<p>Throughout this guide, references must be made to names and values that will vary from release to release.  For clarity
those variable values have been written like Bash variable references.  When a term like
&ldquo;<code>/tmp/src/nifi-${NIFI_VERSION}</code>&rdquo; is seen in an instruction or email template it should be replaced with
&ldquo;<code>/tmp/src/nifi-0.7.0</code>&rdquo; when working the release of &ldquo;Apache NiFi 0.7.0&rdquo;.</p>
<ul>
<li>
<p>Substitutions used in tasks and email templates</p>
 <pre>
 Reference            Example value       Description
 =========            ==============      ===========
 ${BRANCH}            main                the development branch on which the release is based.
 ${NIFI_VERSION}      0.7.0               the version currently in development on the release branch.
 ${NEXT_VERSION}      0.8.0-SNAPSHOT      the future version for development on the release branch.
 ${JIRA_TICKET}       NIFI-2112           the JIRA ticket created by the release manager for the release tasks.
 ${RC}                2                   the Release Candidate index start at 1 for the first release candidate.
 ${RC_TAG_COMMIT_ID}                      the 40 byte commit ID of the RC tag created during the Maven release process.
 ${STAGING_REPO_ID}   orgapachenifi-1088  the temporary repository ID where staged artifacts have been placed.
 ${RM_USERID}         johndoe             the Apache account ID of Release Manager.
 ${RELEASE_TAG}       rel/nifi-0.7.0      the Git repository tag for the source code as released.
 ${VOTE_THREAD_URL}   [0.7.0 vote thread][070-rc2-vote]   the URL for the Apache Pony Mail archive of the release vote thread.
 </pre>
<p><em>To be practical but avoid confusion with future release details, these example values reflect the previous release
NiFi 0.7.0 RC2 release details.</em></p>
</li>
</ul>
<p>NOTE: The next version should be the next minor version if the release is based on a major version development branch (e.g main
or 0.x). The next version should be the next incremental version if the release is based on a minor version development branch (e.g
support/nifi-1.1.x or support/nifi-0.7.4). If this is the first incremental release (e.g. 1.2.1) for a minor release line the support
branch may need to be created.</p>
<h2 id="what-to-validate-and-how-to-validate-a-release">What to validate and how to validate a release</h2>
<p>The following is a list of the sorts of things that will be validated and are the basics to check
when evaluating a release for a vote.</p>
<ul>
<li>Are the LICENSE and NOTICE files present in the source root and complete?
<ul>
<li>Specifically look in the <code>nifi-${NIFI_VERSION}-sources-release.zip</code> artifact and ensure these files are
present at the root of the archive.</li>
</ul>
</li>
<li>Evaluate the sources and dependencies.
<ul>
<li>Does the overall LICENSE and NOTICE appear correct?</li>
<li>Do all licenses fit within the ASF approved licenses?</li>
<li>Here is an example path to a sources artifact that has been prepared but not released:<br>
<code>https://dist.apache.org/repos/dist/dev/nifi/nifi-${NIFI_VERSION}/nifi-${NIFI_VERSION}-source-release.zip</code></li>
</ul>
</li>
<li>Is there a README available that explains how to build the application and to execute it?
<ul>
<li>Look in the *-sources.zip artifact root for the readme.</li>
</ul>
</li>
<li>Are the signatures and hashes correct for the source release?
<ul>
<li>Validate the hashes of the sources artifact do in fact match:
<code>https://dist.apache.org/repos/dist/dev/nifi/nifi-${NIFI_VERSION}/nifi-${NIFI_VERSION}-source-release.zip.sha256</code>
<code>https://dist.apache.org/repos/dist/dev/nifi/nifi-${NIFI_VERSION}/nifi-${NIFI_VERSION}-source-release.zip.sha512</code></li>
<li>Validate the signature of the source artifact.  Here is an example path:
<code>https://dist.apache.org/repos/dist/dev/nifi/nifi-${NIFI_VERSION}/nifi-${NIFI_VERSION}-source-release.zip.asc</code></li>
<li>Need a quick reminder on how to <a href="https://www.apache.org/dev/release-signing.html#verifying-signature">verify a signature</a>?</li>
</ul>
</li>
<li>Do all sources have necessary headers?
<ul>
<li>Unzip the sources file into a directory and execute <code>mvn install -Pcontrib-check,include-grpc</code></li>
<li>You can avoid &lsquo;include-grpc&rsquo; if you&rsquo;re building on a system that doesn&rsquo;t support it.</li>
</ul>
</li>
<li>Are there no unexpected binary files in the release?
<ul>
<li>The only thing we&rsquo;d expect would be potentially test resources files.</li>
</ul>
</li>
<li>Does the app (if appropriate) execute and function as expected?</li>
</ul>
<p>This list is reflected in the Release Vote and Release Helper Guide emails that are sent once the release has been
staged in the Git and Nexus repositories.</p>
<h2 id="the-release-process">The Release Process</h2>
<p>The release process includes steps to be performed by the Release Manager as well as the
Apache NiFi developer community.</p>
<h3 id="step-1-configure-the-build-environment-rm-and-community">Step 1. Configure the build environment (RM and community)</h3>
<ol>
<li>Follow the steps outlined in the <a href="https://nifi.apache.org/quickstart.html">Quickstart Guide</a> to prepare the development system.</li>
<li>Confirm that the local Git workspace is configured with an origin remote pointing to the RM&rsquo;s personal fork of the
NiFi source and an &ldquo;ASF&rdquo; remote pointing to the Apache Git Repository for NiFi.
<pre><code>$ git remote -v
asf	https://gitbox.apache.org/repos/asf/nifi.git (fetch)
asf	https://gitbox.apache.org/repos/asf/nifi.git (push)
origin	https://github.com/${RM_USERID}/nifi.git (fetch)
origin	https://github.com/${RM_USERID}/nifi.git (push)
</code></pre><p>Additional remotes will not cause a problem if these two are correct.  Other configurations are perfectly
acceptable but the appropriate adjustments to the steps in this guide must be made by the release manager.</p>
</li>
<li>Confirm that source code can be checked out for the branch being released.
<pre><code>git checkout ${BRANCH}
</code></pre></li>
<li>Confirm that the entire application builds correctly in the build environment.</li>
</ol>
<h3 id="step-2-prepare-and-stage-the-release-rm">Step 2. Prepare and stage the release (RM)</h3>
<ol>
<li>Create a JIRA ticket for the release tasks for version ${NIFI_VERSION}.<br>
<em><strong>The resulting JIRA ticket number is referred to as ${JIRA_TICKET} in this guide.</strong></em></li>
<li>Create the next version in JIRA, if it doesn&rsquo;t already exist, so work can continue towards that release.</li>
<li>Create meaningful release notes for this version if not already created.  <a href="https://cwiki.apache.org/confluence/display/NIFI/Release+Notes">Enter them here</a> on
the NiFi wiki.</li>
<li>Create a new branch off &lsquo;main&rsquo; named after the JIRA ticket.
<div class="highlight"><pre 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></li>
<li>Verify that Maven has sufficient heap space to perform the build tasks.  Some plugins and parts of the build
consumes a surprisingly large amount of space.
<ul>
<li>These settings have been shown to work for Java 8 for NiFi version 1.x and later.
<div class="highlight"><pre 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">MAVEN_OPTS</span><span style="color:#666">=</span><span style="color:#b44">&#34;-Xms1024m -Xmx3076m&#34;</span>
</code></pre></div></li>
<li>And these work for Java 7 for NiFi version 0.x.
<pre><code>$ export MAVEN_OPTS=&quot;-Xms1024m -Xmx3076m -XX:MaxPermSize=256m&quot;
</code></pre></li>
</ul>
</li>
<li>Ensure your settings.xml has been updated to include a <code>signed_release</code> profile and a <code>&lt;server&gt;</code> entry for
&ldquo;repository.apache.org&rdquo; as shown below. <a href="http://blog.sonatype.com/2009/10/maven-tips-and-tricks-encrypting-passwords">Steps to configure and encrypt Maven passwords</a>.
There are  other ways to ensure your PGP key is available for signing as well.
<div class="highlight"><pre 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>signed_release<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>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>ENCRYPTED PASSWORD HERE<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></li>
<li>Ensure the the full application builds and all tests work by executing a parallel (multi-threaded) build.
<pre><code>$ mvn -T 2.5C clean install -Pinclude-grpc
</code></pre></li>
<li>Startup and test the application with from the root source folder.  After a few seconds, NiFi should be up and
running at <a href="http://localhost:8080/nifi">http://localhost:8080/nifi</a>.
<pre><code>$ cd nifi-assembly/target/nifi-${NIFI_VERSION}-bin/nifi-${NIFI_VERSION}
$ bin/nifi.sh start
</code></pre></li>
<li>Evaluate and ensure the appropriate license headers are present on all source files.</li>
<li>Ensure LICENSE and NOTICE files are complete and accurate. (Developers should always be keeping these up to date as
they go along adding source and modifying dependencies to keep this burden manageable.)</li>
<li>Build the project with the <code>contrib-check</code> profile enabled to validate contribution expectations and find any
problems that must be addressed before proceeding.
<pre><code>$ mvn install -Pcontrib-check,include-grpc
</code></pre></li>
<li>Verify and update if necessary to ensure Docker version information points to the next release version.  For instance, set correct release versions in various Dockerfile files found in the codebase.  There are approximately 5 to update as of version 1.16.</li>
</ol>
<h3 id="step-3-perform-the-release-rm">Step 3. Perform the release (RM)</h3>
<ol>
<li>
<p>Now its time to have maven prepare the release with this command.<br>
<em>NOTE: <code>gpg</code> will be invoked during this step, which will need to prompt you for a password.  From the command line, use
<code>export GPG_TTY=$(tty)</code> to allow <code>gpg</code> to prompt you.</em></p>
<pre><code>$ mvn --batch-mode release:prepare \
    -Psigned_release,include-grpc \
    -DscmCommentPrefix=&quot;${JIRA_TICKET}-RC${RC} &quot; \
    -Dtag=&quot;nifi-${NIFI_VERSION}-RC${RC}&quot; \
    -DreleaseVersion=&quot;${NIFI_VERSION}&quot; \
    -DdevelopmentVersion=&quot;${NEXT_VERSION}&quot; \
    -Darguments=&quot;-DskipTests&quot;
</code></pre></li>
<li>
<p>Review the release preparation results.  If problems are found <code>$ mvn release:rollback</code> will reset the changes, or
it may be necessary to run <code>$ mvn release:clean</code> to get the project to a state where it can be rebuilt.</p>
</li>
<li>
<p>If the preparation without problems, it is time to perform the release and deploy artifacts to staging.</p>
<pre><code>$ mvn release:perform \
    -Psigned_release,include-grpc \
    -DscmCommentPrefix=&quot;${JIRA_TICKET}-RC${RC} &quot; \
    -Darguments=&quot;-DskipTests&quot;
</code></pre><p>When this completes the artifacts have been released to the Apache Nexus staging repository, a local release branch
has been created and there should the staging repository ID returned in a log entry like this.</p>
<pre><code>[INFO]  * Closing staging repository with ID &quot;orgapachenifi-1088&quot;
</code></pre><p><em><strong>This staging repository ID is referred to by ${STAGING_REPO_ID} in this release guide.</strong></em></p>
</li>
<li>
<p>Browse to the Apache <a href="https://repository.apache.org/#stagingRepositories">Staging Repository</a> and
login with your Apache committer credentials and you should see the newly created staging repository listed.  If you
click on that you can inspect the various staged artifacts.</p>
</li>
<li>
<p>Validate that all the various aspects of the staged artifacts appear correct</p>
<ul>
<li>Download the sources and signature at the following URL. Do they compile cleanly?  If the result is a build does it execute?  We download the sources and signature from the nexus artifacts so that these sources and signature match what we put in dist and thus all signatures and such match.  If you pull the sources from your local build it will differ and can create confusion during RC validation.  These are the first two primary artifacts you need for the voting (the sources and the signature).  You&rsquo;ll gather other artifacts and signatures and generate hashes below.
<code>wget https://repository.apache.org/service/local/repositories/orgapachenifi-nnnn/content/org/apache/nifi/nifi/${NIFI_VERSION}/nifi-${NIFI_VERSION}-source-release.zip</code>
<code>wget https://repository.apache.org/service/local/repositories/orgapachenifi-nnnn/content/org/apache/nifi/nifi/${NIFI_VERSION}/nifi-${NIFI_VERSION}-source-release.zip.asc</code></li>
<li>Validate the hashes match.</li>
<li>Validate that the sources contain no unexpected binaries.</li>
<li>Validate the signature for the build and hashes. <a href="https://nifi.apache.org/gpg.html#verifying-a-release-signature">Verifying a release signature</a>.</li>
<li>Validate the LICENSE/NOTICE/Headers.</li>
<li>Validate that the README is present and provides sufficient information to build and if necessary execute.</li>
</ul>
</li>
<li>
<p>The validated artifacts all look good then push the branch to origin release branch to the ASF repository.</p>
<pre><code>$ git push asf ${JIRA_TICKET}-RC${RC}
</code></pre><p><em><strong>From this branch, the ${RC_TAG_COMMIT_ID} will be the 40 byte commit hash with the comment ${JIRA_TICKET}-RC${RC} prepare release nifi-${NIFI_VERSION}-RC${RC}</strong></em></p>
</li>
<li>
<p>Push the tag created by the release:prepare step to the ASF repository.</p>
<pre><code>git push asf nifi-${NIFI_VERSION}-RC${RC}
</code></pre></li>
<li>
<p>Create the signature and hashes for the source release and convenience binary files.  You take the source release and signature from steps above.  You grab the other conveniece binaries from your local build directories.</p>
<ol>
<li>ASCII armored GPG signatures (<code>--digest-algo=SHA512</code> select the SHA512 hash algorithm). <a href="https://www.apache.org/dev/openpgp.html#key-gen-avoid-sha1">Configure GPG to always prefer stronger hashes</a>.
<pre><code>$ gpg -a -b --digest-algo=SHA512 nifi-${NIFI_VERSION}-bin.tar.gz          # produces nifi-${NIFI_VERSION}-bin.tar.gz.asc
$ gpg -a -b --digest-algo=SHA512 nifi-${NIFI_VERSION}-bin.zip             # produces nifi-${NIFI_VERSION}-bin.zip.asc
$ gpg -a -b --digest-algo=SHA512 nifi-toolkit-${NIFI_VERSION}-bin.zip     # produces nifi-toolkit-${NIFI_VERSION}-bin.zip.asc
$ gpg -a -b --digest-algo=SHA512 nifi-toolkit-${NIFI_VERSION}-bin.tar.gz  # produces nifi-toolkit-${NIFI_VERSION}-bin.tar.gz.asc
</code></pre></li>
<li>Generate SHA256 hash summaries.
<pre><code>$ shasum -a 256 nifi-${NIFI_VERSION}-source-release.zip | cut -d&quot; &quot; -f1 &gt;  nifi-${NIFI_VERSION}-source-release.zip.sha256
$ shasum -a 256 nifi-${NIFI_VERSION}-bin.tar.gz | cut -d&quot; &quot; -f1 &gt;  nifi-${NIFI_VERSION}-bin.tar.gz.sha256
$ shasum -a 256 nifi-${NIFI_VERSION}-bin.zip | cut -d&quot; &quot; -f1 &gt;  nifi-${NIFI_VERSION}-bin.zip.sha256
$ shasum -a 256 nifi-toolkit-${NIFI_VERSION}-bin.zip | cut -d&quot; &quot; -f1 &gt;  nifi-toolkit-${NIFI_VERSION}-bin.zip.sha256
$ shasum -a 256 nifi-toolkit-${NIFI_VERSION}-bin.tar.gz | cut -d&quot; &quot; -f1 &gt;  nifi-toolkit-${NIFI_VERSION}-bin.tar.gz.sha256
</code></pre></li>
<li>Generate SHA512 hash summaries.
<pre><code>$ shasum -a 512 nifi-${NIFI_VERSION}-source-release.zip | cut -d&quot; &quot; -f1 &gt;  nifi-${NIFI_VERSION}-source-release.zip.sha512
$ shasum -a 512 nifi-${NIFI_VERSION}-bin.tar.gz | cut -d&quot; &quot; -f1 &gt;  nifi-${NIFI_VERSION}-bin.tar.gz.sha512
$ shasum -a 512 nifi-${NIFI_VERSION}-bin.zip | cut -d&quot; &quot; -f1 &gt;  nifi-${NIFI_VERSION}-bin.zip.sha512
$ shasum -a 512 nifi-toolkit-${NIFI_VERSION}-bin.zip | cut -d&quot; &quot; -f1 &gt;  nifi-toolkit-${NIFI_VERSION}-bin.zip.sha512
$ shasum -a 512 nifi-toolkit-${NIFI_VERSION}-bin.tar.gz | cut -d&quot; &quot; -f1 &gt;  nifi-toolkit-${NIFI_VERSION}-bin.tar.gz.sha512
</code></pre></li>
</ol>
</li>
<li>
<p>For reviewing of the release candidate, commit the source release and convenience binaries files along with their
hashes and signatures to <code>https://dist.apache.org/repos/dist/dev/nifi/nifi-${NIFI_VERSION}</code>. There should be in total 20 files (5 primary artifacts, 5 signatures, 5 sha256, 5 sha512).</p>
</li>
</ol>
<h3 id="step-4-error-recovery-rm">Step 4. Error recovery (RM)</h3>
<p>If anything isn&rsquo;t correct about the staged artifacts you can drop the staged repo from repository.apache.org and delete
the local tag in git.  If you also delete the local branch and clear your local maven repository under org/apache/nifi
then it is as if the release never happened.  Before doing that though try to figure out what went wrong so the Release
Guide can be updated or corrected if necessary.</p>
<p>So, as has been described here you can test the release process until you get it right.  The <code>mvn versions:set -Pinclude-grpc</code> and
<code>mvn versions:commit -Pinclude-grpc</code> commands can come in handy to help do this so you can set versions to something clearly release
test related.</p>
<h3 id="step-5-release-vote-rm-and-community">Step 5. Release Vote (RM and community)</h3>
<p>After the release source and artifacts are staged in the repositories it&rsquo;s time for the RM to send a release vote to the
NiFi community.</p>
<p>Once the release vote is called for, members of the NiFi developer community have 72 hours to evaluate the RC and
cast their vote by replying to the &ldquo;[VOTE] Release &hellip;&rdquo; email sent by the RM.</p>
<p><em>NOTE:  The release vote is majority rule vote that must include at least 3 binding +1 votes Apache NiFi PMC members
and more positive than negative binding votes.</em></p>
<ol>
<li>
<p>RM sends a vote request email to the NiFi Developers Mailing List.</p>
<ul>
<li>TO: <code>dev@nifi.apache.org</code></li>
<li>FROM: <code>${RM_USERID}@apache.org</code></li>
<li>SUBJECT: <code>[VOTE] Release Apache NiFi ${NIFI_VERSION}</code></li>
</ul>
<pre><code>Hello,

I am pleased to be calling this vote for the source release of Apache NiFi nifi-${NIFI_VERSION}.

The source zip, including signatures, digests, etc. can be found at:
https://repository.apache.org/content/repositories/orgapachenifi-nnnn

The source being voted upon and the convenience binaries can be found at:
https://dist.apache.org/repos/dist/dev/nifi/nifi-${NIFI_VERSION}/

A helpful reminder on how the release candidate verification process works:
https://cwiki.apache.org/confluence/display/NIFI/How+to+help+verify+an+Apache+NiFi+release+candidate

The Git tag is nifi-${NIFI_VERSION}-RC${RC}
The Git commit ID is ${RC_TAG_COMMIT_ID}
https://gitbox.apache.org/repos/asf?p=nifi.git;a=commit;h=${RC_TAG_COMMIT_ID}

Checksums of nifi-x.y.z-source-release.zip:
SHA256: &lt;64-CHAR-SHA256SUM-HASH&gt;
SHA512: &lt;128-CHAR-SHA512SUM-HASH&gt;

Release artifacts are signed with the following key:
https://people.apache.org/keys/committer/${RM_USERID}.asc

KEYS file available here:
https://dist.apache.org/repos/dist/release/nifi/KEYS

8 issues were closed/resolved for this release:
https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12316020&amp;version=12329307

Release note highlights can be found here:
https://cwiki.apache.org/confluence/display/NIFI/Release+Notes#ReleaseNotes-Version${NIFI_VERSION}

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. Then please vote:

[ ] +1 Release this package as nifi-${NIFI_VERSION}
[ ] +0 no opinion
[ ] -1 Do not release this package because...
</code></pre></li>
<li>
<p>Developers in the community review the release candidate and reply to the vote email with their vote.</p>
</li>
<li>
<p>After 72 hours if</p>
<ul>
<li>at least 3 binding (PMC members) cast +1 votes, and</li>
<li>the positive binding votes out number any negative binding votes</li>
</ul>
<p>the vote passes and the release candidate is officially released. If the vote does not pass, corrections are made
on the release branch and a new release candidate is put forward for a new vote.</p>
</li>
<li>
<p>RM sends vote result email.</p>
<ul>
<li>TO: <code>dev@nifi.apache.org</code></li>
<li>FROM: <code>${RM_USERID}@apache.org</code></li>
<li>SUBJECT: <code>[RESULT][VOTE] Release Apache NiFi ${NIFI_VERSION}</code></li>
</ul>
<pre><code>Apache NiFi Community,

I am pleased to announce that the ${NIFI_VERSION} release of Apache NiFi passes with
    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 PMC vote thread: ${VOTE_THREAD_URL}
</code></pre></li>
</ol>
<h3 id="step-6-finalize-the-release">Step 6. Finalize the Release</h3>
<p>After the vote is complete and the release is approved, these steps complete the release process.</p>
<ol>
<li>
<p>Move convenience binaries and related artifacts from dist/dev to dist/release:</p>
<pre><code>$ svn move -m &quot;${JIRA_TICKET}&quot; https://dist.apache.org/repos/dist/dev/nifi/nifi-${NIFI_VERSION} https://dist.apache.org/repos/dist/release/nifi/${NIFI_VERSION}
</code></pre></li>
<li>
<p>In repository.apache.org go to the staging repository and select <code>release</code> and follow the instructions on the site.</p>
</li>
<li>
<p>Merge the release branch into main. (this will result in a merge commit)</p>
<pre><code>$ git checkout main
$ git merge --no-ff ${JIRA_TICKET}-RC${RC}
$ git push asf main
</code></pre></li>
<li>
<p>Update Docker version information to point to the next release.  For instance, if the next version applied by Maven is 1.3.0-SNAPSHOT, these values should be updated to 1.3.0. This currently consists of three files:</p>
<ul>
<li><a href="https://github.com/apache/nifi/blob/main/nifi-docker/dockerhub/Dockerfile#L24">nifi-docker/dockerhub/Dockerfile, Line 25</a>,</li>
<li><a href="https://github.com/apache/nifi/blob/main/nifi-docker/dockerhub/DockerImage.txt#L16">nifi-docker/dockerhub/DockerImage.txt, Line 16</a> and</li>
<li><a href="https://github.com/apache/nifi/blob/main/nifi-docker/docker-compose/docker-compose.yml#L25">nifi-docker/docker-compose/docker-compose.yml, Line 25</a>.</li>
</ul>
</li>
<li>
<p>Commit and push the dockerhub module updates to the ASF repository:</p>
<pre><code>git commit -m &quot;${JIRA_TICKET} Updated dockerhub module for next release&quot;
git push asf main
</code></pre></li>
<li>
<p>Remove artifacts other than the current/new release from the dist/SVN storage <a href="https://dist.apache.org/repos/dist/release/nifi/">https://dist.apache.org/repos/dist/release/nifi/</a> Confirm the artifacts you deleted are present in apache archive where ASF keeps all releases forever <a href="http://archive.apache.org/dist/nifi/">http://archive.apache.org/dist/nifi/</a></p>
</li>
<li>
<p>Update the <a href="https://cwiki.apache.org/confluence/display/NIFI/Migration+Guidance">Migration Guide</a> on the Wiki.</p>
</li>
<li>
<p>Update the NiFi website to point to the new downloads.</p>
<ol>
<li>Update the following website configuration variables in <a href="https://github.com/apache/nifi-site/blob/main/config.toml">config.toml</a>
<ol>
<li>Set <code>currentProjectVersion</code> to the new released version</li>
<li>Set <code>currentProjectVersionReleased</code> to the date of release publication</li>
<li>Set <code>previousProjectVersion</code> to the previous released version</li>
<li>Set <code>previousProjectVersionReleased</code> to the date of release publication for the previous version</li>
</ol>
</li>
</ol>
</li>
<li>
<p>If the release is on the latest development line, update the NiFi website documentation pages to match the release. See <a href="https://cwiki.apache.org/confluence/display/NIFI/Website+Publishing">Website Publishing</a> on the project wiki for updating generated documentation.</p>
</li>
<li>
<p>In JIRA mark the release version as &lsquo;Released&rsquo; and &lsquo;Archived&rsquo; through &lsquo;version&rsquo; management in the &lsquo;administration&rsquo; console.</p>
</li>
<li>
<p>Ensure the release artifacts are successfully mirrored to the archive, specifically <a href="https://archive.apache.org/dist/nifi/$%7BNIFI_VERSION%7D/nifi-$%7BNIFI_VERSION%7D-bin.tar.gz">https://archive.apache.org/dist/nifi/${NIFI_VERSION}/nifi-${NIFI_VERSION}-bin.tar.gz</a>.<br>
This convenience binary file is the basis for our <a href="https://hub.docker.com/r/apache/nifi">Docker build</a> and is needed in place before the released tag is pushed to the repository.  If there were any
issues with the above listed file not being available, it may be necessary to reach out to the ASF Infra team to adjust file size limits to accommodate larger artifacts.<br>
<em>NOTE: The <a href="https://hub.docker.com/r/apache/nifi">Docker build</a> is triggered by pushing the signed tag in the next step. The release artifacts must be present
in the archive before continuing.</em></p>
</li>
<li>
<p>Create a proper signed tag of the released codebase based on the RC Tag created during the Maven release process.<br>
<em>NOTE: <code>gpg</code> will be invoked during this step, which will need to prompt you for a password.  From the command line, use
<code>export GPG_TTY=$(tty)</code> to allow <code>gpg</code> to prompt you.</em></p>
<pre><code>$ git tag -s rel/nifi-${NIFI_VERSION} -m &quot;${JIRA_TICKET} Signed release tag for approved release of NiFi ${NIFI_VERSION}&quot; ${RC_TAG_COMMIT_ID}
</code></pre><p>For instructions on setting up to sign your tag see <a href="http://gitready.com/advanced/2014/11/02/gpg-sign-releases.html">here</a>.</p>
</li>
<li>
<p>Push the release tag to the official ASF repository.</p>
<pre><code>$ git push asf rel/nifi-${NIFI_VERSION}
</code></pre></li>
<li>
<p>Verify that the Docker build began at the <a href="https://hub.docker.com/r/apache/nifi/builds/">Build Status</a> page.  If the build does not take place soon after the release tag was pushed, it may be necessary to contact ASF Infra to ask for assistance and the job to be triggered again.</p>
</li>
<li>
<p>Update the release notes with the final date of the release.</p>
</li>
<li>
<p>After the release has been complete for 24 hours send the release announcement.</p>
</li>
</ol>
<ul>
<li>See <a href="https://www.apache.org/dev/release.html#release-announcements">here</a> for an understanding of why you need to wait 24 hours</li>
<li>The announcement should addressed as follows.
<ul>
<li>TO: <code>announce@apache.org</code>, <code>dev@nifi.apache.org</code></li>
<li>REPLY-TO: <code>dev@nifi.apache.org</code></li>
<li>FROM: ${RM_<a href="mailto:USERID%7D@apache.org">USERID}@apache.org</a></li>
</ul>
</li>
<li>The subject should include <code>[ANNOUNCE] Apache NiFi x.y.z release</code>.</li>
<li>The text should be based on the template included below.
<pre><code>Hello

The Apache NiFi team would like 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.  Apache NiFi was made for dataflow.  It supports highly configurable directed graphs
of data routing, transformation, and system mediation logic.

More details on Apache NiFi can be found here:
https://nifi.apache.org/

The release artifacts can be downloaded from here:
https://nifi.apache.org/download.html

Maven artifacts have been made available and mirrored as per normal ASF artifact processes.

Issues closed/resolved for this list can be found here:
https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12316020&amp;version=12329373

Release note highlights can be found here:
https://cwiki.apache.org/confluence/display/NIFI/Release+Notes#ReleaseNotes-Version${NIFI_VERSION}

Thank you
The Apache NiFi team
</code></pre></li>
</ul>

</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; 2022 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>