19
19
* `Bazaar Developer Document Catalog <index.html>`_
21
* `Releasing Bazaar <releasing.html>`_ -- the process for actually making
21
* `Releasing Bazaar <releasing.html>`_ -- the process for actually making
22
22
a release or release candidate.
27
Bazaar makes a release every month, preceded by a one-week
28
release-candidate test.
30
In any release we may fix bugs, add formats, change the default format,
31
improve performance, add new commands or change command line behaviour,
32
change the network protocol, or deprecate APIs. We sometimes also
33
introduce new bugs, regress existing behaviour or performance, remove
34
existing features or formats, or break behaviour or APIs depended upon by
35
plugins, external programs or users.
37
Some users are happy upgrading every month and consider the overall
38
positive balance of changes is worth some amount of churn. But there are
39
some serious problems:
41
* You cannot get bug fixes without also getting disruptive changes.
43
* Bazaar is seen as unstable.
45
* Many releases cause some plugin breakage.
47
* One month is not a very long window for dependent programs or systems
48
to catch up to changes in Bazaar before the release goes out of date.
50
* There's no clear indication to distributions which version they should
53
* If people (or their distributions) just pick an arbitrary version, they
54
may all be on different arbitrary versions, therefore they will have
55
different behaviour and different bugs, and sometimes interoperation
58
* Any effort we, or distributors, wanted to put into backporting fixes
59
would be dissipated across many possible backport target releases.
61
* When in the past we've tried either stalling releases for particular
62
features, or having trunk frozen for some weeks, it causes churn and
63
waste. People rush features in, or already landed features wait a long
64
time to be released, or branches go out of date because they cannot
57
2.0.0 --- 2.0.1 -- 2.0.2 -- ...
100
2.0 --- 2.0.1 -- 2.0.2 -- ...
59
+--2.1.0beta1 -- 2.1.0beta2 -- ... -- 2.1.0rc1 -- 2.1.0 -- 2.1.1 -- ...
65
Starting from the date of a major release:
102
+--2.1beta1 -- 2.1beta2 -- ... -- 2.1rc1 -- 2.1 -- 2.1.1 -- ...
108
Starting from the date of a major release:
67
110
At four-week intervals we make a new beta release. There will be no
68
111
separate release candidate, but if a serious problem is discovered we may
78
121
We will then make a release candidate for the next major release, and at
79
122
this point create a release branch for it. We will iterate release
80
123
candidates at approximately weekly intervals until there are no bugs
81
blocking the final major release.
124
blocking the final major release.
83
126
Compared to the current process this has approximately the same amount of
84
127
release-related work, because the extra releases from the stable branch
103
146
The number for a six-month cycle is chosen at the start, with an increment
104
to either the first field (3.0.0) or second field (3.1.0) depending on
105
what we expect to be the user impact of the release. We expect releases
106
that culminate in a new disk format or that require changes in how people
107
use the tool will get a new major number. We can change (forward only) if
108
it turns out that we land larger changes than were expected.
110
We will always use the 3-digit form (major.minor.micro) even when
111
referring to the initial major release. This should help clarify where a
112
patch is intended to land. (eg, "I propose this for 2.0.0" is clear, while
113
"I propose this for 2.0" could mean you want to make the 2.0.0 release, or
114
that you just want to land on the 2.0.x stable release series.)
147
to either the first field (3.0) or second field (3.1) depending on what we
148
expect to be the user impact of the release. We expect releases that
149
culminate in a new disk format or that require changes in how people use
150
the tool will get a new major number. We can change (forward only) if it
151
turns out that we land larger changes than were expected.
120
Major releases (2.0.0 or 2.1.0)
157
Major releases (2.0 or 2.1)
121
158
The big ones, every six months, intended to ship in distributions and
122
159
to be used by stability-oriented users.
124
Release candidate (2.0.0rc1)
161
Release candidate (2.0rc1)
125
162
A preview of a major release, made one or a few weeks beforehand at
126
163
the time the release branch is created. There should be few if any
127
164
changes from the rc to the stable release. We should avoid the
128
confusing phrasing "release candidate 2.0.0rc1 is released"; instead
165
confusing phrasing "release candidate 2.0rc1 is released"; instead use
131
168
Bugfix releases (2.0.1)
132
169
Based on the previous major release or bugfix; contains only bugfixes
139
176
Either a major release or a bugfix release.
141
Beta release (3.0.0beta1)
178
Beta release (3.0beta1)
142
179
Made from trunk every month, except for the month there's a major
143
180
release. Stable and suitable for users who want the latest code and
144
181
can live with some changes from month to month.
152
Bug fixes should normally be done first against the stable branch,
189
Bug fixes should normally be done first against the stable branch,
153
190
reviewed against that branch, and then merged forward to trunk.
155
192
It may not always be easy to do this, if fixing the bug requires large
197
234
of bzrlib, which is an elusive target in Python.
199
236
This may mean that in cases where today a plugin would keep running but
200
give warnings, it will now fail altogether with an error.
237
give warnings, it will now fail altogether with an error.
202
239
In return we expect more freedom to change and cleanup bzrlib code without
203
240
needing to keep old code around, or write extra compatibility shims, or
223
260
Each major release will have one recommended data format which will be the
224
261
default. The name of the format will indicate which release series (not
225
262
specific release) it comes from: '2a' is the first supported format for
226
the 2.0.x series, '2b' the second, etc. We don't mention the particular
263
the 2.0 series, '2b' the second, etc. We don't mention the particular
227
264
release that introduced it so as to avoid problems predicting precisely
228
265
when it will land.
253
290
This can be handled in various ways either at the OS packaging or the
254
291
Python level. We don't propose to directly address it in the upstream
255
292
source. (For example, we will not change the bzrlib library name from one
256
release to the next.)
293
release to the next.)
258
295
The issue already exists with people who may want to use for example the
259
296
previous bzr release and the trunk. There is a related issue that plugins
284
321
only the stable releases. This is probably better than having them only
285
322
intermittently or slowly ship the monthly releases.
287
Binary installers should use a version number like '2.0.0-1' or
288
'2.0.0beta1-1' so that the last component just reflects the packaging
289
version, and can be incremented if a new installer is made with no
290
upstream source changes.
324
Binary installers should use a version number like '2.0-1' or '2.0beta1-1'
325
so that the last component just reflects the packaging version, and can be
326
incremented if a new installer is made with no upstream source changes.
293
329
Code Freeze vs Announcement
308
344
* Early communication about changing dependencies or defaults
310
* Reminder re lifecycle and where we're up to right now, in particular the
346
* Reminder re lifecycle and where we're up to right now, in particular the
311
347
dates for the next release and/or candidate.
313
349
* Summary of recent successes and pending work.
324
Do users actually want this?
360
Do users actually want this?
325
361
Apparently yes, because it's often requested and often raised as a
328
Would this confuse users?
364
Would this confuse users?
329
365
It shouldn't, because it's a fairly standard scheme.
331
367
Won't it take more time to fix bugs in multiple places?
345
381
really rather not test them, forcing them is not helpful.
347
383
Isn't this a step backwards to a slower, less-agile process?
348
No, our trunk stays releasable, and we ship every month. We're just
384
No, our trunk stays releasable, and we ship every month. We're just
349
385
cutting out things that hold us back (continuous rather than episodic
350
386
API stability; RCs every month) and giving users what they demand.
363
399
and stable releases, indicating that each has value.
365
401
* API changes are easier or safer to make during beta periods, without
366
being held back by fears of compatibility or
402
being held back by fears of compatibility or
368
404
* The stable releases are actually stable and don't introduce regressions
369
405
or break plugins.
381
After doing this for the 2.0 cycle (September 2009 through to early
382
2010), it seems to be going well.
385
Reviewing for the Stable Branch
386
*******************************
388
These are guidelines and can be interpreted case-by-case.
390
* All changes to the stable branch should fix a bug, even if you would not
391
normally file a bug for the change. The bug description should if at
392
all possible explain how to manually verify the bug in a way that will
393
fail before and pass after the change. (These are requirements for the
396
* The change should be reasonably small and conservative.
398
* Remember that the patch will be read during the SRU
399
process and so keeping the patch small is useful even beyond keeping the
400
logical changes small. Avoid doing mechanical bulk changes on the
403
* Use particular care for things that may behave differently across
404
platforms, encodings or locales. It's harder to thoroughly test these
405
things before a release.
407
* Generally speaking, just cleaning things up is not a sufficient reason
408
to make changes to the stable branch. It has to actually fix a bug.
410
* Changes to the stable branch should include tests as usual.
412
* Don't change or remove existing APIs that might be used by plugins, even
413
if they are underscore-prefixed. Adding APIs that are also being added
414
to the trunk branch may make sense.
416
* Keeping consistency with trunk is useful, but less important than
417
keeping the stable branch stable.
419
* (more items welcome)
424
#. List thread "`[rfc] six-month stable release cycles`__", July 2009.
426
.. __: https://lists.ubuntu.com/archives/bazaar/2009q3/060882.html
420
#. List thread "[rfc] six-month stable release cycles", July 2009.
429
423
vim: filetype=rst textwidth=74 ai shiftwidth=4