Jump to: navigation, search

Difference between revisions of "Branch Model"

Line 1: Line 1:
 
__NOTOC__
 
__NOTOC__
<<[[TableOfContents]]()>>
 
 
 
= [[OpenStack]] branch model =
 
= [[OpenStack]] branch model =
  
Starting with the Diablo cycle, OpenStack core projects use a branching model close to the [http://nvie.com/posts/a-successful-git-branching-model/ NVIE model] that ensures a continuously-open ''trunk'' while still allowing to freeze features and select bugfixes in a release branch (''milestone-proposed''):
+
Starting with the Diablo cycle, OpenStack core projects use a branching model close to the [http://nvie.com/posts/a-successful-git-branching-model/ NVIE model] that ensures an almost-always-open ''master'' while still allowing to freeze features and select bugfixes in a release branch (''milestone-proposed''):
 
 
{{http://img97.imageshack.us/img97/8242/branchmodel.png}}
 
 
 
At some point before the release of a milestone (called the "branch point"), the current state of ''trunk'' is merged into ''milestone-proposed'', and trunk continues towards the development of the next milestone. The ''milestone-proposed'' branches gets testing and bugfixes (that are also backported to ''trunk''), until the release is tagged.
 
  
Here are pointers to the branches:
+
{{http://img32.imageshack.us/img32/3438/modelbd.png}}
  
{| border="1" cellpadding="2" cellspacing="0"
+
At some point before the release of a milestone (called the "branch point"), the ''milestone-proposed'' branch gets created out of the master branch. The master branch continues towards the development of the next milestone. The ''milestone-proposed'' branches gets testing and backported bugfixes (that must land in ''master'' first), until the release is tagged.
|<#eeeeee>| Project
 
|<#eeeeee>| ''trunk''  
 
|-
 
|  Nova
 
|  [https://code.launchpad.net/~hudson-openstack/nova/trunk lp:nova]
 
|-
 
|  Glance
 
|  [https://code.launchpad.net/~hudson-openstack/glance/trunk lp:glance]
 
|-
 
|  Swift
 
|  [https://code.launchpad.net/~hudson-openstack/swift/trunk lp:swift]
 
|}
 
  
 
= Version numbers =
 
= Version numbers =
Line 32: Line 14:
 
For projects with milestones and releases (Nova, Glance):
 
For projects with milestones and releases (Nova, Glance):
  
* The ''trunk'' generates '''VERSION~DEVMILESTONE~DATE.TRUNKREV''' (nova-2011.3~d2~20110531.302)
+
* The ''master'' branch generates '''VERSION~DEVMILESTONE~DATE.TRUNKREV''' (nova-2011.3~d2~20110531.302.tar.gz)
* The ''milestone-proposed'' branch generates '''VERSION~MILESTONE~DATE.rMPREV''' (nova-2011.3~d1~20110531.r301)
+
* The ''milestone-proposed'' branch generates '''VERSION~MILESTONE~DATE.rMPREV''' (nova-2011.3~d1~20110531.r301.tar.gz)
* This gets copied to the milestone PPA at milestone delivery time as '''VERSION~MILESTONE''' (nova-2011.3~d1)
+
* This gets copied at milestone delivery time to '''VERSION~MILESTONE''' (nova-2011.3~d1.tar.gz)
* This gets copied to the release PPA at coordinated release time as '''VERSION''' (nova-2011.3)
+
* This gets copied at coordinated release time as '''VERSION''' (nova-2011.3.tar.gz)
  
 
For projects where milestones == releases (Swift):
 
For projects where milestones == releases (Swift):
  
* The ''trunk'' generates '''DEVMILESTONE~DATE.TRUNKREV''' (swift-1.4.1~20110531.302)
+
* The ''master'' branch generates '''VERSION~DATE.TRUNKREV''' (swift-1.4.1~20110531.302.tar.gz)
* The ''milestone-proposed'' branch generates '''MILESTONE~DATE.rMPREV''' (swift-1.4.0~20110531.r301)
+
* The ''milestone-proposed'' branch generates '''VERSION~DATE.rMPREV''' (swift-1.4.0~20110531.r301.tar.gz)
* This gets copied to the milestone PPA at milestone delivery time as '''MILESTONE''' (swift-1.4.0)
+
* This gets copied at release time as '''VERSION''' (swift-1.4.0.tar.gz)
* The most recent milestone gets copied to the release PPA at coordinated release time
 
  
 
With:
 
With:
* VERSION being the version of the project under development (2011.3)
+
* VERSION being the version of the project under development (2011.3, 1.4.0)
* DEVMILESTONE being the short name of milestone under development (d2, 1.4.1...) and MILESTONE being the milestone to release (d1, 1.4.0...)
+
* DEVMILESTONE being the short name of milestone under development (d2) and MILESTONE being the milestone about to be released (d1)
 
* DATE being under YYYYMMDD form
 
* DATE being under YYYYMMDD form
* TRUNKREV is the revision on ''trunk''
+
* TRUNKREV is a sequential revision on ''master''
* MPREV is the revision on ''milestone-proposed''
+
* MPREV is a sequential revision on ''milestone-proposed''
  
 
Those (seemingly complex) version numbers actually ensure that you can smoothly upgrade in all scenarios (from trunk to milestone-proposed and back to trunk and to the final version...)
 
Those (seemingly complex) version numbers actually ensure that you can smoothly upgrade in all scenarios (from trunk to milestone-proposed and back to trunk and to the final version...)

Revision as of 09:31, 4 June 2012

OpenStack branch model

Starting with the Diablo cycle, OpenStack core projects use a branching model close to the NVIE model that ensures an almost-always-open master while still allowing to freeze features and select bugfixes in a release branch (milestone-proposed):

Template:Http://img32.imageshack.us/img32/3438/modelbd.png

At some point before the release of a milestone (called the "branch point"), the milestone-proposed branch gets created out of the master branch. The master branch continues towards the development of the next milestone. The milestone-proposed branches gets testing and backported bugfixes (that must land in master first), until the release is tagged.

Version numbers

Since we have two branches in parallel, we use version numbers that allow to upgrade from one to the other.

For projects with milestones and releases (Nova, Glance):

  • The master branch generates VERSION~DEVMILESTONE~DATE.TRUNKREV (nova-2011.3~d2~20110531.302.tar.gz)
  • The milestone-proposed branch generates VERSION~MILESTONE~DATE.rMPREV (nova-2011.3~d1~20110531.r301.tar.gz)
  • This gets copied at milestone delivery time to VERSION~MILESTONE (nova-2011.3~d1.tar.gz)
  • This gets copied at coordinated release time as VERSION (nova-2011.3.tar.gz)

For projects where milestones == releases (Swift):

  • The master branch generates VERSION~DATE.TRUNKREV (swift-1.4.1~20110531.302.tar.gz)
  • The milestone-proposed branch generates VERSION~DATE.rMPREV (swift-1.4.0~20110531.r301.tar.gz)
  • This gets copied at release time as VERSION (swift-1.4.0.tar.gz)

With:

  • VERSION being the version of the project under development (2011.3, 1.4.0)
  • DEVMILESTONE being the short name of milestone under development (d2) and MILESTONE being the milestone about to be released (d1)
  • DATE being under YYYYMMDD form
  • TRUNKREV is a sequential revision on master
  • MPREV is a sequential revision on milestone-proposed

Those (seemingly complex) version numbers actually ensure that you can smoothly upgrade in all scenarios (from trunk to milestone-proposed and back to trunk and to the final version...)