Zaqar/How to Release
The process of releasing a client library is similar to that followed for server releases. However, in this case, the PTL acts as the "release manager". Note that you must request in #openstack-infra that you be added to the "marconi-ptl" group in Gerrit, or else git will complain that you don't have permission to push to the gerrit repo.
In order to follow PEP440, we need to map OpenStack milestones to version numbers. The following mapping is proposed. Note that the interim milestone versions are only shown for 2014.1, but one can imagine them following a similar schema for subsequent development cycles. Likewise, examples of bugfix releases, which increment the PATCH version only, are only given for a single release.
|2014.2 - Bugfix #1||1.0.1|
|2014.2 - Bugfix #2||1.0.2|
1. Submit and merge a patch to bump the library version. Also, set an appropriate classifier in setup.cfg (i.e., "Development Status :: 4 - Beta" or "Development Status :: 5 - Production/Stable").
2. Make sure the local commit you are tagging is actually present with the same SHA on the published repositories.
3. Add the release tag, for example, “0.0.1” with the following description: “Marconi client version 0.0.1”; it should be signed by your personal gpg key:
git tag -s 0.0.1
4. Sanity-check the tag. You want to make sure the SHA matches a commit in the upstream repo: “git tag -v 0.0.1”. You should see something like:
object 9e5323500646c98db712a1c322dd4342cd1d708a type commit tag 0.0.1 tagger kgriffs <firstname.lastname@example.org> 1399313788 -0500 Marconi client version 0.0.1 This is our first beta release supporting the entire v1.0 API. CLI usage is still a work in progress, but applications can now code against the entire v1.0 API by importing the marconiclient package. gpg: Signature made Mon May 5 13:16:54 2014 CDT using RSA key ID AD4A3478 gpg: Good signature from "Kurt E. Griffiths (@ work) <email@example.com>" gpg: aka "Kurt E. Griffiths <firstname.lastname@example.org>" gpg: aka "[jpeg image of size 25764]"
4. Push the new tag to the gerrit repo. Be sure to PUSH JUST THE ONE TAG.
git push gerrit 0.0.1
5. Now go to http://status.openstack.org/zuul/ and you should see something like:
6. When openstack/python-marconiclient disappears, the release is now available. Sanity-check the following links for the right versions:
7. Go to the corresponding series in launchpad (e.g., https://launchpad.net/python-marconiclient/juno) and release the version using the “Release now” link in the table; specify release date in yyyy-mm-dd format and include some notes, e.g.:
This package is available in pypi, just execute pip install marconi to install. Tarball: http://tarballs.openstack.org/python-marconiclient/python-marconiclient-0.0.1.tar.gz This is our first beta release supporting the entire v1.0 API. CLI usage is still a work in progress, but applications can now code against the entire v1.0 API by importing the marconiclient package.
8. Now you should change the status of all bugs for this version from "Fix Commited" to "Fix Released"
9. Upload the tarball to the released launchpad milestone (https://launchpad.net/marconi/+milestone/juno-1) using the "Add download file" link. Note that this link only appears after the milestone has been "released".
10. Sanity-check the PyPI release:
$ pip install python-marconiclient
11. Add the next milestone to the series, or if at the end of a cycle, start a new series and add the first milestone. When adding a new series, be sure to change the release manager to "marconi-drivers".
12. Send an email to the community!
We follow the standard process here: https://wiki.openstack.org/wiki/ReleaseTeam/How_To_Release