4 | | Svndigest uses "MAJOR.MINOR.PATCH" release numbers, with the same guidelines as APR (see http://apr.apache.org/versioning.html). |
| 11 | The main development is performed in the trunk branch of the |
| 12 | repository. A new release branch is created for each minor release |
| 13 | from the trunk and patch releases are snapshots of the minor release |
| 14 | branch. This implies that patch work is performed in the minor release |
| 15 | branch, and changes made release branch is transferred to the trunk |
| 16 | every time a new patch release is made. Remember, patch work should be |
| 17 | limited to bug fixes and important fixes only leaving development of |
| 18 | new features and designs to the trunk branch. |
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). |
| 20 | Releases should only be performed by an appointed member of the team, |
| 21 | the Release Manager, and merges should be performed by a Merge |
| 22 | Manager. Of course, one team member can be both managers, thus |
| 23 | becoming the Release and Merge Manager. |
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 | {{{ |
| 35 | make check |
| 36 | make 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 | {{{ |
| 44 | Version A.B (released 26 June 2007) |
| 45 | }}} |
| 46 | 1. Create a tag using a one liner like |
| 47 | {{{ |
| 48 | svn 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 | {{{ |
| 57 | svn co http://lev.thep.lu.se/repository/svndigest/tags/A.B A.B_dist |
| 58 | cd A.B_dist |
| 59 | make 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 | {{{ |
| 66 | svn 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 | {{{ |
| 72 | svn 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 | {{{ |
| 77 | Version 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. |
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 |
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 | {{{ |
| 113 | svn co http://lev.thep.lu.se/repository/svndigest/tags/A.B.C A.B.C_dist |
| 114 | cd A.B.C_dist |
| 115 | make 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 | {{{ |
| 125 | svn 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 | {{{ |
| 130 | cd trunk_merge |
| 131 | svn 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 | {{{ |
| 138 | svn 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. |