Difference between revisions of "Simplified Release Process Proposal"

From D Wiki
Jump to: navigation, search
(Fix alignment)
(Releases: Update to use persistent release branches)
Line 36: Line 36:
 
It's assumed they have a github.com/D-Programming-Language remote setup called "upstream" and master is up-to-date with it.
 
It's assumed they have a github.com/D-Programming-Language remote setup called "upstream" and master is up-to-date with it.
  
When a scheduled feature freeze for an upcoming release is to happen just create the "release" branch:
+
When a scheduled feature freeze for an upcoming release is to happen just create the versioned release branch:
  
 
<source lang="bash">
 
<source lang="bash">
git checkout -b release master
+
git checkout -b 2.xx master
git push upstream release
+
git push upstream 2.xx
 
</source>
 
</source>
  
Line 46: Line 46:
  
 
<source lang="bash">
 
<source lang="bash">
# while "release" is checked out
+
# while "2.xx" is checked out
 
git cherry-pick <commit-hash>
 
git cherry-pick <commit-hash>
git push upstream release
+
git push upstream 2.xx
 
</source>
 
</source>
  
  
When a beta is made:
+
As each beta is made:
  
 
<source lang="bash">
 
<source lang="bash">
git tag -m v2.xxx-betax v2.xxx-betax release
+
git tag -m v2.xx.0-bx v2.xx.0-bx 2.xx
git push upstream v2.xxx-betax
+
git push upstream v2.xx.0-bx
 
</source>
 
</source>
  
Line 63: Line 63:
  
 
<source lang="bash">
 
<source lang="bash">
git tag -m v2.xxx v2.xxx release
+
git tag -m v2.xx.0 v2.xx.0 2.xx
git push upstream v2.xxx
+
git push upstream v2.xx.0
 +
git push upstream 2.xx
 
git checkout master
 
git checkout master
git merge release
+
git merge 2.xx
 
git push upstream master
 
git push upstream master
git branch -d release      # delete branch
 
git push upstream :release # delete upstream branch
 
 
</source>
 
</source>
 
  
 
===Hotfixes===
 
===Hotfixes===

Revision as of 17:35, 24 January 2014

The following is just a preliminary proposal to simplify the Release Process. The aim is to keep it as simple as possible because there has been a lot of difficulty following the more sophisticated Release Process currently in place.


  [Feature PRs]  [Bugfix PRs]           [ Emergency bug/regression fix PR]
       |    |     |       |                          |
       |    |     |       |                          |
====*==*====*=====*=======*==========*====master=====*=========*============>
     \             .       .        /                 .       /
      \             .       .      /                   .     /
       *--2.xx-------*---*---*----*---------------------*---*--------------->
                          \        \                         \
                 [tag v2.xx.0b1]  [tag v2.xx.0]           [tag v2.xx.x]
                                         
                                          

| = pull request
\ = fork\tag
/ = merge
. = cherry-pick


Contributors

Just make pull requests to master.


Release Manager

Releases

Only the Release Manager needs to do this and they only need to do this during a scheduled feature freeze for an upcoming release. The feature freeze window should be kept short to minimize the work involved.

It's assumed they have a github.com/D-Programming-Language remote setup called "upstream" and master is up-to-date with it.

When a scheduled feature freeze for an upcoming release is to happen just create the versioned release branch:

git checkout -b 2.xx master
git push upstream 2.xx

As bugfixes come in cherry-pick them from master:

# while "2.xx" is checked out
git cherry-pick <commit-hash>
git push upstream 2.xx


As each beta is made:

git tag -m v2.xx.0-bx v2.xx.0-bx 2.xx
git push upstream v2.xx.0-bx


When the final release has been built and is out the door:

git tag -m v2.xx.0 v2.xx.0 2.xx
git push upstream v2.xx.0
git push upstream 2.xx
git checkout master
git merge 2.xx
git push upstream master

Hotfixes

Hotfixes are emergency releases made because of some very serious bug or regression that cannot wait until the next release is made. They work nearly identically to the above instructions for a release but they are forked from the tag of the most recently released version. The branches for them are extremely short lived because they address only one (maybe two) specific issues that have come up.

When it's decided a hotfix is necessary:

git checkout -b hotfix v2.xxx
git push upstream hotfix


After the regression/bug fix comes in cherry-pick it from master:

# while "hotfix" is checked out
git cherry-pick <commit-hash>
git push upstream hotfix


When the final hotfix release has been built and is out the door:

git tag -m v2.xxx.x v2.xxx.x hotfix
git push upstream v2.xxx.x
git checkout master
git merge hotfix
git push upstream master
git branch -d hotfix      # delete branch
git push upstream :hotfix # delete upstream branch