Jump to: navigation, search

Difference between revisions of "ReleaseTeam/How To Release"

(talk)
 
(Move)
Line 1: Line 1:
 
__NOTOC__
 
__NOTOC__
 +
<!-- ## page was renamed from [[HowToRelease]] -->
 
Raw notes for release managers, or release monkeys if need be.
 
Raw notes for release managers, or release monkeys if need be.
  
 
<<[[TableOfContents]]()>>
 
<<[[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:
 
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.
+
* '''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)
 
* '''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)
  
Line 13: Line 18:
 
= Release process =
 
= Release process =
  
== External milestone release ==
+
== External release (Swift) ==
 +
 
 +
 
 +
<pre><nowiki>
 +
VER=1.4.0    # The version you want to release
 +
</nowiki></pre>
 +
 
 +
 
 +
When trunk is ready for a milestone, get the swift-core signoff by doing:
 +
 
 +
<pre><nowiki>
 +
# 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
 +
</nowiki></pre>
 +
 
 +
 
 +
When that change hits trunk, trigger release process:
 +
 
 +
<pre><nowiki>
 +
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
 +
</nowiki></pre>
 +
 
  
(example: release Swift 1.4.0)
+
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:
  
When trunk is ready for a milestone:
 
  
* In trunk: push change in swift/<u>init</u>.py, change from 1.4.0 to 1.4.1 (leave False)
+
<pre><nowiki>
* In milestone-proposed, merge from the last revision of trunk before the above change
+
# In milestone-proposed: in swift/__init__.py, change from False to True (leave $VERSION)
* Call for testing on milestone-proposed once it's built
+
#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>
 +
 
 +
 
 +
If everything went well, time to tag and release:
 +
 
 +
<pre><nowiki>
 +
BUILD=20110922.r1293
 +
 
 +
# In swift milestone-proposed: Tag release: $VER
 +
git checkout 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
  
Select bugfixes should be pushed to milestone-proposed if need be. When milestone-proposed is ready for release:
+
# Send email to mailing-list
 +
</nowiki></pre>
  
* In milestone-proposed: push change in swift/<u>init</u>.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 ==
 
== Internal milestone release ==
  
(example: release Nova diablo-1)
+
For Nova, translations should be reasonably current:
 +
 
 +
 
 +
<pre><nowiki>
 +
(Translations merge is disabled for now)
 +
</nowiki></pre>
  
* Merge the translations branch ?
 
** Nova: Propose merge of lp:nova/translations into lp:nova
 
** Glance, Swift: noop
 
  
 
When trunk is ready for a milestone:
 
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:
+
<pre><nowiki>
 +
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)
 +
</nowiki></pre>
 +
 
 +
 
 +
'''Only for final release''':
 +
 
 +
<pre><nowiki>
 +
# 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
 +
</nowiki></pre>
 +
 
 +
 
 +
Then:
 +
 
 +
<pre><nowiki>
 +
# 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
 +
</nowiki></pre>
 +
 
 +
 
 +
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:'''
 +
 
 +
<pre><nowiki>
 +
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
 +
</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 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
  
* In milestone-proposed: Tag release: 2011.3-d1 (see howto below)
+
# Wait for build at https://launchpad.net/~$PROJECT-core/+archive/milestone-proposed/+packages
* Release "diablo-1" with resulting tarball (see howto below)
 
** Description: Nova "diablo-1" milestone
 
  
== Internal final release ==
+
# Push to milestone PPA
 +
./sync_ppas.py $PROJECT-core/milestone-proposed $PROJECT-core/milestone
  
(example: release Nova 2011.3)
+
# Wait for publication at https://launchpad.net/~$PROJECT-core/+archive/milestone/+packages
 +
</nowiki></pre>
  
* 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:
+
== When all projects are done ==
  
* Bump milestone in Jenkins (common-bump-milestone) to: e1 for trunk, rc for milestone-proposed
+
<pre><nowiki>
* In trunk: push change in nova/version.py, change from 2011.3 to 2011.4 (leave False)
+
# Create openstack-release PPA
* In milestone-proposed, merge from the last revision of trunk before above change
+
#Not automated yet
* 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:
+
# Push to openstack-release PPA
 +
./sync_ppas.py nova-core/milestone-proposed glance-core/milestone-proposed \
 +
              swift-core/milestone-proposed openstack-release/$VERSION
  
* In milestone-proposed: push change in nova/version.py, change from False to True (leave 2011.3)
+
# Wait for publication at https://launchpad.net/~openstack-release/+archive/$VERSION/+packages
* 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 =
+
# Send email to mailing-list
 +
</nowiki></pre>
  
* 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 <code><nowiki>swift/<u>init</u>.py</nowiki></code> (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 =
+
= Random Howtos =
  
 
== Tag ==
 
== Tag ==
* Go to Jenkins, nova job, click on Tags
+
* 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
 
* Set the checkbox for the first in the list, set tag, click OK
  
== Release MILESTONE with BZRREVISION as MVERSION ==
+
== Release MILESTONE with TARBALL as MVERSION ==
  
* Download http://PROJECT.openstack.org/tarballs/PROJECT-VERSION~BZRREVISION.tar.gz
+
* Download http://PROJECT.openstack.org/tarballs/TARBALL.tar.gz
* Sanity-check tarball contents: tar tzf PROJECT-VERSION~BZRREVISION.tar.gz
+
* Sanity-check tarball contents: tar tzf TARBALL.tar.gz
* Calculate MD5: md5sum PROJECT-VERSION~BZRREVISION.tar.gz
+
* Calculate MD5: md5sum TARBALL.tar.gz
* Rename file: mv PROJECT-VERSION~BZRREVISION.tar.gz PROJECT-MVERSION.tar.gz
+
* Rename file: mv TARBALL.tar.gz PROJECT-MVERSION.tar.gz
 
* Sign file: gpg --armor --sign --detach-sig PROJECT-MVERSION.tar.gz
 
* Sign file: gpg --armor --sign --detach-sig PROJECT-MVERSION.tar.gz
 
* Mark milestone as released in Launchpad
 
* Mark milestone as released in Launchpad
** Go to https://launchpad.net/nova/+milestone/MILESTONE
+
** Go to https://launchpad.net/PROJECT/+milestone/MILESTONE
 
** Click on "Create release"
 
** Click on "Create release"
** Set release notes accordingly
+
** Set release notes (if any)
 
* Add a download file
 
* Add a download file
 
** Click "Add a download file" on the milestone page
 
** Click "Add a download file" on the milestone page

Revision as of 16:03, 16 December 2011

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 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
  • 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