| 1 | [[PageOutline(1-3,Contents,inline)]] |
| 2 | |
| 3 | = Publishing a release = |
| 4 | |
| 5 | These instructions cover how to release minor and patch releases in a |
| 6 | project that uses trac/subversion for revision control and project |
| 7 | management. How to release major releases is not covered yet since we |
| 8 | have not done that (with the exception of the first release). Release |
| 9 | numbering follows the normal convention of major.minor.patch and the |
| 10 | APR (see http://apr.apache.org/versioning.html) guidelines for |
| 11 | releases are used. |
| 12 | |
| 13 | The main development is performed in the trunk branch of the |
| 14 | repository. A new release branch is created for each minor release |
| 15 | from the trunk and patch releases are snapshots of the minor release |
| 16 | branch. This implies that patch work is performed in the minor release |
| 17 | branch, and changes made release branch is transferred to the trunk |
| 18 | every time a new patch release is made. Remember, patch work should be |
| 19 | limited to bug fixes and important fixes only leaving development of |
| 20 | new features and designs to the trunk branch. |
| 21 | |
| 22 | Releases should only be performed by an appointed member of the team, |
| 23 | the Release Manager, and merges should be performed by a Merge |
| 24 | Manager. Of course, one team member can be both managers, thus |
| 25 | becoming the Release and Merge Manager. |
| 26 | |
| 27 | |
| 28 | == Minor release procedure == |
| 29 | |
| 30 | This section describes what to do when publishing a minor release. |
| 31 | |
| 32 | 1. Make sure that all commits are performed into to the trunk, such |
| 33 | as bumping version number(s) ([source:trunk/configure.ac configure.ac]), |
| 34 | acknowledge contributions ([source:trunk/THANKS THANKS]), update |
| 35 | files [source:trunk/NEWS NEWS] and [source:trunk/ChangeLog ChangeLog]. |
| 36 | [[br]][[br]] |
| 37 | i. Update version number in [source:trunk/configure.ac configure.ac]. Locate and change the |
| 38 | below line |
| 39 | {{{ |
| 40 | AC_INIT([svndigest],[A.B],[jari.at.thep.lu.se]) |
| 41 | }}} |
| 42 | i. Update [source:trunk/THANKS THANKS]. Remember, ego and vanity is the currency of open |
| 43 | source projects. Well, there are other reasons for open source |
| 44 | projects but [source:trunk/THANKS THANKS] is for boosting peoples' ego. [[br]][[br]] |
| 45 | i. Set the date for the new release in [source:trunk/NEWS NEWS] |
| 46 | {{{ |
| 47 | version A.B (released 26 June 2007) |
| 48 | }}} |
| 49 | Make sure that the items in [source:trunk/NEWS NEWS] cover the new features of the |
| 50 | release. [[br]][[br]] |
| 51 | i. Finalize the links to trac in [source:trunk/ChangeLog ChangeLog] |
| 52 | {{{ |
| 53 | version A.B: |
| 54 | - http://trac.thep.lu.se/trac/svndigest/log/trunk?rev=N&stop_rev=M |
| 55 | - http://trac.thep.lu.se/trac/svndigest/query?milestone=A.B&order=id |
| 56 | }}} |
| 57 | where M should be current HEAD+2 (2 more commits are needed before release). |
| 58 | [[br]][[br]] |
| 59 | i. Commit changes to the repository, `svn ci -m "Preparing release A.B"` |
| 60 | [[br]][[br]] |
| 61 | 1. Update copyright statements with commands |
| 62 | {{{ |
| 63 | ./bootstrap |
| 64 | make all |
| 65 | make check |
| 66 | ./bin/svndigest --copyright |
| 67 | }}} |
| 68 | Examine the updates and commit changes with `svn ci -m "updating copyright statements"`[[br]][[br]] |
| 69 | 1. Needless to say, make sure that the program is in a state to be |
| 70 | released; make sure that all the tests pass, test the distribution |
| 71 | package, and perform all other release tests you think is |
| 72 | appropriate: |
| 73 | {{{ |
| 74 | ./bootstrap |
| 75 | make check |
| 76 | make distcheck |
| 77 | }}} |
| 78 | 1. Create a tag using a one liner like |
| 79 | {{{ |
| 80 | svn copy http://lev.thep.lu.se/repository/svndigest/trunk \ |
| 81 | http://lev.thep.lu.se/repository/svndigest/tags/A.B \ |
| 82 | -m "Tagging version A.B" |
| 83 | }}} |
| 84 | 1. Update the version list in Trac using the |
| 85 | [http://trac.thep.lu.se/trac/svndigest/admin trac-admin tool]. |
| 86 | [[br]][[br]] |
| 87 | 1. Create a distribution package: |
| 88 | {{{ |
| 89 | svn co http://lev.thep.lu.se/repository/svndigest/tags/A.B A.B_dist |
| 90 | cd A.B_dist |
| 91 | ./bootstrap |
| 92 | ./configure [OPTION]... |
| 93 | make dist |
| 94 | }}} |
| 95 | Attach the new package to the DownloadPage. Remove `A.B_dist` |
| 96 | directory. [[br]][[br]] |
| 97 | 1. Update DownloadPage and [wiki:WikiStart WikiStart][[br]][[br]] |
| 98 | i. Update the section '''Latest stable release''' to reflect the new |
| 99 | version, that is [[br]][[br]] |
| 100 | * Change the version number [[br]][[br]] |
| 101 | * Update the package link to the new version [[br]][[br]] |
| 102 | * Update link to NEWS file to `source:tags/A.B/NEWS` [[br]][[br]] |
| 103 | i. In section '''svndigest ''latest release'' ''' update link to |
| 104 | `[source:tags/A.B/NEWS NEWS]` and modify the svn command to |
| 105 | {{{ |
| 106 | svn checkout http://lev.thep.lu.se/repository/svndigest/tags/A.B svndigest-A.B |
| 107 | }}} |
| 108 | i. In section '''svndigest ''stable'' ''' update link to |
| 109 | `[milestone:A.B.1 A.B.1]` and modify the svn command to |
| 110 | {{{ |
| 111 | svn checkout http://lev.thep.lu.se/repository/svndigest/branches/A.B-stable svndigest-A.B |
| 112 | }}} |
| 113 | i. In section '''svndigest ''devel'' ''' update link to `[milestone:A.B+1 A.B+1]`.[[br]][[br]] |
| 114 | i. On WikiStart update links `[source:tags/A.B/doc/readme.txt Manual]`, `[source:tags/A.B/NEWS NEWS]`, and `[source:tags/A.B/INSTALL Install]`, .[[br]][[br]] |
| 115 | 1. Create a new minor branch using a one liner like |
| 116 | {{{ |
| 117 | svn copy http://lev.thep.lu.se/repository/svndigest/tags/A.B \ |
| 118 | http://lev.thep.lu.se/repository/svndigest/branches/A.B-stable \ |
| 119 | -m "New minor version A.B branch" |
| 120 | }}} |
| 121 | 1. Prepare the minor branch for the first patch release [[br]][[br]] |
| 122 | i. Check out the new minor branch |
| 123 | {{{ |
| 124 | svn co http://lev.thep.lu.se/repository/svndigest/branches/A.B-stable A.B |
| 125 | }}} |
| 126 | i. Update version number in `configure.ac`. Locate and change the |
| 127 | below line |
| 128 | {{{ |
| 129 | AC_INIT([svndigest],[preA.B.1],[jari.at.thep.lu.se]) |
| 130 | }}} |
| 131 | i. Add an entry in `NEWS` |
| 132 | {{{ |
| 133 | version A.B.1 (released DATE) |
| 134 | }}} |
| 135 | The date is set when version A.B.1 is released. [[br]][[br]] |
| 136 | i. Add an entry in `ChangeLog` |
| 137 | {{{ |
| 138 | version A.B.1: |
| 139 | - http://trac.thep.lu.se/trac/svndigest/log/trunk?rev=[M+1]&stop_rev=HEAD |
| 140 | - http://trac.thep.lu.se/trac/svndigest/query?milestone=A.B.1&order=id |
| 141 | }}} |
| 142 | i. Commit changes to the repository, |
| 143 | `svn ci -m "Changes for future release A.B.1"` [[br]][[br]] |
| 144 | 1. Prepare the trunk for the next minor release [[br]][[br]] |
| 145 | i. Update version number in `configure.ac`. Locate and change the |
| 146 | below line |
| 147 | {{{ |
| 148 | AC_INIT([svndigest],[preA.[B+1]],[jari.at.thep.lu.se]) |
| 149 | }}} |
| 150 | i. Add an entry in `NEWS` |
| 151 | {{{ |
| 152 | version A.[B+1] (released DATE) |
| 153 | }}} |
| 154 | The date is set when version A.[B+1] is released. [[br]][[br]] |
| 155 | i. Add an entry in `ChangeLog` |
| 156 | {{{ |
| 157 | version A.[B+1]: |
| 158 | - http://trac.thep.lu.se/trac/svndigest/log/trunk?rev=HEAD&stop_rev=M+1 |
| 159 | - http://trac.thep.lu.se/trac/svndigest/query?milestone=A.[B+1]&order=id |
| 160 | }}} |
| 161 | i. Commit changes to the repository, |
| 162 | `svn ci -m "Changes for future release A.[B+1]"` [[br]][[br]] |
| 163 | 1. Close the [http://trac.thep.lu.se/trac/svndigest/roadmap milestone] |
| 164 | associated with the release and replace `head` with appropriate revision. Add a new milestone as needed (with log link). |
| 165 | |
| 166 | |
| 167 | |
| 168 | == Patch release procedure == |
| 169 | |
| 170 | This section describes what to do when publishing a patch release A.B.C. |
| 171 | |
| 172 | 1. Make sure that all commits are performed into to the branch, such |
| 173 | as bumping version number(s) (`configure.ac`), acknowledge |
| 174 | contributions (`THANKS`), update files `NEWS` and |
| 175 | `ChangeLog`. [[br]][[br]] |
| 176 | i. Update version number in `configure.ac`. Locate and change the |
| 177 | below line |
| 178 | {{{ |
| 179 | AC_INIT([svndigest],[A.B.C],[jari.at.thep.lu.se]) |
| 180 | }}} |
| 181 | i. Update `THANKS`. [[br]][[br]] |
| 182 | i. Set the date for the new release in `NEWS` |
| 183 | {{{ |
| 184 | version A.B.C (released 27 June 2007) |
| 185 | }}} |
| 186 | Make sure that the items in `NEWS` cover all important bug fixes of the |
| 187 | release. [[br]][[br]] |
| 188 | i. Finalize the links to trac in `ChangeLog` |
| 189 | {{{ |
| 190 | version A.B.C: |
| 191 | - http://trac.thep.lu.se/trac/svndigest/log/branches/A.B-stable?rev=N&stop_rev=M |
| 192 | - http://trac.thep.lu.se/trac/svndigest/query?milestone=A.B.C&order=id |
| 193 | }}} |
| 194 | where `N` is given by |
| 195 | {{{ |
| 196 | $ svn update |
| 197 | N-2 |
| 198 | }}} |
| 199 | and `M` should have been set at previous release.[[br]][[br]] |
| 200 | i. Commit changes to the repository, `svn ci -m "Preparing release A.B.C"` |
| 201 | [[br]][[br]] |
| 202 | 1. Update copyright statements with commands |
| 203 | {{{ |
| 204 | ./bootstrap |
| 205 | make all |
| 206 | make check |
| 207 | ./bin/svndigest --copyright |
| 208 | }}} |
| 209 | Examine the updates and commit changes with `svn ci -m "updating copyright statements"`.[[br]][[br]] |
| 210 | 1. Needless to say, make sure that the program is in a state to be |
| 211 | released; make sure that all the tests pass, test the distribution |
| 212 | package, and perform all other release tests you think is |
| 213 | appropriate: |
| 214 | {{{ |
| 215 | ./bootstrap |
| 216 | make check |
| 217 | make distcheck |
| 218 | }}} |
| 219 | 1. Create a tag using a one liner like |
| 220 | {{{ |
| 221 | svn copy http://lev.thep.lu.se/repository/svndigest/branches/A.B-stable \ |
| 222 | http://lev.thep.lu.se/repository/svndigest/tags/A.B.C \ |
| 223 | -m "Tagging version A.B.C" |
| 224 | }}} |
| 225 | 1. Update the version list in Trac using the |
| 226 | [http://lev.thep.lu.se/trac/svndigest/admin trac-admin tool]. |
| 227 | [[br]][[br]] |
| 228 | 1. Create a distribution package: |
| 229 | {{{ |
| 230 | svn co http://lev.thep.lu.se/repository/svndigest/tags/A.B.C A.B.C_dist |
| 231 | cd A.B.C_dist |
| 232 | ./bootstrap |
| 233 | ./configure [OPTION]... |
| 234 | make dist |
| 235 | }}} |
| 236 | Attach the new package to the DownloadPage. Remove `A.B.C_dist` |
| 237 | directory. [[br]][[br]] |
| 238 | 1. Update DownloadPage and [wiki:WikiStart WikiStart][[br]][[br]] |
| 239 | i. Update the section '''Latest stable release''' to reflect the new |
| 240 | version, that is [[br]][[br]] |
| 241 | * Change the version number [[br]][[br]] |
| 242 | * Update the package link to the new version [[br]][[br]] |
| 243 | * Update link to NEWS file to `source:tags/A.B.C/NEWS` [[br]][[br]] |
| 244 | i. In section '''svndigest ''latest release'' ''' update link to |
| 245 | `[source:tags/A.B.C/NEWS NEWS]` and modify the svn command to |
| 246 | {{{ |
| 247 | svn checkout http://lev.thep.lu.se/repository/svndigest/tags/A.B.C svndigest-A.B.C |
| 248 | }}} |
| 249 | i. In section '''svndigest ''stable'' ''' update link to |
| 250 | `[milestone:A.B.[C+1] A.B.[C+1]]`.[[br]][[br]] |
| 251 | i. On WikiStart update links `[source:tags/A.B/doc/readme.txt Manual]`, `[source:tags/A.B/NEWS NEWS]`, and `[source:tags/A.B/INSTALL Install]`, .[[br]][[br]] |
| 252 | 1. Prepare the minor branch for the next patch release [[br]][[br]] |
| 253 | i. Update version number in `configure.ac`. Locate and change the |
| 254 | below line |
| 255 | {{{ |
| 256 | AC_INIT([svndigest],[preA.B.[C+1]],[jari.at.thep.lu.se]) |
| 257 | }}} |
| 258 | i. Add an entry in `NEWS` |
| 259 | {{{ |
| 260 | version A.B.[C+1] (released DATE) |
| 261 | }}} |
| 262 | The date is set when version A.B.[C+1] is released. [[br]][[br]] |
| 263 | i. Add an entry in `ChangeLog` |
| 264 | {{{ |
| 265 | version A.B.[C+1]: |
| 266 | - http://trac.thep.lu.se/trac/svndigest/log/branches/A.B-stable?rev=HEAD&stop_rev=[M+1] |
| 267 | - http://trac.thep.lu.se/trac/svndigest/query?milestone=A.B.[C+1]&order=id |
| 268 | }}} |
| 269 | i. Commit changes to the repository, |
| 270 | `svn ci -m "Changes for future release A.B.[C+1]"` [[br]][[br]] |
| 271 | 1. Merge the patch release into the trunk. To avoid confusion and |
| 272 | minimize the risk of loosing fixes, this step is only performed by |
| 273 | the Merge Master. [[br]][[br]] |
| 274 | i. Checkout a pristine version of the trunk. |
| 275 | {{{ |
| 276 | svn checkout http://lev.thep.lu.se/repository/svndigest/trunk trunk_merge |
| 277 | }}} |
| 278 | i. Merge changes into trunk. In this example the diffence between a |
| 279 | minor release tag and the first patch release tag is merged into |
| 280 | the trunk WC |
| 281 | {{{ |
| 282 | cd trunk_merge |
| 283 | svn merge http://lev.thep.lu.se/repository/svndigest/tags/A.B \ |
| 284 | http://lev.thep.lu.se/repository/svndigest/tags/A.B.1 |
| 285 | }}} |
| 286 | i. Resolve all conflicts. Run tests and perform all other |
| 287 | appropriate tests to make sure that the merge does not create |
| 288 | havoc. [[br]][[br]] |
| 289 | i. Commit changes to the trunk branch. |
| 290 | {{{ |
| 291 | svn commit -m "Merged patch release A.B.1 to the trunk. Delta A.B.1 - A.B" |
| 292 | }}} |
| 293 | 1. Close the milestone associated with the release and replace `head` with appropriate revision in log link. Add a new |
| 294 | milestone as needed (with a log link). |