Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Added Website and Release Tracking Sections

Table of Contents

Summary

Apache NiFi releases involve a Release Manager and members of the project community in various roles. The process involves both technical and procedural steps.

...

Code Block
languagebash
titleprepare-email.sh
#!/bin/bash

# Load configuration
source ./configuration.sh

# Get Apache Nexus Repository number from staging artifacts
REPOSITORIES_URL=https://repository.apache.org/content/repositories/
REPOSITORY_NAME=$(curl -s ${REPOSITORIES_URL}|grep orgapachenifi|cut -d '>' -f 3|cut -d / -f 1)

# Get Jira Version and Issues
VERSIONS_JSON=$(curl -s https://issues.apache.org/jira/rest/api/2/project/NIFI/versions)
JIRA_VERSION=$(echo ${VERSIONS_JSON}|jq -r ".[] | select(.name==\"${RELEASE_VERSION}\") | .id" )
PROJECT_ID=$(echo ${VERSIONS_JSON}|jq -r ".[] | select(.name==\"${RELEASE_VERSION}\") | .projectId" )
JIRA_RELEASE_NOTES="https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=${PROJECT_ID}&version=${JIRA_VERSION}"

# Get Total Issues
ISSUES_JSON=$(curl -s https://issues.apache.org/jira/rest/api/2/version/${JIRA_VERSION}/relatedIssueCounts)
TOTAL_ISSUES=$(echo ${ISSUES_JSON}|jq -r ".issuesFixedCount")

# Set total number of Jira issues changed
TOTAL_ISSUES=0

# Set SHA-512 hash of source release archive
SHA512_HASH=`cat ${WORK_DIR}/${GIT_REPO}/target/${ARTIFACT_ID}-${RELEASE_VERSION}-source-release.zip.sha512`

# Change to cloned working directory
cd ${WORK_DIR}/${GIT_REPO}

# Get current Git commit ref
GIT_COMMIT_ID=`git rev-parse HEAD`
PROJECT_LABEL="Apache NiFi"

echo """
[VOTE] Release ${PROJECT_LABEL} ${RELEASE_VERSION} (RC${CANDIDATE_NUMBER})

Team,

I am pleased to be calling this vote for the source release of ${PROJECT_LABEL} ${RELEASE_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 the and the convenience binaries are available on the Apache Distribution Repository:

${DIST_DEV_REPO}${ARTIFACT_ID}-${RELEASE_VERSION}

The build artifacts are available on the Apache Nexus Repository:

${REPOSITORIES_URL}${REPOSITORY_NUMBER}/

Git Tag: ${GIT_REPO}-${RELEASE_VERSION}-RC${CANDIDATE_NUMBER}
Git Commit ID: ${GIT_COMMIT_ID}
GitHub Commit Link: https://github.com/apache/${GIT_REPO}/commit/${GIT_COMMIT_ID}

Hashes of ${ARTIFACT_ID}-${RELEASE_VERSION}-source-release.zip

SHA512: ${SHA512_HASH}

Release artifacts are signed with the following key:

https://people.apache.org/keys/committer/${GIT_COMMITTER_NAME}.asc

KEYS file is available on the Apache Distribution Repository:

https://dist.apache.org/repos/dist/release/nifi/KEYS

Issues resolved for this version: ${TOTAL_ISSUES}

${JIRA_RELEASE_NOTES}

Release note highlights can be found on the project wiki:

https://cwiki.apache.org/confluence/display/NIFI/Release+Notes#ReleaseNotes-Version${RELEASE_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 ${ARTIFACT_ID}-${RELEASE_VERSION}
[] +0 no opinion
[] -1 Do not release this package because...
"""

...

Release

...

Candidate Repository Updates

After a positive release candidate vote thread approving the release, move the binary release artifacts from the development directory to the release directorythe source branch should be updated.

Create Signed Tag

Create a signed Git tag and push to source repository.

Code Block
languagebash
titledistributecreate-binary-artifactstag.sh
#!/bin/bash

# Load configuration
source ./configuration.sh

# Change to distributionsource directory
cd ${DISTWORK_DIR}/${GIT_REPO}

# Set locations
DIST_DEV_URL=${DIST_DEV_REPO}/${ARTIFACT_ID}-${RELEASE_VERSION}
DIST_RELEASE_URL=${DIST_RELEASE_REPO}/${RELEASE_VERSIONCreate signed Git tag
git tag -u ${GIT_SIGNING_KEY} -s ${GIT_RELEASE_TAG} -m "${JIRA_ISSUE} Released version ${RELEASE_VERSION}" ${GIT_CANDIDATE_TAG}

# MovePush binarytag artifactsto withsource Subversionrepository
svngit movepush -mupstream "${JIRA_ISSUE}" ${DIST_DEV_URL} ${DISTGIT_RELEASE_URLTAG}

Create Signed Tag

Merge Changes

Merge version changes from release branch to main branchCreate a signed Git tag and push to source repository.

Code Block
languagebash
titlecreatemerge-tagchanges.sh
#!/bin/bash

# Load configuration
source ./configuration.sh

# Change to source directory
cd ${WORK_DIR}/${GIT_REPO}

# CreateFetch signedcurrent Gitupstream tagbranch
git tag -u fetch upstream

# Rebase upstream changes
git checkout ${GIT_SIGNINGSOURCE_KEYBRANCH}
git -srebase upstream/${GIT_RELEASESOURCE_TAG} -m "${JIRA_ISSUE} Released version ${RELEASE_VERSION}"BRANCH}

# Merge changes
git merge --no-ff ${GIT_CANDIDATE_BRANCH} --gpg-sign=${GIT_SIGNING_KEY} -m "${JIRA_ISSUE} Merged ${GIT_CANDIDATE_TAGBRANCH}"

# Push tagchanges to source repository
git push upstream ${GIT_RELEASESOURCE_TAGBRANCH}

Merge Changes

Set Next Version

Set next snapshot version and push to source repositoryMerge version changes from release branch to main branch.

Code Block
languagebash
titlemergeset-next-changesversion.sh
#!/bin/bash

# Load configuration
source ./configuration.sh

# Change to source directory
cd ${WORK_DIR}/${GIT_REPO}

# FetchSet currentNext upstreamSnapshot branch
git fetch upstreamVersion
./mvnw versions:set -DgenerateBackupPoms=false -DnewVersion=${NEXT_SNAPSHOT_VERSION}

# RebaseCommit upstream changesVersion
git checkout commit --gpg-sign=${GIT_SOURCESIGNING_BRANCHKEY}
git rebase upstream/${GIT_SOURCE_BRANCH}

# Merge changes
git merge -a --no-ffauthor "${GIT_CANDIDATE_BRANCHAUTHOR}" --gpg-sign=${GIT_SIGNING_KEY} -m "${JIRA_ISSUE} MergedUpdated version to ${GITNEXT_CANDIDATESNAPSHOT_BRANCHVERSION}"

# Push changes to source repositoryUpdated Version
git push upstream ${GIT_SOURCE_BRANCH}

Set Next Version

Release Binary Artifacts

The binary release process consists of publishing artifacts through standard distribution channels.

Distribute Binary Release Artifacts

Move the binary release artifacts from the development directory to the release directorySet next snapshot version and push to source repository.

Code Block
languagebash
titlesetdistribute-nextbinary-versionartifacts.sh
#!/bin/bash

# Load configuration
source ./configuration.sh

# Change to sourcedistribution directory
cd ${WORKDIST_DIR}/${GIT_REPO}

# Set Next Snapshot Version
./mvnw versions:set -DgenerateBackupPoms=false -DnewVersion=${NEXT_SNAPSHOTlocations
DIST_DEV_URL=${DIST_DEV_REPO}/${ARTIFACT_ID}-${RELEASE_VERSION}
DIST_RELEASE_URL=${DIST_RELEASE_REPO}/${RELEASE_VERSION}

# Commit Version
git commit --gpg-sign=${GIT_SIGNING_KEY} -a --author "${GIT_AUTHOR}" -m "${JIRA_ISSUE} Updated version to ${NEXT_SNAPSHOT_VERSION}"

# Push Updated Version
git push upstreamMove binary artifacts with Subversion
svn move -m "${JIRA_ISSUE}" ${DIST_DEV_URL} ${DIST_RELEASE_URL}

Publish Binary Artifacts through Nexus

The Apache Nexus Repository containing the binary artifacts should be marked as Released for subsequent distribution through Maven Central.

Update Website Versions

The Apache NiFi website includes download links for the released version and documentation generated based on versioned binaries.

Clone Website Repository

The Apache NiFi website repository contains the source for the project website, which can be updated using a commit to the main branch.

Update Website Version References

The Apache NiFi website repository has a current version configuration property that should be updated to reflect the released version.

The project configuration in config.toml has several version properties that should be updated.

Code Block
languagebash
titleconfig.toml
currentProjectVersion = "2.1.0"
currentProjectVersionReleased = "2024-12-23"

Commit and push the changes to the main branch with a commit message that references the release candidate Jira number.

The GitHub Actions workflow publishes changes for download links and documentation.

Update Release Tracking

Jira releases and release notes should be updated to indicate the date of the release.

Update Release Notes

The Apache NiFi Release Notes page should be updated to indicate the date of the release for the associated version.

Update Jira Releases

The Apache NiFi Releases section in Jira should be updated with the date of the release. The Actions menu associated with the release version has item labeled Release that should be selected to set the released status.

Update Migration Guide

The Apache NiFi Migration Guidance page should be updated with a new section for the associated version when there are notable changes required for moving from a previous version.