Version 8 (modified by 16 years ago) (diff) | ,
---|
Contents
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.
Creating a release branch
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, e.g. 0.3, or 1.0):
- Update copyright statements with command:
svndigest --copyright --no-report
Examine the updates and commit changes withsvn ci -m "updating copyright statements"
. For this step svndigest is obviously needed.
- Create a new minor branch using a one liner like
svn copy http://lev.thep.lu.se/repository/yat/tags/A.B \ http://lev.thep.lu.se/repository/yat/branches/A.B-stable \ -m "New minor version A.B branch"
- Prepare the trunk for the next minor release
- Update version number in
configure.ac
. Locate and change the below lineAC_INIT([yat],[preA.[B+1]],[jari.at.thep.lu.se])
- Add an entry in
NEWS
version A.[B+1] (released DATE)
The date is set when version A.[B+1] is released.
- Add an entry in
ChangeLog
version A.[B+1]: - http://trac.thep.lu.se/trac/yat/log/branches/A.B-stable?rev=HEAD&stop_rev=M+1 - http://trac.thep.lu.se/trac/yat/query?milestone=A.[B+1]&order=id
- Update version number in line
This directory contains the A.B release of yat
- Commit changes to the repository,
svn ci -m "Changes for future release A.[B+1]"
- Update version number in
- Prepare the minor branch for the upcoming release
- Check out the new minor branch
svn co http://lev.thep.lu.se/repository/yat/branches/A.B-stable A.B
- Update version number in
configure.ac
. Locate and change the below lineAC_INIT([yat],[preA.B],[jari.at.thep.lu.se])
- Commit changes to the repository,
svn ci -m "Changes for future release A.B"
- Check out the new minor branch
Rolling a release
- Make sure that all commits are performed into the minor branch, such
as bumping version number(s) (
configure.ac
), acknowledge contributions (THANKS
), update filesNEWS
andChangeLog
.
- Update version number in
configure.ac
. Locate and change the below lineAC_INIT([yat],[A.B],[jari.at.thep.lu.se])
- Update
THANKS
. Remember, ego and vanity is the currency of open source projects. Well, there are other reasons for open source projects butTHANKS
is for boosting people's ego.
- Set the date for the new release in
NEWS
.version A.B (released 26 June 2007)
Make sure that the items inNEWS
cover the new features of the release.
- Finalize the links to trac in
ChangeLog
version A.B: - http://trac.thep.lu.se/trac/yat/log/branches/0.6-stable?action=stop_on_copy&rev=N&stop_rev=M&mode=follow_copy - http://trac.thep.lu.se/trac/yat/query?milestone=A.B&order=id
where M should be current HEAD+2 (2 more commits are needed before release).
- Commit changes to the repository,
svn ci -m "Preparing release A.B"
- Update version number in
- 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:
./bootstrap ./configure make make check make distcheck
- Create a tag using a one liner like
svn copy http://lev.thep.lu.se/repository/yat/trunk \ http://lev.thep.lu.se/repository/yat/tags/A.B \ -m "Tagging version A.B"
- Update the version list in Trac using the
trac-admin tool.
Remember to set the date.
- Create a distribution package:
svn co http://lev.thep.lu.se/repository/yat/tags/A.B A.B_dist cd A.B_dist ./bootstrap ./configure make dist
Attach the new package to the DownloadPage. RemoveA.B_dist
directory.
- Prepare the minor branch for the first patch release
- Check out the new minor branch
svn co http://lev.thep.lu.se/repository/yat/branches/A.B-stable A.B
- Update version number in
configure.ac
. Locate and change the below lineAC_INIT([yat],[preA.B.1],[jari.at.thep.lu.se])
- Add an entry in
NEWS
version A.B.1 (released DATE)
The date is set when version A.B.1 is released.
- Add an entry in
ChangeLog
version A.B.1: - http://trac.thep.lu.se/trac/yat/log/trunk?rev=[M+1]&stop_rev=HEAD - http://trac.thep.lu.se/trac/yat/query?milestone=A.B.1&order=id
- Commit changes to the repository,
svn ci -m "Changes for future release A.B.1"
- Check out the new minor branch
- Update DownloadPage and WikiStart
- Update the section Latest stable release to reflect the new
version, that is
- Change the version number
- Update the package link to the new version
- Update link to NEWS file to
source:tags/A.B/NEWS
- Change the version number
- In section yat latest release update link to
[source:tags/A.B/NEWS NEWS]
and modify the svn command tosvn checkout http://lev.thep.lu.se/repository/yat/tags/A.B yat-A.B
- In section yat stable update link to
[milestone:A.B.1 A.B.1]
and modify the svn command tosvn checkout http://lev.thep.lu.se/repository/yat/branches/A.B-stable yat-A.B
- In section yat devel update link to
[milestone:A.B+1 A.B+1]
.
- On WikiStart update links
[source:tags/A.B/NEWS NEWS]
.
- Generate documentation to new version of yat, and update link on WikiStart.
- Update the section Latest stable release to reflect the new
version, that is
- Close the milestone
associated with the release and replace
head
with appropriate revision. Add a new milestone as needed (with log link).
Patch release procedure
This section describes what to do when publishing a patch release A.B.C.
- Make sure that all commits are performed into to the branch, such
as bumping version number(s) (
configure.ac
), acknowledge contributions (THANKS
), update filesNEWS
andChangeLog
.
- Update version number in
configure.ac
. Locate and change the below lineAC_INIT([yat],[A.B.C],[jari.at.thep.lu.se])
- Update
THANKS
.
- Set the date for the new release in
NEWS
version A.B.C (released 27 June 2007)
Make sure that the items inNEWS
cover all important bug fixes of the release.
- Finalize the links to trac in
ChangeLog
version A.B.C: - http://trac.thep.lu.se/trac/yat/log/branches/A.B-stable?rev=N&stop_rev=M - http://trac.thep.lu.se/trac/yat/query?milestone=A.B.C&order=id
whereN
is given by$ svn update N-2
andM
should have been set at previous release.
- Commit changes to the repository,
svn ci -m "Preparing release A.B.C"
- Update version number in
- Update copyright statements with command:
svndigest --copyright --no-report
Examine the updates and commit changes withsvn ci -m "updating copyright statements"
. For this step svndigest is obviously needed.
- 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:
./bootstrap ./configure make make check make distcheck
- Create a tag using a one liner like
svn copy http://lev.thep.lu.se/repository/yat/branches/A.B-stable \ http://lev.thep.lu.se/repository/yat/tags/A.B.C \ -m "Tagging version A.B.C"
- Update the version list in Trac using the
trac-admin tool.
Remember to set the date.
- Create a distribution package:
svn co http://lev.thep.lu.se/repository/yat/tags/A.B.C A.B.C_dist cd A.B.C_dist ./bootstrap ./configure make dist
Attach the new package to the DownloadPage. RemoveA.B.C_dist
directory.
- Update DownloadPage and WikiStart
- Update the section Latest stable release to reflect the new
version, that is
- Change the version number
- Update the package link to the new version
- Update link to NEWS file to
source:tags/A.B.C/NEWS
- Change the version number
- In section yat latest release update link to
[source:tags/A.B.C/NEWS NEWS]
and modify the svn command tosvn checkout http://lev.thep.lu.se/repository/yat/tags/A.B.C yat-A.B.C
- In section yat stable update link to
[milestone:A.B.[C+1] A.B.[C+1]]
.
- On WikiStart update reference to explicit latest version number, and links
[source:tags/A.B/doc/readme.txt Manual]
(in two places),[source:tags/A.B/NEWS NEWS]
, and[source:tags/A.B/INSTALL Install]
.
- Update the section Latest stable release to reflect the new
version, that is
- Prepare the minor branch for the next patch release
- Update version number in
configure.ac
. Locate and change the below lineAC_INIT([yat],[preA.B.[C+1]],[jari.at.thep.lu.se])
- Add an entry in
NEWS
version A.B.[C+1] (released DATE)
The date is set when version A.B.[C+1] is released.
- Add an entry in
ChangeLog
version A.B.[C+1]: - http://trac.thep.lu.se/trac/yat/log/branches/A.B-stable?rev=HEAD&stop_rev=[M+1] - http://trac.thep.lu.se/trac/yat/query?milestone=A.B.[C+1]&order=id
- Commit changes to the repository,
svn ci -m "Changes for future release A.B.[C+1]"
- Update version number in
- Merge the patch release into the trunk. To avoid confusion and
minimize the risk of loosing fixes, this step is only performed by
the Merge Master.
- Checkout a pristine version of the trunk.
svn checkout http://lev.thep.lu.se/repository/yat/trunk trunk_merge
- Merge changes into trunk. In this example the diffence between a
minor release tag and the first patch release tag is merged into
the trunk WC
cd trunk_merge svn merge http://lev.thep.lu.se/repository/yat/tags/A.B \ http://lev.thep.lu.se/repository/yat/tags/A.B.1
- Resolve all conflicts. Run tests and perform all other
appropriate tests to make sure that the merge does not create
havoc.
- Commit changes to the trunk branch.
svn commit -m "Merged patch release A.B.1 to the trunk. Delta A.B.1 - A.B"
- Checkout a pristine version of the trunk.
- Close the milestone associated with the release and replace
head
with appropriate revision in log link. Add a new milestone as needed (with a log link).