Jump to: navigation, search

Difference between revisions of "ReleaseTeam/How To Release"

Line 86: Line 86:
 
git checkout -t -b milestone-proposed origin/milestone-proposed
 
git checkout -t -b milestone-proposed origin/milestone-proposed
 
git pull
 
git pull
git tag -s $VER
+
git tag $VER
 
git push --tags gerrit
 
git push --tags gerrit
  
Line 179: Line 179:
  
 
# In milestone-proposed: Tag release: $MILESTONE
 
# In milestone-proposed: Tag release: $MILESTONE
git checkout milestone-proposed
+
git checkout -t -b milestone-proposed origin/milestone-proposed
 
git pull
 
git pull
git tag -s $MILESTONE
+
git tag $MILESTONE
 
git push --tags gerrit
 
git push --tags gerrit
  
Line 219: Line 219:
  
 
# In milestone-proposed: Tag release: $VER
 
# In 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 $VER
 
git push --tags gerrit
 
git push --tags gerrit
  

Revision as of 09:59, 26 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 $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 $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 -t -b milestone-proposed origin/milestone-proposed
git pull
git tag $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