Difference between revisions of "ReleaseTeam/How To Release"
(Move) |
|||
Line 84: | Line 84: | ||
# In swift milestone-proposed: Tag release: $VER | # In swift milestone-proposed: Tag release: $VER | ||
− | git checkout milestone-proposed | + | git checkout -t -b milestone-proposed origin/milestone-proposed |
git pull | git pull | ||
git tag -s $VER | git tag -s $VER |
Revision as of 14:18, 9 January 2012
Raw notes for release managers, or release monkeys if need be.
<<TableOfContents()>>
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 milestone-proposed git pull git tag -s $MILESTONE git push --tags gerrit # Release $MILESTONE with corresponding tarball ./upload_release.py $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 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
- Go to https://launchpad.net/PROJECT/+milestone/MILESTONE
- 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
- 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"