Raw notes for release managers, or release monkeys if need be.
Contents
First, read BranchModel.
Second: release Swift first, Glance next, and Nova last.
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 release (Swift)
VER=1.4.0 # The version you want to release
When trunk is ready for a milestone, get the swift-core signoff by doing:
# In master swift/__init__.py, propose change from $VER to $VER+1 (leave 'False') #No automation yet # Swift-core signoffs on RBP by accepting that change
When that change hits trunk, trigger release process:
PREVCOMMIT=abc0de.. # Last master commit before the one that just hit # Make sure !FixCommitted bugs were actually fixed in that milestone (?) ./process-fixcommitted-bugs.py swift --milestone $VER --check # Create milestone-proposed branch from PREVCOMMIT #Not automated yet #Go to https://review.openstack.org/ and sign in #Select Admin, Projects, then the project and Branches #Enter milestone-proposed in the Branch Name field, and PREVCOMMIT as the Initial Revision #Press Create Branch # Target all !FixCommitted bugs to $VERSION milestone and !FixRelease them ./process-fixcommitted-bugs.py swift --milestone $VER --settarget $VER --fixrelease # Wait for tarball generation at https://jenkins.openstack.org/job/swift-milestone-tarball/ # Wait for build at https://launchpad.net/~swift-core/+archive/milestone-proposed/+packages # Call for testing
Select bugfixes should be pushed to milestone-proposed if need be. All those should be targeted to milestone and set to FixReleased when they hit. When milestone-proposed is ready for release:
# In milestone-proposed: in swift/__init__.py, change from False to True (leave $VERSION) #Not automated yet # Approve the merge on behalf of openstack-release #Not automated yet # Wait for tarball generation at https://jenkins.openstack.org/job/swift-milestone-tarball/ # Wait for build at https://launchpad.net/~swift-core/+archive/milestone-proposed/+packages
If everything went well, time to tag and release:
BUILD=20110922.r1293 # In swift milestone-proposed: Tag release: $VER git checkout -t -b milestone-proposed origin/milestone-proposed git pull git tag -s $VER git push --tags gerrit # Release $VER with resulting tarball ./upload_release.py swift $VER $BUILD # Trigger rebuild of final version in PPA ./reupload_with_new_version.py swift-core/milestone-proposed swift $VER # Wait for build at https://launchpad.net/~swift-core/+archive/milestone-proposed/+packages # Push to release PPA ./sync_ppas.py swift-core/milestone-proposed swift-core/release # Wait for publication at https://launchpad.net/~swift-core/+archive/release/+packages # Send email to mailing-list
Internal milestone release
For Nova, translations should be reasonably current:
(Translations merge is disabled for now)
When trunk is ready for a milestone:
PROJECT=nova # Project to release VER=2012.1 # Current dev cycle MILESTONE=essex-1 # Milestone to release (=VER for release) MSTONE=e1 # Short name for $MILESTONE NEWMSTONE=e2 # Short name for new milestone # Make sure !FixCommitted bugs were actually fixed in that milestone (?) ./process-fixcommitted-bugs.py $PROJECT --milestone $MILESTONE --check # Bump milestone in Jenkins #Not automated yet #Jenkins:common-bump-milestone set trunk to $NEWMSTONE (keep $MILESTONE for release)
Only for final release:
# Race condition: this must be the first commit of $NEWMSTONE ! # In master $PROJECT/version.py, propose change from $VER to $VER+1 (leave 'False') #No automation yet # $PROJECT-core signoffs on RBP by accepting the branch
Then:
# In milestone-proposed, merge from $REV of trunk #Not automated yet #Go to https://review.openstack.org/ and sign in #Select Admin, Projects, then the project and Branches #Enter milestone-proposed in the Branch Name field, and HEAD as the Initial Revision #Press Create Branch # Target all !FixCommitted bugs to $MILESTONE milestone and !FixRelease them ./process-fixcommitted-bugs.py $PROJECT --milestone $MILESTONE --settarget $MILESTONE --fixrelease # Wait for tarball generation at https://jenkins.openstack.org/job/$PROJECT-milestone-tarball/ # Wait for build at https://launchpad.net/~$PROJECT-core/+archive/milestone-proposed/+packages # Call for testing
Select bugfixes should be pushed to milestone-proposed if need be. All those should be targeted to milestone. When milestone-proposed is ready for release:
Milestone process:
BUILD=20110727.r1143 # Look up latest milestone-proposed tarball name # Bump milestone in Jenkins #Not automated yet #Jenkins:common-bump-milestone set release to $NEWMSTONE (keep $NEWMSTONE for trunk) # In milestone-proposed: Tag release: $MILESTONE git checkout -t -b milestone-proposed origin/milestone-proposed git pull git tag -s $MILESTONE git push --tags gerrit # Release $MILESTONE with corresponding tarball (using --into for client tarballs) ./upload_release.py [--into $LPPROJECT] $PROJECT $VER $BUILD $MILESTONE # Rebuild final version in PPA ./reupload_with_new_version.py $PROJECT-core/milestone-proposed $PROJECT $VER~$MSTONE # Wait for build at https://launchpad.net/~$PROJECT-core/+archive/milestone-proposed/+packages # Push to milestone PPA ./sync_ppas.py $PROJECT-core/milestone-proposed $PROJECT-core/milestone # Wait for publication at https://launchpad.net/~$PROJECT-core/+archive/milestone/+packages # Send email to mailing-list
Final release process:
# In milestone-proposed: in $PROJECT/version.py, change from False to True (leave $VER) #Not automated yet # Wait for tarball generation at https://jenkins.openstack.org/job/$PROJECT-milestone-tarball/ # Wait for build at https://launchpad.net/~$PROJECT-core/+archive/milestone-proposed/+packages # Note down last tarball build num BUILD=20110727.r1143 # Look up latest milestone-proposed tarball name # Bump milestone in Jenkins #Not automated yet #Jenkins:common-bump-milestone set release to $NEWMSTONE (keep $NEWMSTONE for trunk) # In milestone-proposed: Tag release: $VER git checkout -t -b milestone-proposed origin/milestone-proposed git pull git tag -s $VER git push --tags gerrit # Release $VERSION with corresponding tarball ./upload_release.py $PROJECT $VER $BUILD # Rebuild final version in PPA ./reupload_with_new_version.py $PROJECT-core/milestone-proposed $PROJECT $VER # Wait for build at https://launchpad.net/~$PROJECT-core/+archive/milestone-proposed/+packages # Push to milestone PPA ./sync_ppas.py $PROJECT-core/milestone-proposed $PROJECT-core/milestone # Wait for publication at https://launchpad.net/~$PROJECT-core/+archive/milestone/+packages
When all projects are done
# Create openstack-release PPA
#Not automated yet
# Push to openstack-release PPA
./sync_ppas.py nova-core/milestone-proposed glance-core/milestone-proposed \
swift-core/milestone-proposed openstack-release/$VERSION
# Wait for publication at https://launchpad.net/~openstack-release/+archive/$VERSION/+packages
# Send email to mailing-list
Random Howtos
Tag
Go to Jenkins, nova-milestone job, click on Tags
New job names to add - Set the checkbox for the first in the list, set tag, click OK
Release MILESTONE with TARBALL as MVERSION
Download http://PROJECT.openstack.org/tarballs/TARBALL.tar.gz
- Sanity-check tarball contents: tar tzf TARBALL.tar.gz
- Calculate MD5: md5sum TARBALL.tar.gz
- Rename file: mv TARBALL.tar.gz PROJECT-MVERSION.tar.gz
- Sign file: gpg --armor --sign --detach-sig PROJECT-MVERSION.tar.gz
- Mark milestone as released in Launchpad
- Click on "Create release"
- Set release notes (if any)
- 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
- "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"