Changes between Version 4 and Version 5 of ReleaseProcedure


Ignore:
Timestamp:
Jun 26, 2007, 4:31:23 PM (13 years ago)
Author:
Jari Häkkinen
Comment:

Reworking the procedures. Still things to fix.

Legend:

Unmodified
Added
Removed
Modified
  • ReleaseProcedure

    v4 v5  
     1== Publishing a release ==
    12
    2 = Release Procedure =
     3These instructions cover how to release minor and patch releases in a
     4project that uses trac/subversion for revision control and project
     5management. How to release major releases is not covered yet since we
     6have not done that (with the exception of the first release). Release
     7numbering follows the normal convention of major.minor.patch and the
     8APR (see http://apr.apache.org/versioning.html) guidelines for
     9releases are used.
    310
    4 Svndigest uses "MAJOR.MINOR.PATCH" release numbers, with the same guidelines as APR (see http://apr.apache.org/versioning.html).
     11The main development is performed in the trunk branch of the
     12repository. A new release branch is created for each minor release
     13from the trunk and patch releases are snapshots of the minor release
     14branch. This implies that patch work is performed in the minor release
     15branch, and changes made release branch is transferred to the trunk
     16every time a new patch release is made. Remember, patch work should be
     17limited to bug fixes and important fixes only leaving development of
     18new features and designs to the trunk branch.
    519
    6 === Creating a release branch ===
    7 A new release branch is created for each new major and minor release. So, for example, a new release branch is created when preparing to release version 1.0.0, or version 0.3.0. However, when preparing to release 0.3.1 (a patch-version increment), the release branch created at the time of 0.3.0 is used.
    8 
    9 If you are preparing for a patch release, then there is no release branch to create. You just pick up where you left off in the current minor version series release branch.
    10 
    11 Once people agree that a new release branch should be made, the Release Manager creates it with the following procedure (substitute A.B with the version you are preparing, eg. 0.3, or 1.0):
    12 
    13   1.  Edit `NEWS` on trunk to introduce a new section for the upcoming release. The section starts with:
    14 {{{
    15 Version A.B (released ?? ????? 200?)
    16 }}}
    17   Leave the release date blank for now. It will remain this way until rolling time.
    18 
    19   2.  Commit change `svn ci -m "add a new NEWS section for upcoming A.B release"`
    20 
    21   3.  Create a new release branch using a one liner like
    22 {{{
    23   svn copy http://lev.thep.lu.se/repository/svndigest/trunk \
    24            http://lev.thep.lu.se/repository/svndigest/branches/A.B-stable \
    25            -m "New branch for svndigest A.B.x"
    26 }}}
    27 
    28   4.  Update version number in `configure.ac` on trunk. The version number on trunk always reflects the major/minor version that will immediately follow the one for which you just created a branch (eg. 1.1.0 for the 1.0.x branch, and 0.4.0 for the 0.3.x branch).
     20Releases should only be performed by an appointed member of the team,
     21the Release Manager, and merges should be performed by a Merge
     22Manager. Of course, one team member can be both managers, thus
     23becoming the Release and Merge Manager.
    2924
    3025
    31 === Rolling a release ===
     26=== Minor release procedure ===
    3227
    33 This section describes how to roll a release A.B.C.
     28This section describes what to do when publishing a minor release.
    3429
    35   1. Update files `ChangeLog`, `NEWS`, and `configure.ac` on release branch
    36     *  Add text in `NEWS` what is new for this release
    37     *  Update `configure.ac` setting ''devel'' to `false`
    38     *  Issue `svn ci -m "adding NEWS text and preparing for release A.B.C"`
     30 1. Needless to say, make sure that the program is in a state to be
     31    released; make sure that all the tests pass, test the distribution
     32    package, and perform all other release tests you think is
     33    appropriate:
     34{{{
     35make check
     36make distcheck
     37}}}
     38 1. Make sure that all commits are performed into to the trunk, such
     39    as bumping version number(s) (source:trunk/configure.ac),
     40    acknowledge contributions (source:trunk/THANKKS), update
     41    source:trunk/NEWS and source:trunk/ChangeLog. [[br]][[br]]
     42  i. Set the date for the new release in `NEWS`
     43{{{
     44Version A.B (released 26 June 2007)
     45}}}
     46 1. Create a tag using a one liner like
     47{{{
     48svn copy http://lev.thep.lu.se/repository/svndigest/trunk \
     49    http://lev.thep.lu.se/repository/svndigest/tags/A.B \
     50    -m "Tagging version A.B"
     51}}}
     52 1. Update the version list in Trac using the
     53    [http://lev.thep.lu.se/trac/svndigest/admin trac-admin tool].
     54    [[br]][[br]]
     55 1. Create a distribution package:
     56{{{
     57svn co http://lev.thep.lu.se/repository/svndigest/tags/A.B A.B_dist
     58cd A.B_dist
     59make dist
     60}}}
     61    Publish the new package and make the appropriate changes to the
     62    [http://lev.thep.lu.se/trac/svndigest/wiki/DownloadPage download page].
     63    Remove `A.B_dist` directory. [[br]][[br]]
     64 1. Create a new minor release branch using a one liner like
     65{{{
     66svn copy http://lev.thep.lu.se/repository/svndigest/tags/A.B \
     67    http://lev.thep.lu.se/repository/svndigest/branches/A.B \
     68    -m "New patch branch for A.B"
     69}}}
     70 1. Check out the new minor branch
     71{{{
     72svn co http://lev.thep.lu.se/repository/svndigest/branches/A.B A.B
     73}}}
     74  i. Edit `NEWS` on trunk to introduce a new section for the upcoming
     75     release. The section starts with:
     76{{{
     77Version A.B.C (released ?? ????? 200?)
     78}}}
     79     Leave the release date blank for now. It will remain this way
     80     until rolling time.
     81  i. Commit change `svn ci -m "add a new NEWS section for upcoming
     82     A.B.C release"` [[br]][[br]]
     83 1. Close the [http://lev.thep.lu.se/trac/svndigest/roadmap milestone]
     84    associated with the release and add a new milestone as needed.
    3985
    40   2. Issue `make distcheck` with appropriate configure options.
    4186
    42   3. Create a tag with
     87=== Patch release procedure ===
     88
     89This section describes what to do when publishing a patch release.
     90
     91 1. Needless to say, make sure that the program is in a state to be
     92    released; make sure that all the tests pass, test the distribution
     93    package, and perform all other release tests you think is
     94    appropriate:
    4395{{{
    44   svn copy . http://lev.thep.lu.se/repository/svndigest/tags/A.B \
    45            -m "Tagging version A.B.C"
     96make check
     97make distcheck
    4698}}}
    47 
    48   4. Create new source packages with `make dist`. Make the appropriate updates on DownloadPage including:
    49     * Upload gzipped tar file and update corresponding link.
    50     * Update link to NEWS file to `source:tags/A.B.C/NEWS`
    51     * In ''Svndigest latest release'' update to `[source:tags/A.B.C/NEWS NEWS]` and modify svn command to 
    52       `svn checkout http://lev.thep.lu.se/repository/svndigest/tags/A.B.C svndigest-A.B.C`
    53     * In ''Svndigest stable'' update link to `[milestone:A.B.(C++) A.B.(C++)]dev` and modify svn command to
    54       `svn checkout http://lev.thep.lu.se/repository/svndigest/branches/A.B-stable svndigest-A.B.(C++)dev`
    55     * In ''Svndigest devel'' modify svn command to
    56       `svn checkout http://lev.thep.lu.se/repository/svndigest/trunk svndigest-A.(B++).0dev`
    57 
    58   5. Set ''devel'' to `true` in `configure.ac`.
    59 
    60   6. Merge changes in release branch to trunk.
    61     * `cd path/to/release-branch`
    62     * Find revision (N) for latest merge: `svn log -r 1:HEAD | grep Merged`
    63     * Find head revision (M) in release branch: `svn info | grep Rev:`
    64     * `cd path/to/trunk`
    65     * `svn merge -r N:M http://lev.thep.lu.se/repository/svndigest/branches/A.B-stable`
    66     * Run `make check` to make sure that the merge succeeded.
    67     * Commit changes to trunk: `svn commit -m "Merged log:branches/0.1-stable#N:M trunk."`
    68 
    69   7.  Edit NEWS on trunk (and release branch) to introduce a new section for the upcoming release. The section starts with:
     99 1. Make sure that all commits are performed into to the trunk, such
     100    as bumping version number(s) (configure.ac), acknowledge
     101    contributions (THANKKS), update NEWS and !ChangeLog. [[br]][[br]]
     102 1. Create a tag using a one liner like
    70103{{{
    71 Version A.B.0 (released ?? ????? 200?)
     104svn copy http://lev.thep.lu.se/repository/svndigest/branch/A.B \
     105    http://lev.thep.lu.se/repository/svndigest/tags/A.B.C \
     106    -m "Tagging version A.B.C"
    72107}}}
    73   Leave the release date blank for now. It will remain this way until rolling time.
    74 
    75   8. Update Trac:
    76     * Update the version list in Trac using the trac-admin tool, i.e., add version A.B
    77     * Close the milestone A.B and add a new milestones.
    78 
     108 1. Update the version list in Trac using the
     109    [http://lev.thep.lu.se/trac/svndigest/admin trac-admin tool].
     110    [[br]][[br]]
     111 1. Create a distribution package:
     112{{{
     113svn co http://lev.thep.lu.se/repository/svndigest/tags/A.B.C A.B.C_dist
     114cd A.B.C_dist
     115make dist
     116}}}
     117    Publish the new package and make the appropriate changes to the
     118    [http://lev.thep.lu.se/trac/svndigest/wiki/DownloadPage download page].
     119    Remove `A.B.C_dist` directory. [[br]][[br]]
     120 1. Merge the patch tag into the trunk. To avoid confusion and
     121    minimize the risk of loosing fixes, this step is only performed by
     122    a Merge Master. [[br]][[br]]
     123  i. Checkout a pristine version of the trunk.
     124{{{
     125svn checkout http://lev.thep.lu.se/repository/svndigest/trunk trunk_merge
     126}}}
     127  i. Merge changes into trunk. In this example the tag starts at
     128     revision N and end at revision M.
     129{{{
     130cd trunk_merge
     131svn merge -r N:M http://lev.thep.lu.se/repository/svndigest/tags/A.B.C
     132}}}
     133  i. Resolve all conflicts. Run tests and perform all other
     134     appropriate tests to make sure that the merge does not create
     135     havoc.
     136  i. Commit changes to trunk.
     137{{{
     138svn commit -m "Merged log:tags/A.B.C#N:M"
     139}}}
     140 1. Close the milestone associated with the release and add a new
     141    milestone as needed.