Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  1. Ensure you have completed all the steps in the section below: Appendix B: Configure GPG, Maven, and Git for Signing and Deploying. Otherwise, the Maven release plugin may fail at the signing or deploying stage.

  2. Use the Maven Release Plugin to prepare the release with this command:

    Code Block
    languagebash
    mvn --batch-mode release:prepare \
      -Psigned_release \
      -DscmCommentPrefix="${JIRA_TICKET}-RC${RC} " \
      -Dtag="nifi-registry-${VERSION}-RC${RC}" \
      -DreleaseVersion="${VERSION}" \
      -DdevelopmentVersion="${NEXT_VERSION}" \
      -Darguments="-DskipTests"


  3. Review the release preparation results.
    If problems are found, mvn release:rollback will revert the changes, or it may also be necessary to run mvn release:clean to get the project to a state where it can be rebuilt.

  4. If the release preparation completed without problems, perform the release and deploy artifacts to staging:

    Code Block
    languagebash
    mvn release:perform \
      -Psigned_release \
      -DscmCommentPrefix="${JIRA_TICKET}-RC${RC} " \
      -Darguments="-DskipTests"

    When this completes the artifacts have been released to the Apache Nexus staging repository at https://repository.apache.org.
    A local release branch has been created and there should the staging repository ID returned in a log entry like this:

    [INFO] * Closing staging repository with ID "orgapachenifi-1088"

    This staging repository ID is referred to by ${STAGING_REPO_ID}  in this release guide.

  5. Browse to the Apache Staging Repository (https://repository.apache.org) and login with your Apache committer credentials. You should see the newly created staging repository listed. If you click on that you can inspect the various staged artifacts.


  6. Validate that all the various aspects of the staged artifacts appear correct

    1. Download the sources. Do they compile cleanly? If the result is a build does it execute?

    2. Validate the hashes match.
    3. Validate that the sources contain no unexpected binaries.
    4. Validate the signature for the build and hashes.
    5. Validate the LICENSE/NOTICE/Headers.
    6. Validate that the README is present and provides sufficient information to build and if necessary execute.

  7. If the validated artifacts all look good then push the local git branch to the ASF repository.

    Code Block
    languagebash
    git push asf ${JIRA_TICKET}-RC${RC}

    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-registry-${VERSION}-RC${RC}

  8. Create the signature and hashes for the source release and convenience binary files.

    - ASCII armored GPG signatures (--digest-algo=SHA512 selects the SHA512 hash algorithm). Or you can configure GPG to always prefer stronger hashes.
    - Generate SHA256 hash summaries.
    - Generate SHA512 hash summaries.

    Code Block
    languagebash
    # For the source release artifact downloaded from the staging repository, i.e. nifi-registry-${VERSION}-source-release.zip:
    gpg -a -b --digest-algo=SHA512 nifi-registry-${VERSION}-source-release.zip
    shasum -a 256 nifi-registry-${VERSION}-source-release.zip | cut -d" " -f1 >  nifi-registry-${VERSION}-source-release.zip.sha256
    shasum -a 512 nifi-registry-${VERSION}-source-release.zip | cut -d" " -f1 >  nifi-registry-${VERSION}-source-release.zip.sha512
    
    # For the convenience binary nifi-registry-${VERSION}-bin.zip, generated by building the downloaded source in the previous step
    gpg -a -b --digest-algo=SHA512 nifi-registry-${VERSION}-bin.zip
    shasum -a 256 nifi-registry-${VERSION}-bin.zip | cut -d" " -f1 >  nifi-registry-${VERSION}-bin.zip.sha256
    shasum -a 512 nifi-registry-${VERSION}-bin.zip | cut -d" " -f1 >  nifi-registry-${VERSION}-bin.zip.sha512
    
    # For the convenience binary nifi-registry-${VERSION}-bin.tar.gz, generated by building the downloaded source in the previous step
    gpg -a -b --digest-algo=SHA512 nifi-registry-${VERSION}-bin.tar.gz
    shasum -a 256 nifi-registry-${VERSION}-bin.tar.gz | cut -d" " -f1 >  nifi-registry-${VERSION}-bin.tar.gz.sha256
    shasum -a 512 nifi-registry-${VERSION}-bin.tar.gz | cut -d" " -f1 >  nifi-registry-${VERSION}-bin.tar.gz.sha512


  9. For reviewing of the release candidate, commit the source release and convenience binaries files along with their hashes and signatures to
    https://dist.apache.org/repos/dist/dev/nifi/nifi-registry/nifi-registry-${VERSION}.

    Code Block
    languagebash
    svn checkout https://dist.apache.org/repos/dist/dev/nifi dist-dev-nifi
    
    cd dist-dev-nifi/nifi-registry
    
    mkdir nifi-registry-${VERSION}
    # Add source release and binaries to nifi-registry-${VERSION}, along with their corresponding signature and hash files
    
    svn update 
    svn add nifi-registry-${VERSION}
    svn commit -m "${JIRA_TICKET} Staging artifacts for nifi-registry-${VERSION}-RC${RC}" nifi-registry-${VERSION}


...

  1. RM sends a vote request email to the NiFi Developers Mailing List.

    TO: dev@nifi.apache.org
    FROM: ${RM_USERID}@apache.org
    SUBJECT: [VOTE] Release Apache NiFi Registry ${VERSION}
    BODY:

    Expand
    titleTemplate for the email body. Click here to expand...


    No Format
    Hello,
    
    I am pleased to call this vote for the source release of Apache NiFi Registry ${VERSION}.
    
    The source zip, including signatures, digests, etc. can be found at:
    https://dist.apache.org/repos/dist/dev/nifi/nifi-registry/nifi-registry-${VERSION}/
    
    The Git tag is nifi-registry-${VERSION}-RC${RC}
    The Git commit ID is ${RC_TAG_COMMIT_ID}
    https://git-wip-us.apache.org/repos/asf?p=nifi-registry.git;a=commit;h=${RC_TAG_COMMIT_ID}
    
    Checksums of nifi-registry-${VERSION}-source-release.zip:
    SHA256: <64-CHAR-SHA256SUM-HASH>
    SHA512: <128-CHAR-SHA512SUM-HASH>
    
    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/dev/nifi/KEYS
    
    ${NN} issues were closed/resolved for this release:
    ${JIRA_RELEASE_NOTES_URL}
    
    Release note highlights can be found here:
    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. Then please vote:
    
    [ ] +1 Release this package as nifi-registry-${VERSION}
    [ ] +0 no opinion
    [ ] -1 Do not release this package because...



  2. RM sends the following helper email to the NiFi Developers Mailing List.
    TO: dev@nifi.apache.org
    FROM: ${RM_USERID}@apache.org
    SUBJECT: Apache NiFi Registry ${VERSION} RC${RC} Release Helper Guide
    BODY:

    Expand
    titleTemplate for the email body. Click here to expand...


    No Format
    Hello Apache NiFi community,
    
    Please find the associated guidance to help those interested in
    validating/verifying the Apache NiFi Registry release so they can vote.
    
    # Download latest KEYS file:
    https://dist.apache.org/repos/dist/dev/nifi/KEYS
    
    # Import keys file:
    gpg --import KEYS
    
    # [optional] Clear out local maven artifact repository
    
    # Pull down nifi-registry-${VERSION} source release artifacts for review:
    
    wget https://dist.apache.org/repos/dist/dev/nifi/nifi-registry/nifi-registry-${VERSION}/nifi-registry-${VERSION}-source-release.zip
    wget https://dist.apache.org/repos/dist/dev/nifi/nifi-registry/nifi-registry-${VERSION}/nifi-registry-${VERSION}-source-release.zip.asc
    wget https://dist.apache.org/repos/dist/dev/nifi/nifi-registry/nifi-registry-${VERSION}/nifi-registry-${VERSION}-source-release.zip.sha256
    wget https://dist.apache.org/repos/dist/dev/nifi/nifi-registry/nifi-registry-${VERSION}/nifi-registry-${VERSION}-source-release.zip.sha512
    
    # Verify the signature
    gpg --verify nifi-registry-${VERSION}-source-release.zip.asc
    
    # Verify the hashes (sha256, sha512) match the source and what was provided in the vote email thread
    shasum -a 1 nifi-registry-${VERSION}-source-release.zip
    shasum -a 256 nifi-registry-${VERSION}-source-release.zip
    shasum -a 512 nifi-registry-${VERSION}-source-release.zip
    
    # Unzip nifi-registry-${VERSION}-source-release.zip
    
    # Verify the build works including release audit tool (RAT) checks
    cd nifi-registry-${VERSION}
    mvn clean install -Pcontrib-check
    
    # Verify the contents contain a good README, NOTICE, and LICENSE.
    
    # Verify the git commit ID is correct
    
    # Verify the RC was branched off the correct git commit ID
    
    # Look at the resulting convenience binary as found in nifi-registry-assembly/target
    
    # Make sure the README, NOTICE, and LICENSE are present and correct
    
    # Run the resulting convenience binary and make sure it works as expected
    
    # Test integration between the Registry and NiFi
    
    Start the registry
    
        ./bin/nifi-registry.sh start
    
    Create a bucket in the registry
    
    - Go to the registry UI at http://localhost:18080/nifi-registry
    - Click the tool icon in the top right corner
    - Click New Bucket from the bucket table
    - Enter a name and click create
    
    Start NiFi
    
    Tell NiFi about your local registry instance
    
    - Go the controller settings for NiFi from the top-right menu
    - Select the Registry Clients tab
    - Add a new Registry Client giving it a name and the url of http://localhost:18080
    
    Create a process group and place it under version control
    
    - Right click on the PG and select the Version menu
    - Select Start Version Control
    - Choose the registry instance and bucket you want to use
    - Enter a name, description, and comment
    
    Go back to the registry and refresh the main page and you should see the versioned flow you just saved
    
    Import a new PG from a versioned flow
    
    - Drag on a new PG like normal
    - Instead of entering a name, click the Import link
    - Now choose the flow you saved before
    
    You should have a second identical PG now.
    
    # Send a response to the vote thread indicating a +1, 0, -1 based on your findings.
    
    Thank you for your time and effort to validate the release!



  3. Developers in the community review the release candidate and reply to the vote email with their vote.

  4. After 72 hours if at least 3 binding (PMC members) cast +1 votes, and the positive binding votes out number any negative binding votes then 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.

  5. RM sends vote result email.
    TO: dev@nifi.apache.org
    FROM: ${RM_USER}@apache.org
    SUBJECT: [RESULT][VOTE] Release Apache NiFi Registry ${VERSION}
    BODY:

    Expand
    titleTemplate for email body. Click here to expand...


    No Format
    Apache NiFi Community,
    
    I am pleased to announce that the nifi-registry-${VERSION} release of Apache NiFi Registry 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 vote thread: 
    ${VOTE_THREAD_URL}



...

  1. Move convenience binaries and related artifacts from dist/dev to dist/release (note, the release branch requires PMC access):

    Code Block
    languagebash
    svn move -m "${JIRA_TICKET}" https://dist.apache.org/repos/dist/dev/nifi/nifi-registry/nifi-registry-${VERSION} https://dist.apache.org/repos/dist/release/nifi/nifi-registry/nifi-registry-${VERSION}


  2. At https://repository.apache.org, login with your Apache ID credentials, go to Staging Repositories, select Release and follow the instructions on the site.

  3. For the source code git repository, merge the release branch into master:

    Code Block
    languagebash
    git checkout master
    git merge --no-ff ${JIRA_TICKET}-RC${RC}
    git push asf master


  4. Update the Migration Guidance on the Wiki:
    https://cwiki.apache.org/confluence/display/NIFI/Migration+Guidance

  5. Update the wiki release notes with the final date of the release:
    https://cwiki.apache.org/confluence/display/NIFI/Release+Notes

  6. Update the NiFi website to point to the new download(s).
    - Remove older release artifacts from download page (leave the current release and the previous one). 
    - For the release just previous to this new one change the links to point to the archive location. See current page as an example of the needed URL changes. 
    - In addition to updating the download page as described delete artifacts other than the current/new release from the dist/nifi SVN storage. They are already in the archive location so no need to do anything else.

  7. If the release is on the latest development line, update the NiFi website documentation pages for NiFi Registry to match the release.
    - Run the NiFi Registry ${VERSION}
    - Pull down the documentation by running wget -prk http://${host}:${port}/nifi-registry-docs/documentation
    - Rename the file index file that was generated by running mv ${host}:${port}/nifi-registry-docs/documentation ${host}:${port}/nifi-registry-docs/index.html
    - Use svn to replace the nifi and nifi-docs folders in https://svn.apache.org/repos/asf/nifi/site/trunk/docs with those in the ${host}:${port} directory pulled down above

  8. In Jira, mark the ${JIRA_TICKET} resolved. All tickets for the Jira release version should now be resolved or closed.
    Mark the release version for ${VERSION} as 'Released' and 'Archived' using the NiFi Registry Versions management page. 
    This may also be a good time to create a Jira version for the next planned release of ${NEXT_VERSION} (usually the next minor version).

  9. Ensure the release artifacts are successfully mirrored to the archive, specifically https://archive.apache.org/dist/nifi/nifi-registry/nifi-registry-${VERSION}/nifi-registry-${VERSION}-bin.tar.gz.
    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.

    Info
    titleDocker Image Note
    When the Docker image build is automated (as of this writing, not currently setup for NiFi Registry), then it is triggered by pushing the signed tag in the next step. The release artifacts must be present in the archive before continuing.


  10. Create a proper signed tag of the released codebase based on the RC tag created during the Maven release process.
    For instructions on setting up to sign your tag see: http://gitready.com/advanced/2014/11/02/gpg-sign-releases.html or the Appendix B section below.

    Code Block
    languagebash
    # create the tag in your local repo
    git tag -s rel/nifi-registry-${VERSION} -m "${JIRA_TICKET} signed release tag for approved release of NiFi Registry ${VERSION}" ${RC_TAG_COMMIT_ID}
    
    
    # push the tag to the ASF repo
    git push asf rel/nifi-registry-${VERSION}


  11. Build the new Docker image based on the artifacts accessible via the archive.apache.org mirror. Tag the image as the current version and latest and push to the official repository. (TODO, expand these instructions for doing this manually or setup automation with ASF Infra as we have to NiFi.)

  12. Update Docker version information for the dockerhub image to point to the next release. For instance, if the ${NEXT_VERSION} is 0.4.0-SNAPSHOT, these values should be updated to 0.4.0, so that at the time of the next release they will reference the correct version number. This currently consists of two files:

    - nifi-registry-core/nifi-registry-docker/dockerhub/Dockerfile, Line 24, and
    - nifi-registry-core/nifi-registry-docker/dockerhub/DockerImage.txt, Line 16.

  13. After the release has been complete for 24 hours send the release announcement email.

    Info
    For an understanding of why you need to wait 24 hours, see: https://www.apache.org/dev/release.html#release-announcements

    TO: announce@apache.org, dev@nifi.apache.org
    REPLY-TO: dev@nifi.apache.org
    FROM: ${RM_USER}@apache.org
    SUBJECT: [ANNOUNCE] Apache NiFi Registry ${VERSION} Release

    BODY:

    Expand
    titleTemplate for email body. Click here to expand...


    No Format
    Hello,
    
    The Apache NiFi team would like to announce the release of Apache NiFi Registry ${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.
    
    
    Registry, a subproject of Apache NiFi, is a complementary application that provides a central location for storage and management of shared resources across one or more instances of NiFi or MiNiFi.
    
    More details on Apache NiFi Registry, along with release artifacts, can be found here:
    https://nifi.apache.org/registry.html
    
    Maven artifacts have been made available here:
    https://repository.apache.org/content/repositories/releases/org/apache/nifi/registry/
    
    Issues closed/resolved for this list can be found here:
    ${JIRA_RELEASE_NOTES_URL}
    
    Release note highlights can be found here:
    https://cwiki.apache.org/confluence/display/NIFI/Release+Notes#ReleaseNotes-NiFiRegistry${VERSION}
    
    Thank you,
    The Apache NiFi team



...