...
- Notify developers on the mailing list that you are about to branch a release.
Create a branch for the release series:
Code Block git clone -b master https://git-wip-usgitbox.apache.org/repos/asf/zookeeper.git # create new branch-X.Y from master branch git checkout -b branch-X.Y master # push the new branch to remote repo git push <remote> branch-X.Y
Checkout master branch.
Code Block git checkout master
- Update the default version in build.xml on master to X.Y+1.0-SNAPSHOT.
- Update the version number in src/c/configure.ac and src/c/include/zookeeper_version.h to be X.Y+1.0.
Commit these changes to master.
Code Block # check for modified files git status # add individual files one by one git add build.xml git add src/c/configure.ac git add src/c/include/zookeeper_version.h # commit and push the changes to remote repo git commit -m "Preparing for X.Y+1.0 development" git push <remote> master
...
Check out the branch with:
Code Block git clone -b branch-X.Y https://git-wip-usgitbox.apache.org/repos/asf/zookeeper.git
If you are creating a point release (almost always the case) then follow this step. The exception to this is typically only when creating a new release candidate because the previous candidate failed during voting (rc0 failed and you are creating rc1+) – in which case skip this step.
Create a branch for X.Y.Z (the current release candidate)
Code Block git branch branch-X.Y.Z git push <remote> branch-X.Y.Z
Update the version number in build.xml, src/c/configure.ac, src/c/CMakeLists.txt, and src/c/include/zookeeper_version.h to the next logical SNAPSHOT version (e.g. X.Y.Z to X.Y.(Z+1)-SNAPSHOT)
Commit this change.Code Block # check for modified files git status # add modified files one by one git add <modified files> # commit and push the changes to remote repo branch-X.Y git commit -m "Prepare for the next release: update the version to X.Y.(Z+1)-SNAPSHOT" git push <remote> branch-X.Y
Checkout the active point release branch - this is where you will be creating the release candidate
Code Block git checkout branch-X.Y.Z
If not already done, cherry-pick desired commits into branch-X.Y.Z. If cherry-picks are done from other than branch-X.Y ensure that those changes are also committed to branch-X.Y. If there are conflicts, then it is preferable to produce a new patch for this branch, review it separately and commit it via JIRA. Please refer HowToContribute and Committing changes page for pushing changes to the project.
Code Block # The -x option records the source commit, and reuses the original commit message git cherry-pick -x <commit-hash>
- Do a final pass regeneration of docs by running "ant -Dforrest.home=<path to Forrest> clean docs". If there are any modifications, then they'll show up under the docs folder. If there are any changes, then commit them. However, DO NOT commit changes in docs/releasenotes.html or docs/releasenotes.pdf. (Release notes are handled in a separate step.) Release notes should be regenerated each time a documentation patch is committed. This final pass before the release is intended to catch mistakes in case this step was missed at commit time.
- Update docs/releasenotes.html with release notes for this release. You can get the HTML by following the "Release Notes" link for the relevant release on the https://issues.apache.org/jira/browse/ZOOKEEPER?report=com.sourcelabs.jira.plugin.portlet.releases:releases-projecttab#selectedTab=com.atlassian.jira.plugin.system.project%3Aroadmap-panel tab in Jira. Note that you need to exclude the won't fix or invalid tickets.
- Update the version number in build.xml to be ''X.Y.Z'' (i.e. remove SNAPSHOT designator)
- Update the version number in src/c/configure.ac, src/c/CMakeLists.txt, and src/c/include/zookeeper_version.h to be ''X.Y.Z''
- Update the copyright years in NOTICE.txt if it's outdated.
Commit these changes.
Code Block # check for modified files git status # add modified files one by one git add <modified files> # commit and push the changes to remote repo branch-X.Y git commit -m "Preparing for release X.Y.Z" git push <remote> branch-X.Y.Z
Tag the release candidate (R is the release candidate number, and starts from 0):
Code Block # create a signed tag git tag -s release-X.Y.Z-rcR -m "ZooKeeper X.Y.Z-rcR release." # push the newly created rc tag to the remote repo. git push <remote> release-X.Y.Z-rcR
...
Tag the release. Do it from the release branch and push the created tag to the remote repository:
Code Block # create a signed tag git tag -s release-X.Y.Z -m "ZooKeeper X.Y.Z release." # push the newly created release tag to the remote repo. git push <remote> release-X.Y.Z
- Check in release files to the distribution server
Code Block svn co https://dist.apache.org/repos/dist/release/zookeeper/ zookeeper_dist cd zookeeper_dist mkdir zookeeper-X.Y.Z # copy tgz/asc/checksum files from your public_html to zookeeper-X.Y.Z svn add zookeeper-X.Y.Z svn ci -m "Add ZooKeeper X.Y.Z release"
- After checking in the release, you'll receive an automated email from reporter.apache.org with a link requesting additional details about the release. This form must be completed by a PMC member. If you are a PMC members, follow the link and complete the form. If you are not a PMC member, forward the email to dev@zookeeper.apache.org and ask for assistance from a PMC member.
The release directory usually contains just two releases, the most recent from two branches, with a link named 'stable' to the most recent recommended version.
Code Block cd zookeeper_dist # don't do the following rm for the time being, until we are sure the new rel is actually stable --> ### rm -rf zookeeper-A.B.C rm stable; rm current ln -s zookeeper-A.B.D stable ln -s zookeeper-A.B.D current svn ci -m 'Updating links'
- Release the Maven artifacts on Apache Nexus:
- Click on 'Staging repositories'.
- Select the repository corresponding to the release candidate.
- Click on the 'Release' button and follow instructions.
- Wait 24 hours for release to propagate to mirrors.
Prepare to edit the website. ZooKeeper uses Jekyll/Markdown with gitpubsub. See WebSiteSetup for general instructions and tool setup/prerequisites.
Code Block git clone -b website https://git-wip-usgitbox.apache.org/repos/asf/zookeeper.git
Copy the new release documentation into the _released_docs directory
Code Block cd _released_docs mkdir rX.Y.Z cd rX.Y.Z tar xvf zookeeper-X.Y.Z.tar.gz 'zookeeper-X.Y.Z/docs' mv zookeeper-X.Y.Z/docs/* . rm -r zookeeper-X.Y.Z # Update the "current" doc pointer if necessary (next 2 lines) rm current ln -s rX.Y.Z current cd .. git add rX.Y.Z current cd ..
- Update the release news in releases.md
- Update the nav panel to include X.Y.Z in _includes/sidenav.md, move previous version(s) to documentation.md (next step)
- Update documentation.md to include the previous version(s)
Stage changes to git
Code Block git add releases.md documentation.md
Regenerate the site, review it, then commit it. (install Jekyll/pygments if you haven't already - see the README.md in website branch)
Code Block jekyll build cp -RP _released_docs _site/doc # at this point verify that the site is working properly - open _site/index.html # once you are happy move on to the next step... git commit -m "Updated website content for release X.Y.Z." git push origin website
Deploy: you are now ready to deploy the changes to the public website using gitpubsub. Using the same repo as the previous step:
Code Block git checkout asf-site rm -fr content mv _site content git add content # verify that the content of "content" looks proper. open content/index.html in a browser and verify, etc... # verify git staging looks proper - remember, we added the release docs to content/doc/rX.Y.Z and that will also be added here git commit -m "Website update for release X.Y.Z" git push origin asf-site
If the apache zookeeper website does not update, check if the commit is mirrored into github.com/apache/zookeeper asf-site branch
Send announcements to the user and developer lists once the site changes are visible. Here is a sample email:
No Format Subject: [ANNOUNCE] Apache ZooKeeper X.Y.Z The Apache ZooKeeper team is proud to announce Apache ZooKeeper version X.Y.Z ZooKeeper is a high-performance coordination service for distributed applications. It exposes common services - such as naming, configuration management, synchronization, and group services - in a simple interface so you don't have to write them from scratch. You can use it off-the-shelf to implement consensus, group management, leader election, and presence protocols. And you can build on it for your own, specific needs. For ZooKeeper release details and downloads, visit: http://zookeeper.apache.org/releases.html ZooKeeper X.Y.Z Release Notes are at: http://zookeeper.apache.org/doc/rX.Y.Z/releasenotes.html We would like to thank the contributors that made the release possible. Regards, The ZooKeeper Team
- In Jira, ensure that only issues in the "Fixed" state have a "Fix Version" set to release X.Y.Z.
- In Jira, "release" the version. Visit the "Administer Project" page, then the "Manage versions" page. You need to have the "Admin" role in ZooKeeper's Jira for this step and the next.
- In Jira, close issues resolved in the release. Disable mail notifications for this bulk change.
...