This page describes the steps that a release manager needs to take to perform a release of Apache CloudStack's CloudMonkey CLI tool.
Prior to an official vote, start a thread on the cloudstack-dev mailing list, specifically asking for comments on the project's readiness to cut a release.
Once it appears that any outstanding blockers have been addressed, you can proceed to the next step.
Update your local git repo's master branch from the ASF repository:
git fetch origin
Make sure your local copy exactly matches the remote repo:
git reset --hard HEAD git clean -qfxd git rebase origin/master
Then run the source build script (Replacing the parameters: X.X.X=your official version number for the release; CCCC=the GPG Key to sign both the artifacts and the git tag with):
./performrelease.sh -v X.X.X -c -t
( optionally specifying your local directory layout - see performrelease.sh -h for details )
This will automatically commit (the -c) to the cloudstack dist dev folder.
Get the commit-sh to vote against for your VOTE email (comes from the command above in a line like this: completed. use commit-sh of b25d27d80b62de3408041821aa99e68712ae2728 when starting the VOTE thread )
Test the Build
Follow the instructions documented in your release branch's test procedures wiki page.
If your personal tests pass, you are ready to propose the release to the community.
Email the dev@cloudstack.apache.org mailing list, using the following template:
SUBJECT: [VOTE] Release Apache CloudStack CloudMonkey X.X.X
MESSAGE:
Hi All, I've created a X.X.X release of CloudMonkey, with the following artifacts up for a vote: Git Branch and Commit SH: https://git-wip-us.apache.org/repos/asf?p=cloudstack-cloudmonkey.git;a=shortlog;h=refs/heads/X.X Commit: XXXXXXXXXXXXXXXXX List of changes: https://git-wip-us.apache.org/repos/asf?p=cloudstack-cloudmonkey.git;a=blob_plain;f=CHANGES;hb=X.X Source release (checksums and signatures are available at the same location): https://dist.apache.org/repos/dist/dev/cloudstack/cloudmonkey-X.X/ PGP release keys (signed using XXXXXXXX): https://dist.apache.org/repos/dist/release/cloudstack/KEYS Vote will be open for 72 hours. For sanity in tallying the vote, can PMC members please be sure to indicate "(binding)" with their vote? [ ] +1 approve [ ] +0 no opinion [ ] -1 disapprove (and reason why)
After 72 hours, the vote can be closed.
If (after tallying the vote) the binding +1 votes are not in the majority, the issues noted need to be addressed and process starts again. You need to send out a results email (or a less formal abort email) for the VOTE thread.
If the vote passes, then send a [RESULTS] vote to the dev list. Template below:
SUBJECT: [RESULT][VOTE] Apache CloudStack X.X.X
MESSAGE:
Hi all, After 72 hours, the vote for CloudStack CloudMonkey X.X.X [1] *passes* with Z PMC + Z non-PMC votes. +1 (PMC / binding) * person +1 (non binding) * person 0 none -1 none Thanks to everyone participating. I will now prepare the release announcement to go out after 24 hours to give the mirrors time to catch up.
Edit cloudmonkey/config.py to set the new version number.
The release should have already been tagged in your local repo when you used the build_asf.sh script (the -t option). However, you need to push that tag once the VOTE passes:
$ git push origin tags/X.X.X
Move the release artifacts into place (replace X.X.X with the release number, and replace Y.Y.Y with the previous release number):
# svn mv -m "Publishing X.X.X release" https://dist.apache.org/repos/dist/dev/cloudstack/cloudmonkey-X.X.X/ https://dist.apache.org/repos/dist/release/cloudstack/releases/
Wait 24 hours for the mirrors to catch up. Note that only a PMC member can move the artifact to the release location.
Update http://cloudstack.apache.org/downloads.html to point to the new release, and add the older release to the archive list.
Remove the prior release from the release dist area (it's still archived):
# cd /tmp/cs-release/releases # svn rm Y.Y.Y # svn commit -m "Removing Y.Y.Y release"
First, make sure that you are a package owner of the cloudmonkey package on pypi. Ask a current owner to add you if you aren't one yet.
Build from the tag:
# cd ~/cloudstack-cloudmonkey # git checkout X.X.X # python setup.py sdist # gpg -v --armor --output dist/cloudmonkey-X.X.X.tar.gz.asc --detach-sig dist/cloudmonkey-X.X.X.tar.gz
Now log into pypi and create a new release (source artifact).
Be sure to include the dist/cloudmonkey-X.X.X.tar.gz.asc file as the signature.
# cd ~/cloudstack-cloudmonkey # git checkout master # vi cloudmonkey/config.py
Edit the _version_ variable at the top of cloudmonkey/config.py and then commit / push the change.
After waiting 24 hours for the ASF mirrors to catch up, the release is ready to be announced. Send separate announcement emails to announce@apache.org, announce@cloudstack.apache.org, dev@cloudstack.apache.org, marketing@cloudstack.apache.org and users@cloudstack.apache.org. This is best done using your apache.org address, so that the announcement gets moderated through to the lists.
The contents of the message should have been discussed on marketing@cloudstack.apache.org first.