[tahoe-dev] the "release buildbot" plan
Brian Warner
warner-tahoe at allmydata.com
Thu Jun 12 16:52:38 PDT 2008
We spent some time around the office today talking about how to set up a
"release buildbot", which would be responsible for building debian packages
for Tahoe releases, and would help us develop "point releases" quickly.
The goals are:
allow allmydata.com to point production machines at an APT repository that
will only contain Tahoe releases: not intermediate/nightly builds. The ops
staff should be able to do an apt-get upgrade at any time and be confident
that they won't be installing non-released code.
We should be able to create "point releases" easily. If we've released 1.1,
and two months later trunk contains a number of unstable changes (such as
the Accounting stuff that zooko and I are working on), and we discover a
severe bug in 1.1 that needs an immediate fix (which can't wait for 1.2),
then we'll need to be able to create 1.1.1 .
Here's my writeup of the plan we came up with.
We'll change the existing trunk buildbot to ignore tags, and to build
debian packages with "r1234" version identifiers (rather than the current
"1.1-r1234").
Then we'll create a new "release buildbot", which:
follows a separate "release darcs repo"
understands tags:
the Change that represents a tag will have a .revision attribute, non-tag
Changes will have .revision=None
the Darcs checkout step needs to "darcs get --tag REVISION"
only builds+uploads debian packages for tagged builds, never for intermediate
pushes debs to a separate "release APT repository"
The prodnet servers will pull from the release APT repository.
When we make a major release and decide to give up the easy ability to
create point releases off the previous major release, we will push all
patches (including the new major-release tag) from the trunk-repo into the
release-repo, triggering the creation of debs, which will be available for
prodnet.
When/if we need to make a point release, we push patches to the
release-repo until the problem is fixed, then we tag and push. This will
trigger new (point-release) debs, which will appear in the APT repo where
they can be installed on prodnet. Then (ideally) we push everything from
the release-repo into the trunk-repo (handling any merge conflicts as
necessary). This will insure that the point-release fixes are also present
in trunk. The point-release tag that winds up in trunk won't affect any
builds. Any numbered+tagged release can be retrieved from the trunk repo.
Remaining issues:
the only way to get numbered release debs is from the release buildbot,
and hence by pushing the changes+tag into the release-repo. This means
that the moment we release 1.2.0, we lose the ability to make point
releases from 1.1 (like 1.1.1). Likewise when we release 1.2.1, we lose
the ability to make 1.2.0.1 . (At least, a 1.2.0.1 wouldn't get
buildbot-generated intermediate builds.. if you fetch a 1.2.0 tree, make
some changes, tag it with 1.2.0.1, then push the result to the
release-repo, the buildbot will create 1.2.0.1 debs, which is probably
enough).
cheers,
-Brian
More information about the tahoe-dev
mailing list