1 User visible changes in Buildbot. -*- outline -*-
3 * Release 0.7.9 (15 Sep 2008)
7 *** Configurable public_html directory (#162)
9 The public_html/ directory, which provides static content for the WebStatus()
10 HTTP server, is now configurable. The default location is still the
11 public_html/ subdirectory of the buildmaster's base directory, but you can
12 change this by passing a suitable argument when creating the WebStatus()
13 instance in your master.cfg file:
15 c['status'].append( WebStatus(8080, public_html="/var/www/buildbot") )
17 *** Lock access modes (#313)
19 Albert Hofkamp added code to provide two distinct access modes to Locks:
20 "counting" and "exclusive". Locks can accept a configurable number of
21 "counting"-mode users, or a single "exclusive"-mode. For example, a Lock is
22 defined with maxCount=3, and then a 'compile' BuildStep uses this lock in
23 counting mode, while a 'cleanup' BuildStep uses this lock in exclusive mode.
24 Then, there can be one, two, or three simultaneous Builds in the compile step
25 (as long as there are no builds in the cleanup step). Only one build can be
26 in the cleanup step at a time, and if there is such a build in the cleanup
27 step, then the compile steps in other builds will wait for it to finish.
28 Please see the "Interlocks" section of the user's manual for more details.
32 *** Buildslave missing_timeout= fired too quickly (#211)
34 By providing a missing_timeout= argument when creating the BuildSlave
35 instance, you can ask the buildmaster to send email if a buildslave is
36 disconnected for too long. A bug in the previous version caused this
37 notification to be sent too soon, rather than waiting until the timeout
38 period expired. This should be fixed now.
40 *** Test command display fixed (#332)
42 In the previous version, a steps.shell.Test step would display the parsed
43 test results (in the step's box on the waterfall display) in lieu of any
44 other descriptive text the step might provide. In this release, these two
45 pieces of information are combined.
49 The buildmaster's version is logged to its twistd.log file at startup. The
50 buildslave does the same, to its own logfile.
52 Remote commands now record how long each command took. The "elapsedTime="
53 message will appear in the step's main logfile.
55 The "buildbot restart" command no longer fails if the buildbot wasn't already
58 The FileUpload and FileDownload steps now create their target directories
59 (and any missing intermediate directories) before writing to the destination
62 The per-build and per-step web pages now show the start, finish, and elapsed
63 time of their build or step.
65 If a Subversion-based build is started with a mixture of Changes that specify
66 particular numeric revisions and "HEAD" Changes (which indicate that a trunk
67 checkout is desired), the build will use a trunk checkout. Previously this
68 would probably cause an error. It is not clear how this situation might
71 ** Compability With Other Tools
73 The mercurial commit hook (buildbot.changes.hgbuildbot) in the previous
74 version doesn't work with hg-1.0 or later (it uses an API function that was
75 present in the hg-0.9.5 release, but was removed from hg-1.0). This
76 incompability has been fixed: the new version of buildbot should be
77 compatible with hg-1.0 and newer (and it probably retains compability with
78 hg-0.9.5 and earlier too). (#328)
80 The Git tool has traditionally provided two ways to run each command, either
81 as subcommands of /usr/bin/git (like "git checkout"), or as individual tools
82 (like /usr/bin/git-checkout). The latter form is being removed in the
83 upcoming 1.6 Git release. Previous versions of Buildbot have used the
84 git-checkout form, and will break when Git is upgraded to 1.6 or beyond. The
85 new Buildbot release switches to the subcommand form. Note that this is a
86 change on the buildslave side.
88 The Git checkout command will now use the default branch (as set in the
89 steps.source.Git() step definition) if the changes that it is building do not
90 specify some other branch to build. (#340)
92 ** Deprecation Schedule
94 No features have been deprecated in this release, and no deprecated features
95 have been removed. As a reminder, the following deprecated features are
96 scheduled for removal in an upcoming release:
98 c['sources'] (plural) was replaced by c['change_source'] (singular) in 0.7.6,
99 and will be removed by 0.8.0.
101 c['bots'] was replaced by c['buildslaves'] in 0.7.6, and will be removed by
102 0.8.0 . c['bots'] only accepts BuildSlave instances, not name/passwd tuples.
104 The html.Waterfall status target was replaced by html.WebStatus in 0.7.6, and
105 will be removed by 0.8.0.
108 * Release 0.7.8 (24 Jul 2008)
112 The IRC bot will respond to three new commands: 'notify' subscribes the
113 channel (or the sender, if the command is sent as a private "/msg") to hear
114 about build events. 'join' tells the bot to join some new IRC channel.
115 'leave' tells it to leave a channel. See the "IRC Bot" section of the User's
116 Manual for details. (#171)
118 Build Steps now have "statistics", in addition to logfiles. These are used to
119 count things like how many tests passed or failed. There are methods to sum
120 these counters across all steps and display the results in the Build status.
121 The Waterfall display now shows the count of failed tests on the top-most box
122 in each column, using this mechanism.
124 The new buildbot.steps.shell.PerlModuleTest step was added, to run Perl unit
125 tests. This is a wrapper around the regular ShellCommand that parses the
126 output of the standard perl unit test system and counts how many tests
127 passed/failed/etc. The results are put into the step's summary text, and a
128 count of tests passed/failed/skipped are tracked in the steps's statistics.
129 The factory.CPAN build factory has been updated to use this, so configuring a
130 Buildbot to test a perl module available from CPAN should be as easy as:
132 s = source.CVS(cvsroot, cvsmodule)
135 Build Properties have been generalized: they remain associated with a single
136 Build, but the properties can be set from a variety of sources. In previous
137 releases, the Build itself would set properties like 'buildername', 'branch',
138 and 'revision' (the latter two indicating which version of the source code it
139 was trying to get), and the source-checkout BuildSteps would set a property
140 named 'got_revision' (to indicate what version of the soruce code it actually
141 got). In this release, the 'scheduler' property is set to indicate which
142 Scheduler caused the build to be started. In addition, the config file can
143 specify properties to be set on all Builds, or on all Builds for a specific
144 Builder. All these properties are available for interpolation into
145 ShellCommands and environment variables by using the WithProperties() marker.
147 It may be easier to implement simple build parameterization (e.g. to upload
148 generated binaries to a specific directory, or to only perform long-running
149 tests on a nightly build instead of upon every checkin) by using these Build
150 Properties than to write custom BuildSteps.
152 ** Other improvements
154 The /buildslaves web page shows which slaves are currently running builds.
155 Offline slaves are displayed in bold.
157 Buildbot's setup.py now provides metadata to setuptools (if installed): an
158 entry_points script was added, and a dependency upon twisted-2.4.x or newer
159 was declared. This makes it more likely that 'easy_install buildbot' will
162 The MailNotifier class acquired a mode="passing" flag: in this mode, the
163 buildbot will only send mail about passing builds (versus only on failing
164 builds, or only on builds which failed when the previous build had passed).
168 Don't display force/stop build buttons when build control is disabled (#246)
170 When a build is waiting on a lock, don't claim that it has started (#107)
172 Make SVN mode=copy tolerate symlinks on freebsd, "cp -rp" -> "cp -RPp" (#86)
174 The svnpoller changesource now ignores branch deletion (#261)
176 The Git unit tests should run even if the user has not told Git about their
179 The WebStatus /xmlrpc server's getStatus() method was renamed to the
180 more-accurate getLastBuildResults().
182 The TinderboxMailNotifier status output acquired an useChangeTime= argument.
184 The bonsaipoller changesource got some fixes.
186 ** Deprecation Schedule
188 No features have been deprecated in this release, and no deprecated features
189 have been removed. As a reminder, the following deprecated features are
190 scheduled for removal in an upcoming release:
192 c['sources'] (plural) was replaced by c['change_source'] (singular) in 0.7.6,
193 and will be removed by 0.8.0.
195 c['bots'] was replaced by c['buildslaves'] in 0.7.6, and will be removed by
196 0.8.0 . c['bots'] only accepts BuildSlave instances, not name/passwd tuples.
198 The html.Waterfall status target was replaced by html.WebStatus in 0.7.6, and
199 will be removed by 0.8.0.
203 * Release 0.7.7 (29 Mar 2008)
205 ** Things You Need To Know
207 *** builder names must not start with an underscore (`_').
209 These are now reserved for internal buildbot purposes, such as the magic
210 "_all" pseudo-builder that the web pages use to allow force-build buttons
211 that start builds on all Builders at once.
215 *** "buildbot checkconfig"
217 The "buildbot checkconfig" command will look at your master.cfg file and tell
218 you if there are any problems with it. This can be used to test potential
219 changes to your config file before submitting them to the running
220 buildmaster. This is particularly useful to run just before doing "buildbot
221 restart", since the restart will fail if the config file has an error. By
222 running "buildbot checkconfig master.cfg && buildbot restart", you'll only
223 perform the restart if the config file was ok. Many thanks to Ben Hearsum for
226 *** Waterfall "?category=FOO" query-arguments
228 The Waterfall page now accepts one or more "category=" query arguments in the
229 URL, to filter the display by categories. These behave a lot like the
230 "builder=" query argument. Thanks to Jermo Davann for the patch.
234 Many bugs were fixed, and many minor features were added. Many thanks to
235 Dustin Mitchell who fixed and coordinated many of these. Here is a terse
236 list, for more details, please see the Trac page for the 0.7.7 release, at
237 http://buildbot.net/trac/query?status=closed&milestone=0.7.7 :
239 Many of the URLs generated by the buildbot were wrong.
240 Display of last-heard-from timestamps on the buildslaves web page were wrong.
241 Asking an IRC bot about a build waiting on a Lock should no longer crash.
242 Same for the web viewer.
243 Stop treating the encouraged info/ directory as leftover.
244 Add more force/stop build buttons.
245 Timestamps displayed on the waterfall now handle daylight savings properly.
246 p4poller no longer quits after a single failure.
247 Improved Git support, including 'try', branch, and revisions.
248 Buildslaves now use 'git', not 'cogito'.
249 Make older hg client/servers handle specific-revision builds properly.
250 Fix twisted.scripts._twistw problem on twisted-2.5.0 and windows.
251 Fix workdir= and env= on ShellCommands
252 Fix logfile-watching in 'buildbot start' on OS-X.
253 Fix ShellCommand crashes when the program emits >640kB of output per chunk.
254 New WarningCountingShellCommand step.
256 Fix transfer.FileUpload/FileDownload crashes for large files.
257 Make 'buildbor reconfig' on windows tell you that it doesn't work.
258 Add a To: header to the mail sent by the slave-missing timeout.
259 Disable usePTY= for most unit tests, it makes some debian systems flunk tests.
260 Add 'absolute source stamps'
261 Add 'triggerable schedulers', and a buildstep to trigger them.
262 Remove buildbot.changes.freshcvsmail
263 Add new XMLRPC methods: getAllBuilders, getStatus, getLastBuilds.
264 Accept WithProperties in more places: env=, workdir=, others.
265 Use --no-auth-cache with SVN commands to avoid clobbering shared svn state.
266 Add hours/minutes/seconds in the waterfall's ETA display.
267 Trial: count Doctest lines too.
268 ShellCommand: record more info in the headers: stdin closing, PTY usage.
269 Make it possible to stop builds across reconfig boundaries.
270 SVN revision numbers are now passed as strings, which was breaking MailNotifier
272 ** Deprecation Schedule
274 The changes.freshcvsmail change source was replaced by
275 changes.mail.FCMaildirSource in 0.7.6, and has been removed in 0.7.7 .
277 c['sources'] (plural) was replaced by c['change_source'] (singular) in 0.7.6,
278 and will be removed by 0.8.0.
280 c['bots'] was replaced by c['buildslaves'] in 0.7.6, and will be removed by
281 0.8.0 . c['bots'] only accepts BuildSlave instances, not name/passwd tuples.
283 The html.Waterfall status target was replaced by html.WebStatus in 0.7.6, and
284 will be removed by 0.8.0.
287 * Release 0.7.6 (30 Sep 2007)
289 ** Things You Need To Know
291 *** 'buildbot upgrade-master'
293 Each time you install a new version of Buildbot, you should run the new
294 'buildbot upgrade-master' command on each of your pre-existing buildmasters.
295 This will add files and fix (or at least detect) incompatibilities between
296 your old config and the new code.
298 *** new WebStatus page
300 The Waterfall has been replaced by the more general WebStatus display,
301 described below. WebStatus serves static files from a new public_html/
302 directory that lives in the buildmaster's basedir. Files like index.html,
303 buildbot.css, and robots.txt are served directly from that directory, so any
304 modifications you wish to make should be made to those files. In particular,
305 any custom CSS you've written should be copied into public_html/buildbot.css.
306 The 'upgrade-master' command will populate this directory for you.
308 The old Waterfall page is deprecated, but it should continue to work for
309 another few releases. It is now a subclass of WebStatus which just replaces
310 the default root URL with another copy of the /waterfall resource.
312 *** Compatibility: Python-2.3 or newer, Twisted-2.0 or newer
314 No compatiblity losses here, buildbot-0.7.6 is compatible with the same
315 versions of python and twisted that 0.7.5 was.
317 Buildbot is tested on a regular basis (http://buildbot.buildbot.net) against
318 nearly a full matrix of Python-(2.3,2.4,2.5) * Twisted-(2.0,2.1,2.2,2.4,2.5).
320 *** New Buildbot Home Page
322 Buildbot has moved to a new Trac instance at http://buildbot.net/ , and all
323 new bugs and tickets should be filed there. The old sourceforge bugs at
324 http://buildbot.sf.net/ will slowly be migrated over. Mailing lists are still
325 managed at sourceforge, and downloads are still available there.
327 *** Changed/Deprecated master.cfg Keys and Classes
329 c['sources'] (plural) has been replaced by c['change_source'] (singular).
331 c['bots'] has been replaced by c['buildslaves'], and it expects a list of
332 BuildSlave instances instead of tuples. See below for more details.
334 The 'freshcvsmail' change source has been deprecated, and will be removed in
337 The html.Waterfall status target has been deprecated, and replaced by
344 The new WebStatus display is a superset of the old Waterfall. It contains a
345 waterfall as a sub-page, but it also contains pages with more compact
346 representations of recent build status. The "one_line_per_build" page
347 contains just that, and "one_box_per_builder" shows just the information from
348 the top of the waterfall page (last-finished-build and current-activity).
350 The initial page (when you hit the root of the web site) is served from
351 index.html, and provides links to the Waterfall as well as the other pages.
353 Most of these pages can be filtered by adding query arguments to the URL.
354 Adding "?builder=XYZ" will cause the page to only show results for the given
355 builder. Adding "?builder=XYZ&builder=ABC" will show results for either
356 builder. "?branch=trunk" will limit the results to builds that involved code
359 The /waterfall page has arguments to hide those annoying "buildslave
360 connected" messages, to start and and at arbitrary times, and to auto-refresh
361 at a chosen interval (with a hardcoded minimum of 15 seconds). It also has a
362 "help" page with forms that will help you add all of these nifty filtering
365 The recommended practice is to modify the index.html file to include links to
366 the filtered pages that you find most useful.
368 Note that WebStatus defaults to allowForce=False, meaning that the display
369 will not offer or accept "Force Build" or "Stop Build" controls. (The old
370 Waterfall defaults to allowForce=True).
372 The new WebStatus pages try very hard to use only relative links, making life
373 better when the Buildbot sits behind an HTTP reverse proxy.
375 In addition, there is a rudimentary XMLRPC server run by the WebStatus
376 object. It only has two methods so far, but it will acquire more in the
377 future. The first customer of this is a project to add a buildbot plugin to
380 *** BuildFactory.addStep(Step(args))
382 BuildFactories can be set up either with a complete list of steps, or by
383 calling the .addStep() method repeatedly. The preferred way to provide a step
384 is by instantiating it, rather than giving a class/kwargs pair. This gives
385 the BuildStep class a chance to examine the arguments (and complain about
386 anything it doesn't like) while the config file is being read and problems
387 are being logged. For example, the old-style:
389 from buildbot.process.factory import BuildFactory, s
390 steps = [s(CVS, cvsroot="blah", mode="copy"),
391 s(Compile, command=["make", "all"]),
392 s(Test, command=["make", "test"]),
394 f = BuildFactory(steps)
399 f.addStep( CVS(cvsroot="blah", mode="copy") )
400 f.addStep( Compile(command=["make", "all"]) )
401 f.addStep( Test(command=["make", "test"]) )
403 Authors of BuildStep subclasses which override __init__ to add new arguments
404 must register them with self.addFactoryArguments(**newargs) to make sure that
405 those classes will work with this new style, otherwise the new arguments will
408 Using class/kwargs pairs is deprecated, and will be removed in a future
412 *** BuildSlave instances, max_builds=, notify_on_missing=
414 Buildslave specification has changed a lot in this release. The old config:
416 c['bots'] = [ ("bot1name", "bot1passwd"),
417 ("bot2name", "bot2passwd") ]
421 from buildbot.buildslave import BuildSlave
422 c['slaves'] = [ BuildSlave("bot1name", "bot1passwd"),
423 BuildSlave("bot2name", "bot2passwd") ]
425 This new form gives us the ability to add new controls. The first is
426 "max_builds=", which imposes a concurrency limit that is like the usual
427 SlaveLock, but gives the buildmaster the opportunity to find a different
428 slave to run the build. (the buildslave is chosen before the SlaveLock is
429 claimed, so pure SlaveLocks don't let you take full advantage of build
432 The other addition is "notify_on_missing=", which accepts an email address
433 (or list of addresses), and sends a message when the buildslave has been
434 disconnected for more than an hour (configurable with missing_timeout=). This
435 may be useful when you expect that the buildslave hosts should be available
436 most of the time, and want to investigate the reasons that it went offline.
439 ** Other Improvements
441 The IRC bot has been refactored to make it easier to add instant-messaging
442 status delivery in the future. The IM plugins are not yet written, though.
444 When multiple buildslaves are available for a given build, one of them will
445 be picked at random. In previous releases, the first one on the list was
446 always picked. This helps to add a certain measure of load-balancing. More
447 improvements will be made in the future.
449 When the buildslave does a VC checkout step that requires clobbering the
450 build directory (i.e. in all modes except for 'update'), the buildslave will
451 first set the permissions on all build files to allow their deletion, before
452 it attempts to delete them. This should fix some problems in which a build
453 process left non-user-writable files lying around (frequently a result of
454 enthusiastic unit tests).
456 The BuildStep's workdir= argument can now accept a WithProperties()
457 specification, allowing greater control over the workdir.
459 Support for the 'Bazaar' version control system (/usr/bin/bzr) has been
460 added, using the buildbot.steps.source.Bzr class. This is a replacement for
461 the old 'Arch' (/usr/bin/tla and /usr/bin/baz) systems, which are still
462 supported by Buildbot with the source.Arch and source.Bazaar classes,
463 respectively. Unfortunately the old baz system claimed the 'Bazaar' classname
464 early, so the new system must use source.Bzr instead of the desired
465 source.Bazaar . A future release might change this.
467 A rudimentary Gnome Panel applet is provided in contrib/bb_applet.py, which
468 provides 'buildbot statusgui' -like colored status boxes inside the panel.
469 Installing it is a bit tricky, though.
471 The 'buildbot try' command now accepts a '--diff=foo.patch' argument, to let
472 you provide a pre-computed patch. This makes it easier to test out patches
473 that you've looked over for safety, without first applying them to your local
476 A new Mercurial change source was added, hg_buildbot.py, which runs as an
477 in-process post-commit hook. This gives us access to much more information
478 about the change, as well as being much faster.
480 The email-based changesource have been refactored, to make it easier to write
481 new mail parsers. A parser for the SVN "commit-email.pl" script has been
486 Far too many to count. Please see
487 http://buildbot.net/trac/query?status=closed&milestone=0.7.6 for a partial
488 list of tickets closed for this release, and the ChangeLog for a complete
489 list of all changes since 0.7.5 .
492 * Release 0.7.5 (10 Dec 2006)
494 ** Things You Need To Know
496 *** The Great BuildStep Renaming
498 All BuildSteps have moved! They used to be classes in buildbot.process.step,
499 but now they all have separate modules in buildbot.steps.* . They have been
500 split out into separate categories: for example, the source checkout steps
501 are now buildbot.steps.source.CVS, buildbot.steps.source.Darcs, etc. The most
502 commonly used one is probably buildbot.steps.shell.ShellCommand . The
503 python-specific steps are in buildbot.steps.python, and the Twisted-specific
504 steps are in buildbot.steps.python_twisted .
506 You will need to update your master.cfg files to use the new names. The old
507 names are deprecated and will be removed altogether in the next release.
511 Buildbot now requires python-2.3 or later. Buildbot now requires
512 Twisted-2.0.0 or later. Support for earlier versions of both has finally been
513 removed. If you discover it works with unsupported versions, please return
514 your Buildbot to the factory for repairs :-).
516 Buildbot has *not* yet been tested against the recent python-2.5 release. It
517 has been tested against the latest SVN version of Twisted, but only in
518 conjunction with python-2.4 .
522 *** reconfiguring a Builder no longer causes a disconnect/reconnect cycle
524 This means that sending SIGHUP to the master or running 'buildbot reconfig
525 MASTERDIR' command no longer interrupts any current builds, nor does it lose
526 pending builds like it did before. This involved a fairly substantial
527 refactoring of the various internal BotPerspective/BotMaster/Builder classes.
528 Note that reconfiguring Schedulers still loses any Changes that were waiting
529 for the tree to become stable: hopefully this will be fixed in the next
532 *** 'buildbot start/restart/reconfig' now show logs until startup is complete
534 These commands now have additional code to follow twistd.log and display all
535 the lines that are emitted from the beginning of the start/reconfig action
536 until it has completed. This gives you a chance to see any problems detected
537 in the config file without needing to manually look in twistd.log or use
538 another shell to 'tail -f' it. This also makes it clear which config file is
539 being used. This functionality is not available under windows.
541 In addition, if any problems are detected during 'start' or 'restart' (but
542 not reconfig), the buildbot command will terminate with a non-zero exit
543 status, making it easier to use in scripts. Closes SF#1517975.
545 *** Locks now take maxCount=N to allow multiple simultaneous owners
547 This allows Locks to be non-exclusive but still limit maximum concurrency.
548 Thanks to James Knight for the patch. Closes SF#1434997.
550 *** filetransfer steps
552 buildbot.steps.transfer.FileUpload is a buildstep that will move files from
553 the slave to the master. Likewise, FileDownload will move files from the
554 master down to the buildslave. Many thanks to Albert Hofkamp for contributing
555 these classes. Closes SF#1504631.
559 buildbot.steps.python.PyFlakes will run the simple 'pyflakes' static analysis
560 tool and parse the results to tell you about undefined names, unused imports,
561 etc. You'll need to tell it how to run pyflakes, usually with something like
562 command=["pyflakes", "src/packagedir"] or the like. The default command is
563 "make pyflakes", which assumes that you have a suitable target in your
568 Nathaniel Smith has contributed initial support for the Monotone version
569 control system. The code still needs docs and tests, but on the other hand it
570 has been in use by the Monotone buildbot for a long time now, so it is
571 probably fairly stable.
573 *** Tinderbox support
575 Ben Hearsum and the Mozilla crew have contributed some classes to allow
576 Buildbot to work with Tinderbox clients. One piece is
577 buildbot.changes.bonsaipoller.BonsaiPoller, which is a ChangeSource that
578 polls a Bonsai server (which is a kind of web-vased viewcvs CGI script) to
579 discover source code changes. The other piece is
580 buildbot.status.tinderbox.TinderboxMailNotifier, which is a status plugin
581 that sends email in the same format as Tinderbox does, which allows a number
582 of Tinderbox tools to be driven by Buildbot instead.
586 Niklaus Giger contributed a ChangeSource (buildbot.changes.svnpoller) which
587 polls a remote SVN repository on a periodic basis. This is useful when, for
588 whatever reason, you cannot add a post-commit hook script to the repository.
589 This obsoletes the external contrib/svn_watcher.py script.
591 ** notes for plugin developers
593 *** IStatusLog.readlines()
595 This new method makes it easier for a status plugin (or a
596 BuildStep.createSummary method) to walk through a StatusLog one line at a
597 time. For example, if you wanted to create an extra logfile that just
598 contained all the GCC warnings from the main log, you could use the
601 def createSummary(self, log):
603 for line in log.readlines():
604 if "warning:" in line:
606 self.addCompleteLog('warnings', "".join(warnings))
608 The "BuildStep LogFiles" section of the user's manual contains more
609 information. This method is not particularly memory-efficient yet (it reads
610 the whole logfile into memory first, then splits it into lines); this will be
611 improved in a future release.
615 *** Update source.SVN to work with the new SVN-1.4.0
617 The latest subversion changed the behavior in an unusual situation which
618 caused the unit tests to fail. This was unlikely to cause a problem in actual
619 usage, but the tests have been updated to pass with the new version.
621 *** update svn_buildbot.py to avoid mangling filenames
623 Older versions of this script were stripping the wrong number of columns from
624 the output of 'svnlook changed', and would sometimes mangle filenames. This
625 has been fixed. Closes SF#1545146.
627 *** logfiles= caused subsequent build failures under Windows
629 Earlier versions of buildbot didn't explicitly close any logfiles= file
630 handles when the build finished. On windows (where you cannot delete a file
631 that someone else is reading), this could cause the next build to fail as the
632 source checkout step was unable to delete the old working directory. This has
633 been fixed. Closes SF#1568415.
635 *** logfiles= didn't work on OS-X
637 Macintosh OS-X has a different behavior when reading files that have reached
638 EOF, the result was that logfiles= sometimes didn't work. Thanks to Mark Rowe
643 The 'buildbot sighup MASTERDIR' command has been replaced with 'buildbot
644 reconfig MASTERDIR', since that seems to be a slightly more meaningful name.
645 The 'sighup' form will remain as an alias.
648 * Release 0.7.4 (23 Aug 2006)
650 ** Things You Need To Know
652 The PBChangeSource's prefix= argument has changed, you probably need to add a
653 slash now. This is mostly used by sites which use Subversion and
656 The subcommands that are used to create a buildmaster or a buildslave have
657 changed. They used to be called 'buildbot master' and 'buildbot slave'. Now
658 they are called 'buildbot create-master' and 'buildbot create-slave'. Zipf's
659 Law suggests that these are more appropriate names for these
660 infrequently-used commands.
662 The syntax for the c['manhole'] feature has changed.
666 *** full Perforce support
668 SF#1473939: large patch from Scott Lamb, with docs and unit tests! This
669 includes both the step.P4 source-checkout BuildStep, and the changes.p4poller
670 ChangeSource you'll want to feed it. P4 is now supported just as well as all
671 the other VC systems. Thanks Scott!
673 *** SSH-based Manhole
675 The 'manhole' feature allows buildbot developers to get access to a python
676 read/eval/print loop (REPL) inside the buildmaster through a network
677 connection. Previously, this ran over unencrypted telnet, using a simple
678 username/password for access control. The new release defaults to encrypted
679 SSH access, using either username/password or an authorized_keys file (just
680 like sshd). There also exists an unencrypted telnet form, but its use is
681 discouraged. The syntax for setting up a manhole has changed, so master.cfg
682 files that use them must be updated. The "Debug options" section in the
683 user's manual provides a complete description.
685 *** Multiple Logfiles
687 BuildSteps can watch multiple log files in realtime, not just stdout/stderr.
688 This works in a similar fashion to 'tail -f': the file is polled once per
689 second, and any new data is sent to the buildmaster.
691 This requires a buildslave running 0.7.4 or later, and a warning message is
692 produced if used against an old buildslave (which will otherwise produce no
693 data). Use "logfiles={'name': 'filename'}" to take advantage of this feature
694 from master.cfg, and see the "ShellCommand" section of the user's manual for
697 The 'Trial' buildstep has been updated to use this, to display
698 _trial_temp/test.log in realtime. It also knows to fall back to the previous
699 "cat" command if the buildslave is too old.
703 BuildSteps can now add arbitrary URLs which will be displayed on the
704 Waterfall page in the same place that Logs are presented. This is intended to
705 provide a link to generated HTML pages, such as the output of a code coverage
706 tool. The step is responsible for somehow uploading the HTML to a web server:
707 this feature merely provides an easy way to present the HREF link to the
708 user. See the "BuildStep URLs" section of the user's manual for details and
713 BuildSteps can now attach LogObservers to various logfiles, allowing them to
714 get real-time log output. They can use this to watch for progress-indicating
715 events (like counting the number of files compiled, or the number of tests
716 which have run), and update both ETA/progress-tracking and step text. This
717 allows for more accurate ETA information, and more information passed to the
718 user about how much of the process has completed.
720 The 'Trial' buildstep has been updated to use this for progress tracking, by
721 counting how many test cases have run.
725 What classes are useful in your master.cfg file? A table of them has been
726 added to the user's manual, in a section called "Index of Useful Classes".
728 Want a list of all the keys in master.cfg? Look in the "Index of master.cfg
731 A number of pretty diagrams have been added to the "System Architecture"
732 portion of the manual, explaining how all the buildbot pieces fit together.
734 An HTML form of the user's manual is now shipped in the source tarball. This
735 makes it a bit bigger: sorry about that. The old PyCon-2003 paper has been
736 removed from the distribution, as it is mostly supplanted by the user's
737 manual by this point.
741 SF#1217699 + SF#1381867: The prefix= argument to PBChangeSource has been
742 changed: now it does just a simple string-prefix match and strip. The
743 previous behavior was buggy and unhelpful. NOTE: if you were using prefix=
744 before, you probably need to add a slash to the end of it.
746 SF#1398174: ignore SVN property changes better, fixed by Olivier Bonnet
748 SF#1452801: don't double-escape the build URL, fixed by Olivier Bonnet
750 SF#1401121: add support for running py2exe on windows, by Mark Hammond
752 reloading unchanged config files with WithProperties shouldn't change anything.
754 All svn commands now include --non-interactive so they won't ask for
755 passwords. Instead, the command will fail if it cannot be performed without
758 Deprecation warnings with newer versions of Twisted have been hushed.
762 I haven't actually removed support for Twisted-1.3.0 yet, but I'd like to.
764 The step_twisted default value for --reporter matches modern Twisteds,
765 though, and won't work under 1.3.0.
767 ShellCommand.flunkOnFailure now defaults to True, so any shell command which
768 fails counts as a build failure. Set this to False if you don't want this
773 contrib/darcs_buildbot.py contains a new script suitable for use in a darcs
776 Hovering a cursor over the yellow "Build #123" box in the Waterfall display
777 will pop up an HTML tooltip to show the reason for the build. Thanks to Zandr
778 Milewski for the suggestion.
780 contrib/CSS/*.css now contains several contributed stylesheets to make the
781 Waterfall display a bit less ugly. Thanks to John O'Duinn for gathering them.
783 ShellCommand and its derivatives can now accept either a string or a list of
784 strings in the description= and descriptionDone= arguments. Thanks to Paul
785 Winkler for the catch.
788 * Release 0.7.3 (23 May 2006)
792 This release is compatible with Twisted-1.3.0, but the next one will not be.
793 Please upgrade to at least Twisted-2.0.x soon, as the next buildbot release
798 *** Mercurial support
800 Support for Mercurial version control system (http://selenic.com/mercurial)
801 has been added. This adds a buildbot.process.step.Mercurial BuildStep. A
802 suitable hook script to deliver changes to the buildmaster is still missing.
804 *** 'buildbot restart' command
806 The 'buildbot restart BASEDIR' command will perform a 'buildbot stop' and
807 'buildbot start', and will attempt to wait for the buildbot process to shut
808 down in between. This is useful when you need to upgrade the code on your
809 buildmaster or buildslave and want to take it down for a minimum amount of
814 Each build now has a set of named "Build Properties", which can be set by
815 steps and interpolated into ShellCommands. The 'revision' and 'got_revision'
816 properties are the most interesting ones available at this point, and can be
817 used e.g. to get the VC revision number into the filename of a generated
818 tarball. See the user's manual section entited "Build Properties" for more
823 *** IRC now takes password= argument
825 Useful for letting your bot claim a persistent identity.
827 *** svn_buildbot.py is easier to modify to understand branches
828 *** BuildFactory has a new .addStep method
829 *** p4poller has new arguments
830 *** new contrib scripts: viewcvspoll, svnpoller, svn_watcher
832 These poll an external VC repository to watch for changes, as opposed to
833 adding a hook script to the repository that pushes changes into the
834 buildmaster. This means higher latency but may be easier to configure,
835 especially if you do not have authority on the repository host.
837 *** VC build property 'got_revision'
839 The 'got_revision' property reports what revision a VC step actually
840 acquired, which may be useful to know when building from HEAD.
842 *** improved CSS in Waterfall
844 The Waterfall display has a few new class= tags, which may make it easier to
845 write custom CSS to make it look prettier.
847 *** robots_txt= argument in Waterfall
849 You can now pass a filename to the robots_txt= argument, which will be served
850 as the "robots.txt" file. This can be used to discourage search engine
851 spiders from crawling through the numerous build-status pages.
855 *** tests more likely to pass on non-English systems
857 The unit test suite now sets $LANG='C' to make subcommands emit error
858 messages in english instead of whatever native language is in use on the
859 host. This improves the chances that the unit tests will pass on such
860 systems. This affects certain VC-related subcommands too.
862 test_vc was assuming that the system time was expressed with a numeric
863 timezone, which is not always the case, especially under windows. This
864 probably works better now than it did before. This only affects the CVS
867 'buildbot try' (for CVS) now uses UTC instead of the local timezone. The
868 'got_revision' property is also expressed in UTC. Both should help deal with
869 buggy versions of CVS that don't parse numeric timezones properly.
872 * Release 0.7.2 (17 Feb 2006)
876 *** all TCP port numbers in config file now accept a strports string
878 Sometimes it is useful to restrict certain TCP ports that the buildmaster
879 listens on to use specific network interfaces. In particular, if the
880 buildmaster and SVN repository live on the same machine, you may want to
881 restrict the PBChangeSource to only listen on the loopback interface,
882 insuring that no external entities can inject Changes into the buildbot.
883 Likewise, if you are using something like Apache's reverse-proxy feature to
884 provide access to the buildmaster's HTML status page, you might want to hide
885 the real Waterfall port by having it only bind to the loopback interface.
887 To accomplish this, use a string like "tcp:12345:interface=127.0.0.1" instead
888 of a number like 12345. These strings are called "strports specification
889 strings", and are documented in twisted's twisted.application.strports module
890 (you can probably type 'pydoc twisted.application.strports' to see this
891 documentation). Pretty much everywhere the buildbot takes a port number will
892 now accept a strports spec, and any bare numbers are translated into TCP port
893 numbers (listening on all network interfaces) for compatibility.
895 *** buildslave --umask control
897 Twisted's daemonization utility (/usr/bin/twistd) automatically sets the
898 umask to 077, which means that all files generated by both the buildmaster
899 and the buildslave will only be readable by the account under which the
900 respective daemon is running. This makes it unnecessarily difficult to share
901 build products (e.g. by symlinking ~/public_html/current_docs/ to a directory
902 within the slave's build directory where each build puts the results of a
905 The 'buildbot slave <PARAMS>' command now accepts a --umask argument, which
906 can be used to override the umask set by twistd. If you create the buildslave
907 with '--umask=022', then all build products will be world-readable, making it
908 easier for other processes (run under other accounts) to access them.
912 The 0.7.1 release had a bug whereby reloading the config file could break all
913 configured Schedulers, causing them to raise an exception when new changes
914 arrived but not actually schedule a new build. This has been fixed.
916 Fixed a bug which caused the AnyBranchScheduler to explode when branch==None.
917 Thanks to Kevin Turner for the catch. I also think I fixed a bug whereby the
918 TryScheduler would explode when it was given a Change (which it is supposed
921 The Waterfall display now does more quoting of names (including Builder
922 names, BuildStep names, etc), so it is more likely that these names can
923 contain unusual characters like spaces, quotes, and slashes. There may still
924 be some problems with these kinds of names, however.. please report any bugs
928 * Release 0.7.1 (26 Nov 2005)
932 *** scheduler.Nightly
934 Dobes Vandermeer contributed a cron-style 'Nightly' scheduler. Unlike the
935 more-primitive Periodic class (which only lets you specify the duration
936 between build attempts), Nightly lets you schedule builds for specific times
937 of day, week, month, or year. The interface is very much like the crontab(5)
938 file. See the buildbot.scheduler.Nightly docstring for complete details.
940 ** minor new features
942 *** step.Trial can work with Trial from Twisted >2.1.0
944 The 'Trial' step now accepts the trialMode= argument, which should be a list
945 of strings to be added to trial's argv array. This defaults to ["-to"], which
946 is appropriate for the Trial that ships in Twisted-2.1.0 and earlier, and
947 tells Trial to emit non-colorized verbose output. To use this step with
948 trials from later versions of Twisted, this should be changed to
949 ["--reporter=bwverbose"].
951 In addition, you can now set other Trial command-line parameters through the
952 trialArgs= argument. This is a list of strings, and defaults to an empty list.
954 *** Added a 'resubmit this build' button to the web page
956 *** Make the VC-checkout step's description more useful
958 Added the word "[branch]" to the VC step's description (used in the Step's
959 box on the Waterfall page, among others) when we're checking out a
960 non-default branch. Also add "rNNN" where appropriate to indicate which
961 revision is being checked out. Thanks to Brad Hards and Nathaniel Smith for
966 Several patches from Dobes Vandermeer: Escape the URLs in email, in case they
967 have spaces and such. Fill otherwise-empty <td> elements, as a workaround for
968 buggy browsers that might optimize them away. Also use binary mode when
969 opening status pickle files, to make windows work better. The
970 AnyBranchScheduler now works even when you don't provide a fileIsImportant=
973 Stringify the base revision before stuffing it into a 'try' jobfile, helping
974 SVN and Arch implement 'try' builds better. Thanks to Steven Walter for the
977 Fix the compare_attrs list in PBChangeSource, FreshCVSSource, and Waterfall.
978 Before this, certain changes to these objects in the master.cfg file were
979 ignored, such that you would have to stop and re-start the buildmaster to
980 make them take effect.
982 The config file is now loaded serially, shutting down old (or replaced)
983 Status/ChangeSource plugins before starting new ones. This fixes a bug in
984 which changing an aspect of, say, the Waterfall display would cause an
985 exception as both old and new instances fight over the same TCP port. This
986 should also fix a bug whereby new Periodic Schedulers could fire a build
987 before the Builders have finished being added.
989 There was a bug in the way Locks were handled when the config file was
990 reloaded: changing one Builder (but not the others) and reloading master.cfg
991 would result in multiple instances of the same Lock object, so the Locks
992 would fail to prevent simultaneous execution of Builds or Steps. This has
997 For a long time, certain StatusReceiver methods (like buildStarted and
998 stepStarted) have been able to return another StatusReceiver instance
999 (usually 'self') to indicate that they wish to subscribe to events within the
1000 new object. For example, if the buildStarted() method returns 'self', the
1001 status receiver will also receive events for the new build, like
1002 stepStarted() and buildETAUpdate(). Returning a 'self' from buildStarted() is
1003 equivalent to calling build.subscribe(self).
1005 Starting with buildbot-0.7.1, this auto-subscribe convenience will also
1006 register to automatically unsubscribe the target when the build or step has
1007 finished, just as if build.unsubscribe(self) had been called. Also, the
1008 unsubscribe() method has been changed to not explode if the same receiver is
1009 unsubscribed multiple times. (note that it will still explode is the same
1010 receiver is *subscribed* multiple times, so please continue to refrain from
1014 * Release 0.7.0 (24 Oct 2005)
1018 *** new c['schedulers'] config-file element (REQUIRED)
1020 The code which decides exactly *when* a build is performed has been massively
1021 refactored, enabling much more flexible build scheduling. YOU MUST UPDATE
1022 your master.cfg files to match: in general this will merely require you to
1023 add an appropriate c['schedulers'] entry. Any old ".treeStableTime" settings
1024 on the BuildFactory instances will now be ignored. The user's manual has
1025 complete details with examples of how the new Scheduler classes work.
1027 *** c['interlocks'] removed, Locks and Dependencies now separate items
1029 The c['interlocks'] config element has been removed, and its functionality
1030 replaced with two separate objects. Locks are used to tell the buildmaster
1031 that certain Steps or Builds should not run at the same time as other Steps
1032 or Builds (useful for test suites that require exclusive access to some
1033 external resource: of course the real fix is to fix the tests, because
1034 otherwise your developers will be suffering from the same limitations). The
1035 Lock object is created in the config file and then referenced by a Step
1036 specification tuple or by the 'locks' key of the Builder specification
1037 dictionary. Locks come in two flavors: MasterLocks are buildmaster-wide,
1038 while SlaveLocks are specific to a single buildslave.
1040 When you want to have one Build run or not run depending upon whether some
1041 other set of Builds have passed or failed, you use a special kind of
1042 Scheduler defined in the scheduler.Dependent class. This scheduler watches an
1043 upstream Scheduler for builds of a given source version to complete, and only
1044 fires off its own Builders when all of the upstream's Builders have built
1045 that version successfully.
1047 Both features are fully documented in the user's manual.
1051 The 'try' feature has finally been added. There is some configuration
1052 involved, both in the buildmaster config and on the developer's side, but
1053 once in place this allows the developer to type 'buildbot try' in their
1054 locally-modified tree and to be given a report of what would happen if their
1055 changes were to be committed. This works by computing a (base revision,
1056 patch) tuple that describes the developer's tree, sending that to the
1057 buildmaster, then running a build with that source on a given set of
1058 Builders. The 'buildbot try' tool then emits status messages until the builds
1061 'try' exists to allow developers to run cross-platform tests on their code
1062 before committing it, reducing the chances they will inconvenience other
1063 developers by breaking the build. The UI is still clunky, but expect it to
1064 change and improve over the next few releases.
1066 Instructions for developers who want to use 'try' (and the configuration
1067 changes necessary to enable its use) are in the user's manual.
1071 When suitably configured, the buildbot can be used to build trees from a
1072 variety of related branches. You can set up Schedulers to build a tree using
1073 whichever branch was last changed, or users can request builds of specific
1074 branches through IRC, the web page, or (eventually) the CLI 'buildbot force'
1077 The IRC 'force' command now takes --branch and --revision arguments (not that
1078 they always make sense). Likewise the HTML 'force build' button now has an
1079 input field for branch and revision. Your build's source-checkout step must
1080 be suitably configured to support this: for SVN it involves giving both a
1081 base URL and a default branch. Other VC systems are configured differently.
1082 The ChangeSource must also provide branch information: the 'buildbot
1083 sendchange' command now takes a --branch argument to help hook script writers
1086 *** Multiple slaves per Builder
1088 You can now attach multiple buildslaves to each Builder. This can provide
1089 redundancy or primitive load-balancing among many machines equally capable of
1090 running the build. To use this, define a key in the Builder specification
1091 dictionary named 'slavenames' with a list of buildslave names (instead of the
1092 usual 'slavename' that contains just a single slavename).
1094 *** minor new features
1096 The IRC and email status-reporting facilities now provide more specific URLs
1097 for particular builds, in addition to the generic buildmaster home page. The
1098 HTML per-build page now has more information.
1100 The Twisted-specific test classes have been modified to match the argument
1101 syntax preferred by Trial as of Twisted-2.1.0 and newer. The generic trial
1102 steps are still suitable for the Trial that comes with older versions of
1103 Twisted, but may produce deprecation warnings or errors when used with the
1108 DNotify, used by the maildir-watching ChangeSources, had problems on some
1109 64-bit systems relating to signed-vs-unsigned constants and the DN_MULTISHOT
1110 flag. A workaround was provided by Brad Hards.
1112 The web status page should now be valid XHTML, thanks to a patch by Brad
1113 Hards. The charset parameter is specified to be UTF-8, so VC comments,
1114 builder names, etc, should probably all be in UTF-8 to be displayed properly.
1116 ** creeping version dependencies
1118 The IRC 'force build' command now requires python2.3 (for the shlex.split
1122 * Release 0.6.6 (23 May 2005)
1126 The 'sendchange', 'stop', and 'sighup' subcommands were broken, simple bugs
1127 that were not caught by the test suite. Sorry.
1129 The 'buildbot master' command now uses "raw" strings to create .tac files
1130 that will still function under windows (since we must put directory names
1131 that contain backslashes into that file).
1133 The keep-on-disk behavior added in 0.6.5 included the ability to upgrade old
1134 in-pickle LogFile instances. This upgrade function was not added to the
1135 HTMLLogFile class, so an exception would be raised when attempting to load or
1136 display any build with one of these logs (which are normally used only for
1137 showing build exceptions). This has been fixed.
1139 Several unnecessary imports were removed, so the Buildbot should function
1140 normally with just Twisted-2.0.0's "Core" module installed. (of course you
1141 will need TwistedWeb, TwistedWords, and/or TwistedMail if you use status
1142 targets that require them). The test suite should skip all tests that cannot
1143 be run because of missing Twisted modules.
1145 The master/slave's basedir is now prepended to sys.path before starting the
1146 daemon. This used to happen implicitly (as a result of twistd's setup
1147 preamble), but 0.6.5 internalized the invocation of twistd and did not copy
1148 this behavior. This change restores the ability to access "private.py"-style
1149 modules in the basedir from the master.cfg file with a simple "import
1150 private" statement. Thanks to Thomas Vander Stichele for the catch.
1153 * Release 0.6.5 (18 May 2005)
1155 ** deprecated config keys removed
1157 The 'webPortnum', 'webPathname', 'irc', and 'manholePort' config-file keys,
1158 which were deprecated in the previous release, have now been removed. In
1159 addition, Builders must now always be configured with dictionaries: the
1160 support for configuring them with tuples has been removed.
1162 ** master/slave creation and startup changed
1164 The buildbot no longer uses .tap files to store serialized representations of
1165 the buildmaster/buildslave applications. Instead, this release now uses .tac
1166 files, which are human-readable scripts that create new instances (rather
1167 than .tap files, which were pickles of pre-created instances). 'mktap
1170 You will need to update your buildbot directories to handle this. The
1171 procedure is the same as creating a new buildmaster or buildslave: use
1172 'buildbot master BASEDIR' or 'buildbot slave BASEDIR ARGS..'. This will
1173 create a 'buildbot.tac' file in the target directory. The 'buildbot start
1174 BASEDIR' will use twistd to start the application.
1176 The 'buildbot start' command now looks for a Makefile.buildbot, and if it
1177 finds one (and /usr/bin/make exists), it will use it to start the application
1178 instead of calling twistd directly. This allows you to customize startup,
1179 perhaps by adding environment variables. The setup commands create a sample
1180 file in Makefile.sample, but you must copy this to Makefile.buildbot to
1181 actually use it. The previous release looked for a bare 'Makefile', and also
1182 installed a 'Makefile', so you were always using the customized approach,
1183 even if you didn't ask for it. That old Makefile launched the .tap file, so
1184 changing names was also necessary to make sure that the new 'buildbot start'
1185 doesn't try to run the old .tap file.
1187 'buildbot stop' now uses os.kill instead of spawning an external process,
1188 making it more likely to work under windows. It waits up to 5 seconds for the
1189 daemon to go away, so you can now do 'buildbot stop BASEDIR; buildbot start
1190 BASEDIR' with less risk of launching the new daemon before the old one has
1191 fully shut down. Likewise, 'buildbot start' imports twistd's internals
1192 directly instead of spawning an external copy, so it should work better under
1195 ** new documentation
1197 All of the old Lore-based documents were converted into a new Texinfo-format
1198 manual, and considerable new text was added to describe the installation
1199 process. The docs are not yet complete, but they're slowly shaping up to form
1200 a proper user's manual.
1204 Arch checkouts can now use precise revision stamps instead of always using
1205 the latest revision. A separate Source step for using Bazaar (an alternative
1206 Arch client) instead of 'tla' was added. A Source step for Cogito (the new
1207 linux kernel VC system) was contributed by Brandon Philips. All Source steps
1208 now accept a retry= argument to indicate that failing VC checkouts should be
1209 retried a few times (SF#1200395), note that this requires an updated
1212 The 'buildbot sendchange' command was added, to be used in VC hook scripts to
1213 send changes at a pb.PBChangeSource . contrib/arch_buildbot.py was added to
1214 use this tool; it should be installed using the 'Arch meta hook' scheme.
1216 Changes can now accept a branch= parameter, and Builders have an
1217 isBranchImportant() test that acts like isFileImportant(). Thanks to Thomas
1218 Vander Stichele. Note: I renamed his tag= to branch=, in anticipation of an
1219 upcoming feature to build specific branches. "tag" seemed too CVS-centric.
1221 LogFiles have been rewritten to stream the incoming data directly to disk
1222 rather than keeping a copy in memory all the time (SF#1200392). This
1223 drastically reduces the buildmaster's memory requirements and makes 100MB+
1224 log files feasible. The log files are stored next to the serialized Builds,
1225 in files like BASEDIR/builder-dir/12-log-compile-output, so you'll want a
1226 cron job to delete old ones just like you do with old Builds. Old-style
1227 Builds from 0.6.4 and earlier are converted when they are first read, so the
1228 first load of the Waterfall display after updating to this release may take
1231 ** build process updates
1233 BuildSteps can now return a status of EXCEPTION, which terminates the build
1234 right away. This allows exceptions to be caught right away, but still make
1235 sure the build stops quickly.
1239 Some more windows incompatibilities were fixed. The test suite now has two
1240 failing tests remaining, both of which appear to be Twisted issues that
1241 should not affect normal operation.
1243 The test suite no longer raises any deprecation warnings when run against
1244 twisted-2.0 (except for the ones which come from Twisted itself).
1247 * Release 0.6.4 (28 Apr 2005)
1251 The 'buildbot' tool in 0.6.3, when used to create a new buildmaster, failed
1252 unless it found a 'changes.pck' file. As this file is created by a running
1253 buildmaster, this made 0.6.3 completely unusable for first-time
1254 installations. This has been fixed.
1258 The IRC bot had a bug wherein asking it to watch a certain builder (the "I'll
1259 give a shout when the build finishes" message) would cause an exception, so
1260 it would not, in fact, shout. The HTML page had an exception in the "change
1261 sources" page (reached by following the "Changes" link at the top of the
1262 column that shows the names of commiters). Re-loading the config file while
1263 builders were already attached would result in a benign error message. The
1264 server side of the PBListener status client had an exception when providing
1265 information about a non-existent Build (e.g., when the client asks for the
1266 Build that is currently running, and the server says "None").
1268 These bugs have all been fixed.
1270 The unit tests now pass under python2.2; they were failing before because of
1271 some 2.3isms that crept in. More unit tests which failed under windows now
1272 pass, only one (test_webPathname_port) is still failing.
1274 ** 'buildbot' tool looks for a .buildbot/options file
1276 The 'statusgui' and the 'debugclient' subcommands can both look for a
1277 .buildbot/ directory, and an 'options' file therein, to extract default
1278 values for the location of the buildmaster. This directory is searched in the
1279 current directory, its parent, etc, all the way up to the filesystem root
1280 (assuming you own the directories in question). It also look in ~/.buildbot/
1281 for this file. This feature allows you to put a .buildbot at the top of your
1282 working tree, telling any 'buildbot' invocations you perform therein how to
1283 get to the buildmaster associated with that tree's project.
1285 Windows users get something similar, using %APPDATA%/buildbot instead of
1288 ** windows ShellCommands are launched with 'cmd.exe'
1290 The buildslave has been modified to run all list-based ShellCommands by
1291 prepending [os.environ['COMSPEC'], '/c'] to the argv list before execution.
1292 This should allow the buildslave's PATH to be searched for commands,
1293 improving the chances that it can run the same 'trial -o foo' commands as a
1294 unix buildslave. The potential downside is that spaces in argv elements might
1295 be re-parsed, or quotes might be re-interpreted. The consensus on the mailing
1296 list was that this is a useful thing to do, but please report any problems
1297 you encounter with it.
1301 The Waterfall display now shows the buildbot's home timezone at the top of
1302 the timestamp column. The default favicon.ico is now much nicer-looking (it
1303 is generated with Blender.. the icon.blend file is available in CVS in
1304 docs/images/ should you care to play with it).
1308 * Release 0.6.3 (25 Apr 2005)
1310 ** 'buildbot' tool gets more uses
1312 The 'buildbot' executable has acquired three new subcommands. 'buildbot
1313 debugclient' brings up the small remote-control panel that connects to a
1314 buildmaster (via the slave port and the c['debugPassword']). This tool,
1315 formerly in contrib/debugclient.py, lets you reload the config file, force
1316 builds, and simulate inbound commit messages. It requires gtk2, glade, and
1317 the python bindings for both to be installed.
1319 'buildbot statusgui' brings up a live status client, formerly available by
1320 running buildbot/clients/gtkPanes.py as a program. This connects to the PB
1321 status port that you create with:
1323 c['status'].append(client.PBListener(portnum))
1325 and shows two boxes per Builder, one for the last build, one for current
1326 activity. These boxes are updated in realtime. The effect is primitive, but
1327 is intended as an example of what's possible with the PB status interface.
1329 'buildbot statuslog' provides a text-based running log of buildmaster events.
1331 Note: command names are subject to change. These should get much more useful
1334 ** web page has a favicon
1336 When constructing the html.Waterfall instance, you can provide the filename
1337 of an image that will be provided when the "favicon.ico" resource is
1338 requested. Many web browsers display this as an icon next to the URL or
1339 bookmark. A goofy little default icon is included.
1343 Thanks to Thomas Vander Stichele, the Waterfall page is now themable through
1344 CSS. The default CSS is located in buildbot/status/classic.css, and creates a
1345 page that is mostly identical to the old, non-CSS based table.
1347 You can specify a different CSS file to use by passing it as the css=
1348 argument to html.Waterfall(). See the docstring for Waterfall for some more
1351 ** builder "categories"
1353 Thomas has added code which places each Builder in an optional "category".
1354 The various status targets (Waterfall, IRC, MailNotifier) can accept a list
1355 of categories, and they will ignore any activity in builders outside this
1356 list. This makes it easy to create some Builders which are "experimental" or
1357 otherwise not yet ready for the world to see, or indicate that certain
1358 builders should not harass developers when their tests fail, perhaps because
1359 the build slaves for them are not yet fully functional.
1361 ** Deprecated features
1363 *** defining Builders with tuples is deprecated
1365 For a long time, the preferred way to define builders in the config file has
1366 been with a dictionary. The less-flexible old style of a 4-item tuple (name,
1367 slavename, builddir, factory) is now officially deprecated (i.e., it will
1368 emit a warning if you use it), and will be removed in the next release.
1369 Dictionaries are more flexible: additional keys like periodicBuildTime are
1370 simply unavailable to tuple-defined builders.
1372 Note: it is a good idea to watch the logfile (usually in twistd.log) when you
1373 first start the buildmaster, or whenever you reload the config file. Any
1374 warnings or errors in the config file will be found there.
1376 *** c['webPortnum'], c['webPathname'], c['irc'] are deprecated
1378 All status reporters should be defined in the c['status'] array, using
1379 buildbot.status.html.Waterfall or buildbot.status.words.IRC . These have been
1380 deprecated for a while, but this is fair warning that these keys will be
1381 removed in the next release.
1383 *** c['manholePort'] is deprecated
1385 Again, this has been deprecated for a while, in favor of:
1387 c['manhole'] = master.Manhole(port, username, password)
1389 The preferred syntax will eventually let us use other, better kinds of debug
1390 shells, such as the experimental curses-based ones in the Twisted sandbox
1391 (which would offer command-line editing and history).
1395 The waterfall page has been improved a bit. A circular-reference bug in the
1396 web page's TextLog class was fixed, which caused a major memory leak in a
1397 long-running buildmaster with large logfiles that are viewed frequently.
1398 Modifying the config file in a way which only changed a builder's base
1399 directory now works correctly. The 'buildbot' command tries to create
1400 slightly more useful master/slave directories, adding a Makefile entry to
1401 re-create the .tap file, and removing global-read permissions from the files
1402 that may contain buildslave passwords.
1404 ** twisted-2.0.0 compatibility
1406 Both buildmaster and buildslave should run properly under Twisted-2.0 . There
1407 are still some warnings about deprecated functions, some of which could be
1408 fixed, but there are others that would require removing compatibility with
1409 Twisted-1.3, and I don't expect to do that until 2.0 has been out and stable
1410 for at least several months. The unit tests should pass under 2.0, whereas
1411 the previous buildbot release had tests which could hang when run against the
1412 new "trial" framework in 2.0.
1414 The Twisted-specific steps (including Trial) have been updated to match 2.0
1417 ** win32 compatibility
1419 Thankt to Nick Trout, more compatibility fixes have been incorporated,
1420 improving the chances that the unit tests will pass on windows systems. There
1421 are still some problems, and a step-by-step "running buildslaves on windows"
1422 document would be greatly appreciated.
1426 Thanks to Thomas Vander Stichele, most of the docstrings have been converted
1427 to epydoc format. There is a utility in docs/gen-reference to turn these into
1428 a tree of cross-referenced HTML pages. Eventually these docs will be
1429 auto-generated and somehow published on the buildbot web page.
1433 * Release 0.6.2 (13 Dec 2004)
1437 It is now possible to interrupt a running build. Both the web page and the
1438 IRC bot feature 'stop build' commands, which can be used to interrupt the
1439 current BuildStep and accelerate the termination of the overall Build. The
1440 status reporting for these still leaves something to be desired (an
1441 'interrupt' event is pushed into the column, and the reason for the interrupt
1442 is added to a pseudo-logfile for the step that was stopped, but if you only
1443 look at the top-level status it appears that the build failed on its own).
1445 Builds are also halted if the connection to the buildslave is lost. On the
1446 slave side, any active commands are halted if the connection to the
1447 buildmaster is lost.
1449 ** minor new features
1451 The IRC log bot now reports ETA times in a MMSS format like "2m45s" instead
1452 of the clunky "165 seconds".
1456 *** Slave Disconnect
1458 Slave disconnects should be handled better now: the current build should be
1459 abandoned properly. Earlier versions could get into weird states where the
1460 build failed to finish, clogging the builder forever (or at least until the
1461 buildmaster was restarted).
1463 In addition, there are weird network conditions which could cause a
1464 buildslave to attempt to connect twice to the same buildmaster. This can
1465 happen when the slave is sending large logfiles over a slow link, while using
1466 short keepalive timeouts. The buildmaster has been fixed to allow the second
1467 connection attempt to take precedence over the first, so that the older
1468 connection is jettisoned to make way for the newer one.
1470 In addition, the buildslave has been fixed to be less twitchy about timeouts.
1471 There are now two parameters: keepaliveInterval (which is controlled by the
1472 mktap 'keepalive' argument), and keepaliveTimeout (which requires editing the
1473 .py source to change from the default of 30 seconds). The slave expects to
1474 see *something* from the master at least once every keepaliveInterval
1475 seconds, and will try to provoke a response (by sending a keepalive request)
1476 'keepaliveTimeout' seconds before the end of this interval just in case there
1477 was no regular traffic. Any kind of traffic will qualify, including
1478 acknowledgements of normal build-status updates.
1480 The net result is that, as long as any given PB message can be sent over the
1481 wire in less than 'keepaliveTimeout' seconds, the slave should not mistakenly
1482 disconnect because of a timeout. There will be traffic on the wire at least
1483 every 'keepaliveInterval' seconds, which is what you want to pay attention to
1484 if you're trying to keep an intervening NAT box from dropping what it thinks
1485 is an abandoned connection. A quiet loss of connection will be detected
1486 within 'keepaliveInterval' seconds.
1490 The web page rendering code has been fixed to deliver large logfiles in
1491 pieces, using a producer/consumer apparatus. This avoids the large spike in
1492 memory consumption when the log file body was linearized into a single string
1493 and then buffered in the socket's application-side transmit buffer. This
1494 should also avoid the 640k single-string limit for web.distrib servers that
1495 could be hit by large (>640k) logfiles.
1499 * Release 0.6.1 (23 Nov 2004)
1501 ** win32 improvements/bugfixes
1503 Several changes have gone in to improve portability to non-unix systems. It
1504 should be possible to run a build slave under windows without major issues
1505 (although step-by-step documentation is still greatly desired: check the
1506 mailing list for suggestions from current win32 users).
1508 *** PBChangeSource: use configurable directory separator, not os.sep
1510 The PBChangeSource, which listens on a TCP socket for change notices
1511 delivered from tools like contrib/svn_buildbot.py, was splitting source
1512 filenames with os.sep . This is inappropriate, because those file names are
1513 coming from the VC repository, not the local filesystem, and the repository
1514 host may be running a different OS (with a different separator convention)
1515 than the buildmaster host. In particular, a win32 buildmaster using a CVS
1516 repository running on a unix box would be confused.
1518 PBChangeSource now takes a sep= argument to indicate the separator character
1521 *** build saving should work better
1523 windows cannot do the atomic os.rename() trick that unix can, so under win32
1524 the buildmaster falls back to save/delete-old/rename, which carries a slight
1525 risk of losing a saved build log (if the system were to crash between the
1526 delete-old and the rename).
1530 *** test-result tracking
1532 Work has begun on fine-grained test-result handling. The eventual goal is to
1533 be able to track individual tests over time, and create problem reports when
1534 a test starts failing (which then are resolved when the test starts passing
1535 again). The first step towards this is an ITestResult interface, and code in
1536 the TrialTestParser to create such results for all non-passing tests (the
1537 ones for which Trial emits exception tracebacks).
1539 These test results are currently displayed in a tree-like display in a page
1540 accessible from each Build's page (follow the numbered link in the yellow
1541 box at the start of each build to get there).
1543 This interface is still in flux, as it really wants to be able to accomodate
1544 things like compiler warnings and tests that are skipped because of missing
1545 libraries or unsupported architectures.
1549 *** VC updates should survive temporary failures
1551 Some VC systems (CVS and SVN in particular) get upset when files are turned
1552 into directories or vice versa, or when repository items are moved without
1553 the knowledge of the VC system. The usual symptom is that a 'cvs update'
1554 fails where a fresh checkout succeeds.
1556 To avoid having to manually intervene, the build slaves' VC commands have
1557 been refactored to respond to update failures by deleting the tree and
1558 attempting a full checkout. This may cause some unnecessary effort when,
1559 e.g., the CVS server falls off the net, but in the normal case it will only
1560 come into play when one of these can't-cope situations arises.
1562 *** forget about an existing build when the slave detaches
1564 If the slave was lost during a build, the master did not clear the
1565 .currentBuild reference, making that builder unavailable for later builds.
1566 This has been fixed, so that losing a slave should be handled better. This
1567 area still needs some work, I think it's still possible to get both the
1568 slave and the master wedged by breaking the connection at just the right
1569 time. Eventually I want to be able to resume interrupted builds (especially
1570 when the interruption is the result of a network failure and not because the
1571 slave or the master actually died).
1573 *** large logfiles now consume less memory
1575 Build logs are stored as lists of (type,text) chunks, so that
1576 stdout/stderr/headers can be displayed differently (if they were
1577 distinguishable when they were generated: stdout and stderr are merged when
1578 usePTY=1). For multi-megabyte logfiles, a large list with many short strings
1579 could incur a large overhead. The new behavior is to merge same-type string
1580 chunks together as they are received, aiming for a chunk size of about 10kb,
1581 which should bring the overhead down to a more reasonable level.
1583 There remains an issue with actually delivering large logfiles over, say,
1584 the HTML interface. The string chunks must be merged together into a single
1585 string before delivery, which causes a spike in the memory usage when the
1586 logfile is viewed. This can also break twisted.web.distrib -type servers,
1587 where the underlying PB protocol imposes a 640k limit on the size of
1588 strings. This will be fixed (with a proper Producer/Consumer scheme) in the
1592 * Release 0.6.0 (30 Sep 2004)
1596 *** /usr/bin/buildbot control tool
1598 There is now an executable named 'buildbot'. For now, this just provides a
1599 convenient front-end to mktap/twistd/kill, but eventually it will provide
1600 access to other client functionality (like the 'try' builds, and a status
1601 client). Assuming you put your buildbots in /var/lib/buildbot/master/FOO,
1602 you can do 'buildbot create-master /var/lib/buildbot/master/FOO' and it will
1603 create the .tap file and set up a sample master.cfg for you. Later,
1604 'buildbot start /var/lib/buildbot/master/FOO' will start the daemon.
1607 *** build status now saved in external files, -shutdown.tap unnecessary
1609 The status rewrite included a change to save all build status in a set of
1610 external files. These files, one per build, are put in a subdirectory of the
1611 master's basedir (named according to the 'builddir' parameter of the Builder
1612 configuration dictionary). This helps keep the buildmaster's memory
1613 consumption small: the (potentially large) build logs are kept on disk
1614 instead of in RAM. There is a small cache (2 builds per builder) kept in
1615 memory, but everything else lives on disk.
1617 The big change is that the buildmaster now keeps *all* status in these
1618 files. It is no longer necessary to preserve the buildbot-shutdown.tap file
1619 to run a persistent buildmaster. The buildmaster may be launched with
1620 'twistd -f buildbot.tap' each time, in fact the '-n' option can be added to
1621 prevent twistd from automatically creating the -shutdown.tap file.
1623 There is still one lingering bug with this change: the Expectations object
1624 for each builder (which records how long the various steps took, to provide
1625 an ETA value for the next time) is not yet saved. The result is that the
1626 first build after a restart will not provide an ETA value.
1628 0.6.0 keeps status in a single file per build, as opposed to 0.5.0 which
1629 kept status in many subdirectories (one layer for builds, another for steps,
1630 and a third for logs). 0.6.0 will detect and delete these subdirectories as
1633 The saved builds are optional. To prevent disk usage from growing without
1634 bounds, you may want to set up a cron job to run 'find' and delete any which
1635 are too old. The status displays will happily survive without those saved
1638 The set of recorded Changes is kept in a similar file named 'changes.pck'.
1641 *** source checkout now uses timestamp/revision
1643 Source checkouts are now performed with an appropriate -D TIMESTAMP (for
1644 CVS) or -r REVISION (for SVN) marker to obtain the exact sources that were
1645 specified by the most recent Change going into the current Build. This
1646 avoids a race condition in which a change might be committed after the build
1647 has started but before the source checkout has completed, resulting in a
1648 mismatched set of source files. Such changes are now ignored.
1650 This works by keeping track of repository-wide revision/transaction numbers
1651 (for version control systems that offer them, like SVN). The checkout or
1652 update is performed with the highest such revision number. For CVS (which
1653 does not have them), the timestamp of each commit message is used, and a -D
1654 argument is created to place the checkout squarely in the middle of the "tree
1655 stable timer"'s window.
1657 This also provides the infrastructure for the upcoming 'try' feature. All
1658 source-checkout commands can now obtain a base revision marker and a patch
1659 from the Build, allowing certain builds to be performed on something other
1660 than the most recent sources.
1662 See source.xhtml and steps.xhtml for details.
1665 *** Darcs and Arch support added
1667 There are now build steps which retrieve a source tree from Darcs and Arch
1668 repositories. See steps.xhtml for details.
1670 Preliminary P4 support has been added, thanks to code from Dave Peticolas.
1671 You must manually set up each build slave with an appropriate P4CLIENT: all
1672 buildbot does is run 'p4 sync' at the appropriate times.
1675 *** Status reporting rewritten
1677 Status reporting was completely revamped. The config file now accepts a
1678 BuildmasterConfig['status'] entry, with a list of objects that perform status
1679 delivery. The old config file entries which controlled the web status port
1680 and the IRC bot have been deprecated in favor of adding instances to
1681 ['status']. The following status-delivery classes have been implemented, all
1682 in the 'buildbot.status' package:
1684 client.PBListener(port, username, passwd)
1685 html.Waterfall(http_port, distrib_port)
1686 mail.MailNotifier(fromaddr, mode, extraRecipients..)
1687 words.IRC(host, nick, channels)
1689 See the individual docstrings for details about how to use each one. You can
1690 create new status-delivery objects by following the interfaces found in the
1691 buildbot.interfaces module.
1694 *** BuildFactory configuration process changed
1696 The basic BuildFactory class is now defined in buildbot.process.factory
1697 rather than buildbot.process.base, so you will have to update your config
1698 files. factory.BuildFactory is the base class, which accepts a list of Steps
1699 to run. See docs/factories.xhtml for details.
1701 There are now easier-to-use BuildFactory classes for projects which use GNU
1702 Autoconf, perl's MakeMaker (CPAN), python's distutils (but no unit tests),
1703 and Twisted's Trial. Each one takes a separate 'source' Step to obtain the
1704 source tree, and then fills in the rest of the Steps for you.
1707 *** CVS/SVN VC steps unified, simplified
1709 The confusing collection of arguments for the CVS step ('clobber=',
1710 'copydir=', and 'export=') have been removed in favor of a single 'mode'
1711 argument. This argument describes how you want to use the sources: whether
1712 you want to update and compile everything in the same tree (mode='update'),
1713 or do a fresh checkout and full build each time (mode='clobber'), or
1714 something in between.
1716 The SVN (Subversion) step has been unified and accepts the same mode=
1717 parameter as CVS. New version control steps will obey the same interface.
1719 Most of the old configuration arguments have been removed. You will need to
1720 update your configuration files to use the new arguments. See
1721 docs/steps.xhtml for a description of all the new parameters.
1724 *** Preliminary Debian packaging added
1726 Thanks to the contributions of Kirill Lapshin, we can now produce .deb
1727 installer packages. These are still experimental, but they include init.d
1728 startup/shutdown scripts, which the the new /usr/bin/buildbot to invoke
1729 twistd. Create your buildmasters in /var/lib/buildbot/master/FOO, and your
1730 slaves in /var/lib/buildbot/slave/BAR, then put FOO and BAR in the
1731 appropriate places in /etc/default/buildbot . After that, the buildmasters
1732 and slaves will be started at every boot.
1734 Pre-built .debs are not yet distributed. Use 'debuild -uc -us' from the
1735 source directory to create them.
1743 Each build now has a "source stamp" which describes what sources it used. The
1744 idea is that the sources for this particular build can be completely
1745 regenerated from the stamp. The stamp is a tuple of (revision, patch), where
1746 the revision depends on the VC system being used (for CVS it is either a
1747 revision tag like "BUILDBOT-0_5_0" or a datestamp like "2004/07/23", for
1748 Subversion it is a revision number like 11455). This must be combined with
1749 information from the Builder that is constant across all builds (something to
1750 point at the repository, and possibly a branch indicator for CVS and other VC
1751 systems that don't fold this into the repository string).
1753 The patch is an optional unified diff file, ready to be applied by running
1754 'patch -p0 <PATCH' from inside the workdir. This provides support for the
1755 'try' feature that will eventually allow developers to run buildbot tests on
1756 their code before checking it in.
1759 *** SIGHUP causes the buildmaster's configuration file to be re-read
1761 *** IRC bot now has 'watch' command
1763 You can now tell the buildbot's IRC bot to 'watch <buildername>' on a builder
1764 which is currently performing a build. When that build is finished, the
1765 buildbot will make an announcement (including the results of the build).
1767 The IRC 'force build' command will also announce when the resulting build has
1771 *** the 'force build' option on HTML and IRC status targets can be disabled
1773 The html.Waterfall display and the words.IRC bot may be constructed with an
1774 allowForce=False argument, which removes the ability to force a build through
1775 these interfaces. Future versions will be able to restrict this build-forcing
1776 capability to authenticated users. The per-builder HTML page no longer
1777 displays the 'Force Build' buttons if it does not have this ability. Thanks
1778 to Fred Drake for code and design suggestions.
1781 *** master now takes 'projectName' and 'projectURL' settings
1783 These strings allow the buildbot to describe what project it is working for.
1784 At the moment they are only displayed on the Waterfall page, but in the next
1785 release they will be retrieveable from the IRC bot as well.
1788 *** survive recent (SVN) Twisted versions
1790 The buildbot should run correctly (albeit with plenty of noisy deprecation
1791 warnings) under the upcoming Twisted-2.0 release.
1794 *** work-in-progress realtime Trial results acquisition
1796 Jonathan Simms (<slyphon>) has been working on 'retrial', a rewrite of
1797 Twisted's unit test framework that will most likely be available in
1798 Twisted-2.0 . Although it is not yet complete, the buildbot will be able to
1799 use retrial in such a way that build status is reported on a per-test basis,
1800 in real time. This will be the beginning of fine-grained test tracking and
1801 Problem management, described in docs/users.xhtml .
1804 * Release 0.5.0 (22 Jul 2004)
1808 *** web.distrib servers via TCP
1810 The 'webPathname' config option, which specifies a UNIX socket on which to
1811 publish the waterfall HTML page (for use by 'mktap web -u' or equivalent),
1812 now accepts a numeric port number. This publishes the same thing via TCP,
1813 allowing the parent web server to live on a separate machine.
1815 This config option could be named better, but it will go away altogether in
1816 a few releases, when status delivery is unified. It will be replaced with a
1817 WebStatusTarget object, and the config file will simply contain a list of
1818 various kinds of status targets.
1820 *** 'master.cfg' filename is configurable
1822 The buildmaster can use a config file named something other than
1823 "master.cfg". Use the --config=foo.cfg option to mktap to control this.
1825 *** FreshCVSSource now uses newcred (CVSToys >= 1.0.10)
1827 The FreshCVSSource class now defaults to speaking to freshcvs daemons from
1828 modern CVSToys releases. If you need to use the buildbot with a daemon from
1829 CVSToys-1.0.9 or earlier, use FreshCVSSourceOldcred instead. Note that the
1830 new form only requires host/port/username/passwd: the "serviceName"
1831 parameter is no longer meaningful.
1833 *** Builders are now configured with a dictionary, not a tuple
1835 The preferred way to set up a Builder in master.cfg is to provide a
1836 dictionary with various keys, rather than a (non-extensible) 4-tuple. See
1837 docs/config.xhtml for details. The old tuple-way is still supported for now,
1838 it will probably be deprecated in the next release and removed altogether in
1841 *** .periodicBuildTime is now exposed to the config file
1843 To set a builder to run at periodic intervals, simply add a
1844 'periodicBuildTime' key to its master.cfg dictionary. Again, see
1845 docs/config.xhtml for details.
1847 *** svn_buildbot.py adds --include, --exclude
1849 The commit trigger script now gives you more control over which files are
1850 sent to the buildmaster and which are not.
1852 *** usePTY is controllable at slave mktap time
1854 The buildslaves usually run their child processes in a pty, which creates a
1855 process group for all the children, which makes it much easier to kill them
1856 all at once (i.e. if a test hangs). However this causes problems on some
1857 systems. Rather than hacking slavecommand.py to disable the use of these
1858 ptys, you can now create the slave's .tap file with --usepty=0 at mktap
1863 A summary of warnings (e.g. DeprecationWarnings) is provided as part of the
1864 test-case summarizer. The summarizer also counts Skips, expectedFailures,
1865 and unexpectedSuccesses, displaying the counts on the test step's event box.
1867 The RunUnitTests step now uses "trial -R twisted" instead of "trial
1868 twisted.test", which is a bit cleaner. All .pyc files are deleted before
1869 starting trial, to avoid getting tripped up by deleted .py files.
1873 docs/config.xhtml now describes the syntax and allowed contents of the
1874 'master.cfg' configuration file.
1878 Interlocks had a race condition that could cause the lock to get stuck
1881 FreshCVSSource has a prefix= argument that was moderately broken (it used to
1882 only work if the prefix was a single directory component). It now works with
1885 The buildmaster used to complain when it saw the "info" directory in a
1886 slave's workspace. This directory is used to publish information about the
1887 slave host and its administrator, and is not a leftover build directory as
1888 the complaint suggested. This complain has been silenced.
1891 * Release 0.4.3 (30 Apr 2004)
1893 ** PBChangeSource made explicit
1895 In 0.4.2 and before, an internal interface was available which allowed
1896 special clients to inject changes into the Buildmaster. This interface is
1897 used by the contrib/svn_buildbot.py script. The interface has been extracted
1898 into a proper PBChangeSource object, which should be created in the
1899 master.cfg file just like the other kinds of ChangeSources. See
1900 docs/sources.xhtml for details.
1902 If you were implicitly using this change source (for example, if you use
1903 Subversion and the svn_buildbot.py script), you *must* add this source to
1904 your master.cfg file, or changes will not be delivered and no builds will be
1907 The PBChangeSource accepts the same "prefix" argument as all other
1908 ChangeSources. For a SVN repository that follows the recommended practice of
1909 using "trunk/" for the trunk revisions, you probably want to construct the
1912 source = PBChangeSource(prefix="trunk")
1914 to make sure that the Builders are given sensible (trunk-relative)
1915 filenames for each changed source file.
1919 *** step_twisted.RunUnitTests can change "bin/trial"
1921 The twisted RunUnitTests step was enhanced to let you run something other
1922 than "bin/trial", making it easier to use a buildbot on projects which use
1923 Twisted but aren't actually Twisted itself.
1925 *** Twisted now uses Subversion
1927 Now that Twisted has moved from CVS to SVN, the Twisted build processes have
1928 been modified to perform source checkouts from the Subversion repository.
1930 ** minor feature additions
1932 *** display Changes with HTML
1934 Changes are displayed with a bit more pizazz, and a links= argument was
1935 added to allow things like ViewCVS links to be added to the display
1936 (although it is not yet clear how this argument should be used: the
1937 interface remains subject to change untill it has been documented).
1939 *** display ShellCommand logs with HTML
1941 Headers are in blue, stderr is in red (unless usePTY=1 in which case stderr
1942 and stdout are indistinguishable). A link is provided which returns the same
1943 contents as plain text (by appending "?text=1" to the URL).
1945 *** buildslaves send real tracebacks upon error
1947 The .unsafeTracebacks option has been turned on for the buildslaves,
1948 allowing them to send a full stack trace when an exception occurs, which is
1949 logged in the buildmaster's twistd.log file. This makes it much easier to
1950 determine what went wrong on the slave side.
1952 *** BasicBuildFactory refactored
1954 The BasicBuildFactory class was refactored to make it easier to create
1955 derivative classes, in particular the BasicSVN variant.
1957 *** "ping buildslave" web button added
1959 There is now a button on the "builder information" page that lets a web user
1960 initiate a ping of the corresponding build slave (right next to the button
1961 that lets them force a build). This was added to help track down a problem
1962 with the slave keepalives.
1966 You can now have multiple BuildSteps with the same name (the names are used
1967 as hash keys in the data structure that helps determine ETA values for each
1968 step, the new code creates unique key names if necessary to avoid
1969 collisions). This means that, for example, you do not have to create a
1970 BuildStep subclass just to have two Compile steps in the same process.
1972 If CVSToys is not installed, the tests that depend upon it are skipped.
1974 Some tests in 0.4.2 failed because of a missing set of test files, they are
1975 now included in the tarball properly.
1977 Slave keepalives should work better now in the face of silent connection
1978 loss (such as when an intervening NAT box times out the association), the
1979 connection should be reestablished in minutes instead of hours.
1981 Shell commands on the slave are invoked with an argument list instead of the
1982 ugly and error-prone split-on-spaces approach. If the ShellCommand is given
1983 a string (instead of a list), it will fall back to splitting on spaces.
1984 Shell commands should work on win32 now (using COMSPEC instead of /bin/sh).
1986 Buildslaves under w32 should theoretically work now, and one was running for
1987 the Twisted buildbot for a while until the machine had to be returned.
1989 The "header" lines in ShellCommand logs (which include the first line, that
1990 displays the command being run, and the last, which shows its exit status)
1991 are now generated by the buildslave side instead of the local (buildmaster)
1992 side. This can provide better error handling and is generally cleaner.
1993 However, if you have an old buildslave (running 0.4.2 or earlier) and a new
1994 buildmaster, then neither end will generate these header lines.
1996 CVSCommand was improved, in certain situations 0.4.2 would perform
1997 unnecessary checkouts (when an update would have sufficed). Thanks to Johan
1998 Dahlin for the patches. The status output was fixed as well, so that
1999 failures in CVS and SVN commands (such as not being able to find the 'svn'
2000 executable) make the step status box red.
2002 Subversion support was refactored to make it behave more like CVS. This is a
2003 work in progress and will be improved in the next release.
2006 * Release 0.4.2 (08 Jan 2004)
2008 ** test suite updated
2010 The test suite has been completely moved over to Twisted's "Trial"
2011 framework, and all tests now pass. To run the test suite (consisting of 64
2012 tests, probably covering about 30% of BuildBot's logic), do this:
2014 PYTHONPATH=. trial -v buildbot.test
2016 ** Mail parsers updated
2018 Several bugs in the mail-parsing code were fixed, allowing a buildmaster to
2019 be triggered by mail sent out by a CVS repository. (The Twisted Buildbot is
2020 now using this to trigger builds, as their CVS server machine is having some
2021 difficulties with FreshCVS). The FreshCVS mail format for directory
2022 additions appears to have changed recently: the new parser should handle
2023 both old and new-style messages.
2025 A parser for Bonsai commit messages (buildbot.changes.mail.parseBonsaiMail)
2026 was contributed by Stephen Davis. Thanks Stephen!
2028 ** CVS "global options" now available
2030 The CVS build step can now accept a list of "global options" to give to the
2031 cvs command. These go before the "update"/"checkout" word, and are described
2032 fully by "cvs --help-options". Two useful ones might be "-r", which causes
2033 checked-out files to be read-only, and "-R", which assumes the repository is
2034 read-only (perhaps by not attempting to write to lock files).
2037 * Release 0.4.1 (09 Dec 2003)
2039 ** MaildirSources fixed
2041 Several bugs in MaildirSource made them unusable. These have been fixed (for
2042 real this time). The Twisted buildbot is using an FCMaildirSource while they
2043 fix some FreshCVS daemon problems, which provided the encouragement for
2044 getting these bugs fixed.
2046 In addition, the use of DNotify (only available under linux) was somehow
2047 broken, possibly by changes in some recent version of Python. It appears to
2048 be working again now (against both python-2.3.3c1 and python-2.2.1).
2050 ** master.cfg can use 'basedir' variable
2052 As documented in the sample configuration file (but not actually implemented
2053 until now), a variable named 'basedir' is inserted into the namespace used
2054 by master.cfg . This can be used with something like:
2056 os.path.join(basedir, "maildir")
2058 to obtain a master-basedir-relative location.
2061 * Release 0.4.0 (05 Dec 2003)
2065 I've moved the codebase to Twisted's new 'application' framework, which
2066 drastically cleans up service startup/shutdown just like newcred did for
2067 authorization. This is mostly an internal change, but the interface to
2068 IChangeSources was modified, so in the off chance that someone has written a
2069 custom change source, it may have to be updated to the new scheme.
2071 The most user-visible consequence of this change is that now both
2072 buildmasters and buildslaves are generated with the standard Twisted 'mktap'
2073 utility. Basic documentation is in the README file.
2075 Both buildmaster and buildslave .tap files need to be re-generated to run
2076 under the new code. I have not figured out the styles.Versioned upgrade path
2077 well enough to avoid this yet. Sorry.
2079 This also means that both buildslaves and the buildmaster require
2080 Twisted-1.1.0 or later.
2082 ** reloadable master.cfg
2084 Most aspects of a buildmaster is now controlled by a configuration file
2085 which can be re-read at runtime without losing build history. This feature
2086 makes the buildmaster *much* easier to maintain.
2088 In the previous release, you would create the buildmaster by writing a
2089 program to define the Builders and ChangeSources and such, then run it to
2090 create the .tap file. In the new release, you use 'mktap' to create the .tap
2091 file, and the only parameter you give it is the base directory to use. Each
2092 time the buildmaster starts, it will look for a file named 'master.cfg' in
2093 that directory and parse it as a python script. That script must define a
2094 dictionary named 'BuildmasterConfig' with various keys to define the
2095 builders, the known slaves, what port to use for the web server, what IRC
2096 channels to connect to, etc.
2098 This config file can be re-read at runtime, and the buildmaster will compute
2099 the differences and add/remove services as necessary. The re-reading is
2100 currently triggered through the debug port (contrib/debugclient.py is the
2101 debug port client), but future releases will add the ability to trigger the
2102 reconfiguration by IRC command, web page button, and probably a local UNIX
2103 socket (with a helper script to trigger a rebuild locally).
2105 docs/examples/twisted_master.cfg contains a sample configuration file, which
2106 also lists all the keys that can be set.
2108 There may be some bugs lurking, such as re-configuring the buildmaster while
2109 a build is running. It needs more testing.
2113 Radix contributed some support scripts to run MaxQ test scripts. MaxQ
2114 (http://maxq.tigris.org/) is a web testing tool that allows you to record
2115 HTTP sessions and play them back.
2117 ** Builders can now wait on multiple Interlocks
2119 The "Interlock" code has been enhanced to allow multiple builders to wait on
2120 each one. This was done to support the new config-file syntax for specifying
2121 Interlocks (in which each interlock is a tuple of A and [B], where A is the
2122 builder the Interlock depends upon, and [B] is a list of builders that
2123 depend upon the Interlock).
2125 "Interlock" is misnamed. In the next release it will be changed to
2126 "Dependency", because that's what it really expresses. A new class (probably
2127 called Interlock) will be created to express the notion that two builders
2128 should not run at the same time, useful when multiple builders are run on
2129 the same machine and thrashing results when several CPU- or disk- intensive
2130 compiles are done simultaneously.
2132 ** FreshCVSSource can now handle newcred-enabled FreshCVS daemons
2134 There are now two FreshCVSSource classes: FreshCVSSourceNewcred talks to
2135 newcred daemons, and FreshCVSSourceOldcred talks to oldcred ones. Mind you,
2136 FreshCVS doesn't yet do newcred, but when it does, we'll be ready.
2138 'FreshCVSSource' maps to the oldcred form for now. That will probably change
2139 when the current release of CVSToys supports newcred by default.
2141 ** usePTY=1 on posix buildslaves
2143 When a buildslave is running under POSIX (i.e. pretty much everything except
2144 windows), child processes are created with a pty instead of separate
2145 stdin/stdout/stderr pipes. This makes it more likely that a hanging build
2146 (when killed off by the timeout code) will have all its sub-childred cleaned
2147 up. Non-pty children would tend to leave subprocesses running because the
2148 buildslave was only able to kill off the top-level process (typically
2151 Windows doesn't have any concept of ptys, so non-posix systems do not try to
2154 ** mail parsers should actually work now
2156 The email parsing functions (FCMaildirSource and SyncmailMaildirSource) were
2157 broken because of my confused understanding of how python class methods
2158 work. These sources should be functional now.
2160 ** more irc bot sillyness
2162 The IRC bot can now perform half of the famous AYBABTO scene.
2165 * Release 0.3.5 (19 Sep 2003)
2169 Buildbot has moved to "newcred", a new authorization framework provided by
2170 Twisted, which is a good bit cleaner and easier to work with than the
2171 "oldcred" scheme in older versions. This causes both buildmaster and
2172 buildslaves to depend upon Twisted 1.0.7 or later. The interface to
2173 'makeApp' has changed somewhat (the multiple kinds of remote connections all
2174 use the same TCP port now).
2176 Old buildslaves will get "_PortalWrapper instance has no attribute
2177 'remote_username'" errors when they try to connect. They must be upgraded.
2179 The FreshCVSSource uses PB to connect to the CVSToys server. This has been
2180 upgraded to use newcred too. If you get errors (TODO: what do they look
2181 like?) in the log when the buildmaster tries to connect, you need to upgrade
2182 your FreshCVS service or use the 'useOldcred' argument when creating your
2183 FreshCVSSource. This is a temporary hack to allow the buildmaster to talk to
2184 oldcred CVSToys servers. Using it will trigger deprecation warnings. It will
2187 In conjunction with this change, makeApp() now accepts a password which can
2188 be applied to the debug service.
2192 *** "copydir" for CVS checkouts
2194 The CVS build step can now accept a "copydir" parameter, which should be a
2195 directory name like "source" or "orig". If provided, the CVS checkout is
2196 done once into this directory, then copied into the actual working directory
2197 for compilation etc. Later updates are done in place in the copydir, then
2198 the workdir is replaced with a copy.
2200 This reduces CVS bandwidth (update instead of full checkout) at the expense
2201 of twice the disk space (two copies of the tree).
2203 *** Subversion (SVN) support
2205 Radix (Christopher Armstrong) contributed early support for building
2206 Subversion-based trees. The new 'SVN' buildstep behaves roughly like the
2207 'CVS' buildstep, and the contrib/svn_buildbot.py script can be used as a
2208 checkin trigger to feed changes to a running buildmaster.
2212 *** .tap file generation
2214 We no longer set the .tap filename, because the buildmaster/buildslave
2215 service might be added to an existing .tap file and we shouldn't presume to
2216 own the whole thing. You may want to manually rename the "buildbot.tap" file
2217 to something more meaningful (like "buildslave-bot1.tap").
2221 If the IRC server goes away (it was restarted, or the network connection was
2222 lost), the buildmaster will now schedule a reconnect attempt.
2224 *** w32 buildslave fixes
2226 An "rm -rf" was turned into shutil.rmtree on non-posix systems.
2229 * Release 0.3.4 (28 Jul 2003)
2233 The buildmaster can now join a set of IRC channels and respond to simple
2234 queries about builder status.
2236 ** slave information
2238 The build slaves can now report information from a set of info/* files in
2239 the slave base directory to the buildmaster. This will be used by the slave
2240 administrator to announce details about the system hosting the slave,
2241 contact information, etc. For now, info/admin should contain the name/email
2242 of the person who is responsible for the buildslave, and info/host should
2243 describe the system hosting the build slave (OS version, CPU speed, memory,
2244 etc). The contents of these files are made available through the waterfall
2247 ** change notification email parsers
2249 A parser for Syncmail (syncmail.sourceforge.net) was added. SourceForge
2250 provides examples of setting up syncmail to deliver CVS commit messages to
2251 mailing lists, so hopefully this will make it easier for sourceforge-hosted
2252 projects to set up a buildbot.
2254 email processors were moved into buildbot.changes.mail . FCMaildirSource was
2255 moved, and the compatibility location (buildbot.changes.freshcvsmail) will
2256 go away in the next release.
2258 ** w32 buildslave ought to work
2260 Some non-portable code was changed to make it more likely that the
2261 buildslave will run under windows. The Twisted buildbot now has a
2262 (more-or-less) working w32 buildslave.
2265 * Release 0.3.3 (21 May 2003):
2267 ** packaging changes
2269 *** include doc/examples in the release. Oops again.
2273 *** add keepalives to deal with NAT boxes
2275 Some NAT boxes drop port mappings if the TCP connection looks idle for too
2276 long (maybe 30 minutes?). Add application-level keepalives (dummy commands
2277 sent from slave to master every 10 minutes) to appease the NAT box and keep
2278 our connection alive. Enable this with --keepalive in the slave mktap
2279 command line. Check the README for more details.
2283 *** allow slaves to trigger any build that they host
2285 Added an internal function to ask the buildmaster to start one of their
2286 builds. Must be triggered with a debugger or manhole on the slave side for
2287 now, will add a better UI later.
2289 *** allow web page viewers to trigger any build
2291 Added a button to the per-build page (linked by the build names on the third
2292 row of the waterfall page) to allow viewers to manually trigger builds.
2293 There is a field for them to indicate who they are and why they are
2294 triggering the build. It is possible to abuse this, but for now the benefits
2295 outweigh the damage that could be done (worst case, someone can make your
2296 machine run builds continuously).
2298 ** generic buildprocess changes
2300 *** don't queue multiple builds for offline slaves
2302 If a slave is not online when a build is ready to run, that build is queued
2303 so the slave will run it when it next connects. However, the buildmaster
2304 used to queue every such build, so the poor slave machine would be subject
2305 to tens or hundreds of builds in a row when they finally did come online.
2306 The buildmaster has been changed to merge these multiple builds into a
2309 *** bump ShellCommand default timeout to 20 minutes
2311 Used for testing out the win32 twisted builder. I will probably revert this
2314 *** split args in ShellCommand ourselves instead of using /bin/sh
2316 This should remove the need for /bin/sh on the slave side, improving the
2317 chances that the buildslave can run on win32.
2319 *** add configureEnv argument to Configure step, pass env dict to slave
2321 Allows build processes to do things like 'CFLAGS=-O0 ./configure' without
2322 using /bin/sh to set the environment variable
2324 ** Twisted buildprocess changes
2326 *** warn instead of flunk the build when cReactor or qtreactor tests fail
2328 These two always fail. For now, downgrade those failures to a warning
2329 (orange box instead of red).
2331 *** don't use 'clobber' on remote builds
2333 Builds that run on remote machines (freebsd, OS-X) now use 'cvs update'
2334 instead of clobbering their trees and doing a fresh checkout. The multiple
2335 simultaneous CVS checkouts were causing a strain on Glyph's upstream
2338 *** use trial --testmodule instead of our own test-case-name grepper
2340 The Twisted coding/testing convention has developers put 'test-case-name'
2341 tags (emacs local variables, actually) in source files to indicate which
2342 test cases should be run to exercise that code. Twisted's unit-test
2343 framework just acquired an argument to look for these tags itself. Use that
2344 instead of the extra FindUnitTestsForFiles build step we were doing before.
2345 Removes a good bit of code from buildbot and into Twisted where it really
2349 * Release 0.3.2 (07 May 2003):
2351 ** packaging changes
2353 *** fix major packaging bug: none of the buildbot/* subdirectories were
2354 included in the 0.3.1 release. Sorry, I'm still figuring out distutils
2359 *** use pb.Cacheable to update Events in remote status client. much cleaner.
2361 *** start to clean up BuildProcess->status.builder interface
2365 *** waterfall display was missing a <tr>, causing it to be misrendered in most
2366 browsers (except the one I was testing it with, of course)
2368 *** URL without trailing slash (when served in a twisted-web distributed
2369 server, with a url like "http://twistedmatrix.com/~warner.twistd") should do
2370 redirect to URL-with-trailing-slash, otherwise internal hrefs are broken.
2372 *** remote status clients: forget RemoteReferences at shutdown, removes
2373 warnings about "persisting Ephemerals"
2375 ** Twisted buildprocess updates:
2377 *** match build process as of twisted-1.0.5
2378 **** use python2.2 everywhere now that twisted rejects python2.1
2379 **** look for test-result constants in multiple places
2380 *** move experimental 'trial --jelly' code to separate module
2381 *** add FreeBSD builder
2382 *** catch rc!=0 in HLint step
2383 *** remove RunUnitTestsRandomly, use randomly=1 parameter instead
2384 *** parameterize ['twisted.test'] default test case to make subclassing easier
2385 *** ignore internal distutils warnings in python2.3 builder
2388 * Release 0.3.1 (29 Apr 2003):
2392 ** Features implemented:
2394 change notification from FreshCVS server or parsed maildir contents
2398 basic builds, configure/compile/test
2400 some Twisted-specific build steps: docs, unit tests, debuild
2402 status reporting via web page
2404 ** Features still experimental/unpolished
2406 status reporting via PB client