ReleaseTeam/How To Release
Raw notes for release managers, or release monkeys if need be.
<<TableOfContents()>>
We have two kinds of projects when it comes to release management:
- External projects (Swift) release milestones as complete versions with their own versioning scheme (1.4.0), and the coordinated release just takes the latest milestone for integration in the OpenStack common release.
- Internal projects (Glance, Nova) deliver milestones with a code name (diablo-1), and the coordinated release corresponds to their major release every 6 months (2011.3)
This leads to two slightly different processes.
Release process
External milestone release
(example: release Swift 1.4.0)
When trunk is ready for a milestone:
- In trunk: push change in swift/init.py, change from 1.4.0 to 1.4.1 (leave False)
- In milestone-proposed, merge from the last revision of trunk before the above change
- Call for testing on milestone-proposed once it's built
Select bugfixes should be pushed to milestone-proposed if need be. When milestone-proposed is ready for release:
- In milestone-proposed: push change in swift/init.py, change from False to True (leave 1.4.0)
- In milestone-proposed: Tag release: 1.4.0 (see howto below)
- Release "1.4.0" with resulting tarball (see howto below)
- Description: Swift 1.4.0 release
Internal milestone release
(example: release Nova diablo-1)
- Merge the translations branch ?
- Nova: Propose merge of lp:nova/translations into lp:nova
- Glance, Swift: noop
When trunk is ready for a milestone:
- Bump milestone in Jenkins (common-bump-milestone) to: d2 for trunk, d1 for milestone-proposed.
- In milestone-proposed, merge from the last revision of trunk
- Call for testing on milestone-proposed once it's built
Select bugfixes should be pushed to milestone-proposed if need be. When milestone-proposed is ready for release:
- In milestone-proposed: Tag release: 2011.3-d1 (see howto below)
- Release "diablo-1" with resulting tarball (see howto below)
- Description: Nova "diablo-1" milestone
Internal final release
(example: release Nova 2011.3)
- Merge the translations branch: /!\ This requires core team presence at crunch time
- Nova: Propose merge of lp:nova/translations into lp:nova
- Glance, Swift: noop
When trunk is ready for a RC:
- Bump milestone in Jenkins (common-bump-milestone) to: e1 for trunk, rc for milestone-proposed
- In trunk: push change in nova/version.py, change from 2011.3 to 2011.4 (leave False)
- In milestone-proposed, merge from the last revision of trunk before above change
- Call for testing on milestone-proposed once it's built
Select bugfixes should be pushed to milestone-proposed if need be. When milestone-proposed is ready for release:
- In milestone-proposed: push change in nova/version.py, change from False to True (leave 2011.3)
- In milestone-proposed: Tag release: 2011.3 (see howto below)
- Release "2011.3" with resulting tarball (see howto below)
- Description: Nova 2011.3 ("diablo") release
After release
- Branch stable release /!\ more details needed
- Link trunk to next release /!\ more details needed
- Push new versioning to trunk:
- Nova, Glance: edit version.py to bump NOVA_VERSION and set FINAL = False
- Swift: edit
swift/<u>init</u>.py
(1.3.0 -> 1.4-dev)
- Target all bugs FixCommitted bugs to release and mark them FixReleased
- Create milestones for the next release:
- CODENAME-gamma
- CODENAME-rc
- VERSION (codename CODENAME)
Howtos
Tag
- Go to Jenkins, nova job, click on Tags
- Set the checkbox for the first in the list, set tag, click OK
Release MILESTONE with BZRREVISION as MVERSION
- Download http://PROJECT.openstack.org/tarballs/PROJECT-VERSION~BZRREVISION.tar.gz
- Sanity-check tarball contents: tar tzf PROJECT-VERSION~BZRREVISION.tar.gz
- Calculate MD5: md5sum PROJECT-VERSION~BZRREVISION.tar.gz
- Rename file: mv PROJECT-VERSION~BZRREVISION.tar.gz PROJECT-MVERSION.tar.gz
- Sign file: gpg --armor --sign --detach-sig PROJECT-MVERSION.tar.gz
- Mark milestone as released in Launchpad
- Go to https://launchpad.net/nova/+milestone/MILESTONE
- Click on "Create release"
- Set release notes accordingly
- Add a download file
- Click "Add a download file" on the milestone page
- Set description accordingly
- Point to tarball (PROJECT-MVERSION.tar.gz) and signature (PROJECT-MVERSION.tar.gz.asc)
- File content type: "Code release tarball"
- Doublecheck md5sum
- Click on "md5" at the download level and compare with the one previously generated
Push a release to PyPI
Prerequisites:
- Contact one of the existing PyPI maintainers for Glance (JayPipes, EwanMellor or MontyTaylor) and get them to add you to the release admins.
- Create a login/password and set your PGP key on your PyPI account details area
Process:
- Upload PKG-INFO from release tarball to set release details
- In "Files", Upload "source" tarball, any python version, with signature.
Open new branch
- Create stable branch (for the just-released SERIES)
- ssh to jenkins box
- sudo su - jenkins
- mkdir tmp && cd tmp
- bzr branch lp:PROJECT
- cd PROJECT
- bzr push lp:~openstack-hudson/PROJECT/SERIES
- Point newly-created series to ~hudson-openstack/PROJECT/trunk
- Point just-released series to newly-created ~openstack-hudson/PROJECT/SERIES
- Switch branches
- Go to https://launchpad.net/nova/
- "Development focus" on the front page. Change it.
- Go to the previous release, e.g. https://launchpad.net/nova/bexar
- Set it to obsolete
- Go to the one being released right now, e.g. https://launchpad.net/nova/cactus
- Set it to "Current stable release"