blob: a7b954f6a5b52d99f92a4aaf3ff235eeefc68a9f [file] [log] [blame]
<!DOCTYPE html>
<html lang="en">
<head>
<title>Releases - Apache NiFi</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="Apache NiFi is an easy to use, powerful, and reliable system to process and distribute data">
<meta name="keywords" content="apache,nifi,data,distribution">
<title>Releases - Apache NiFi</title>
<meta property="og:title" content="Releases">
<meta property="og:type" content="article">
<meta property="og:url" content="https://nifi.apache.org/documentation/guides/releases/">
<meta property="og:description" content="Apache NiFi is an easy to use, powerful, and reliable system to process and distribute data">
<meta property="og:site_name" content="Apache NiFi">
<meta property="og:image" content="https://nifi.apache.org/images/project-brand.jpg?version=1">
<meta name="twitter:title" content="Releases">
<meta name="twitter:description" content="Apache NiFi is an easy to use, powerful, and reliable system to process and distribute data">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:creator" content="apachenifi">
<meta name="twitter:image" content="https://nifi.apache.org/images/project-brand.jpg?version=1">
<link rel="icon" href="/images/apache-nifi-drop-logo.svg">
<link rel="stylesheet" href="/uikit/css/uikit.min.css">
<link rel="stylesheet" href="/css/main.css?version=1">
<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 class="section-background">
<div class="nav-container" uk-sticky="sel-target: .uk-navbar-container; cls-active: uk-navbar-sticky">
<nav class="uk-container uk-navbar-container uk-navbar-transparent" uk-navbar>
<div class="uk-navbar-left">
<ul class="uk-navbar-nav">
<li>
<a class="uk-navbar-item" href="/">
<img src="/images/apache-nifi-drop-logo.svg" alt="Apache NiFi Logo" class="navbar-logo" width="36" height="48" />
</a>
</li>
<li class="uk-hidden@s">
<a href="#" class="uk-navbar-toggle" uk-navbar-toggle-icon uk-toggle="target: #mobile-menu"></a>
</li>
<li class="uk-visible@s uk-active">
<a href="/documentation/">Documentation</a>
<ul class="uk-dropdown" uk-dropdown="mode: click; animation: uk-animation-slide-top-small; duration: 300;">
<li class="">
<a href="/documentation/v2/" >
NiFi Version 2 Documentation
</a>
</li>
<li class="">
<a href="/documentation/v1/" >
NiFi Version 1 Documentation
</a>
</li>
<li class="">
<a href="/documentation/guides/" >
Guides
</a>
</li>
<li class="">
<a href="/documentation/security/" >
Security Reporting
</a>
</li>
<li class="">
<a href="https://cwiki.apache.org/confluence/display/NIFI" target="_blank" rel="noopener noreferrer">
Wiki
<span uk-icon="link"></span>
</a>
</li>
</ul>
</li>
<li class="uk-visible@s ">
<a href="/development/">Development</a>
<ul class="uk-dropdown" uk-dropdown="mode: click; animation: uk-animation-slide-top-small; duration: 300;">
<li class="">
<a href="https://cwiki.apache.org/confluence/display/NIFI/Contributor&#43;Guide" target="_blank" rel="noopener noreferrer">
Contributing
<span uk-icon="link"></span>
</a>
</li>
<li class="">
<a href="https://issues.apache.org/jira/browse/NIFI" target="_blank" rel="noopener noreferrer">
Issues
<span uk-icon="link"></span>
</a>
</li>
<li class="">
<a href="https://github.com/apache/nifi" target="_blank" rel="noopener noreferrer">
Source
<span uk-icon="link"></span>
</a>
</li>
</ul>
</li>
<li class="uk-visible@s ">
<a href="/community/">Community</a>
<ul class="uk-dropdown" uk-dropdown="mode: click; animation: uk-animation-slide-top-small; duration: 300;">
<li class="">
<a href="/community/contact/" >
Contact
</a>
</li>
<li class="">
<a href="/community/powered-by/" >
Powered By
</a>
</li>
<li class="">
<a href="/community" >
Team
</a>
</li>
</ul>
</li>
<li class="uk-visible@s ">
<a href="/projects/">Projects</a>
<ul class="uk-dropdown" uk-dropdown="mode: click; animation: uk-animation-slide-top-small; duration: 300;">
<li class="">
<a href="/projects/minifi/" >
MiNiFi
</a>
</li>
<li class="">
<a href="/projects/registry/" >
Registry
</a>
</li>
<li class="">
<a href="/projects/fds/" >
Flow Design System
</a>
</li>
</ul>
</li>
<li class="uk-visible@s ">
<a href="https://www.apache.org">Apache</a>
<ul class="uk-dropdown" uk-dropdown="mode: click; animation: uk-animation-slide-top-small; duration: 300;">
<li class="">
<a href="https://apache.org/events/current-event" target="_blank" rel="noopener noreferrer">
Events
<span uk-icon="link"></span>
</a>
</li>
<li class="">
<a href="https://www.apache.org/licenses" target="_blank" rel="noopener noreferrer">
License
<span uk-icon="link"></span>
</a>
</li>
<li class="">
<a href="https://privacy.apache.org/policies/privacy-policy-public.html" target="_blank" rel="noopener noreferrer">
Privacy
<span uk-icon="link"></span>
</a>
</li>
<li class="">
<a href="https://www.apache.org/security/" target="_blank" rel="noopener noreferrer">
Security
<span uk-icon="link"></span>
</a>
</li>
<li class="">
<a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer">
Sponsorship
<span uk-icon="link"></span>
</a>
</li>
<li class="">
<a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer">
Thanks
<span uk-icon="link"></span>
</a>
</li>
</ul>
</li>
</ul>
</div>
<div class="uk-navbar-right">
<ul class="uk-navbar-nav">
<li>
<div class="uk-navbar-item">
<a class="uk-icon-link navbar-icon" uk-icon="icon: github; ratio: 2" href="https://github.com/apache/nifi"></a>
</div>
</li>
<li>
<div class="uk-navbar-item">
<a class="uk-button uk-button-primary uk-icon" href="/download/">
Download
</a>
</div>
</li>
</ul>
</div>
</nav>
</div>
<div id="mobile-menu" uk-offcanvas class="uk-offcanvas">
<div class="uk-offcanvas-bar">
<ul class="uk-navbar-nav" uk-accordion>
<li class="uk-active">
<a class="uk-accordion-title" >Documentation</a>
<ul class="uk-accordion-content">
<li class="">
<a href="/documentation/v2/" >
NiFi Version 2 Documentation
</a>
</li>
<li class="">
<a href="/documentation/v1/" >
NiFi Version 1 Documentation
</a>
</li>
<li class="">
<a href="/documentation/guides/" >
Guides
</a>
</li>
<li class="">
<a href="/documentation/security/" >
Security Reporting
</a>
</li>
<li class="">
<a href="https://cwiki.apache.org/confluence/display/NIFI" target="_blank" rel="noopener noreferrer">
Wiki
<span uk-icon="link"></span>
</a>
</li>
</ul>
</li>
<li class="">
<a class="uk-accordion-title" >Development</a>
<ul class="uk-accordion-content">
<li class="">
<a href="https://cwiki.apache.org/confluence/display/NIFI/Contributor&#43;Guide" target="_blank" rel="noopener noreferrer">
Contributing
<span uk-icon="link"></span>
</a>
</li>
<li class="">
<a href="https://issues.apache.org/jira/browse/NIFI" target="_blank" rel="noopener noreferrer">
Issues
<span uk-icon="link"></span>
</a>
</li>
<li class="">
<a href="https://github.com/apache/nifi" target="_blank" rel="noopener noreferrer">
Source
<span uk-icon="link"></span>
</a>
</li>
</ul>
</li>
<li class="">
<a class="uk-accordion-title" >Community</a>
<ul class="uk-accordion-content">
<li class="">
<a href="/community/contact/" >
Contact
</a>
</li>
<li class="">
<a href="/community/powered-by/" >
Powered By
</a>
</li>
<li class="">
<a href="/community" >
Team
</a>
</li>
</ul>
</li>
<li class="">
<a class="uk-accordion-title" >Projects</a>
<ul class="uk-accordion-content">
<li class="">
<a href="/projects/minifi/" >
MiNiFi
</a>
</li>
<li class="">
<a href="/projects/registry/" >
Registry
</a>
</li>
<li class="">
<a href="/projects/fds/" >
Flow Design System
</a>
</li>
</ul>
</li>
<li class="">
<a class="uk-accordion-title" >Apache</a>
<ul class="uk-accordion-content">
<li class="">
<a href="https://apache.org/events/current-event" target="_blank" rel="noopener noreferrer">
Events
<span uk-icon="link"></span>
</a>
</li>
<li class="">
<a href="https://www.apache.org/licenses" target="_blank" rel="noopener noreferrer">
License
<span uk-icon="link"></span>
</a>
</li>
<li class="">
<a href="https://privacy.apache.org/policies/privacy-policy-public.html" target="_blank" rel="noopener noreferrer">
Privacy
<span uk-icon="link"></span>
</a>
</li>
<li class="">
<a href="https://www.apache.org/security/" target="_blank" rel="noopener noreferrer">
Security
<span uk-icon="link"></span>
</a>
</li>
<li class="">
<a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer">
Sponsorship
<span uk-icon="link"></span>
</a>
</li>
<li class="">
<a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer">
Thanks
<span uk-icon="link"></span>
</a>
</li>
</ul>
</li>
</ul>
</div>
</div>
<main>
<div class="uk-container">
<h1 id="apache-hahahugoshortcode-s0-hbhb-releases">Apache <span class="ni">Ni</span><span class="fi">Fi</span>
Releases</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="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-xml" data-lang="xml"><span style="color:#f92672">&lt;profile&gt;</span>
<span style="color:#f92672">&lt;id&gt;</span>signing<span style="color:#f92672">&lt;/id&gt;</span>
<span style="color:#f92672">&lt;properties&gt;</span>
<span style="color:#f92672">&lt;mavenExecutorId&gt;</span>forked-path<span style="color:#f92672">&lt;/mavenExecutorId&gt;</span>
<span style="color:#f92672">&lt;gpg.keyname&gt;</span>${RM_USERID}@apache.org<span style="color:#f92672">&lt;/gpg.keyname&gt;</span>
<span style="color:#f92672">&lt;gpg.passphrase&gt;</span>REPLACE-WITH-ENCRYPTED-GPG-PASSPHRASE<span style="color:#f92672">&lt;/gpg.passphrase&gt;</span>
<span style="color:#f92672">&lt;/properties&gt;</span>
<span style="color:#f92672">&lt;/profile&gt;</span>
<span style="color:#f92672">&lt;servers&gt;</span>
<span style="color:#f92672">&lt;server&gt;</span>
<span style="color:#f92672">&lt;id&gt;</span>repository.apache.org<span style="color:#f92672">&lt;/id&gt;</span>
<span style="color:#f92672">&lt;username&gt;</span>${RM_USERID}<span style="color:#f92672">&lt;/username&gt;</span>
<span style="color:#f92672">&lt;password&gt;</span>REPLACE-WITH-ENCRYPTED-REPOSITORY-PASSWORD<span style="color:#f92672">&lt;/password&gt;</span>
<span style="color:#f92672">&lt;/server&gt;</span>
<span style="color:#f92672">&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="color:#f8f8f2;background-color:#272822;-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:#f92672">(</span>fetch<span style="color:#f92672">)</span>
upstream https://gitbox.apache.org/repos/asf/nifi.git <span style="color:#f92672">(</span>push<span style="color:#f92672">)</span>
origin https://github.com/<span style="color:#e6db74">${</span>RM_USERID<span style="color:#e6db74">}</span>/nifi.git <span style="color:#f92672">(</span>fetch<span style="color:#f92672">)</span>
origin https://github.com/<span style="color:#e6db74">${</span>RM_USERID<span style="color:#e6db74">}</span>/nifi.git <span style="color:#f92672">(</span>push<span style="color:#f92672">)</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="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash">git checkout -b <span style="color:#e6db74">${</span>JIRA_TICKET<span style="color:#e6db74">}</span>-RC<span style="color:#e6db74">${</span>RC<span style="color:#e6db74">}</span> <span style="color:#e6db74">${</span>BRANCH<span style="color:#e6db74">}</span>
</code></pre></div><ul>
<li>Run Maven build with standard profiles</li>
</ul>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash">./mvnw -T 2C -P 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="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash">export GPG_TTY<span style="color:#f92672">=</span><span style="color:#66d9ef">$(</span>tty<span style="color:#66d9ef">)</span>
</code></pre></div><ul>
<li>Run Maven release preparation with <code>signing</code> and profile using RC version numbers</li>
</ul>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash">./mvnw release:prepare -Psigning <span style="color:#ae81ff">\
</span><span style="color:#ae81ff"></span>-DscmCommentPrefix<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;</span><span style="color:#e6db74">${</span>JIRA_TICKET<span style="color:#e6db74">}</span><span style="color:#e6db74">-RC</span><span style="color:#e6db74">${</span>RC<span style="color:#e6db74">}</span><span style="color:#e6db74"> &#34;</span> <span style="color:#ae81ff">\
</span><span style="color:#ae81ff"></span>-Dtag<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;nifi-</span><span style="color:#e6db74">${</span>NIFI_VERSION<span style="color:#e6db74">}</span><span style="color:#e6db74">-RC</span><span style="color:#e6db74">${</span>RC<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span> <span style="color:#ae81ff">\
</span><span style="color:#ae81ff"></span>-DreleaseVersion<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;</span><span style="color:#e6db74">${</span>NIFI_VERSION<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span> <span style="color:#ae81ff">\
</span><span style="color:#ae81ff"></span>-DdevelopmentVersion<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;</span><span style="color:#e6db74">${</span>NEXT_VERSION<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span> <span style="color:#ae81ff">\
</span><span style="color:#ae81ff"></span>-Darguments<span style="color:#f92672">=</span><span style="color:#e6db74">&#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 profile to deploy artifacts to the Apache Nexus Repository</p>
</li>
</ul>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash">./mvnw release:perform -Psigning <span style="color:#ae81ff">\
</span><span style="color:#ae81ff"></span>-DscmCommentPrefix<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;</span><span style="color:#e6db74">${</span>JIRA_TICKET<span style="color:#e6db74">}</span><span style="color:#e6db74">-RC</span><span style="color:#e6db74">${</span>RC<span style="color:#e6db74">}</span><span style="color:#e6db74"> &#34;</span> <span style="color:#ae81ff">\
</span><span style="color:#ae81ff"></span>-Darguments<span style="color:#f92672">=</span><span style="color:#e6db74">&#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="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash">STAGING_DIR<span style="color:#f92672">=</span>~/staging
mkdir <span style="color:#e6db74">${</span>STAGING_DIR<span style="color:#e6db74">}</span>
cd <span style="color:#e6db74">${</span>STAGING_DIR<span style="color:#e6db74">}</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="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash">SOURCE_RELEASE_ZIP<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;https://repository.apache.org/service/local/repositories/</span><span style="color:#e6db74">${</span>STAGING_REPO_ID<span style="color:#e6db74">}</span><span style="color:#e6db74">/content/org/apache/nifi/nifi/</span><span style="color:#e6db74">${</span>NIFI_VERSION<span style="color:#e6db74">}</span><span style="color:#e6db74">/nifi-</span><span style="color:#e6db74">${</span>NIFI_VERSION<span style="color:#e6db74">}</span><span style="color:#e6db74">-source-release.zip&#34;</span>
wget <span style="color:#e6db74">${</span>SOURCE_RELEASE_ZIP<span style="color:#e6db74">}</span>
wget <span style="color:#e6db74">${</span>SOURCE_RELEASE_ZIP<span style="color:#e6db74">}</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="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash">SOURCE_RELEASE_ZIP_FILE<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;nifi-</span><span style="color:#e6db74">${</span>NIFI_VERSION<span style="color:#e6db74">}</span><span style="color:#e6db74">-source-release.zip&#34;</span>
gpg --verify <span style="color:#e6db74">${</span>SOURCE_RELEASE_ZIP_FILE<span style="color:#e6db74">}</span>.asc <span style="color:#e6db74">${</span>SOURCE_RELEASE_ZIP_FILE<span style="color:#e6db74">}</span>
</code></pre></div><ul>
<li>Extract source release archive files</li>
</ul>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash">unzip <span style="color:#e6db74">${</span>SOURCE_RELEASE_ZIP_FILE<span style="color:#e6db74">}</span>
cd nifi-<span style="color:#e6db74">${</span>NIFI_VERSION<span style="color:#e6db74">}</span>
</code></pre></div><ul>
<li>Run Maven command to package binaries</li>
</ul>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash">./mvnw package -pl <span style="color:#ae81ff">\
</span><span style="color:#ae81ff"></span>:minifi-assembly,<span style="color:#ae81ff">\
</span><span style="color:#ae81ff"></span>:minifi-tookit-assembly,<span style="color:#ae81ff">\
</span><span style="color:#ae81ff"></span>:nifi-assembly,<span style="color:#ae81ff">\
</span><span style="color:#ae81ff"></span>:nifi-kafka-connector-assembly,<span style="color:#ae81ff">\
</span><span style="color:#ae81ff"></span>:nifi-toolkit-assembly,<span style="color:#ae81ff">\
</span><span style="color:#ae81ff"></span>:nifi-registry-assembly,<span style="color:#ae81ff">\
</span><span style="color:#ae81ff"></span>:nifi-registry-toolkit-assembly,<span style="color:#ae81ff">\
</span><span style="color:#ae81ff"></span>:nifi-stateless-assembly
</code></pre></div><ul>
<li>Copy binaries to local artifacts directory</li>
</ul>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash">ARTIFACTS_DIR<span style="color:#f92672">=</span>~/staging/artifacts
mkdir <span style="color:#e6db74">${</span>ARTIFACTS_DIR<span style="color:#e6db74">}</span>
cp minifi/minifi-assembly/target/minifi-<span style="color:#e6db74">${</span>NIFI_VERSION<span style="color:#e6db74">}</span>-bin.zip <span style="color:#e6db74">${</span>ARTIFACTS_DIR<span style="color:#e6db74">}</span>
cp minifi/minifi-toolkit/minifi-toolkit-assembly/target/minifi-toolkit-<span style="color:#e6db74">${</span>NIFI_VERSION<span style="color:#e6db74">}</span>-bin.zip <span style="color:#e6db74">${</span>ARTIFACTS_DIR<span style="color:#e6db74">}</span>
cp nifi-assembly/target/nifi-<span style="color:#e6db74">${</span>NIFI_VERSION<span style="color:#e6db74">}</span>-bin.zip <span style="color:#e6db74">${</span>ARTIFACTS_DIR<span style="color:#e6db74">}</span>
cp nifi-external/nifi-kafka-connector-assembly/target/nifi-kafka-connector-assembly-<span style="color:#e6db74">${</span>NIFI_VERSION<span style="color:#e6db74">}</span>.zip <span style="color:#e6db74">${</span>ARTIFACTS_DIR<span style="color:#e6db74">}</span>
cp nifi-registry/nifi-registry-assembly/target/nifi-registry-<span style="color:#e6db74">${</span>NIFI_VERSION<span style="color:#e6db74">}</span>-bin.zip <span style="color:#e6db74">${</span>ARTIFACTS_DIR<span style="color:#e6db74">}</span>
cp nifi-registry/nifi-registry-toolkit/nifi-registry-toolkit-assembly/target/nifi-registry-toolkit-<span style="color:#e6db74">${</span>NIFI_VERSION<span style="color:#e6db74">}</span>-bin.zip <span style="color:#e6db74">${</span>ARTIFACTS_DIR<span style="color:#e6db74">}</span>
cp nifi-stateless/nifi-stateless-assembly/target/nifi-stateless-<span style="color:#e6db74">${</span>NIFI_VERSION<span style="color:#e6db74">}</span>-bin.zip <span style="color:#e6db74">${</span>ARTIFACTS_DIR<span style="color:#e6db74">}</span>
cp nifi-toolkit/nifi-toolkit-assembly/target/nifi-toolkit-<span style="color:#e6db74">${</span>NIFI_VERSION<span style="color:#e6db74">}</span>-bin.zip <span style="color:#e6db74">${</span>ARTIFACTS_DIR<span style="color:#e6db74">}</span>
cp <span style="color:#e6db74">${</span>STAGING_DIR<span style="color:#e6db74">}</span>/nifi-<span style="color:#e6db74">${</span>NIFI_VERSION<span style="color:#e6db74">}</span>-source-release.zip <span style="color:#e6db74">${</span>ARTIFACTS_DIR<span style="color:#e6db74">}</span>
cp <span style="color:#e6db74">${</span>STAGING_DIR<span style="color:#e6db74">}</span>/nifi-<span style="color:#e6db74">${</span>NIFI_VERSION<span style="color:#e6db74">}</span>-source-release.zip.asc <span style="color:#e6db74">${</span>ARTIFACTS_DIR<span style="color:#e6db74">}</span>
cd <span style="color:#e6db74">${</span>ARTIFACTS_DIR<span style="color:#e6db74">}</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="color:#f8f8f2;background-color:#272822;-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:#f92672">=</span>SHA512 minifi-<span style="color:#e6db74">${</span>NIFI_VERSION<span style="color:#e6db74">}</span>-bin.zip
gpg -a -b --digest-algo<span style="color:#f92672">=</span>SHA512 minifi-toolkit-<span style="color:#e6db74">${</span>NIFI_VERSION<span style="color:#e6db74">}</span>-bin.zip
gpg -a -b --digest-algo<span style="color:#f92672">=</span>SHA512 nifi-<span style="color:#e6db74">${</span>NIFI_VERSION<span style="color:#e6db74">}</span>-bin.zip
gpg -a -b --digest-algo<span style="color:#f92672">=</span>SHA512 nifi-kafka-connector-assembly-<span style="color:#e6db74">${</span>NIFI_VERSION<span style="color:#e6db74">}</span>.zip
gpg -a -b --digest-algo<span style="color:#f92672">=</span>SHA512 nifi-registry-<span style="color:#e6db74">${</span>NIFI_VERSION<span style="color:#e6db74">}</span>-bin.zip
gpg -a -b --digest-algo<span style="color:#f92672">=</span>SHA512 nifi-registry-toolkit-<span style="color:#e6db74">${</span>NIFI_VERSION<span style="color:#e6db74">}</span>-bin.zip
gpg -a -b --digest-algo<span style="color:#f92672">=</span>SHA512 nifi-stateless-<span style="color:#e6db74">${</span>NIFI_VERSION<span style="color:#e6db74">}</span>-bin.zip
gpg -a -b --digest-algo<span style="color:#f92672">=</span>SHA512 nifi-toolkit-<span style="color:#e6db74">${</span>NIFI_VERSION<span style="color:#e6db74">}</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="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash">sh -c <span style="color:#e6db74">&#39;sha256sum $1 | cut -d &#34; &#34; -f 1 &gt; $1.sha256&#39;</span> -- minifi-<span style="color:#e6db74">${</span>NIFI_VERSION<span style="color:#e6db74">}</span>-bin.zip
sh -c <span style="color:#e6db74">&#39;sha256sum $1 | cut -d &#34; &#34; -f 1 &gt; $1.sha256&#39;</span> -- minifi-toolkit-<span style="color:#e6db74">${</span>NIFI_VERSION<span style="color:#e6db74">}</span>-bin.zip
sh -c <span style="color:#e6db74">&#39;sha256sum $1 | cut -d &#34; &#34; -f 1 &gt; $1.sha256&#39;</span> -- nifi-<span style="color:#e6db74">${</span>NIFI_VERSION<span style="color:#e6db74">}</span>-source-release.zip
sh -c <span style="color:#e6db74">&#39;sha256sum $1 | cut -d &#34; &#34; -f 1 &gt; $1.sha256&#39;</span> -- nifi-<span style="color:#e6db74">${</span>NIFI_VERSION<span style="color:#e6db74">}</span>-bin.zip
sh -c <span style="color:#e6db74">&#39;sha256sum $1 | cut -d &#34; &#34; -f 1 &gt; $1.sha256&#39;</span> -- nifi-kafka-connector-assembly-<span style="color:#e6db74">${</span>NIFI_VERSION<span style="color:#e6db74">}</span>.zip
sh -c <span style="color:#e6db74">&#39;sha256sum $1 | cut -d &#34; &#34; -f 1 &gt; $1.sha256&#39;</span> -- nifi-registry-<span style="color:#e6db74">${</span>NIFI_VERSION<span style="color:#e6db74">}</span>-bin.zip
sh -c <span style="color:#e6db74">&#39;sha256sum $1 | cut -d &#34; &#34; -f 1 &gt; $1.sha256&#39;</span> -- nifi-registry-toolkit-<span style="color:#e6db74">${</span>NIFI_VERSION<span style="color:#e6db74">}</span>-bin.zip
sh -c <span style="color:#e6db74">&#39;sha256sum $1 | cut -d &#34; &#34; -f 1 &gt; $1.sha256&#39;</span> -- nifi-stateless-<span style="color:#e6db74">${</span>NIFI_VERSION<span style="color:#e6db74">}</span>-bin.zip
sh -c <span style="color:#e6db74">&#39;sha256sum $1 | cut -d &#34; &#34; -f 1 &gt; $1.sha256&#39;</span> -- nifi-toolkit-<span style="color:#e6db74">${</span>NIFI_VERSION<span style="color:#e6db74">}</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="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash">sh -c <span style="color:#e6db74">&#39;sha512sum $1 | cut -d &#34; &#34; -f 1 &gt; $1.sha256&#39;</span> -- minifi-<span style="color:#e6db74">${</span>NIFI_VERSION<span style="color:#e6db74">}</span>-bin.zip
sh -c <span style="color:#e6db74">&#39;sha512sum $1 | cut -d &#34; &#34; -f 1 &gt; $1.sha256&#39;</span> -- minifi-toolkit-<span style="color:#e6db74">${</span>NIFI_VERSION<span style="color:#e6db74">}</span>-bin.zip
sh -c <span style="color:#e6db74">&#39;sha512sum $1 | cut -d &#34; &#34; -f 1 &gt; $1.sha256&#39;</span> -- nifi-<span style="color:#e6db74">${</span>NIFI_VERSION<span style="color:#e6db74">}</span>-source-release.zip
sh -c <span style="color:#e6db74">&#39;sha512sum $1 | cut -d &#34; &#34; -f 1 &gt; $1.sha256&#39;</span> -- nifi-<span style="color:#e6db74">${</span>NIFI_VERSION<span style="color:#e6db74">}</span>-bin.zip
sh -c <span style="color:#e6db74">&#39;sha512sum $1 | cut -d &#34; &#34; -f 1 &gt; $1.sha256&#39;</span> -- nifi-kafka-connector-assembly-<span style="color:#e6db74">${</span>NIFI_VERSION<span style="color:#e6db74">}</span>.zip
sh -c <span style="color:#e6db74">&#39;sha512sum $1 | cut -d &#34; &#34; -f 1 &gt; $1.sha256&#39;</span> -- nifi-registry-<span style="color:#e6db74">${</span>NIFI_VERSION<span style="color:#e6db74">}</span>-bin.zip
sh -c <span style="color:#e6db74">&#39;sha512sum $1 | cut -d &#34; &#34; -f 1 &gt; $1.sha256&#39;</span> -- nifi-registry-toolkit-<span style="color:#e6db74">${</span>NIFI_VERSION<span style="color:#e6db74">}</span>-bin.zip
sh -c <span style="color:#e6db74">&#39;sha512sum $1 | cut -d &#34; &#34; -f 1 &gt; $1.sha256&#39;</span> -- nifi-stateless-<span style="color:#e6db74">${</span>NIFI_VERSION<span style="color:#e6db74">}</span>-bin.zip
sh -c <span style="color:#e6db74">&#39;sha512sum $1 | cut -d &#34; &#34; -f 1 &gt; $1.sha256&#39;</span> -- nifi-toolkit-<span style="color:#e6db74">${</span>NIFI_VERSION<span style="color:#e6db74">}</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="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash">git push upstream <span style="color:#e6db74">${</span>JIRA_TICKET<span style="color:#e6db74">}</span>-RC<span style="color:#e6db74">${</span>RC<span style="color:#e6db74">}</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="color:#f8f8f2;background-color:#272822;-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:#e6db74">${</span>NIFI_VERSION<span style="color:#e6db74">}</span>-RC<span style="color:#e6db74">${</span>RC<span style="color:#e6db74">}</span>
</code></pre></div><ul>
<li>Checkout Apache Distribution Repository using Subversion</li>
</ul>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash">cd <span style="color:#e6db74">${</span>STAGING_DIR<span style="color:#e6db74">}</span>
svn checkout https://dist.apache.org/repos/dist/dev/nifi
cd nifi
</code></pre></div><ul>
<li>Copy and commit binaries to Apache Distribution Repository</li>
</ul>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash">cp -r <span style="color:#e6db74">${</span>ARTIFACTS_DIR<span style="color:#e6db74">}</span> nifi-<span style="color:#e6db74">${</span>NIFI_VERSION<span style="color:#e6db74">}</span>
svn add nifi-<span style="color:#e6db74">${</span>NIFI_VERSION<span style="color:#e6db74">}</span>
svn commit -m <span style="color:#e6db74">&#34;</span><span style="color:#e6db74">${</span>JIRA_TICKET<span style="color:#e6db74">}</span><span style="color:#e6db74"> Uploaded NiFi </span><span style="color:#e6db74">${</span>NIFI_VERSION<span style="color:#e6db74">}</span><span style="color:#e6db74">-RC</span><span style="color:#e6db74">${</span>RC<span style="color:#e6db74">}</span><span style="color:#e6db74"> 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="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash">DIST_DEV_URL<span style="color:#f92672">=</span>https://dist.apache.org/repos/dist/dev/nifi/nifi-<span style="color:#e6db74">${</span>NIFI_VERSION<span style="color:#e6db74">}</span>
DIST_RELEASE_URL<span style="color:#f92672">=</span>https://dist.apache.org/repos/dist/release/nifi/<span style="color:#e6db74">${</span>NIFI_VERSION<span style="color:#e6db74">}</span>
svn move -m <span style="color:#e6db74">&#34;</span><span style="color:#e6db74">${</span>JIRA_TICKET<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span> <span style="color:#e6db74">${</span>DIST_DEV_URL<span style="color:#e6db74">}</span> <span style="color:#e6db74">${</span>DIST_RELEASE_URL<span style="color:#e6db74">}</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="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash">git checkout <span style="color:#e6db74">${</span>BRANCH<span style="color:#e6db74">}</span>
git merge --no-ff <span style="color:#e6db74">${</span>JIRA_TICKET<span style="color:#e6db74">}</span>-RC<span style="color:#e6db74">${</span>RC<span style="color:#e6db74">}</span>
git push upstream <span style="color:#e6db74">${</span>BRANCH<span style="color:#e6db74">}</span>
</code></pre></div><ul>
<li>Create signed Git tag for the release version</li>
</ul>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash">export GPG_TTY<span style="color:#f92672">=</span><span style="color:#66d9ef">$(</span>tty<span style="color:#66d9ef">)</span>
COMMIT_ID<span style="color:#f92672">=</span><span style="color:#e6db74">`</span>git rev-list -n <span style="color:#ae81ff">1</span> nifi-<span style="color:#e6db74">${</span>NIFI_VERSION<span style="color:#e6db74">}</span>-RC<span style="color:#e6db74">${</span>RC<span style="color:#e6db74">}</span><span style="color:#e6db74">`</span>
RELEASE_TAG<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;rel/nifi-</span><span style="color:#e6db74">${</span>NIFI_VERSION<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>
git tag -s <span style="color:#e6db74">${</span>RELEASE_TAG<span style="color:#e6db74">}</span> -m <span style="color:#e6db74">&#34;</span><span style="color:#e6db74">${</span>JIRA_TICKET<span style="color:#e6db74">}</span><span style="color:#e6db74"> Tagged NiFi </span><span style="color:#e6db74">${</span>NIFI_VERSION<span style="color:#e6db74">}</span><span style="color:#e6db74"> </span><span style="color:#e6db74">${</span>COMMIT_ID<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>
</code></pre></div><ul>
<li>Push Git tag to the Apache Git Repository</li>
</ul>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash">git push upstream <span style="color:#e6db74">${</span>RELEASE_TAG<span style="color:#e6db74">}</span>
</code></pre></div><ul>
<li>Delete previous release version from the Apache Distribution Repository</li>
</ul>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash">PREVIOUS_VERSION<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;0.6.0&#34;</span>
PREVIOUS_RELEASE_URL<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;https://dist.apache.org/repos/dist/release/nifi/</span><span style="color:#e6db74">${</span>PREVIOUS_VERSION<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>
svn delete -m <span style="color:#e6db74">&#34;</span><span style="color:#e6db74">${</span>JIRA_TICKET<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span> <span style="color:#e6db74">${</span>PREVIOUS_RELEASE_URL<span style="color:#e6db74">}</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="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash">git commit -m <span style="color:#e6db74">&#34;</span><span style="color:#e6db74">${</span>JIRA_TICKET<span style="color:#e6db74">}</span><span style="color:#e6db74"> Updated Docker version to </span><span style="color:#e6db74">${</span>NEXT_VERSION<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>
git push upstream <span style="color:#e6db74">${</span>BRANCH<span style="color:#e6db74">}</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="color:#f8f8f2;background-color:#272822;-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
cd 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="color:#f8f8f2;background-color:#272822;-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 pleased 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/
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>
</main>
<footer>
<div class="uk-container">
<div class="uk-flex uk-grid uk-grid-large">
<div class="uk-width-1-2@m">
<p>
<a class="uk-link-reset" href="/">
<img src="/images/apache-nifi-logo.svg" class="footer-logo" alt="Apache NiFi Logo"/>
</a>
<a class="uk-link-reset" href="https://apache.org">
<img src="/images/apache-logo.svg" class="footer-logo uk-margin-left" alt="Apache Software Foundation Logo"/>
</a>
</p>
<p>
Copyright &copy; 2024 The Apache Software Foundation under the terms of the
<a href="https://www.apache.org/licenses/LICENSE-2.0.html">Apache License, Version 2.0</a>
</p>
<p>
Apache NiFi, NiFi, and the NiFi logo are trademarks of
<a href="https://apache.org/">The Apache Software Foundation</a>
</p>
</div>
<div class="uk-width-1-4@m">
<h3><a href="/">Project</a></h3>
<ul>
<li><a href="https://issues.apache.org/jira/browse/NIFI">Issues</a></li>
<li><a href="https://github.com/apache/nifi">Source</a></li>
<li><a href="https://www.linkedin.com/company/apache-nifi/">LinkedIn</a></li>
<li><a href="https://join.slack.com/t/apachenifi/shared_invite/zt-2ccusmst2-l2KrTzJLrGcHOO0V7~XD4g">Slack</a></li>
</ul>
</div>
<div class="uk-width-1-4@m">
<h3><a href="https://www.apache.org/">Apache</a></h3>
<ul>
<li><a href="https://www.apache.org/licenses/">License</a></li>
<li><a href="https://privacy.apache.org/policies/privacy-policy-public.html">Privacy</a></li>
<li><a href="https://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
<li><a href="https://www.apache.org/security/">Security</a></li>
<li><a href="https://www.apache.org/foundation/thanks.html">Thanks</a></li>
</ul>
</div>
</div>
</div>
</footer>
<script src="/uikit/js/uikit.min.js"></script>
<script src="/uikit/js/uikit-icons.min.js"></script>
</body>
</html>