Jump to: navigation, search

Difference between revisions of "ReleaseTeam/How To Release"

(Create signed tags.)
Line 3: Line 3:
 
Raw notes for release managers, or release monkeys if need be.
 
Raw notes for release managers, or release monkeys if need be.
  
<<[[TableOfContents]]()>>
+
<<[[TableOfContents]](3)>>
  
First, read [[BranchModel]].
+
Conventions:
 +
Current release under development is "M" (2014.1), next release is "N" (2014.2)
  
Second: release Swift first, Glance next, and Nova last.
+
= Milestone release =
 +
...
  
We have two kinds of projects when it comes to release management:
+
= Final release =
 
 
* '''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) ==
 
  
 +
== Pre-flight checks ==
 +
==== Missing files check ====
  
 
<pre><nowiki>
 
<pre><nowiki>
VER=1.4.0    # The version you want to release
+
cd project
 +
tarball-repo-diff
 
</nowiki></pre>
 
</nowiki></pre>
  
 +
==== Tarball/version status ====
 +
==== Check bugs ====
  
When trunk is ready for a milestone, get the swift-core signoff by doing:
+
== MP cut (switch master to next version) ==
 
+
==== Get PTL signoff ====
<pre><nowiki>
+
==== Bump master milestone code to n1 ====
# In master swift/__init__.py, propose change from $VER to $VER+1 (leave 'False')
+
* Use ''common-bump-milestone'' Jenkins job
#No automation yet
+
* Select project, "master" and type "n1"
 
+
==== Push new version to master as first n1 commit ====
# Swift-core signoffs on RBP by accepting that change
+
* /!\ This needs to be done as the very first commit after the n1 milestone bump !
</nowiki></pre>
+
==== Create MP branch from previous commit ====
 
+
==== Process [[FixCommitted]] bugs ====
  
When that change hits trunk, trigger release process:
+
== RC1 cut ==
 +
==== Get PTL signoff ====
 +
==== Push FINAL=True commit to MP ====
 +
==== Wait for Final tarball ====
 +
==== Bump MP milestone code to rc2 ====
 +
* Use ''common-bump-milestone'' Jenkins job
 +
* Select project, "milestone-proposed" and type "rc2"
 +
==== Push M-rc1 tag to MP ====
  
 
<pre><nowiki>
 
<pre><nowiki>
PREVCOMMIT=abc0de..        # Last master commit before the one that just hit
+
git checkout milestone-proposed
 
+
git pull
# Make sure !FixCommitted bugs were actually fixed in that milestone (?)
+
git tag -s folsom-rc1
./process-fixcommitted-bugs.py swift --milestone $VER --check
+
git push --tags gerrit
 
 
# 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
 
 
</nowiki></pre>
 
</nowiki></pre>
  
 
+
==== Upload release ====
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:
 
 
 
  
 
<pre><nowiki>
 
<pre><nowiki>
# In milestone-proposed: in swift/__init__.py, change from False to True (leave $VERSION)
+
upload_release.py nova 2012.2 20120912.r15981 folsom-rc1
#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
 
 
</nowiki></pre>
 
</nowiki></pre>
  
 +
==== Announce RC1 ====
  
If everything went well, time to tag and release:
+
== Further RC-X windows ==
 +
==== Decision to open next RC window ====
 +
==== Create RC-X milestone page ====
 +
====  Refine/fix bugs ====
 +
====  Get candidate tarball ====
 +
==== Get PTL signoff ====
 +
==== Bump MP milestone code to next rcX+1 ====
 +
* Use ''common-bump-milestone'' Jenkins job
 +
* Select project, "milestone-proposed" and type "rcX+1"
 +
==== Push M-rcX tag to MP ====
  
 
<pre><nowiki>
 
<pre><nowiki>
BUILD=20110922.r1293
+
git checkout milestone-proposed
 
 
# In swift milestone-proposed: Tag release: $VER
 
git checkout -t -b milestone-proposed origin/milestone-proposed
 
 
git pull
 
git pull
git tag -s $VER
+
git tag -s folsom-rc2
 
git push --tags gerrit
 
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
 
 
</nowiki></pre>
 
</nowiki></pre>
  
 
+
==== Upload release ====
== Internal milestone release ==
 
 
 
For Nova, translations should be reasonably current:
 
 
 
  
 
<pre><nowiki>
 
<pre><nowiki>
(Translations merge is disabled for now)
+
upload_release.py nova 2012.2 20120926.r16267 folsom-rc3
 
</nowiki></pre>
 
</nowiki></pre>
  
 +
==== Announce RC-X ====
  
When trunk is ready for a milestone:
+
== Final release ==
 
+
==== Create final release milestone page ====
 +
==== Push all bugs and blueprints to final page ====
  
 
<pre><nowiki>
 
<pre><nowiki>
PROJECT=nova       # Project to release
+
consolidate_release_page.py nova folsom 2012.2
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)
 
 
</nowiki></pre>
 
</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.
  
'''Only for final release''':
+
==== Push 2014.1 tag to MP ====
 +
==== Promote last RC to release ====
  
 
<pre><nowiki>
 
<pre><nowiki>
# Race condition: this must be the first commit of $NEWMSTONE !
+
promote_rc.py PROJECT 2014.1 rc2
# 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
 
 
</nowiki></pre>
 
</nowiki></pre>
  
 +
==== Add release notes link to release page ====
 +
==== Announce 2014.1 release ====
  
Then:
+
== Post-release ==
 +
==== Update "Releases" wiki page ====
 +
==== Switch dev focus to N ====
 +
==== Clean M-rc-potential tags ====
 +
==== Create devnull branch (from MP) ====
 +
* Go to review.openstack.org project branch admin panel
 +
* New branch: "devnull", Initial revision: "milestone-proposed"
 +
==== Push 2014.1.1 version to devnull branch ====
  
 
<pre><nowiki>
 
<pre><nowiki>
# In milestone-proposed, merge from $REV of trunk
+
git checkout -t -b devnull origin/devnull
#Not automated yet
+
vi nova/version.py
#Go to https://review.openstack.org/ and sign in
+
git commit -a
#Select Admin, Projects, then the project and Branches
+
git review devnull
#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
 
 
</nowiki></pre>
 
</nowiki></pre>
  
 
+
==== Create stable/folsom branch from devnull branch ====
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:
+
* Go to review.openstack.org project branch admin panel
 
+
* New branch: "stable/folsom", Initial revision: "devnull"
'''Milestone process:'''
+
==== Remove devnull and milestone-proposed branches ====
 
+
* In review.openstack.org project branch admin panel
<pre><nowiki>
+
==== Bump MP milestone code to n1 ====
BUILD=20110727.r1143    # Look up latest milestone-proposed tarball name
+
* Use ''common-bump-milestone'' Jenkins job
 
+
* Select project, "milestone-proposed" and type "n1"
# 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
 
</nowiki></pre>
 
 
 
 
 
'''Final release process:'''
 
 
 
<pre><nowiki>
 
# 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
 
</nowiki></pre>
 
 
 
 
 
== When all projects are done ==
 
 
 
<pre><nowiki>
 
# 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
 
</nowiki></pre>
 
 
 
 
 
= 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"
 

Revision as of 15:24, 1 October 2012

Raw notes for release managers, or release monkeys if need be.

<<TableOfContents(3)>>

Conventions: Current release under development is "M" (2014.1), next release is "N" (2014.2)

Milestone release

...

Final release

Pre-flight checks

Missing files check

cd project
tarball-repo-diff

Tarball/version status

Check bugs

MP cut (switch master to next version)

Get PTL signoff

Bump master milestone code to n1

  • Use common-bump-milestone Jenkins job
  • Select project, "master" and type "n1"

Push new version to master as first n1 commit

  • /!\ This needs to be done as the very first commit after the n1 milestone bump !

Create MP branch from previous commit

Process FixCommitted bugs

RC1 cut

Get PTL signoff

Push FINAL=True commit to MP

Wait for Final tarball

Bump MP milestone code to rc2

  • Use common-bump-milestone Jenkins job
  • Select project, "milestone-proposed" and type "rc2"

Push M-rc1 tag to MP

git checkout milestone-proposed
git pull
git tag -s folsom-rc1
git push --tags gerrit

Upload release

upload_release.py nova 2012.2 20120912.r15981 folsom-rc1

Announce RC1

Further RC-X windows

Decision to open next RC window

Create RC-X milestone page

Refine/fix bugs

Get candidate tarball

Get PTL signoff

Bump MP milestone code to next rcX+1

  • Use common-bump-milestone Jenkins job
  • Select project, "milestone-proposed" and type "rcX+1"

Push M-rcX tag to MP

git checkout milestone-proposed
git pull
git tag -s folsom-rc2
git push --tags gerrit

Upload release

upload_release.py nova 2012.2 20120926.r16267 folsom-rc3

Announce RC-X

Final release

Create final release milestone page

Push all bugs and blueprints to final page

consolidate_release_page.py nova folsom 2012.2

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.

Push 2014.1 tag to MP

Promote last RC to release

promote_rc.py PROJECT 2014.1 rc2

Add release notes link to release page

Announce 2014.1 release

Post-release

Update "Releases" wiki page

Switch dev focus to N

Clean M-rc-potential tags

Create devnull branch (from MP)

  • Go to review.openstack.org project branch admin panel
  • New branch: "devnull", Initial revision: "milestone-proposed"

Push 2014.1.1 version to devnull branch

git checkout -t -b devnull origin/devnull
vi nova/version.py
git commit -a
git review devnull

Create stable/folsom branch from devnull branch

  • Go to review.openstack.org project branch admin panel
  • New branch: "stable/folsom", Initial revision: "devnull"

Remove devnull and milestone-proposed branches

  • In review.openstack.org project branch admin panel

Bump MP milestone code to n1

  • Use common-bump-milestone Jenkins job
  • Select project, "milestone-proposed" and type "n1"