<!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.5c81cf462909783b5f788de8312885d5e08d20aa6dd5f6eb9507dd445444a6cb.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 tabindex="0"><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>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.</li>
<li>Confirm that source code can be checked out for the branch being released.
<pre tabindex="0"><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 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></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 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">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 tabindex="0"><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 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>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 tabindex="0"><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 tabindex="0"><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 tabindex="0"><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 tabindex="0"><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 tabindex="0"><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 tabindex="0"><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 tabindex="0"><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 tabindex="0"><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 tabindex="0"><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 tabindex="0"><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 tabindex="0"><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 tabindex="0"><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 tabindex="0"><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 tabindex="0"><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 tabindex="0"><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 tabindex="0"><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 tabindex="0"><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 tabindex="0"><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 tabindex="0"><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>