The Chromium Projects

Except as otherwise noted, the content of this page is licensed under a Creative Commons Attribution 2.5 license, and examples are licensed under the BSD License.

The Chromium OS designs and code are preliminary. Expect them to evolve.

Tour of the Chromium Buildbot Waterfall

Chromium uses an open-source system called Buildbot to run continuous builds and tests. The Chromium Buildbot waterfall shows the status of those tests. That waterfall shows a lot of information that can be hard to understand at first, so let's take a quick tour.

Basics

Buildbot is made up of a set of build and test machines, called "slaves", plus a single master to coordinate it all. The master is the one watching the Subversion repository, telling slaves to start building and testing, and constructing the "waterfall" page that shows all the results. (For network reasons, Chromium actually has a separate machine showing the waterfall, delayed by up to two minutes. Usually this doesn't matter, but every once in a while it can lead to confusion.)

Slaves

Let's take a look at the waterfall page. For now, skip over the blue header and the box at the top with lots of links and horizontal stripes (we'll come back to them later), and look down at the row of grey boxes with "changes" at the left. Those boxes show one column per build slave.

The set of slaves changes pretty often, so any list we could put here would go out of date quickly, but the names are generally pretty good at describing what kinds of machines they are and what kinds of tests they're running. A "perf" slave is running performance tests, a "dbg" slave is running a Debug build rather than Release, the "Webkit" slaves are building and testing our WebKit port without the rest of Chromium, and the "modules" slaves are working on the independent base, net, and sandbox code modules. Some machines both build and test, but "builder" machines only build the executables, then upload them to "tests" machines to run the tests.

Steps

Now look down one of the columns, starting at the grey box with the slave's name. Each box shows one step in that slave's build/test sequence, with the oldest one at the bottom and the current or latest one just below the name box.  Just above the name box is the slave's current activity, and above that is the final result of the last build/test sequence that finished.

A yellow build step is still in progress, green finished successfully, red finished with errors, gold finished with warnings, and purple had an internal Buildbot error.

The steps slaves may run are subject to change, especially adding more kinds of tests, but at the moment the choices are as follows:

Step Script Description
svnkill (internal) Kill any leftover svn processes before starting a new test cycle.
update scripts (internal) Update the internal buildbot scripts that describe all the other steps the slave will run.
update (internal) Run gclient sync to update the checkout.
taskkill kill_processes.py Kill a bunch of other possible leftover processes (test_shell.exe, ui_tests.exe, etc.) that would interfere with a clean run.
check deps checkdeps.py Ensure that source dependencies stay clean.
compile compile.py Build the executable(s).
archive build archive_build.py Save the executables and symbols into "snapshots".
upload build (internal) Save a build for use by test slaves.
download build (internal) Download a build for testing.
(various tests) runtest.py, debugger_unittests.py, chrome_tests.py, etc. (See testing information.)

If you click on the "stdio" link for a step, you can see the exact command that was run, the environment it was run in, and any output it produced.

Most of the tests are pretty straightforward, but performance test output can be complicated at times. See the Guide to Perf Test Plots for more about that.

Changes

Each time someone commits a change to the Subversion repository, the build master tries to get the slaves to start their build and test sequences. (If they're already busy, the change is queued, which means that more than one change is included in a single run if they're coming in faster than the slaves can test.) The "changes" column at the left of the waterfall shows who committed a patch when. If you hover over that link, you'll see a summary of the change; click on it to see a little more information. The times at the very left are in Pacific time (GMT-7 March through October, GMT-8 November through February).

At the start of each run (that is, at the bottom of each series of steps for a slave), there's a yellow box holding the build number.  Clicking on that build-number link shows more information about the run, including in principle the "blamelist" of changes that went into it.  Every now and then, though, that list of changes is off by one. If you need to know for sure, look at the results of the "update" step to see exactly what gclient sync pulled in.

Seeing More and Seeing Less

Tucked away down at the very bottom of the waterfall page is a set of small links, of which two are particularly useful. The [next page] link takes you to the next screenful of the waterfall, which is backward in time to earlier builds. The [help] link, among other things, shows you a list of all the slaves attached to this master. You can choose which ones you'd like to see, then bookmark the resulting URL so you can get that view easily next time.

Banner and Box

Now back to the top of the waterfall. At the very top is a banner showing the current state of the tree. If the tree is closed because of build or test failures, it should be mentioned here. If there's an announcement about a new build process, expected downtime, or some other aspect of Chromium development, it'll generally be shown here, too.

Below that is an oval box.  It has a number of handy links at the left -- try them to see where they go. It also has three rows of colored boxes, which show the pass/fail status of the last completed runs for three categories of slaves: Chromium, Webkit, and Modules.  If you click on one of those category names, you'll go to a partial waterfall view that shows only the related slaves. Hovering over a colored box shows you the name of the slave it's summarizing, and clicking on the box will go to a waterfall view with only that one slave.

Sheriffs

The last thing in the oval is a list of this week's build sheriffs. Although every developer is responsible for running tests before committing patches and watching the tree for problems afterward, the sheriffs have overall responsibility in case someone else is away or not paying attention.

Source

All the source for Chromium's buildbot setup is found in our Subversion repository.  See "Getting the Buildbot Source" if you'd like to take a look or help develop it.