Difference between revisions of "ReleaseTeam/How To Release"
(48 intermediate revisions by 3 users not shown) | |||
Line 1: | Line 1: | ||
− | + | {{ caution|http://git.openstack.org/cgit/openstack-infra/release-tools/tree/README.rst|Information here is obsolete.You should read instead: }} | |
− | |||
− | + | You can find all tools mentioned here in the [http://git.openstack.org/cgit/openstack-infra/release-tools openstack-infra/release-tools] repository. | |
− | + | __TOC__ | |
− | == | + | == Development milestone publication == |
+ | |||
+ | <pre><nowiki> | ||
+ | PROJECT=nova | ||
+ | MILESTONE=juno-3 | ||
+ | </nowiki></pre> | ||
− | |||
+ | ==== Pre-flight checks ==== | ||
+ | |||
+ | |||
+ | '''Missing files check''' (for all integrated projects doing the milestone) | ||
<pre><nowiki> | <pre><nowiki> | ||
− | + | ./repo_tarball_diff.sh $PROJECT master | |
− | |||
</nowiki></pre> | </nowiki></pre> | ||
− | ==== | + | ==== Milestone tag/publication (between Tuesday and Thursday) ==== |
− | |||
− | + | All the integrated projects, as well as oslo-incubator and oslo.messaging, need to follow this process sometimes during the milestone publication window. | |
− | + | ||
+ | NB: The milestone.sh script special-cases oslo-incubator (where no tarball is published) and oslo.messaging (where no tag is pushed and no tarball is published) so you can just run the same commands with them. | ||
− | |||
− | |||
− | + | '''Get PTL signoff''' (for all except oslo.messaging) | |
+ | * PTL confirms SHA for tag | ||
− | |||
− | |||
− | + | '''Deferring blueprints and bugs''' | |
− | * | + | * Move all incomplete blueprints to the next milestone ($MILESTONE should all be 'Implemented') |
− | + | * Move all incomplete bugs to the next milestone ($MILESTONE should all be 'Fix Committed'). You can use the following script: | |
− | + | <pre><nowiki> | |
− | + | ./process_bugs.py $PROJECT --milestone $MILESTONE --settarget $NEXTMILESTONE | |
− | + | </nowiki></pre> | |
− | |||
+ | '''Tag, wait for tarball build, process FixCommitted bugs, check similarities and upload (if applicable)''' | ||
<pre><nowiki> | <pre><nowiki> | ||
− | ./ | + | ./milestone.sh $MILESTONE $SHA $PROJECT |
</nowiki></pre> | </nowiki></pre> | ||
− | + | NB: for oslo.messaging $SHA is not used for tagging and is therefore ignored. | |
− | + | ||
− | |||
− | ==== | + | ==== When all projects are done ==== |
+ | |||
+ | '''Announce milestone''' | ||
* Email to openstack general ML | * Email to openstack general ML | ||
* Twitter | * Twitter | ||
− | |||
− | ==== | + | == Swift intermediary releases == |
− | |||
− | |||
− | == | + | <pre><nowiki> |
− | + | PROJECT=swift | |
+ | MILESTONE=1.8.1 | ||
+ | </nowiki></pre> | ||
− | |||
− | |||
− | |||
− | == | + | ==== Pre-flight checks ==== |
− | + | '''Missing files check''' | |
− | + | <pre><nowiki> | |
− | * | + | ./repo_tarball_diff.sh swift master |
+ | </nowiki></pre> | ||
+ | |||
+ | |||
+ | '''Check bugs''' | ||
+ | * Look at the list of FixCommitted bugs, sanity-check that they were fixed during the period | ||
− | |||
− | + | ==== RC1 tag ==== | |
− | + | ||
− | + | '''Get PTL signoff''' | |
− | + | * Get RC1 $RCSHA from PTL | |
− | + | * Check that the $MILESTONE changelog was committed to master | |
− | + | ||
+ | '''Deferring blueprints''' | ||
+ | * Move all incomplete blueprints to the next milestone ($MILESTONE should all be 'Implemented') | ||
+ | * Move all incomplete bugs to the next milestone ($MILESTONE should all be 'Fix Committed') | ||
− | |||
+ | '''Tag RC1, wait for tarball build and process FixCommitted bugs''' | ||
<pre><nowiki> | <pre><nowiki> | ||
− | + | ./swiftrc.sh $RC1SHA $MILESTONE | |
</nowiki></pre> | </nowiki></pre> | ||
− | + | '''Announce candidate builds''' | |
* Email to openstack general ML | * Email to openstack general ML | ||
* Twitter | * Twitter | ||
− | |||
− | ==== | + | ==== Further RCs ==== |
− | |||
− | + | We generally hope that intermediary Swift releases won't generate multiple RCs, but shit sometimes happens. In that case we follow a manual process. | |
− | |||
− | + | '''Set up proposed/$MILESTONE branch''' | |
− | + | * Go to review.openstack.org and create a proposed/$MILESTONE branch with the same SHA as the RC1 tag | |
− | * | + | * Backport fixes to this branch |
− | * | + | |
− | |||
+ | '''Manually push new tag on that branch''' | ||
<pre><nowiki> | <pre><nowiki> | ||
− | + | git checkout master && git pull | |
− | + | git checkout -b proposed/$MILESTONE -t origin/proposed/$MILESTONE | |
+ | git tag -m "Swift $MILESTONE-rc2" -s "${MILESTONE}rc2" $RC2SHA | ||
+ | git push gerrit ${MILESTONE}rc2 | ||
</nowiki></pre> | </nowiki></pre> | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
+ | ==== Release ==== | ||
+ | |||
+ | '''Get PTL signoff''' | ||
+ | * Get confirmation that SHA=RCxSHA | ||
+ | |||
+ | |||
+ | '''Tag, wait for tarball build, check similarities and upload''' | ||
<pre><nowiki> | <pre><nowiki> | ||
− | ./ | + | ./milestone.sh $MILESTONE $SHA swift |
</nowiki></pre> | </nowiki></pre> | ||
− | + | ||
− | + | '''Announce release''' | |
− | * | + | * Email to openstack general ML & openstack announce. |
− | + | * Twitter | |
− | + | * If a proposed/$MILESTONE branch was created, check that tags merged back to master and delete the branch (manually under review.openstack.org) | |
− | + | ||
− | == | + | |
− | + | == Final release == | |
− | + | ||
− | + | NB: The rccut.sh and rcdelivery.sh scripts special-case swift (where RC milestones are named differently) and oslo-incubator (where no tarball is published), so you can just run the same commands with them. They do '''not''' handle oslo.* libraries where tagging is external: bugs must be closed directly and stable branches created manually. | |
− | |||
− | * | ||
− | |||
<pre><nowiki> | <pre><nowiki> | ||
− | + | PROJECT=nova | |
− | + | SERIES=icehouse | |
− | + | FINALSWIFT=2.0.0 | |
− | + | NEXTSERIES=juno | |
</nowiki></pre> | </nowiki></pre> | ||
− | |||
+ | ==== Pre-flight checks ==== | ||
+ | |||
+ | '''Create next series''' | ||
+ | * Create $NEXTSERIES series in Launchpad | ||
+ | * Set status to Future, Set release manager | ||
+ | |||
+ | |||
+ | '''Check RC1 has 'RC1' as short name''' | ||
+ | * $NAME-rc1 should have 'RC1' as short milestone name | ||
+ | |||
+ | |||
+ | '''Missing files check''' | ||
<pre><nowiki> | <pre><nowiki> | ||
− | + | ./repo_tarball_diff.sh $PROJECT master | |
</nowiki></pre> | </nowiki></pre> | ||
− | |||
− | |||
− | |||
− | + | '''Check bugs''' | |
− | + | * Look at the list of FixCommitted bugs, sanity-check that they were fixed during the period | |
− | + | ||
− | + | ||
− | * | + | '''Check for translations /requirements updates''' |
− | + | * Branch should have a relatively recent translation update | |
− | + | * Branch should have a relatively recent requirements update | |
− | + | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | * | ||
− | |||
− | + | ==== stable/$SERIES branch cut (switch master to next version) ==== | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | '''Get PTL signoff''' | |
+ | * This should be done close to the RC1 cut | ||
+ | * For Swift, check that the $FINALSWIFT changelog was committed to master | ||
− | |||
− | |||
− | |||
− | = | + | '''Push new version to master''' |
+ | * Prepare change which sets next version on master branch in setup.cfg (except for Swift which doesn't set preversions) | ||
+ | * Get it approved by core and make sure it's merged | ||
+ | * Note down SHA = stable/$SERIES cut commit id (the commit just before the version bump) | ||
− | |||
− | |||
− | |||
− | |||
+ | '''Create stable/$SERIES branch from previous commit, wait for tarball, process FixCommitted bugs''' | ||
<pre><nowiki> | <pre><nowiki> | ||
− | + | ./rccut.sh $SHA $SERIES $PROJECT [$FINALSWIFT] | |
</nowiki></pre> | </nowiki></pre> | ||
− | |||
− | ==== | + | '''Set $NEXTSERIES as active development''' |
+ | * Make $NEXTSERIES the "Development focus" for $PROJECT | ||
+ | * Set $NEXTSERIES status to "Active development" | ||
+ | * Set $SERIES status to "Pre-release freeze" | ||
+ | |||
+ | |||
+ | ==== RC1 cut ==== | ||
− | + | '''Get PTL signoff''' | |
− | + | * Check that the branch contents are ready to go from PTL perspective (backport any last-minute bugfix) | |
− | |||
− | |||
− | |||
− | |||
− | |||
+ | '''Tag, wait for tarball, check similarities and upload''' | ||
<pre><nowiki> | <pre><nowiki> | ||
− | + | ./rcdelivery.sh $SERIES rc1 $PROJECT [$FINALSWIFT] | |
</nowiki></pre> | </nowiki></pre> | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | '''Announce RC1''' | |
− | + | * Email to openstack general ML | |
− | + | * Twitter | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | '''Unfreeze requirements''' | |
+ | * (should be doublechecked since we changed things here) | ||
+ | * Create stable/$SERIES for openstack/requirements | ||
+ | * Consider master branch unfrozen | ||
+ | * Email to openstack dev ML | ||
− | |||
− | == | + | ==== Further RC-X windows ==== |
− | + | '''Decision to open next RC window''' | |
+ | * Consider $SERIES-rc-potential bugs and discuss with PTL if they warrant a respin | ||
− | |||
− | |||
− | |||
− | |||
+ | '''Create RC-X milestone page''' | ||
+ | * Create the RC-X milestone page (short name = RCX) on Launchpad | ||
+ | * Target relevant bugs | ||
− | |||
− | |||
− | + | '''Refine/fix bugs''' | |
− | * | + | * Track bug fixes |
− | * | + | * Facilitate backports |
− | |||
− | |||
− | |||
− | + | '''Check for translations/requirements updates''' | |
+ | * Branch should have a relatively recent translation update. This requires a manual script to be run. | ||
+ | * Requirements job (as proposed automatically when stable/* is created) should be merged if it exists | ||
− | |||
− | |||
− | |||
− | + | '''Get PTL signoff''' | |
− | * | + | * Get confirmation that RC is releasable from PTL perspective |
− | |||
− | |||
+ | '''Tag, wait for tarball, check similarities and upload''' | ||
<pre><nowiki> | <pre><nowiki> | ||
− | ./ | + | ./rcdelivery.sh $SERIES rcX $PROJECT [$FINALSWIFT] |
</nowiki></pre> | </nowiki></pre> | ||
− | + | '''Announce RC-X''' | |
− | * | + | * Email to openstack general ML |
− | * | + | * Twitter |
− | |||
− | ==== | + | ==== Final release ==== |
− | |||
− | |||
− | + | '''Create final release milestone page''' | |
− | * | + | * Create the $VERSION final milestone page on Launchpad |
− | |||
− | |||
− | |||
− | + | '''Push all bugs and blueprints to final page''' | |
+ | <pre><nowiki> | ||
+ | ./consolidate_release_page.py $PROJECT $SERIES $VERSION | ||
+ | </nowiki></pre> | ||
+ | This can take a very long time. For large bugs you will have to run it multiple times. Verify all intermediary milestone pages are now empty. | ||
− | |||
+ | '''Tag, wait for tarball, check similarities and upload''' | ||
<pre><nowiki> | <pre><nowiki> | ||
− | + | ./rcdelivery.sh $SERIES final $PROJECT [$FINALSWIFT] | |
− | |||
− | |||
− | |||
</nowiki></pre> | </nowiki></pre> | ||
− | + | '''Extra similarity check''' | |
− | |||
<pre><nowiki> | <pre><nowiki> | ||
− | + | ./similar_tarballs.sh $PROJECT $VERSION.rcX $VERSION | |
</nowiki></pre> | </nowiki></pre> | ||
− | ==== | + | '''Add release notes link to release page''' |
− | * | + | * Add the "See http://wiki.openstack.org/ReleaseNotes/$SERIES" note to the Release note on the download page. |
− | * | + | |
+ | |||
+ | '''Announce release''' | ||
+ | * openstack-announce, openstack general ML | ||
+ | * Twitter etc. | ||
+ | |||
+ | |||
+ | ==== Post-release ==== | ||
+ | |||
+ | '''Update wiki pages''' | ||
+ | * http://wiki.openstack.org/Releases | ||
+ | * https://wiki.openstack.org/wiki/Getting_The_Code | ||
+ | |||
+ | |||
+ | '''Create openstack/openstack stable branch''' | ||
+ | * This needs to be done before any stable branch is created | ||
+ | * Go to review.openstack.org openstack/openstack branch admin panel | ||
+ | * New branch: "stable/$SERIES", Initial revision: "HEAD" | ||
+ | * Push update to .gitmodules switching all "." to "stable/$SERIES" | ||
+ | |||
+ | |||
+ | '''Switch dev focus''' | ||
+ | * Switch $SERIES to current stable release, set release manager = openstack-stable-maint | ||
+ | * Switch previous stable release (series - 1) to Obsolete | ||
+ | |||
+ | |||
+ | '''Clean rc-potential tags''' | ||
+ | * Search for https://bugs.launchpad.net/openstack/+bugs?field.tag=$SERIES-rc-potential | ||
+ | * Remove tag where found | ||
+ | |||
+ | |||
+ | '''Enable stable/$SERIES''' | ||
+ | * (should be doublechecked since we changed things here) | ||
+ | * Add stable/$SERIES periodic jobs, example for Icehouse https://review.openstack.org/115933 | ||
+ | |||
− | = | + | '''Push .1 version to stable/$SERIES branch''' |
+ | <pre><nowiki> | ||
+ | git checkout -t -b stable/$SERIES origin/stable/$SERIES | ||
+ | git checkout -b stable-$SERIES | ||
+ | vi setup.cfg # set to $VERSION.1 | ||
+ | vi .gitreview # set defaultbranch=stable/$SERIES | ||
+ | git commit -a | ||
+ | git review stable/$SERIES | ||
+ | </nowiki></pre> | ||
− | + | NB: For Swift, it still makes sense to commit the the defaultbranch patch (even if you don't do the setup.cfg version bump) | |
− |
Latest revision as of 16:11, 13 June 2016
You can find all tools mentioned here in the openstack-infra/release-tools repository.
Development milestone publication
PROJECT=nova MILESTONE=juno-3
Pre-flight checks
Missing files check (for all integrated projects doing the milestone)
./repo_tarball_diff.sh $PROJECT master
Milestone tag/publication (between Tuesday and Thursday)
All the integrated projects, as well as oslo-incubator and oslo.messaging, need to follow this process sometimes during the milestone publication window.
NB: The milestone.sh script special-cases oslo-incubator (where no tarball is published) and oslo.messaging (where no tag is pushed and no tarball is published) so you can just run the same commands with them.
Get PTL signoff (for all except oslo.messaging)
- PTL confirms SHA for tag
Deferring blueprints and bugs
- Move all incomplete blueprints to the next milestone ($MILESTONE should all be 'Implemented')
- Move all incomplete bugs to the next milestone ($MILESTONE should all be 'Fix Committed'). You can use the following script:
./process_bugs.py $PROJECT --milestone $MILESTONE --settarget $NEXTMILESTONE
Tag, wait for tarball build, process FixCommitted bugs, check similarities and upload (if applicable)
./milestone.sh $MILESTONE $SHA $PROJECT
NB: for oslo.messaging $SHA is not used for tagging and is therefore ignored.
When all projects are done
Announce milestone
- Email to openstack general ML
Swift intermediary releases
PROJECT=swift MILESTONE=1.8.1
Pre-flight checks
Missing files check
./repo_tarball_diff.sh swift master
Check bugs
- Look at the list of FixCommitted bugs, sanity-check that they were fixed during the period
RC1 tag
Get PTL signoff
- Get RC1 $RCSHA from PTL
- Check that the $MILESTONE changelog was committed to master
Deferring blueprints
- Move all incomplete blueprints to the next milestone ($MILESTONE should all be 'Implemented')
- Move all incomplete bugs to the next milestone ($MILESTONE should all be 'Fix Committed')
Tag RC1, wait for tarball build and process FixCommitted bugs
./swiftrc.sh $RC1SHA $MILESTONE
Announce candidate builds
- Email to openstack general ML
Further RCs
We generally hope that intermediary Swift releases won't generate multiple RCs, but shit sometimes happens. In that case we follow a manual process.
Set up proposed/$MILESTONE branch
- Go to review.openstack.org and create a proposed/$MILESTONE branch with the same SHA as the RC1 tag
- Backport fixes to this branch
Manually push new tag on that branch
git checkout master && git pull git checkout -b proposed/$MILESTONE -t origin/proposed/$MILESTONE git tag -m "Swift $MILESTONE-rc2" -s "${MILESTONE}rc2" $RC2SHA git push gerrit ${MILESTONE}rc2
Release
Get PTL signoff
- Get confirmation that SHA=RCxSHA
Tag, wait for tarball build, check similarities and upload
./milestone.sh $MILESTONE $SHA swift
Announce release
- Email to openstack general ML & openstack announce.
- If a proposed/$MILESTONE branch was created, check that tags merged back to master and delete the branch (manually under review.openstack.org)
Final release
NB: The rccut.sh and rcdelivery.sh scripts special-case swift (where RC milestones are named differently) and oslo-incubator (where no tarball is published), so you can just run the same commands with them. They do not handle oslo.* libraries where tagging is external: bugs must be closed directly and stable branches created manually.
PROJECT=nova SERIES=icehouse FINALSWIFT=2.0.0 NEXTSERIES=juno
Pre-flight checks
Create next series
- Create $NEXTSERIES series in Launchpad
- Set status to Future, Set release manager
Check RC1 has 'RC1' as short name
- $NAME-rc1 should have 'RC1' as short milestone name
Missing files check
./repo_tarball_diff.sh $PROJECT master
Check bugs
- Look at the list of FixCommitted bugs, sanity-check that they were fixed during the period
Check for translations /requirements updates
- Branch should have a relatively recent translation update
- Branch should have a relatively recent requirements update
stable/$SERIES branch cut (switch master to next version)
Get PTL signoff
- This should be done close to the RC1 cut
- For Swift, check that the $FINALSWIFT changelog was committed to master
Push new version to master
- Prepare change which sets next version on master branch in setup.cfg (except for Swift which doesn't set preversions)
- Get it approved by core and make sure it's merged
- Note down SHA = stable/$SERIES cut commit id (the commit just before the version bump)
Create stable/$SERIES branch from previous commit, wait for tarball, process FixCommitted bugs
./rccut.sh $SHA $SERIES $PROJECT [$FINALSWIFT]
Set $NEXTSERIES as active development
- Make $NEXTSERIES the "Development focus" for $PROJECT
- Set $NEXTSERIES status to "Active development"
- Set $SERIES status to "Pre-release freeze"
RC1 cut
Get PTL signoff
- Check that the branch contents are ready to go from PTL perspective (backport any last-minute bugfix)
Tag, wait for tarball, check similarities and upload
./rcdelivery.sh $SERIES rc1 $PROJECT [$FINALSWIFT]
Announce RC1
- Email to openstack general ML
Unfreeze requirements
- (should be doublechecked since we changed things here)
- Create stable/$SERIES for openstack/requirements
- Consider master branch unfrozen
- Email to openstack dev ML
Further RC-X windows
Decision to open next RC window
- Consider $SERIES-rc-potential bugs and discuss with PTL if they warrant a respin
Create RC-X milestone page
- Create the RC-X milestone page (short name = RCX) on Launchpad
- Target relevant bugs
Refine/fix bugs
- Track bug fixes
- Facilitate backports
Check for translations/requirements updates
- Branch should have a relatively recent translation update. This requires a manual script to be run.
- Requirements job (as proposed automatically when stable/* is created) should be merged if it exists
Get PTL signoff
- Get confirmation that RC is releasable from PTL perspective
Tag, wait for tarball, check similarities and upload
./rcdelivery.sh $SERIES rcX $PROJECT [$FINALSWIFT]
Announce RC-X
- Email to openstack general ML
Final release
Create final release milestone page
- Create the $VERSION final milestone page on Launchpad
Push all bugs and blueprints to final page
./consolidate_release_page.py $PROJECT $SERIES $VERSION
This can take a very long time. For large bugs you will have to run it multiple times. Verify all intermediary milestone pages are now empty.
Tag, wait for tarball, check similarities and upload
./rcdelivery.sh $SERIES final $PROJECT [$FINALSWIFT]
Extra similarity check
./similar_tarballs.sh $PROJECT $VERSION.rcX $VERSION
Add release notes link to release page
- Add the "See http://wiki.openstack.org/ReleaseNotes/$SERIES" note to the Release note on the download page.
Announce release
- openstack-announce, openstack general ML
- Twitter etc.
Post-release
Update wiki pages
Create openstack/openstack stable branch
- This needs to be done before any stable branch is created
- Go to review.openstack.org openstack/openstack branch admin panel
- New branch: "stable/$SERIES", Initial revision: "HEAD"
- Push update to .gitmodules switching all "." to "stable/$SERIES"
Switch dev focus
- Switch $SERIES to current stable release, set release manager = openstack-stable-maint
- Switch previous stable release (series - 1) to Obsolete
Clean rc-potential tags
- Search for https://bugs.launchpad.net/openstack/+bugs?field.tag=$SERIES-rc-potential
- Remove tag where found
Enable stable/$SERIES
- (should be doublechecked since we changed things here)
- Add stable/$SERIES periodic jobs, example for Icehouse https://review.openstack.org/115933
Push .1 version to stable/$SERIES branch
git checkout -t -b stable/$SERIES origin/stable/$SERIES git checkout -b stable-$SERIES vi setup.cfg # set to $VERSION.1 vi .gitreview # set defaultbranch=stable/$SERIES git commit -a git review stable/$SERIES
NB: For Swift, it still makes sense to commit the the defaultbranch patch (even if you don't do the setup.cfg version bump)