A BuildSet
is the name given to a set of Builds that all
compile/test the same version of the tree on multiple Builders. In
general, all these component Builds will perform the same sequence of
Steps, using the same source code, but on different platforms or
against a different set of libraries.
The BuildSet
is tracked as a single unit, which fails if any of
the component Builds have failed, and therefore can succeed only if
all of the component Builds have succeeded. There are two kinds
of status notification messages that can be emitted for a BuildSet:
the firstFailure
type (which fires as soon as we know the
BuildSet will fail), and the Finished
type (which fires once
the BuildSet has completely finished, regardless of whether the
overall set passed or failed).
A BuildSet
is created with a source stamp tuple of
(branch, revision, changes, patch), some of which may be None, and a
list of Builders on which it is to be run. They are then given to the
BuildMaster, which is responsible for creating a separate
BuildRequest
for each Builder.
There are a couple of different likely values for the
SourceStamp
:
(revision=None, changes=[CHANGES], patch=None)
SourceStamp
used when a series of Changes have
triggered a build. The VC step will attempt to check out a tree that
contains CHANGES (and any changes that occurred before CHANGES, but
not any that occurred after them).
(revision=None, changes=None, patch=None)
SourceStamp
that would be used on a Build that was
triggered by a user request, or a Periodic scheduler. It is also
possible to configure the VC Source Step to always check out the
latest sources rather than paying attention to the Changes in the
SourceStamp, which will result in same behavior as this.
(branch=BRANCH, revision=None, changes=None, patch=None)
(revision=REV, changes=None, patch=(LEVEL, DIFF, SUBDIR_ROOT))
patch -pLEVEL <DIFF
) from inside the relative
directory SUBDIR_ROOT. Item SUBDIR_ROOT is optional and defaults to the
builder working directory. The try feature uses this kind of
SourceStamp
. If patch
is None, the patching step is
bypassed.
The buildmaster is responsible for turning the BuildSet
into a
set of BuildRequest
objects and queueing them on the
appropriate Builders.