~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to doc/developers/releasing.txt

  • Committer: Andrew Bennetts
  • Date: 2008-05-07 22:47:56 UTC
  • mfrom: (3412 +trunk)
  • mto: This revision was merged to the branch mainline in revision 3414.
  • Revision ID: andrew.bennetts@canonical.com-20080507224756-upxgmud0bdo4ysuf
Merge from bzr.dev.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
Releasing Bazaar
 
2
================
 
3
 
 
4
This document describes the processes for making and announcing a Bazaar
 
5
release, and managing the release process.
 
6
 
 
7
See also: `Bazaar Developer Document Catalog <index.html>`_.
 
8
 
 
9
 
 
10
.. contents::
 
11
 
 
12
 
 
13
Starting a Release
 
14
------------------
 
15
 
 
16
To start a new release cycle:
 
17
 
 
18
#. Send mail to the list with the key dates, who will be the release
 
19
   manager, and the main themes or targetted bugs.  Ask people to nominate
 
20
   objectives, or point out any high-risk things that are best done early,
 
21
   or that interact with other changes.
 
22
 
 
23
#. Add a new "series" in Launchpad at <https://launchpad.net/bzr/+addseries>.  There is one 
 
24
   series for every *x.y* release.
 
25
 
 
26
Weekly Status Updates
 
27
---------------------
 
28
 
 
29
TODO: Things to cover:
 
30
 
 
31
* Early communication to downstream teams (e.g. Launchpad) about changes in dependencies.
 
32
* Reminder re lifecycle and where we're up to right now
 
33
* Summary of recent successes and pending work
 
34
* Reminder re release objectives
 
35
* Reminder re things needing attention, e.g. bug triage, reviews, testing of certain things, etc.
 
36
 
 
37
 
 
38
Feature Freeze
 
39
--------------
 
40
 
 
41
TODO: Get material from http://bazaar-vcs.org/FeatureFreeze.
 
42
 
 
43
 
 
44
 
 
45
Preparing the tree for release
 
46
------------------------------
 
47
 
 
48
.. Was previously at http://bazaar-vcs.org/ReleaseChecklist
 
49
 
 
50
.. TODO: Still needs more clarity on what's in a RC versus a final
 
51
.. release?
 
52
 
 
53
This is the procedure for making a new bzr release:
 
54
 
 
55
#. If the release is the first candidate, make a new branch in PQM. 
 
56
   (Contact Robert Collins for this step).
 
57
 
 
58
   Register the branch at https://launchpad.net/products/bzr/+addbranch
 
59
 
 
60
#. Run the automatic test suite and any non-automated tests.  (For example, try a download over http; these should eventually be scripted though not automatically run.). Try to have all optional dependencies installed so that there are no tests skipped. Also make sure that you have the c extensions compiled (``make`` or ``python setup.py build_ext -i``).
 
61
 
 
62
#. In the release branch, update  ``version_info`` in ``./bzrlib/__init__.py``
 
63
 
 
64
#. Add the date and release number to ``./NEWS``.
 
65
 
 
66
#. Commit these changes to the release branch, using a command like::
 
67
    
 
68
     bzr commit -m "(jam) Release 0.12rc1." 
 
69
   
 
70
   The diff before you commit will be something like::
 
71
 
 
72
       === modified file 'NEWS'
 
73
       --- NEWS        2006-10-23 13:11:17 +0000
 
74
       +++ NEWS        2006-10-23 22:50:50 +0000
 
75
       @@ -1,4 +1,4 @@
 
76
       -IN DEVELOPMENT
 
77
       +bzr 0.12rc1  2006-10-23
 
78
 
 
79
          IMPROVEMENTS:
 
80
 
 
81
 
 
82
       === modified file 'bzrlib/__init__.py'
 
83
       --- bzrlib/__init__.py  2006-10-16 01:47:43 +0000
 
84
       +++ bzrlib/__init__.py  2006-10-23 22:49:46 +0000
 
85
       @@ -35,7 +35,7 @@
 
86
        # Python version 2.0 is (2, 0, 0, 'final', 0)."  Additionally we use a
 
87
        # releaselevel of 'dev' for unreleased under-development code.
 
88
 
 
89
       -version_info = (0, 12, 0, 'dev', 0)
 
90
       +version_info = (0, 12, 0, 'candidate', 1)
 
91
 
 
92
        if version_info[3] == 'final':
 
93
            version_string = '%d.%d.%d' % version_info[:3]
 
94
 
 
95
#. Submit those changes to PQM for merge into the appropriate release
 
96
   branch.
 
97
 
 
98
#. When PQM succeeds, pull down the master release branch.
 
99
 
 
100
Making the source tarball
 
101
-------------------------
 
102
 
 
103
#. Change into the source directory and run
 
104
  
 
105
     make dist
 
106
 
 
107
#. Unpack the tarball into a temporary directory and run ``make check`` in
 
108
   that directory, to check for packaging problems.
 
109
 
 
110
 
 
111
Publishing the release
 
112
----------------------
 
113
 
 
114
Now you have the releasable product.  The next step is making it
 
115
available to the world.
 
116
 
 
117
#. In <https://launchpad.net/bzr/> click the "Release series" for this
 
118
   series, to take you to e.g. <https://launchpad.net/bzr/1.1>.  Then
 
119
   click "Register a release", and add information about this release.
 
120
 
 
121
#. Within that release, upload the source tarball and the GPG signature.
 
122
 
 
123
#. Link from http://bazaar-vcs.org/Download to the tarball and signature.
 
124
 
 
125
#. Update http://doc.bazaar-vcs.org/ to have a directory of documentation
 
126
   for this release.  (Controlled by the ``update-bzr-docs`` script on
 
127
   escudero, and also update the ``latest`` symlink in
 
128
   ``/srv/bazaar.canonical.com/doc/``.)
 
129
 
 
130
#. Announce on the `Bazaar home page`__
 
131
   
 
132
 __ http://bazaar-vcs.org/
 
133
 
 
134
 
 
135
Announcing the release
 
136
----------------------
 
137
 
 
138
Now that the release is publicly available, tell people about it.
 
139
 
 
140
#. Announce to ``bazaar-announce`` and ``bazaar`` mailing lists. 
 
141
   The announce mail will look something like this:
 
142
   
 
143
    | Subject: bzr 0.11 release candidate 1
 
144
    | 
 
145
    | INTRO HERE. Mention the release number and date, and why the release. (i.e. release candidate for testing, final release of a version, backport/bugfix etc).
 
146
    | 
 
147
    | Tarballs:
 
148
    | http://bazaar-vcs.org/releases/src/bzr-VERSION.tar.gz
 
149
    | and GPG signature:
 
150
    | http://bazaar-vcs.org/releases/src/bzr-VERSION.tar.gz.sig
 
151
    | 
 
152
    | DESCRIBE-CHANGES-IN-OVERVIEW-HERE
 
153
    | 
 
154
    | DESCRIBE-when the next release will be (if there is another - i.e. this is a release candidate)
 
155
    | 
 
156
    | Many thanks to all the contributors to this release! I've included the
 
157
    | contents of NEWS for VERSION below:
 
158
 
 
159
   To generate the data from NEWS, just copy and paste the relevant news section and clean it up as appropriate. The main clean-up task is to confirm that all major changes are indeed covered. This can be done by running ``bzr log`` back to the point when the branch was opened and cross checking the changes against the NEWS entries.
 
160
 
 
161
   (RC announcements should remind plugin maintainers to update their plugins.)
 
162
 
 
163
     * For point releases (i.e. a release candidate, or an incremental fix
 
164
       to a released version) take everything in the relevant NEWS section.  For
 
165
       example, for 0.11rc2 take everything in NEWS from the bzr 0.11rc2 line to the bzr 0.11rc1 line further down.
 
166
 
 
167
     * For major releases (i.e. 0.11, 0.12 etc), take all the combined NEWS sections from within that version: for 0.11 take all of the 0.11 specific section, plus 0.11rc2, plus 0.11rc1 etc.
 
168
 
 
169
#. Update the IRC channel topic. Use the ``/topic`` command to do this, ensuring the new topic text keeps the project name, web site link, etc.
 
170
 
 
171
#. Announce on http://freshmeat.net/projects/bzr/
 
172
   
 
173
   This should be done for both release candidates and final releases. If you do not have a Freshmeat account yet, ask one of the existing admins.
 
174
 
 
175
#. Update http://en.wikipedia.org/wiki/Bzr -- this should be done for final releases but not Release Candidates.
 
176
 
 
177
#. Package maintainers should update packages when they see the
 
178
   announcement.
 
179
 
 
180
#. Blog about it.
 
181
 
 
182
#. Post to http://mail.python.org/mailman/listinfo/python-announce-list for major releases
 
183
 
 
184
#. Update the python package index: <http://pypi.python.org/pypi/bzr> - best
 
185
   done by running ::
 
186
 
 
187
       python setup.py register
 
188
 
 
189
   Remember to check the results afterwards.
 
190
 
 
191
 
 
192
Merging the released code back to trunk
 
193
---------------------------------------
 
194
 
 
195
Merge the release branch back into the trunk.  Check that changes in NEWS
 
196
were merged into the right sections.  If it's not already done, advance
 
197
the version number in ``bzr`` and ``bzrlib/__init__.py``.  Submit this
 
198
back into pqm for bzr.dev.
 
199
 
 
200
 
 
201
Updating the PPA for a new release
 
202
----------------------------------
 
203
 
 
204
We build Ubuntu ``.deb`` packages for Bazaar as an important part of the release
 
205
process.  These packages are hosted in a `Personal Package Archive (PPA)`__ on
 
206
Launchpad, at <https://launchpad.net/~bzr/+archive>.
 
207
 
 
208
  __ https://help.launchpad.net/PPAQuickStart
 
209
 
 
210
We build packages for every supported Ubuntu release
 
211
<https://wiki.ubuntu.com/Releases>.  Packages need no longer be updated
 
212
when the release passes end-of-life because all users should
 
213
updated by then.
 
214
 
 
215
The ``debian/`` directory containing the packaging information is kept in
 
216
branches on Launchpad, named like 
 
217
<https://code.launchpad.net/~bzr/bzrtools/packaging-dapper>.
 
218
 
 
219
Preconditions for building these packages:
 
220
  
 
221
* You must have a Launchpad account and be a member of the `~bzr`__ team
 
222
  
 
223
__ https://edge.launchpad.net/~bzr/+members>
 
224
 
 
225
* You must have a GPG key registered to your Launchpad account.
 
226
 
 
227
* Configure ``dput`` to upload to our PPA with this section in your
 
228
  ``~/.dput.cf``::
 
229
 
 
230
    [bzr-ppa]
 
231
    fqdn = ppa.launchpad.net
 
232
    method = ftp
 
233
    incoming = ~bzr/ubuntu
 
234
    login = anonymous
 
235
    allow_unsigned_uploads = 0
 
236
 
 
237
* You need a Ubuntu (or probably Debian) machine, and ::
 
238
 
 
239
    sudo apt-get install build-essential devscripts dput
 
240
 
 
241
Here is the process; there are some steps which should be automated in
 
242
future:
 
243
 
 
244
#. You will need a working directory for each supported release, such as
 
245
   ``~/bzr/Packaging/dapper``
 
246
 
 
247
#. Download the official tarball of the release to e.g. ``~/bzr/Releases``
 
248
 
 
249
#. Copy the original tarball into your per-disto directory, then untar it 
 
250
   and if necessary rename it::
 
251
 
 
252
     cp -l ~/bzr/Releases/bzrtools-1.3.0.tar.gz bzrtools_1.3.0.orig.tar.gz
 
253
     tar xfvz bzrtools_1.3.0.orig.tar.gz
 
254
     mv bzrtools bzrtools-1.3.0
 
255
 
 
256
#. Change into that directory and check out the packaging branch::
 
257
 
 
258
     cd bzrtools
 
259
     bzr checkout \
 
260
       bzr+ssh://bazaar.launchpad.net/~bzr/bzrtools/packaging-dapper \
 
261
       debian
 
262
 
 
263
#. For Bazaar plugins, change the ``debian/control`` file to express a
 
264
   dependency on the correct version of ``bzr``.
 
265
 
 
266
   For bzrtools this is typically::
 
267
 
 
268
      Build-Depends-Indep: bzr (>= 1.3~), rsync
 
269
      Depends: ${python:Depends}, bzr (>= 1.3~), bzr (<< 1.4~), patch
 
270
 
 
271
#. Make a new ``debian/changelog`` entry for the new release,
 
272
   either by using ``dch`` or just editing the file::
 
273
 
 
274
     dch -v '1.3.0-1~bazaar1~dapper1' -D dapper
 
275
 
 
276
   dch will default to the distro you're working in and this isn't checked
 
277
   against the version number (which is just our conversion), so make sure 
 
278
   to specify it.
 
279
 
 
280
   **Caution:** Release candidates must insert a tilde to make them sort before the
 
281
   final release, like this: ``bzr-1.4~rc2-1~bazaar1~dapper1``.
 
282
 
 
283
   Make sure you have the correct email address for yourself, version
 
284
   number, and distribution.  It should look something like this::
 
285
 
 
286
       bzrtools (1.3.0-1~bazaar1~dapper1) dapper; urgency=low
 
287
     
 
288
        * New upstream release.
 
289
     
 
290
       -- John Sample <sample@example.com>  Mon, 31 Mar 2008 12:36:27 +1100
 
291
 
 
292
   If you need to upload the package again to fix a problem, normally you
 
293
   should increment the last number in the version number, following the
 
294
   distro name.  Make sure not to omit the initial ``-1``, and make sure
 
295
   that the distro name in the version is consistent with the target name
 
296
   outside the parenthesis.
 
297
 
 
298
#. Commit these changes into the packaging branch::
 
299
 
 
300
     bzr ci -m '1.3.0-1~bazaar1~dapper1: New upstream release.' debian
 
301
 
 
302
#. Build a source package::
 
303
 
 
304
     debuild -S -sa -i
 
305
 
 
306
   This will create a ``.changes`` file in the per-distro directory,
 
307
   and should invoke gpg to sign it with your key.
 
308
   Check that file is reasonable: it should be uploading to the intended
 
309
   distribution, have a .orig file included, and the right version number.
 
310
 
 
311
#. Upload into the PPA::
 
312
 
 
313
     dput bzr-ppa ../bzrtools__1.3.0-1\~bazaar1\~dapper1_source.changes
 
314
 
 
315
   Don't forget the ``bzr-ppa`` component or dput will try to upload into
 
316
   the main archive by default.  You can disable this by adding this
 
317
   section to your ``.dput.cf``::
 
318
 
 
319
     [ubuntu]
 
320
     fqdn = SPECIFY.A.PPA.NAME
 
321
 
 
322
#. You should soon get an "upload accepted" mail from Launchpad, which
 
323
   means that your package is waiting to be built.  You can then track its
 
324
   progress in <https://launchpad.net/~bzr/+archive> and
 
325
   <https://launchpad.net/~bzr/+archive/+builds>.
 
326
 
 
327