Please do not edit this page. Content has been migrated to the new website being developed. Pull requests are welcome for the source there. |
This document describes the process to release Apache Ozone. The process is not yet scripted, and the documentation is a work in progress
The release manager should have a gpg key setup to sign the artifacts. For more details refer to below link.
https://www.apache.org/dev/new-committers-guide.html#set-up-security-and-pgp-keys
The key is supposed to be published together with the release. Please append it to the end of KEYS files:
https://dist.apache.org/repos/dist/release/ozone/KEYS
svn co https://dist.apache.org/repos/dist/release/ozone cd ozone export CODESIGNINGKEY=your_gpg_key_id gpg --list-sigs $CODESIGNINGKEY >> KEYS gpg --armor --export $CODESIGNINGKEY >> KEYS svn commit -m "ozone: adding key of XXXX to the KEYS" |
In case you are only a committer and not a PMC member, you can add your key to the dev KEYS file and a PMC can move it to the final destination
#use latest KEYS as the base svn rm https://dist.apache.org/repos/dist/dev/ozone/KEYS svn cp https://dist.apache.org/repos/dist/release/ozone/KEYS https://dist.apache.org/repos/dist/dev/ozone/KEYS svn co https://dist.apache.org/repos/dist/dev/ozone cd ozone export CODESIGNINGKEY=your_gpg_key_id gpg --list-sigs $CODESIGNINGKEY >> KEYS gpg --armor --export $CODESIGNINGKEY >> KEYS svn commit -m "ozone: adding key of XXXX to the KEYS" |
This provides visibility into the progress of the release for the community. Tasks mentioned in this guide like cherry-picking fixes on to the release branch, updating the ozone website, publishing the docker image, etc can be added as subtasks.
Issue a Jira query like this, modified for the release number you are working with, to find all unresolved Jiras that have the target version field set to this release. Note that some people incorrectly use Fix Version as the Target Version, so Fix Version is included in this search. Use the following steps to issue a bulk update to these Jiras:
Tools and under Bulk Change , select all ... issues .Next .Edit Issues , then click Next .Change Fix Version/s , and in the drop down select Clear field .Change Target Version/s , and enter the version of the release after the one you are managing.Change Comment , and add a comment saying that you have moved the release field out, but if the issue is being actively worked on, is close to completion, and would like to be included in this release, to contact you by a given date, probably a week in the future.Change Comment , it actually adds a comment to the Jira and does not affect existing comments.After the date specified in the Jira comments has passed and blocking issues have been resolved, you can create a release branch in the main apache/ozone github repo. Name the branch after the major and minor version of the release, so patch releases can also be done off this branch. For example, If releasing 1.2.0, create a branch called ozone-1.2 . All release related changes will go to this branch until the release is complete, after which some changes mentioned below will be cherry picked to master .
The following variables will be referenced in commands.
export VERSION=1.1.0 # Set to the version of ozone being released. export RELEASE_DIR=~/ozone-release/ # ozone-release needs to be created export CODESIGNINGKEY=<your_gpg_key_id> export RC=0 # Set to the number of the current release candidate, starting at 0. |
It is probably best to clone a fresh ozone repository locally to work on the release, and leave your existing repository intact for dev tasks you may be working on simultaneously. After cloning, make sure the apache/ozone upstream repo is named origin . This is required for release build metadata to be correctly populated. Assume all following commands are executed from within this repo with your release branch checked out.
git reset --hard git clean -dfx |
Use below command or use IDE to replace "${VERSION}-SNAPSHOT" with "${VERSION}".
find . -name pom.xml -type f | xargs sed -i "s/${VERSION}-SNAPSHOT/${VERSION}/g" |
find . -name pom.xml -type f -print0 | xargs -0 sed -i '' "s/${VERSION}-SNAPSHOT/${VERSION}/g" |
git commit -am "Update Ozone version to $VERSION" |
Protolock files are used to check backwards compatibility of protocol buffers between releases. The ozone build checks protocol buffers against these lock files and fails if an incompatibility is detected. They should be updated for each release, and require protolock to be installed. Save and run the following script from your ozone repo root, and then commit the changed files to git. Double check that only files called proto.lock are being committed, and that the changes to the files makes sense based on new features added in this release.
#!/usr/bin/env sh
for lock in $(find . -name proto.lock); do
lockdir="$(dirname "$lock")"
protoroot="$lockdir"/../proto
if protolock status --lockdir="$lockdir" --protoroot="$protoroot"; then
protolock commit --lockdir="$lockdir" --protoroot="$protoroot"
else
echo "protolock update failed for $protoroot"
fi
done |
git commit -m "update proto.lock for Ozone $VERSION" |
This will sign the tag with the gpg key matching the git mailing address. Make sure that the email given by git config user.email matches the email for the key you want to use shown by gpg --list-secret-keys .
git tag -s "ozone-${VERSION}-RC${RC}" |
If the command fails on MacOS, you may need to do the following additional steps:
brew install pinentry-mac git config --global gpg.program "$(which gpg)"git config --global user.signingKey <gpg_key_id>echo "pinentry-program $(which pinentry-mac)" > ~/.gnupg/gpg-agent.conf gpgconf --kill gpg-agent ./hadoop-ozone/dev-support/checks/rat.sh |
git reset --hard git clean -dfx |
mvn clean install -Dmaven.javadoc.skip=true -DskipTests -Psign,dist,src -Dtar -Dgpg.keyname="$CODESIGNINGKEY" |
cp hadoop-ozone/dist/target/ozone-*.tar.gz "$RELEASE_DIR"/ |
cd "$RELEASE_DIR"
for i in $(ls -1 *.tar.gz); do gpg -u "$CODESIGNINGKEY" --armor --output "${i}.asc" --detach-sig "$i"; done
for i in $(ls -1 *.tar.gz); do sha512sum "$i" > "${i}.sha512"; done
for i in $(ls -1 *.tar.gz); do gpg --print-mds "$i" > "${i}.mds"; done |
Now each .tar.gz file should have an associated .mds file, .asc file, and .sha512 file
Before uploading the artifacts, run some basic tests on them, similar to what other devs will run before voting in favor of the release.
~/.m2 directory before doing the build.gpg --import KEYS gpg --verify <artifact>.tar.gz.asc <artifact>.tar.gz shasum -a 512 *.tar.gz hugo was not installed during the build and it must be re-done.bin/ozone version from the extracted release tarballtest.sh from the compose/upgrade directory in the extracted release tarball.svn mkdir https://dist.apache.org/repos/dist/dev/ozone/"${VERSION}-rc${RC}"
svn co https://dist.apache.org/repos/dist/dev/ozone/"${VERSION}-rc${RC}"
cp "$RELEASE_DIR"/* "${VERSION}-rc${RC}"
cd "${VERSION}-rc${RC}"
svn add *
svn commit -m "Ozone $VERSION RC$RC" |
Double check if your apache credentials are added to your local ~/.m2/settings.xml
<settings>
<servers>
<server>
<id>apache.snapshots.https</id>
<username>your_apache_id</username>
<password>your_apache_password</password>
</server>
<!-- To stage a release of some part of Maven -->
<server>
<id>apache.staging.https</id>
<username>your_apache_id</username>
<password>your_apache_password</password>
</server>
</servers>
</settings> |
Return to your Ozone repository being used for the release, and run the following command:
mvn deploy -Psign -pl '!:ozone-dist' -DskipTests -Dbuildhelper.skipAttach |
Go to https://repository.apache.org/#stagingRepositories and close the newly created orgapacheozone repository.
git push origin "ozone-${VERSION}-RC${RC}" |
dev@ozone <dev@ozone.apache.org>
Include the following items in the email:
If no issues are found with the artifacts, let the vote run for 7 days. Review https://www.apache.org/legal/release-policy.html#release-approval for the ASF wide release voting policy. Note what is required of binding voters, and that binding votes can only come from PMC members. Sometimes responders will not specify whether or not their vote is binding. If in doubt check https://people.apache.org/committer-index.html. Users whose group membership includes ozone-pmc can cast binding votes.
Once voting is finished, send an email summarizing the results (binding +1s, non-binding +1s, -1s, 0s) and, if the vote passed, indicate that the release artifacts will be published. If an issue is found with the artifacts, apply fixes to the release branch and repeat the steps starting from tagging the commit for the release candidate with the $RC variable incremented by 1 for all steps.
You should commit the artifacts to the SVN repository. If you are not a PMC member you can commit it to the dev zone first and ask a PMC for the final move.
Checkout the svn folder & commit the artifacts to a new directory.
svn checkout https://dist.apache.org/repos/dist/dev/ozone cd ozone svn mkdir "$VERSION" cp "$RELEASE_DIR"/* "$VERSION"/ svn add "$VERSION"/* svn commit -m "Added ozone-$VERSION directory" |
PMC members can move it to the final location:
svn mv -m "commit msg" https://dist.apache.org/repos/dist/dev/ozone/"$VERSION" https://dist.apache.org/repos/dist/release/ozone/"$VERSION" |
To publish the artifacts to the central maven, login to https://repository.apache.org/#stagingRepositories, select your staging repository and release it.
Check the tag from the Ozone Roadmap page (it's a national park).
Find a photo which is under the CC license.
Write a haiku to the photo with Future font.
master .asf-site , and that the docs/current symlink has been updated to point to the latest release's directory.hugo serve from the repository root with the master branch checked out. Check that links for the new release are working. Links to the documentation will not work until the PR to the asf-site branch is merged.git checkout "ozone-${VERSION}-RC${RC}"
git tag -s "ozone-${VERSION}" -m "Ozone $VERSION release"
git push origin "ozone-${VERSION}" |
Past Releases section.Upcoming Releases section, and add planned features that you are aware of.Include the following links:
The Ozone docker image is intended for testing purposes only, not production use. Therefore, it is ok to update this after announcing the release. An example pull request to update the docker image is here. The target branch for your pull request should be latest. After the pull request is merged, it can be published to docker hub by fast-forwarding the ozone-latest branch to match the latest branch. Also, create a new branch named like ozone-1.5.0 (replace the version) and push it to GitHub.
git checkout ozone-latest
git pull
git merge --ff-only origin/latest
git checkout -b "ozone-${VERSION}"
git push origin ozone-latest "ozone-${VERSION}" |
If there is a security vulnerability or critical bug uncovered in a major or minor Ozone release, a patch release may be necessary to fix this. The process is a bit simpler than a major or minor release, since there is already a solid foundation on the release's maintenance branch.
In the event of a critical security vulnerability or seriously harmful bug with a small set of changes in the patch, PMC members may vote to forgo the usual 72 hour minimum time for a release vote and publish once there are enough binding +1s.
Remove the previous patch release from Apache distribution site:
svn rm -m 'Ozone: delete old version 1.2.0' https://dist.apache.org/repos/dist/release/ozone/1.2.0 |
After finishing the release process, update this page to fix any mistakes, unclear steps, or outdated information.