wiki:ReleaseProcedure

Version 6 (modified by Peter Johansson, 13 years ago) (diff)

--

Publishing a release

These instructions cover how to release minor and patch releases in a project that uses trac/subversion for revision control and project management. How to release major releases is not covered yet since we have not done that (with the exception of the first release). Release numbering follows the normal convention of major.minor.patch and the APR (see http://apr.apache.org/versioning.html) guidelines for releases are used.

The main development is performed in the trunk branch of the repository. A new release branch is created for each minor release from the trunk and patch releases are snapshots of the minor release branch. This implies that patch work is performed in the minor release branch, and changes made release branch is transferred to the trunk every time a new patch release is made. Remember, patch work should be limited to bug fixes and important fixes only leaving development of new features and designs to the trunk branch.

Releases should only be performed by an appointed member of the team, the Release Manager, and merges should be performed by a Merge Manager. Of course, one team member can be both managers, thus becoming the Release and Merge Manager.

Minor release procedure

This section describes what to do when publishing a minor release.

  1. Needless to say, make sure that the program is in a state to be released; make sure that all the tests pass, test the distribution package, and perform all other release tests you think is appropriate:
    make check
    make distcheck
    
  2. Make sure that all commits are performed into to the trunk, such as bumping version number(s) (configure.ac), acknowledge contributions (THANKS), update files NEWS and ChangeLog.

    1. Set the date for the new release in NEWS
      Version A.B (released 26 June 2007)
      
  3. Create a tag using a one liner like
    svn copy http://lev.thep.lu.se/repository/svndigest/trunk \
        http://lev.thep.lu.se/repository/svndigest/tags/A.B \
        -m "Tagging version A.B"
    
  4. Update the version list in Trac using the trac-admin tool.

  5. Create a distribution package:
    svn co http://lev.thep.lu.se/repository/svndigest/tags/A.B A.B_dist
    cd A.B_dist
    make dist
    
    Publish the new package and make the appropriate changes to the download page. Remove A.B_dist directory.

  6. Create a new minor release branch using a one liner like
    svn copy http://lev.thep.lu.se/repository/svndigest/tags/A.B \
        http://lev.thep.lu.se/repository/svndigest/branches/A.B \
        -m "New patch branch for A.B"
    
  7. Check out the new minor branch
    svn co http://lev.thep.lu.se/repository/svndigest/branches/A.B A.B
    
    1. Edit NEWS on trunk to introduce a new section for the upcoming release. The section starts with:
      Version A.B.1 (released ?? ????? 200?)
      
      Leave the release date blank for now. It will remain this way until rolling time.
    2. Commit change `svn ci -m "add a new NEWS section for upcoming A.B.1 release"`

  8. Close the milestone associated with the release and add a new milestone as needed.

Patch release procedure

This section describes what to do when publishing a patch release.

  1. Needless to say, make sure that the program is in a state to be released; make sure that all the tests pass, test the distribution package, and perform all other release tests you think is appropriate:
    make check
    make distcheck
    
  2. Make sure that all commits are performed into to the trunk, such as bumping version number(s) (configure.ac), acknowledge contributions (THANKKS), update NEWS and ChangeLog.

  3. Create a tag using a one liner like
    svn copy http://lev.thep.lu.se/repository/svndigest/branch/A.B \
        http://lev.thep.lu.se/repository/svndigest/tags/A.B.C \
        -m "Tagging version A.B.C"
    
  4. Update the version list in Trac using the trac-admin tool.

  5. Create a distribution package:
    svn co http://lev.thep.lu.se/repository/svndigest/tags/A.B.C A.B.C_dist
    cd A.B.C_dist
    make dist
    
    Publish the new package and make the appropriate changes to the download page. Remove A.B.C_dist directory.

  6. Merge the patch tag into the trunk. To avoid confusion and minimize the risk of loosing fixes, this step is only performed by a Merge Master.

    1. Checkout a pristine version of the trunk.
      svn checkout http://lev.thep.lu.se/repository/svndigest/trunk trunk_merge
      
    2. Merge changes into trunk. In this example the tag starts at revision N and end at revision M.
      cd trunk_merge
      svn merge -r N:M http://lev.thep.lu.se/repository/svndigest/tags/A.B.C
      
    3. Resolve all conflicts. Run tests and perform all other appropriate tests to make sure that the merge does not create havoc.
    4. Commit changes to trunk.
      svn commit -m "Merged log:tags/A.B.C#N:M"
      
  7. Close the milestone associated with the release and add a new milestone as needed.