tinderbox
Motivation
If you get more than 10 developers together without tools, there is going to be an explosion. Tinderbox keeps this potentially explosive situation under control.
Essentially, Tinderbox is a detective tool. It allows you to see what is happening in the source tree. It shows you who checked in what (by asking Bonsai); what platforms have built successfully; what platforms are broken and exactly how they are broken (the build logs); and the state of the files that made up the build (cvsblame) so you can figure out who broke the build, so you can do the most important thing, hold them accountable for their actions.
Design/Docs
Tinderbox is comprised of a server with a bunch of clients running builds and reporting status via mail.
- Server
-
The server recieves mail from tinderbox clients in the form of
tinderbox: tree: SeaMonkey tinderbox: builddate: 1021331520 (...) tinderbox: status: success tinderbox: END (full build log)
The server then constructs a table with time on the vertical axis and the various builds on the horizontal axis.
- 1.0 Server, original code
- Original code is checked in at
mozilla/webtools/tinderbox
a bit of a mess. Many mozilla.org and Netscape-isms hard-coded here. Main mozilla.org pages still use the 1.0 code, we are in the process of installing/evaluating the 2.0 server. - 2.0 Server, rewrite.
- Ken Estes graciously
rewrote the 1.0 server code and has started a document
here.
Code is checked in at
mozilla/webtools/tinderbox2
. Things that happened here: lots of code cleanup, cleaner interfaces, less hard-coded dependencies, protocol abstractions, things like that. Possibly most-importantly the new 2.0 code does not necessarily need bonsai. Because both servers are coexisting for a while, this new server has been named "tinderbox2" for now.
- Client
-
The client is basically an infinite perl while loop that updates, builds, tests the build, and reports status as a mail to the server.
- 1.0 Client, original code
- The 1.0 client sends two mails each cycle, a
I'm starting a build
message, and aI'm done, here's the log and build status
message. Code is checked in atmozilla/tools/tinderbox
. See theREADME
andexamples
directories there for more info about how to set a client up. All of mozilla.org build machines currently use this client, or some form of it. Also note, the client optionally loads post-mozilla.pl as a mechanism for building a branded or embedded client instead of the SeaMonkey build. - 2.0 Client.
- There is a new 2.0 client, the 2.0 server can also receive
build still going, partial log
messages so you can get progress as a build is going instead of having to wait until the end of the client loop. 1.0 client does not currently send any partial logs like this.
Client/server protocol (log headers, described above) was made backwards compatible for the 2.0 server, so a 1.0 client can talk to either server.
Mozilla.org usage of tinderbox
Here are some Mozilla projects using Tinderbox. The complete list of mozilla tinderbox pages is at tinderbox.mozilla.org.
- SeaMonkey
- This is our main tinderbox page. SeaMonkey is the project name for the latest incarnation of the mozilla browser. It uses NGLayout (raptor) and the new front end code (xpfe). These tinderbox machines live both in and outside of Netscape.
- SeaMonkey-Ports
- This shows the status of the build on minor platforms, platforms we can't cover on the main page, etc.
The rules of development for Mozilla are as follows:
- If there are any flaming builds, you can't check in code except to fix the build.
- If you check in code, you must watch the builds until they are green on all platforms.
- You can't check in and hope it works or plan to have someone else fix it. You should be very surprised if a build breaks.
- Get help with platforms you don't have access to before checking in changes. Don't checkin if you aren't sure it will build on all platforms.
- If you break these rules too often you won't be allowed to check in anymore. We're serious.
- If you break the tree, and someone has to come after you to fix it, you owe that someone a bribe of their choice. The traditional bribe to the release team has been tequila (but absolutely no Jose Cuervo.) Cookies and donuts make adequate substitutions.
Tinderbox Server User Interface FAQ
- How does this work?
- When you check in code, your name will appear in the guilty column. When there are successful (green) builds in all columns in a row higher than your name, you know you are ok: you did not break the build.
- The tree is broken, how do I find out what's wrong?
- Clicking L in the first red box above a green box (that is, the first build to break) will show you a build log for the broken build. You can also click C in this box to see exactly what code was checked in since the previous build.
- The tree is on fire, and it's not my fault, and I would like to get some work done. What do I do?
- One thing you can do is check your CVS tree by date: look backward in the Tinderbox log until you see green. Note the time at which the tree built correctly. Update your tree as it was at that date (with the cvs update -D date option.) That should get you a build that works. (However, you won't be able to check in until the tree is again green.)
- What do "Clbr" and "Dep" mean?
- Clbr = Clobber, Dep = Depend. Mozilla.org tinderbox is hurting for horizontal space and we are just saving space here. "Clobber" builds are checked out and compiled from scratch. "Depend" builds are updated and rebuilt in the same directory, and incrementally rebuilt. (Depend builds tend to have a faster cycle time, but fail occasionally if the dependency mechanism fails.)
- You build on platforms Foo, Bar, and Baz, but my favorite platform is Quux, will you build on that too?
- Sure. All you have to do is donate us a machine, and we'll add it to the list! Contact build@mozilla.org for information on setting up your own external tinderbox.