#115:Refactor-WithProperties.render-to-use-_BuildProper.patch
[buildbot.git] / NEWS
blobfa1025003103fd3c90609a09f5a13191880a83fe
1 User visible changes in Buildbot.             -*- outline -*-
3 * Release 0.?.? (?)
5 ** Things You Need To Know
7 *** builder names must not start with an underscore (`_').
9 These are now reserved for internal buildbot purposes, such as the magic
10 "_all" pseudo-builder that the web pages use to allow force-build buttons
11 that start builds on all Builders at once.
13 ** Deprecation Schedule
15 The changes.freshcvsmail change source was replaced by
16 changes.mail.FCMaildirSource in 0.7.6, and has been removed in 0.7.7 .
18 c['sources'] (plural) was replaced by c['change_source'] (singular) in 0.7.6,
19 and will be removed by 0.8.0.
21 c['bots'] was replaced by c['buildslaves'] in 0.7.6, and will be removed by
22 0.8.0
24 The html.Waterfall status target was replaced by html.WebStatus in 0.7.6, and
25 will be removed by 0.8.0.
28 * Release 0.7.6 (30 Sep 2007)
30 ** Things You Need To Know
32 *** 'buildbot upgrade-master'
34 Each time you install a new version of Buildbot, you should run the new
35 'buildbot upgrade-master' command on each of your pre-existing buildmasters.
36 This will add files and fix (or at least detect) incompatibilities between
37 your old config and the new code.
39 *** new WebStatus page
41 The Waterfall has been replaced by the more general WebStatus display,
42 described below. WebStatus serves static files from a new public_html/
43 directory that lives in the buildmaster's basedir. Files like index.html,
44 buildbot.css, and robots.txt are served directly from that directory, so any
45 modifications you wish to make should be made to those files. In particular,
46 any custom CSS you've written should be copied into public_html/buildbot.css.
47 The 'upgrade-master' command will populate this directory for you.
49 The old Waterfall page is deprecated, but it should continue to work for
50 another few releases. It is now a subclass of WebStatus which just replaces
51 the default root URL with another copy of the /waterfall resource.
53 *** Compatibility: Python-2.3 or newer, Twisted-2.0 or newer
55 No compatiblity losses here, buildbot-0.7.6 is compatible with the same
56 versions of python and twisted that 0.7.5 was.
58 Buildbot is tested on a regular basis (http://buildbot.buildbot.net) against
59 nearly a full matrix of Python-(2.3,2.4,2.5) * Twisted-(2.0,2.1,2.2,2.4,2.5).
61 *** New Buildbot Home Page
63 Buildbot has moved to a new Trac instance at http://buildbot.net/ , and all
64 new bugs and tickets should be filed there. The old sourceforge bugs at
65 http://buildbot.sf.net/ will slowly be migrated over. Mailing lists are still
66 managed at sourceforge, and downloads are still available there.
68 *** Changed/Deprecated master.cfg Keys and Classes
70 c['sources'] (plural) has been replaced by c['change_source'] (singular).
72 c['bots'] has been replaced by c['buildslaves'], and it expects a list of
73 BuildSlave instances instead of tuples. See below for more details.
75 The 'freshcvsmail' change source has been deprecated, and will be removed in
76 the next release.
78 The html.Waterfall status target has been deprecated, and replaced by
79 html.WebStatus .
81 ** New Features
83 *** WebStatus
85 The new WebStatus display is a superset of the old Waterfall. It contains a
86 waterfall as a sub-page, but it also contains pages with more compact
87 representations of recent build status. The "one_line_per_build" page
88 contains just that, and "one_box_per_builder" shows just the information from
89 the top of the waterfall page (last-finished-build and current-activity).
91 The initial page (when you hit the root of the web site) is served from
92 index.html, and provides links to the Waterfall as well as the other pages.
94 Most of these pages can be filtered by adding query arguments to the URL.
95 Adding "?builder=XYZ" will cause the page to only show results for the given
96 builder. Adding "?builder=XYZ&builder=ABC" will show results for either
97 builder. "?branch=trunk" will limit the results to builds that involved code
98 from the trunk.
100 The /waterfall page has arguments to hide those annoying "buildslave
101 connected" messages, to start and and at arbitrary times, and to auto-refresh
102 at a chosen interval (with a hardcoded minimum of 15 seconds). It also has a
103 "help" page with forms that will help you add all of these nifty filtering
104 arguments.
106 The recommended practice is to modify the index.html file to include links to
107 the filtered pages that you find most useful.
109 Note that WebStatus defaults to allowForce=False, meaning that the display
110 will not offer or accept "Force Build" or "Stop Build" controls. (The old
111 Waterfall defaults to allowForce=True).
113 The new WebStatus pages try very hard to use only relative links, making life
114 better when the Buildbot sits behind an HTTP reverse proxy.
116 In addition, there is a rudimentary XMLRPC server run by the WebStatus
117 object. It only has two methods so far, but it will acquire more in the
118 future. The first customer of this is a project to add a buildbot plugin to
119 Trac.
121 *** BuildFactory.addStep(Step(args))
123 BuildFactories can be set up either with a complete list of steps, or by
124 calling the .addStep() method repeatedly. The preferred way to provide a step
125 is by instantiating it, rather than giving a class/kwargs pair. This gives
126 the BuildStep class a chance to examine the arguments (and complain about
127 anything it doesn't like) while the config file is being read and problems
128 are being logged. For example, the old-style:
130  from buildbot.process.factory import BuildFactory, s
131  steps = [s(CVS, cvsroot="blah", mode="copy"),
132           s(Compile, command=["make", "all"]),
133           s(Test, command=["make", "test"]),
134          ]
135  f = BuildFactory(steps)
137 is now:
139  f = BuildFactory()
140  f.addStep( CVS(cvsroot="blah", mode="copy") )
141  f.addStep( Compile(command=["make", "all"]) )
142  f.addStep( Test(command=["make", "test"]) )
144 Authors of BuildStep subclasses which override __init__ to add new arguments
145 must register them with self.addFactoryArguments(**newargs) to make sure that
146 those classes will work with this new style, otherwise the new arguments will
147 be lost.
149 Using class/kwargs pairs is deprecated, and will be removed in a future
150 release.
153 *** BuildSlave instances, max_builds=, notify_on_missing=
155 Buildslave specification has changed a lot in this release. The old config:
157  c['bots'] = [ ("bot1name", "bot1passwd"),
158                ("bot2name", "bot2passwd") ]
160 is now:
162  from buildbot.buildslave import BuildSlave
163  c['slaves'] = [ BuildSlave("bot1name", "bot1passwd"),
164                  BuildSlave("bot2name", "bot2passwd") ]
166 This new form gives us the ability to add new controls. The first is
167 "max_builds=", which imposes a concurrency limit that is like the usual
168 SlaveLock, but gives the buildmaster the opportunity to find a different
169 slave to run the build. (the buildslave is chosen before the SlaveLock is
170 claimed, so pure SlaveLocks don't let you take full advantage of build
171 farms).
173 The other addition is "notify_on_missing=", which accepts an email address
174 (or list of addresses), and sends a message when the buildslave has been
175 disconnected for more than an hour (configurable with missing_timeout=). This
176 may be useful when you expect that the buildslave hosts should be available
177 most of the time, and want to investigate the reasons that it went offline.
180 ** Other Improvements
182 The IRC bot has been refactored to make it easier to add instant-messaging
183 status delivery in the future. The IM plugins are not yet written, though.
185 When multiple buildslaves are available for a given build, one of them will
186 be picked at random. In previous releases, the first one on the list was
187 always picked. This helps to add a certain measure of load-balancing. More
188 improvements will be made in the future.
190 When the buildslave does a VC checkout step that requires clobbering the
191 build directory (i.e. in all modes except for 'update'), the buildslave will
192 first set the permissions on all build files to allow their deletion, before
193 it attempts to delete them. This should fix some problems in which a build
194 process left non-user-writable files lying around (frequently a result of
195 enthusiastic unit tests).
197 The BuildStep's workdir= argument can now accept a WithProperties()
198 specification, allowing greater control over the workdir.
200 Support for the 'Bazaar' version control system (/usr/bin/bzr) has been
201 added, using the buildbot.steps.source.Bzr class. This is a replacement for
202 the old 'Arch' (/usr/bin/tla and /usr/bin/baz) systems, which are still
203 supported by Buildbot with the source.Arch and source.Bazaar classes,
204 respectively. Unfortunately the old baz system claimed the 'Bazaar' classname
205 early, so the new system must use source.Bzr instead of the desired
206 source.Bazaar . A future release might change this.
208 A rudimentary Gnome Panel applet is provided in contrib/bb_applet.py, which
209 provides 'buildbot statusgui' -like colored status boxes inside the panel.
210 Installing it is a bit tricky, though.
212 The 'buildbot try' command now accepts a '--diff=foo.patch' argument, to let
213 you provide a pre-computed patch. This makes it easier to test out patches
214 that you've looked over for safety, without first applying them to your local
215 source tree.
217 A new Mercurial change source was added, hg_buildbot.py, which runs as an
218 in-process post-commit hook. This gives us access to much more information
219 about the change, as well as being much faster.
221 The email-based changesource have been refactored, to make it easier to write
222 new mail parsers. A parser for the SVN "commit-email.pl" script has been
223 added.
225 ** Bugs Fixed
227 Far too many to count. Please see
228 http://buildbot.net/trac/query?status=closed&milestone=0.7.6 for a partial
229 list of tickets closed for this release, and the ChangeLog for a complete
230 list of all changes since 0.7.5 .
233 * Release 0.7.5 (10 Dec 2006)
235 ** Things You Need To Know
237 *** The Great BuildStep Renaming
239 All BuildSteps have moved! They used to be classes in buildbot.process.step,
240 but now they all have separate modules in buildbot.steps.* . They have been
241 split out into separate categories: for example, the source checkout steps
242 are now buildbot.steps.source.CVS, buildbot.steps.source.Darcs, etc. The most
243 commonly used one is probably buildbot.steps.shell.ShellCommand . The
244 python-specific steps are in buildbot.steps.python, and the Twisted-specific
245 steps are in buildbot.steps.python_twisted .
247 You will need to update your master.cfg files to use the new names. The old
248 names are deprecated and will be removed altogether in the next release.
250 *** Compatibility
252 Buildbot now requires python-2.3 or later. Buildbot now requires
253 Twisted-2.0.0 or later. Support for earlier versions of both has finally been
254 removed. If you discover it works with unsupported versions, please return
255 your Buildbot to the factory for repairs :-).
257 Buildbot has *not* yet been tested against the recent python-2.5 release. It
258 has been tested against the latest SVN version of Twisted, but only in
259 conjunction with python-2.4 .
261 ** new features
263 *** reconfiguring a Builder no longer causes a disconnect/reconnect cycle
265 This means that sending SIGHUP to the master or running 'buildbot reconfig
266 MASTERDIR' command no longer interrupts any current builds, nor does it lose
267 pending builds like it did before. This involved a fairly substantial
268 refactoring of the various internal BotPerspective/BotMaster/Builder classes.
269 Note that reconfiguring Schedulers still loses any Changes that were waiting
270 for the tree to become stable: hopefully this will be fixed in the next
271 release.
273 *** 'buildbot start/restart/reconfig' now show logs until startup is complete
275 These commands now have additional code to follow twistd.log and display all
276 the lines that are emitted from the beginning of the start/reconfig action
277 until it has completed. This gives you a chance to see any problems detected
278 in the config file without needing to manually look in twistd.log or use
279 another shell to 'tail -f' it. This also makes it clear which config file is
280 being used. This functionality is not available under windows.
282 In addition, if any problems are detected during 'start' or 'restart' (but
283 not reconfig), the buildbot command will terminate with a non-zero exit
284 status, making it easier to use in scripts. Closes SF#1517975.
286 *** Locks now take maxCount=N to allow multiple simultaneous owners
288 This allows Locks to be non-exclusive but still limit maximum concurrency.
289 Thanks to James Knight for the patch. Closes SF#1434997.
291 *** filetransfer steps
293 buildbot.steps.transfer.FileUpload is a buildstep that will move files from
294 the slave to the master. Likewise, FileDownload will move files from the
295 master down to the buildslave. Many thanks to Albert Hofkamp for contributing
296 these classes. Closes SF#1504631.
298 *** pyflakes step
300 buildbot.steps.python.PyFlakes will run the simple 'pyflakes' static analysis
301 tool and parse the results to tell you about undefined names, unused imports,
302 etc. You'll need to tell it how to run pyflakes, usually with something like
303 command=["pyflakes", "src/packagedir"] or the like. The default command is
304 "make pyflakes", which assumes that you have a suitable target in your
305 top-level Makefile.
307 *** Monotone support
309 Nathaniel Smith has contributed initial support for the Monotone version
310 control system. The code still needs docs and tests, but on the other hand it
311 has been in use by the Monotone buildbot for a long time now, so it is
312 probably fairly stable.
314 *** Tinderbox support
316 Ben Hearsum and the Mozilla crew have contributed some classes to allow
317 Buildbot to work with Tinderbox clients. One piece is
318 buildbot.changes.bonsaipoller.BonsaiPoller, which is a ChangeSource that
319 polls a Bonsai server (which is a kind of web-vased viewcvs CGI script) to
320 discover source code changes. The other piece is
321 buildbot.status.tinderbox.TinderboxMailNotifier, which is a status plugin
322 that sends email in the same format as Tinderbox does, which allows a number
323 of Tinderbox tools to be driven by Buildbot instead.
325 *** SVN Poller
327 Niklaus Giger contributed a ChangeSource (buildbot.changes.svnpoller) which
328 polls a remote SVN repository on a periodic basis. This is useful when, for
329 whatever reason, you cannot add a post-commit hook script to the repository.
330 This obsoletes the external contrib/svn_watcher.py script.
332 ** notes for plugin developers
334 *** IStatusLog.readlines()
336 This new method makes it easier for a status plugin (or a
337 BuildStep.createSummary method) to walk through a StatusLog one line at a
338 time. For example, if you wanted to create an extra logfile that just
339 contained all the GCC warnings from the main log, you could use the
340 following:
342     def createSummary(self, log):
343         warnings = []
344         for line in log.readlines():
345             if "warning:" in line:
346                 warnings.append()
347         self.addCompleteLog('warnings', "".join(warnings))
349 The "BuildStep LogFiles" section of the user's manual contains more
350 information. This method is not particularly memory-efficient yet (it reads
351 the whole logfile into memory first, then splits it into lines); this will be
352 improved in a future release.
354 ** bug fixes
356 *** Update source.SVN to work with the new SVN-1.4.0
358 The latest subversion changed the behavior in an unusual situation which
359 caused the unit tests to fail. This was unlikely to cause a problem in actual
360 usage, but the tests have been updated to pass with the new version.
362 *** update svn_buildbot.py to avoid mangling filenames
364 Older versions of this script were stripping the wrong number of columns from
365 the output of 'svnlook changed', and would sometimes mangle filenames. This
366 has been fixed. Closes SF#1545146.
368 *** logfiles= caused subsequent build failures under Windows
370 Earlier versions of buildbot didn't explicitly close any logfiles= file
371 handles when the build finished. On windows (where you cannot delete a file
372 that someone else is reading), this could cause the next build to fail as the
373 source checkout step was unable to delete the old working directory. This has
374 been fixed. Closes SF#1568415.
376 *** logfiles= didn't work on OS-X
378 Macintosh OS-X has a different behavior when reading files that have reached
379 EOF, the result was that logfiles= sometimes didn't work. Thanks to Mark Rowe
380 for the patch.
382 ** other changes
384 The 'buildbot sighup MASTERDIR' command has been replaced with 'buildbot
385 reconfig MASTERDIR', since that seems to be a slightly more meaningful name.
386 The 'sighup' form will remain as an alias.
389 * Release 0.7.4 (23 Aug 2006)
391 ** Things You Need To Know
393 The PBChangeSource's prefix= argument has changed, you probably need to add a
394 slash now. This is mostly used by sites which use Subversion and
395 svn_buildbot.py.
397 The subcommands that are used to create a buildmaster or a buildslave have
398 changed. They used to be called 'buildbot master' and 'buildbot slave'. Now
399 they are called 'buildbot create-master' and 'buildbot create-slave'. Zipf's
400 Law suggests that these are more appropriate names for these
401 infrequently-used commands.
403 The syntax for the c['manhole'] feature has changed.
405 ** new features
407 *** full Perforce support
409 SF#1473939: large patch from Scott Lamb, with docs and unit tests! This
410 includes both the step.P4 source-checkout BuildStep, and the changes.p4poller
411 ChangeSource you'll want to feed it. P4 is now supported just as well as all
412 the other VC systems. Thanks Scott!
414 *** SSH-based Manhole
416 The 'manhole' feature allows buildbot developers to get access to a python
417 read/eval/print loop (REPL) inside the buildmaster through a network
418 connection. Previously, this ran over unencrypted telnet, using a simple
419 username/password for access control. The new release defaults to encrypted
420 SSH access, using either username/password or an authorized_keys file (just
421 like sshd). There also exists an unencrypted telnet form, but its use is
422 discouraged. The syntax for setting up a manhole has changed, so master.cfg
423 files that use them must be updated. The "Debug options" section in the
424 user's manual provides a complete description.
426 *** Multiple Logfiles
428 BuildSteps can watch multiple log files in realtime, not just stdout/stderr.
429 This works in a similar fashion to 'tail -f': the file is polled once per
430 second, and any new data is sent to the buildmaster.
432 This requires a buildslave running 0.7.4 or later, and a warning message is
433 produced if used against an old buildslave (which will otherwise produce no
434 data). Use "logfiles={'name': 'filename'}" to take advantage of this feature
435 from master.cfg, and see the "ShellCommand" section of the user's manual for
436 full documentation.
438 The 'Trial' buildstep has been updated to use this, to display
439 _trial_temp/test.log in realtime. It also knows to fall back to the previous
440 "cat" command if the buildslave is too old.
442 *** BuildStep URLs
444 BuildSteps can now add arbitrary URLs which will be displayed on the
445 Waterfall page in the same place that Logs are presented. This is intended to
446 provide a link to generated HTML pages, such as the output of a code coverage
447 tool. The step is responsible for somehow uploading the HTML to a web server:
448 this feature merely provides an easy way to present the HREF link to the
449 user. See the "BuildStep URLs" section of the user's manual for details and
450 examples.
452 *** LogObservers
454 BuildSteps can now attach LogObservers to various logfiles, allowing them to
455 get real-time log output. They can use this to watch for progress-indicating
456 events (like counting the number of files compiled, or the number of tests
457 which have run), and update both ETA/progress-tracking and step text. This
458 allows for more accurate ETA information, and more information passed to the
459 user about how much of the process has completed.
461 The 'Trial' buildstep has been updated to use this for progress tracking, by
462 counting how many test cases have run.
464 ** new documentation
466 What classes are useful in your master.cfg file? A table of them has been
467 added to the user's manual, in a section called "Index of Useful Classes".
469 Want a list of all the keys in master.cfg? Look in the "Index of master.cfg
470 keys" section.
472 A number of pretty diagrams have been added to the "System Architecture"
473 portion of the manual, explaining how all the buildbot pieces fit together.
475 An HTML form of the user's manual is now shipped in the source tarball. This
476 makes it a bit bigger: sorry about that. The old PyCon-2003 paper has been
477 removed from the distribution, as it is mostly supplanted by the user's
478 manual by this point.
480 ** bugfixes
482 SF#1217699 + SF#1381867: The prefix= argument to PBChangeSource has been
483 changed: now it does just a simple string-prefix match and strip. The
484 previous behavior was buggy and unhelpful. NOTE: if you were using prefix=
485 before, you probably need to add a slash to the end of it.
487 SF#1398174: ignore SVN property changes better, fixed by Olivier Bonnet
489 SF#1452801: don't double-escape the build URL, fixed by Olivier Bonnet
491 SF#1401121: add support for running py2exe on windows, by Mark Hammond
493 reloading unchanged config files with WithProperties shouldn't change anything.
495 All svn commands now include --non-interactive so they won't ask for
496 passwords. Instead, the command will fail if it cannot be performed without
497 user input.
499 Deprecation warnings with newer versions of Twisted have been hushed.
501 ** compatibility
503 I haven't actually removed support for Twisted-1.3.0 yet, but I'd like to.
505 The step_twisted default value for --reporter matches modern Twisteds,
506 though, and won't work under 1.3.0.
508 ShellCommand.flunkOnFailure now defaults to True, so any shell command which
509 fails counts as a build failure. Set this to False if you don't want this
510 behavior.
512 ** minor features
514 contrib/darcs_buildbot.py contains a new script suitable for use in a darcs
515 commit-hook.
517 Hovering a cursor over the yellow "Build #123" box in the Waterfall display
518 will pop up an HTML tooltip to show the reason for the build. Thanks to Zandr
519 Milewski for the suggestion.
521 contrib/CSS/*.css now contains several contributed stylesheets to make the
522 Waterfall display a bit less ugly. Thanks to John O'Duinn for gathering them.
524 ShellCommand and its derivatives can now accept either a string or a list of
525 strings in the description= and descriptionDone= arguments. Thanks to Paul
526 Winkler for the catch.
529 * Release 0.7.3 (23 May 2006)
531 ** compatibility
533 This release is compatible with Twisted-1.3.0, but the next one will not be.
534 Please upgrade to at least Twisted-2.0.x soon, as the next buildbot release
535 will require it.
537 ** new features
539 *** Mercurial support
541 Support for Mercurial version control system (http://selenic.com/mercurial)
542 has been added. This adds a buildbot.process.step.Mercurial BuildStep. A
543 suitable hook script to deliver changes to the buildmaster is still missing.
545 *** 'buildbot restart' command
547 The 'buildbot restart BASEDIR' command will perform a 'buildbot stop' and
548 'buildbot start', and will attempt to wait for the buildbot process to shut
549 down in between. This is useful when you need to upgrade the code on your
550 buildmaster or buildslave and want to take it down for a minimum amount of
551 time.
553 *** build properties
555 Each build now has a set of named "Build Properties", which can be set by
556 steps and interpolated into ShellCommands. The 'revision' and 'got_revision'
557 properties are the most interesting ones available at this point, and can be
558 used e.g. to get the VC revision number into the filename of a generated
559 tarball. See the user's manual section entited "Build Properties" for more
560 details.
562 ** minor features
564 *** IRC now takes password= argument
566 Useful for letting your bot claim a persistent identity.
568 *** svn_buildbot.py is easier to modify to understand branches
569 *** BuildFactory has a new .addStep method
570 *** p4poller has new arguments
571 *** new contrib scripts: viewcvspoll, svnpoller, svn_watcher
573 These poll an external VC repository to watch for changes, as opposed to
574 adding a hook script to the repository that pushes changes into the
575 buildmaster. This means higher latency but may be easier to configure,
576 especially if you do not have authority on the repository host.
578 *** VC build property 'got_revision'
580 The 'got_revision' property reports what revision a VC step actually
581 acquired, which may be useful to know when building from HEAD.
583 *** improved CSS in Waterfall
585 The Waterfall display has a few new class= tags, which may make it easier to
586 write custom CSS to make it look prettier.
588 *** robots_txt= argument in Waterfall
590 You can now pass a filename to the robots_txt= argument, which will be served
591 as the "robots.txt" file. This can be used to discourage search engine
592 spiders from crawling through the numerous build-status pages.
594 ** bugfixes
596 *** tests more likely to pass on non-English systems
598 The unit test suite now sets $LANG='C' to make subcommands emit error
599 messages in english instead of whatever native language is in use on the
600 host. This improves the chances that the unit tests will pass on such
601 systems. This affects certain VC-related subcommands too.
603 test_vc was assuming that the system time was expressed with a numeric
604 timezone, which is not always the case, especially under windows. This
605 probably works better now than it did before. This only affects the CVS
606 tests.
608 'buildbot try' (for CVS) now uses UTC instead of the local timezone. The
609 'got_revision' property is also expressed in UTC. Both should help deal with
610 buggy versions of CVS that don't parse numeric timezones properly.
613 * Release 0.7.2 (17 Feb 2006)
615 ** new features
617 *** all TCP port numbers in config file now accept a strports string
619 Sometimes it is useful to restrict certain TCP ports that the buildmaster
620 listens on to use specific network interfaces. In particular, if the
621 buildmaster and SVN repository live on the same machine, you may want to
622 restrict the PBChangeSource to only listen on the loopback interface,
623 insuring that no external entities can inject Changes into the buildbot.
624 Likewise, if you are using something like Apache's reverse-proxy feature to
625 provide access to the buildmaster's HTML status page, you might want to hide
626 the real Waterfall port by having it only bind to the loopback interface.
628 To accomplish this, use a string like "tcp:12345:interface=127.0.0.1" instead
629 of a number like 12345. These strings are called "strports specification
630 strings", and are documented in twisted's twisted.application.strports module
631 (you can probably type 'pydoc twisted.application.strports' to see this
632 documentation). Pretty much everywhere the buildbot takes a port number will
633 now accept a strports spec, and any bare numbers are translated into TCP port
634 numbers (listening on all network interfaces) for compatibility.
636 *** buildslave --umask control
638 Twisted's daemonization utility (/usr/bin/twistd) automatically sets the
639 umask to 077, which means that all files generated by both the buildmaster
640 and the buildslave will only be readable by the account under which the
641 respective daemon is running. This makes it unnecessarily difficult to share
642 build products (e.g. by symlinking ~/public_html/current_docs/ to a directory
643 within the slave's build directory where each build puts the results of a
644 "make docs" step).
646 The 'buildbot slave <PARAMS>' command now accepts a --umask argument, which
647 can be used to override the umask set by twistd. If you create the buildslave
648 with '--umask=022', then all build products will be world-readable, making it
649 easier for other processes (run under other accounts) to access them.
651 ** bug fixes
653 The 0.7.1 release had a bug whereby reloading the config file could break all
654 configured Schedulers, causing them to raise an exception when new changes
655 arrived but not actually schedule a new build. This has been fixed.
657 Fixed a bug which caused the AnyBranchScheduler to explode when branch==None.
658 Thanks to Kevin Turner for the catch. I also think I fixed a bug whereby the
659 TryScheduler would explode when it was given a Change (which it is supposed
660 to simply ignore).
662 The Waterfall display now does more quoting of names (including Builder
663 names, BuildStep names, etc), so it is more likely that these names can
664 contain unusual characters like spaces, quotes, and slashes. There may still
665 be some problems with these kinds of names, however.. please report any bugs
666 to the mailing list.
669 * Release 0.7.1 (26 Nov 2005)
671 ** new features
673 *** scheduler.Nightly
675 Dobes Vandermeer contributed a cron-style 'Nightly' scheduler. Unlike the
676 more-primitive Periodic class (which only lets you specify the duration
677 between build attempts), Nightly lets you schedule builds for specific times
678 of day, week, month, or year. The interface is very much like the crontab(5)
679 file. See the buildbot.scheduler.Nightly docstring for complete details.
681 ** minor new features
683 *** step.Trial can work with Trial from Twisted >2.1.0
685 The 'Trial' step now accepts the trialMode= argument, which should be a list
686 of strings to be added to trial's argv array. This defaults to ["-to"], which
687 is appropriate for the Trial that ships in Twisted-2.1.0 and earlier, and
688 tells Trial to emit non-colorized verbose output. To use this step with
689 trials from later versions of Twisted, this should be changed to
690 ["--reporter=bwverbose"].
692 In addition, you can now set other Trial command-line parameters through the
693 trialArgs= argument. This is a list of strings, and defaults to an empty list.
695 *** Added a 'resubmit this build' button to the web page
697 *** Make the VC-checkout step's description more useful
699 Added the word "[branch]" to the VC step's description (used in the Step's
700 box on the Waterfall page, among others) when we're checking out a
701 non-default branch. Also add "rNNN" where appropriate to indicate which
702 revision is being checked out. Thanks to Brad Hards and Nathaniel Smith for
703 the suggestion.
705 ** bugs fixed
707 Several patches from Dobes Vandermeer: Escape the URLs in email, in case they
708 have spaces and such. Fill otherwise-empty <td> elements, as a workaround for
709 buggy browsers that might optimize them away. Also use binary mode when
710 opening status pickle files, to make windows work better. The
711 AnyBranchScheduler now works even when you don't provide a fileIsImportant=
712 argument.
714 Stringify the base revision before stuffing it into a 'try' jobfile, helping
715 SVN and Arch implement 'try' builds better. Thanks to Steven Walter for the
716 patch.
718 Fix the compare_attrs list in PBChangeSource, FreshCVSSource, and Waterfall.
719 Before this, certain changes to these objects in the master.cfg file were
720 ignored, such that you would have to stop and re-start the buildmaster to
721 make them take effect.
723 The config file is now loaded serially, shutting down old (or replaced)
724 Status/ChangeSource plugins before starting new ones. This fixes a bug in
725 which changing an aspect of, say, the Waterfall display would cause an
726 exception as both old and new instances fight over the same TCP port. This
727 should also fix a bug whereby new Periodic Schedulers could fire a build
728 before the Builders have finished being added.
730 There was a bug in the way Locks were handled when the config file was
731 reloaded: changing one Builder (but not the others) and reloading master.cfg
732 would result in multiple instances of the same Lock object, so the Locks
733 would fail to prevent simultaneous execution of Builds or Steps. This has
734 been fixed.
736 ** other changes
738 For a long time, certain StatusReceiver methods (like buildStarted and
739 stepStarted) have been able to return another StatusReceiver instance
740 (usually 'self') to indicate that they wish to subscribe to events within the
741 new object. For example, if the buildStarted() method returns 'self', the
742 status receiver will also receive events for the new build, like
743 stepStarted() and buildETAUpdate(). Returning a 'self' from buildStarted() is
744 equivalent to calling build.subscribe(self).
746 Starting with buildbot-0.7.1, this auto-subscribe convenience will also
747 register to automatically unsubscribe the target when the build or step has
748 finished, just as if build.unsubscribe(self) had been called. Also, the
749 unsubscribe() method has been changed to not explode if the same receiver is
750 unsubscribed multiple times. (note that it will still explode is the same
751 receiver is *subscribed* multiple times, so please continue to refrain from
752 doing that).
755 * Release 0.7.0 (24 Oct 2005)
757 ** new features
759 *** new c['schedulers'] config-file element (REQUIRED)
761 The code which decides exactly *when* a build is performed has been massively
762 refactored, enabling much more flexible build scheduling. YOU MUST UPDATE
763 your master.cfg files to match: in general this will merely require you to
764 add an appropriate c['schedulers'] entry. Any old ".treeStableTime" settings
765 on the BuildFactory instances will now be ignored. The user's manual has
766 complete details with examples of how the new Scheduler classes work.
768 *** c['interlocks'] removed, Locks and Dependencies now separate items
770 The c['interlocks'] config element has been removed, and its functionality
771 replaced with two separate objects. Locks are used to tell the buildmaster
772 that certain Steps or Builds should not run at the same time as other Steps
773 or Builds (useful for test suites that require exclusive access to some
774 external resource: of course the real fix is to fix the tests, because
775 otherwise your developers will be suffering from the same limitations). The
776 Lock object is created in the config file and then referenced by a Step
777 specification tuple or by the 'locks' key of the Builder specification
778 dictionary. Locks come in two flavors: MasterLocks are buildmaster-wide,
779 while SlaveLocks are specific to a single buildslave.
781 When you want to have one Build run or not run depending upon whether some
782 other set of Builds have passed or failed, you use a special kind of
783 Scheduler defined in the scheduler.Dependent class. This scheduler watches an
784 upstream Scheduler for builds of a given source version to complete, and only
785 fires off its own Builders when all of the upstream's Builders have built
786 that version successfully.
788 Both features are fully documented in the user's manual.
790 *** 'buildbot try'
792 The 'try' feature has finally been added. There is some configuration
793 involved, both in the buildmaster config and on the developer's side, but
794 once in place this allows the developer to type 'buildbot try' in their
795 locally-modified tree and to be given a report of what would happen if their
796 changes were to be committed. This works by computing a (base revision,
797 patch) tuple that describes the developer's tree, sending that to the
798 buildmaster, then running a build with that source on a given set of
799 Builders. The 'buildbot try' tool then emits status messages until the builds
800 have finished.
802 'try' exists to allow developers to run cross-platform tests on their code
803 before committing it, reducing the chances they will inconvenience other
804 developers by breaking the build. The UI is still clunky, but expect it to
805 change and improve over the next few releases.
807 Instructions for developers who want to use 'try' (and the configuration
808 changes necessary to enable its use) are in the user's manual.
810 *** Build-On-Branch
812 When suitably configured, the buildbot can be used to build trees from a
813 variety of related branches. You can set up Schedulers to build a tree using
814 whichever branch was last changed, or users can request builds of specific
815 branches through IRC, the web page, or (eventually) the CLI 'buildbot force'
816 subcommand.
818 The IRC 'force' command now takes --branch and --revision arguments (not that
819 they always make sense). Likewise the HTML 'force build' button now has an
820 input field for branch and revision. Your build's source-checkout step must
821 be suitably configured to support this: for SVN it involves giving both a
822 base URL and a default branch. Other VC systems are configured differently.
823 The ChangeSource must also provide branch information: the 'buildbot
824 sendchange' command now takes a --branch argument to help hook script writers
825 accomplish this.
827 *** Multiple slaves per Builder
829 You can now attach multiple buildslaves to each Builder. This can provide
830 redundancy or primitive load-balancing among many machines equally capable of
831 running the build. To use this, define a key in the Builder specification
832 dictionary named 'slavenames' with a list of buildslave names (instead of the
833 usual 'slavename' that contains just a single slavename).
835 *** minor new features
837 The IRC and email status-reporting facilities now provide more specific URLs
838 for particular builds, in addition to the generic buildmaster home page. The
839 HTML per-build page now has more information.
841 The Twisted-specific test classes have been modified to match the argument
842 syntax preferred by Trial as of Twisted-2.1.0 and newer. The generic trial
843 steps are still suitable for the Trial that comes with older versions of
844 Twisted, but may produce deprecation warnings or errors when used with the
845 latest Trial.
847 ** bugs fixed
849 DNotify, used by the maildir-watching ChangeSources, had problems on some
850 64-bit systems relating to signed-vs-unsigned constants and the DN_MULTISHOT
851 flag. A workaround was provided by Brad Hards.
853 The web status page should now be valid XHTML, thanks to a patch by Brad
854 Hards. The charset parameter is specified to be UTF-8, so VC comments,
855 builder names, etc, should probably all be in UTF-8 to be displayed properly.
857 ** creeping version dependencies
859 The IRC 'force build' command now requires python2.3 (for the shlex.split
860 function).
863 * Release 0.6.6 (23 May 2005)
865 ** bugs fixed
867 The 'sendchange', 'stop', and 'sighup' subcommands were broken, simple bugs
868 that were not caught by the test suite. Sorry.
870 The 'buildbot master' command now uses "raw" strings to create .tac files
871 that will still function under windows (since we must put directory names
872 that contain backslashes into that file).
874 The keep-on-disk behavior added in 0.6.5 included the ability to upgrade old
875 in-pickle LogFile instances. This upgrade function was not added to the
876 HTMLLogFile class, so an exception would be raised when attempting to load or
877 display any build with one of these logs (which are normally used only for
878 showing build exceptions). This has been fixed.
880 Several unnecessary imports were removed, so the Buildbot should function
881 normally with just Twisted-2.0.0's "Core" module installed. (of course you
882 will need TwistedWeb, TwistedWords, and/or TwistedMail if you use status
883 targets that require them). The test suite should skip all tests that cannot
884 be run because of missing Twisted modules.
886 The master/slave's basedir is now prepended to sys.path before starting the
887 daemon. This used to happen implicitly (as a result of twistd's setup
888 preamble), but 0.6.5 internalized the invocation of twistd and did not copy
889 this behavior. This change restores the ability to access "private.py"-style
890 modules in the basedir from the master.cfg file with a simple "import
891 private" statement. Thanks to Thomas Vander Stichele for the catch.
894 * Release 0.6.5 (18 May 2005)
896 ** deprecated config keys removed
898 The 'webPortnum', 'webPathname', 'irc', and 'manholePort' config-file keys,
899 which were deprecated in the previous release, have now been removed. In
900 addition, Builders must now always be configured with dictionaries: the
901 support for configuring them with tuples has been removed.
903 ** master/slave creation and startup changed
905 The buildbot no longer uses .tap files to store serialized representations of
906 the buildmaster/buildslave applications. Instead, this release now uses .tac
907 files, which are human-readable scripts that create new instances (rather
908 than .tap files, which were pickles of pre-created instances). 'mktap
909 buildbot' is gone.
911 You will need to update your buildbot directories to handle this. The
912 procedure is the same as creating a new buildmaster or buildslave: use
913 'buildbot master BASEDIR' or 'buildbot slave BASEDIR ARGS..'. This will
914 create a 'buildbot.tac' file in the target directory. The 'buildbot start
915 BASEDIR' will use twistd to start the application.
917 The 'buildbot start' command now looks for a Makefile.buildbot, and if it
918 finds one (and /usr/bin/make exists), it will use it to start the application
919 instead of calling twistd directly. This allows you to customize startup,
920 perhaps by adding environment variables. The setup commands create a sample
921 file in Makefile.sample, but you must copy this to Makefile.buildbot to
922 actually use it. The previous release looked for a bare 'Makefile', and also
923 installed a 'Makefile', so you were always using the customized approach,
924 even if you didn't ask for it. That old Makefile launched the .tap file, so
925 changing names was also necessary to make sure that the new 'buildbot start'
926 doesn't try to run the old .tap file.
928 'buildbot stop' now uses os.kill instead of spawning an external process,
929 making it more likely to work under windows. It waits up to 5 seconds for the
930 daemon to go away, so you can now do 'buildbot stop BASEDIR; buildbot start
931 BASEDIR' with less risk of launching the new daemon before the old one has
932 fully shut down. Likewise, 'buildbot start' imports twistd's internals
933 directly instead of spawning an external copy, so it should work better under
934 windows.
936 ** new documentation
938 All of the old Lore-based documents were converted into a new Texinfo-format
939 manual, and considerable new text was added to describe the installation
940 process. The docs are not yet complete, but they're slowly shaping up to form
941 a proper user's manual.
943 ** new features
945 Arch checkouts can now use precise revision stamps instead of always using
946 the latest revision. A separate Source step for using Bazaar (an alternative
947 Arch client) instead of 'tla' was added. A Source step for Cogito (the new
948 linux kernel VC system) was contributed by Brandon Philips. All Source steps
949 now accept a retry= argument to indicate that failing VC checkouts should be
950 retried a few times (SF#1200395), note that this requires an updated
951 buildslave.
953 The 'buildbot sendchange' command was added, to be used in VC hook scripts to
954 send changes at a pb.PBChangeSource . contrib/arch_buildbot.py was added to
955 use this tool; it should be installed using the 'Arch meta hook' scheme.
957 Changes can now accept a branch= parameter, and Builders have an
958 isBranchImportant() test that acts like isFileImportant(). Thanks to Thomas
959 Vander Stichele. Note: I renamed his tag= to branch=, in anticipation of an
960 upcoming feature to build specific branches. "tag" seemed too CVS-centric.
962 LogFiles have been rewritten to stream the incoming data directly to disk
963 rather than keeping a copy in memory all the time (SF#1200392). This
964 drastically reduces the buildmaster's memory requirements and makes 100MB+
965 log files feasible. The log files are stored next to the serialized Builds,
966 in files like BASEDIR/builder-dir/12-log-compile-output, so you'll want a
967 cron job to delete old ones just like you do with old Builds. Old-style
968 Builds from 0.6.4 and earlier are converted when they are first read, so the
969 first load of the Waterfall display after updating to this release may take
970 quite some time.
972 ** build process updates
974 BuildSteps can now return a status of EXCEPTION, which terminates the build
975 right away. This allows exceptions to be caught right away, but still make
976 sure the build stops quickly.
978 ** bug fixes
980 Some more windows incompatibilities were fixed. The test suite now has two
981 failing tests remaining, both of which appear to be Twisted issues that
982 should not affect normal operation.
984 The test suite no longer raises any deprecation warnings when run against
985 twisted-2.0 (except for the ones which come from Twisted itself).
988 * Release 0.6.4 (28 Apr 2005)
990 ** major bugs fixed
992 The 'buildbot' tool in 0.6.3, when used to create a new buildmaster, failed
993 unless it found a 'changes.pck' file. As this file is created by a running
994 buildmaster, this made 0.6.3 completely unusable for first-time
995 installations. This has been fixed.
997 ** minor bugs fixed
999 The IRC bot had a bug wherein asking it to watch a certain builder (the "I'll
1000 give a shout when the build finishes" message) would cause an exception, so
1001 it would not, in fact, shout. The HTML page had an exception in the "change
1002 sources" page (reached by following the "Changes" link at the top of the
1003 column that shows the names of commiters). Re-loading the config file while
1004 builders were already attached would result in a benign error message. The
1005 server side of the PBListener status client had an exception when providing
1006 information about a non-existent Build (e.g., when the client asks for the
1007 Build that is currently running, and the server says "None").
1009 These bugs have all been fixed.
1011 The unit tests now pass under python2.2; they were failing before because of
1012 some 2.3isms that crept in. More unit tests which failed under windows now
1013 pass, only one (test_webPathname_port) is still failing.
1015 ** 'buildbot' tool looks for a .buildbot/options file
1017 The 'statusgui' and the 'debugclient' subcommands can both look for a
1018 .buildbot/ directory, and an 'options' file therein, to extract default
1019 values for the location of the buildmaster. This directory is searched in the
1020 current directory, its parent, etc, all the way up to the filesystem root
1021 (assuming you own the directories in question). It also look in ~/.buildbot/
1022 for this file. This feature allows you to put a .buildbot at the top of your
1023 working tree, telling any 'buildbot' invocations you perform therein how to
1024 get to the buildmaster associated with that tree's project.
1026 Windows users get something similar, using %APPDATA%/buildbot instead of
1027 ~/.buildbot .
1029 ** windows ShellCommands are launched with 'cmd.exe'
1031 The buildslave has been modified to run all list-based ShellCommands by
1032 prepending [os.environ['COMSPEC'], '/c'] to the argv list before execution.
1033 This should allow the buildslave's PATH to be searched for commands,
1034 improving the chances that it can run the same 'trial -o foo' commands as a
1035 unix buildslave. The potential downside is that spaces in argv elements might
1036 be re-parsed, or quotes might be re-interpreted. The consensus on the mailing
1037 list was that this is a useful thing to do, but please report any problems
1038 you encounter with it.
1040 ** minor features
1042 The Waterfall display now shows the buildbot's home timezone at the top of
1043 the timestamp column. The default favicon.ico is now much nicer-looking (it
1044 is generated with Blender.. the icon.blend file is available in CVS in
1045 docs/images/ should you care to play with it).
1049 * Release 0.6.3 (25 Apr 2005)
1051 ** 'buildbot' tool gets more uses
1053 The 'buildbot' executable has acquired three new subcommands. 'buildbot
1054 debugclient' brings up the small remote-control panel that connects to a
1055 buildmaster (via the slave port and the c['debugPassword']). This tool,
1056 formerly in contrib/debugclient.py, lets you reload the config file, force
1057 builds, and simulate inbound commit messages. It requires gtk2, glade, and
1058 the python bindings for both to be installed.
1060 'buildbot statusgui' brings up a live status client, formerly available by
1061 running buildbot/clients/gtkPanes.py as a program. This connects to the PB
1062 status port that you create with:
1064   c['status'].append(client.PBListener(portnum))
1066 and shows two boxes per Builder, one for the last build, one for current
1067 activity. These boxes are updated in realtime. The effect is primitive, but
1068 is intended as an example of what's possible with the PB status interface.
1070 'buildbot statuslog' provides a text-based running log of buildmaster events.
1072 Note: command names are subject to change. These should get much more useful
1073 over time.
1075 ** web page has a favicon
1077 When constructing the html.Waterfall instance, you can provide the filename
1078 of an image that will be provided when the "favicon.ico" resource is
1079 requested. Many web browsers display this as an icon next to the URL or
1080 bookmark. A goofy little default icon is included.
1082 ** web page has CSS
1084 Thanks to Thomas Vander Stichele, the Waterfall page is now themable through
1085 CSS. The default CSS is located in buildbot/status/classic.css, and creates a
1086 page that is mostly identical to the old, non-CSS based table.
1088 You can specify a different CSS file to use by passing it as the css=
1089 argument to html.Waterfall(). See the docstring for Waterfall for some more
1090 details.
1092 ** builder "categories"
1094 Thomas has added code which places each Builder in an optional "category".
1095 The various status targets (Waterfall, IRC, MailNotifier) can accept a list
1096 of categories, and they will ignore any activity in builders outside this
1097 list. This makes it easy to create some Builders which are "experimental" or
1098 otherwise not yet ready for the world to see, or indicate that certain
1099 builders should not harass developers when their tests fail, perhaps because
1100 the build slaves for them are not yet fully functional.
1102 ** Deprecated features
1104 *** defining Builders with tuples is deprecated
1106 For a long time, the preferred way to define builders in the config file has
1107 been with a dictionary. The less-flexible old style of a 4-item tuple (name,
1108 slavename, builddir, factory) is now officially deprecated (i.e., it will
1109 emit a warning if you use it), and will be removed in the next release.
1110 Dictionaries are more flexible: additional keys like periodicBuildTime are
1111 simply unavailable to tuple-defined builders.
1113 Note: it is a good idea to watch the logfile (usually in twistd.log) when you
1114 first start the buildmaster, or whenever you reload the config file. Any
1115 warnings or errors in the config file will be found there.
1117 *** c['webPortnum'], c['webPathname'], c['irc'] are deprecated
1119 All status reporters should be defined in the c['status'] array, using
1120 buildbot.status.html.Waterfall or buildbot.status.words.IRC . These have been
1121 deprecated for a while, but this is fair warning that these keys will be
1122 removed in the next release.
1124 *** c['manholePort'] is deprecated
1126 Again, this has been deprecated for a while, in favor of:
1128  c['manhole'] = master.Manhole(port, username, password)
1130 The preferred syntax will eventually let us use other, better kinds of debug
1131 shells, such as the experimental curses-based ones in the Twisted sandbox
1132 (which would offer command-line editing and history).
1134 ** bug fixes
1136 The waterfall page has been improved a bit. A circular-reference bug in the
1137 web page's TextLog class was fixed, which caused a major memory leak in a
1138 long-running buildmaster with large logfiles that are viewed frequently.
1139 Modifying the config file in a way which only changed a builder's base
1140 directory now works correctly. The 'buildbot' command tries to create
1141 slightly more useful master/slave directories, adding a Makefile entry to
1142 re-create the .tap file, and removing global-read permissions from the files
1143 that may contain buildslave passwords.
1145 ** twisted-2.0.0 compatibility
1147 Both buildmaster and buildslave should run properly under Twisted-2.0 . There
1148 are still some warnings about deprecated functions, some of which could be
1149 fixed, but there are others that would require removing compatibility with
1150 Twisted-1.3, and I don't expect to do that until 2.0 has been out and stable
1151 for at least several months. The unit tests should pass under 2.0, whereas
1152 the previous buildbot release had tests which could hang when run against the
1153 new "trial" framework in 2.0.
1155 The Twisted-specific steps (including Trial) have been updated to match 2.0
1156 functionality.
1158 ** win32 compatibility
1160 Thankt to Nick Trout, more compatibility fixes have been incorporated,
1161 improving the chances that the unit tests will pass on windows systems. There
1162 are still some problems, and a step-by-step "running buildslaves on windows"
1163 document would be greatly appreciated.
1165 ** API docs
1167 Thanks to Thomas Vander Stichele, most of the docstrings have been converted
1168 to epydoc format. There is a utility in docs/gen-reference to turn these into
1169 a tree of cross-referenced HTML pages. Eventually these docs will be
1170 auto-generated and somehow published on the buildbot web page.
1174 * Release 0.6.2 (13 Dec 2004)
1176 ** new features
1178 It is now possible to interrupt a running build. Both the web page and the
1179 IRC bot feature 'stop build' commands, which can be used to interrupt the
1180 current BuildStep and accelerate the termination of the overall Build. The
1181 status reporting for these still leaves something to be desired (an
1182 'interrupt' event is pushed into the column, and the reason for the interrupt
1183 is added to a pseudo-logfile for the step that was stopped, but if you only
1184 look at the top-level status it appears that the build failed on its own).
1186 Builds are also halted if the connection to the buildslave is lost. On the
1187 slave side, any active commands are halted if the connection to the
1188 buildmaster is lost.
1190 ** minor new features
1192 The IRC log bot now reports ETA times in a MMSS format like "2m45s" instead
1193 of the clunky "165 seconds".
1195 ** bug fixes
1197 *** Slave Disconnect
1199 Slave disconnects should be handled better now: the current build should be
1200 abandoned properly. Earlier versions could get into weird states where the
1201 build failed to finish, clogging the builder forever (or at least until the
1202 buildmaster was restarted).
1204 In addition, there are weird network conditions which could cause a
1205 buildslave to attempt to connect twice to the same buildmaster. This can
1206 happen when the slave is sending large logfiles over a slow link, while using
1207 short keepalive timeouts. The buildmaster has been fixed to allow the second
1208 connection attempt to take precedence over the first, so that the older
1209 connection is jettisoned to make way for the newer one.
1211 In addition, the buildslave has been fixed to be less twitchy about timeouts.
1212 There are now two parameters: keepaliveInterval (which is controlled by the
1213 mktap 'keepalive' argument), and keepaliveTimeout (which requires editing the
1214 .py source to change from the default of 30 seconds). The slave expects to
1215 see *something* from the master at least once every keepaliveInterval
1216 seconds, and will try to provoke a response (by sending a keepalive request)
1217 'keepaliveTimeout' seconds before the end of this interval just in case there
1218 was no regular traffic. Any kind of traffic will qualify, including
1219 acknowledgements of normal build-status updates.
1221 The net result is that, as long as any given PB message can be sent over the
1222 wire in less than 'keepaliveTimeout' seconds, the slave should not mistakenly
1223 disconnect because of a timeout. There will be traffic on the wire at least
1224 every 'keepaliveInterval' seconds, which is what you want to pay attention to
1225 if you're trying to keep an intervening NAT box from dropping what it thinks
1226 is an abandoned connection. A quiet loss of connection will be detected
1227 within 'keepaliveInterval' seconds.
1229 *** Large Logfiles
1231 The web page rendering code has been fixed to deliver large logfiles in
1232 pieces, using a producer/consumer apparatus. This avoids the large spike in
1233 memory consumption when the log file body was linearized into a single string
1234 and then buffered in the socket's application-side transmit buffer. This
1235 should also avoid the 640k single-string limit for web.distrib servers that
1236 could be hit by large (>640k) logfiles.
1240 * Release 0.6.1 (23 Nov 2004)
1242 ** win32 improvements/bugfixes
1244 Several changes have gone in to improve portability to non-unix systems. It
1245 should be possible to run a build slave under windows without major issues
1246 (although step-by-step documentation is still greatly desired: check the
1247 mailing list for suggestions from current win32 users).
1249 *** PBChangeSource: use configurable directory separator, not os.sep
1251 The PBChangeSource, which listens on a TCP socket for change notices
1252 delivered from tools like contrib/svn_buildbot.py, was splitting source
1253 filenames with os.sep . This is inappropriate, because those file names are
1254 coming from the VC repository, not the local filesystem, and the repository
1255 host may be running a different OS (with a different separator convention)
1256 than the buildmaster host. In particular, a win32 buildmaster using a CVS
1257 repository running on a unix box would be confused.
1259 PBChangeSource now takes a sep= argument to indicate the separator character
1260 to use.
1262 *** build saving should work better
1264 windows cannot do the atomic os.rename() trick that unix can, so under win32
1265 the buildmaster falls back to save/delete-old/rename, which carries a slight
1266 risk of losing a saved build log (if the system were to crash between the
1267 delete-old and the rename).
1269 ** new features
1271 *** test-result tracking
1273 Work has begun on fine-grained test-result handling. The eventual goal is to
1274 be able to track individual tests over time, and create problem reports when
1275 a test starts failing (which then are resolved when the test starts passing
1276 again). The first step towards this is an ITestResult interface, and code in
1277 the TrialTestParser to create such results for all non-passing tests (the
1278 ones for which Trial emits exception tracebacks).
1280 These test results are currently displayed in a tree-like display in a page
1281 accessible from each Build's page (follow the numbered link in the yellow
1282 box at the start of each build to get there).
1284 This interface is still in flux, as it really wants to be able to accomodate
1285 things like compiler warnings and tests that are skipped because of missing
1286 libraries or unsupported architectures.
1288 ** bug fixes
1290 *** VC updates should survive temporary failures
1292 Some VC systems (CVS and SVN in particular) get upset when files are turned
1293 into directories or vice versa, or when repository items are moved without
1294 the knowledge of the VC system. The usual symptom is that a 'cvs update'
1295 fails where a fresh checkout succeeds.
1297 To avoid having to manually intervene, the build slaves' VC commands have
1298 been refactored to respond to update failures by deleting the tree and
1299 attempting a full checkout. This may cause some unnecessary effort when,
1300 e.g., the CVS server falls off the net, but in the normal case it will only
1301 come into play when one of these can't-cope situations arises.
1303 *** forget about an existing build when the slave detaches
1305 If the slave was lost during a build, the master did not clear the
1306 .currentBuild reference, making that builder unavailable for later builds.
1307 This has been fixed, so that losing a slave should be handled better. This
1308 area still needs some work, I think it's still possible to get both the
1309 slave and the master wedged by breaking the connection at just the right
1310 time. Eventually I want to be able to resume interrupted builds (especially
1311 when the interruption is the result of a network failure and not because the
1312 slave or the master actually died).
1314 *** large logfiles now consume less memory
1316 Build logs are stored as lists of (type,text) chunks, so that
1317 stdout/stderr/headers can be displayed differently (if they were
1318 distinguishable when they were generated: stdout and stderr are merged when
1319 usePTY=1). For multi-megabyte logfiles, a large list with many short strings
1320 could incur a large overhead. The new behavior is to merge same-type string
1321 chunks together as they are received, aiming for a chunk size of about 10kb,
1322 which should bring the overhead down to a more reasonable level.
1324 There remains an issue with actually delivering large logfiles over, say,
1325 the HTML interface. The string chunks must be merged together into a single
1326 string before delivery, which causes a spike in the memory usage when the
1327 logfile is viewed. This can also break twisted.web.distrib -type servers,
1328 where the underlying PB protocol imposes a 640k limit on the size of
1329 strings. This will be fixed (with a proper Producer/Consumer scheme) in the
1330 next release.
1333 * Release 0.6.0 (30 Sep 2004)
1335 ** new features
1337 *** /usr/bin/buildbot control tool
1339 There is now an executable named 'buildbot'. For now, this just provides a
1340 convenient front-end to mktap/twistd/kill, but eventually it will provide
1341 access to other client functionality (like the 'try' builds, and a status
1342 client). Assuming you put your buildbots in /var/lib/buildbot/master/FOO,
1343 you can do 'buildbot create-master /var/lib/buildbot/master/FOO' and it will
1344 create the .tap file and set up a sample master.cfg for you. Later,
1345 'buildbot start /var/lib/buildbot/master/FOO' will start the daemon.
1348 *** build status now saved in external files, -shutdown.tap unnecessary
1350 The status rewrite included a change to save all build status in a set of
1351 external files. These files, one per build, are put in a subdirectory of the
1352 master's basedir (named according to the 'builddir' parameter of the Builder
1353 configuration dictionary). This helps keep the buildmaster's memory
1354 consumption small: the (potentially large) build logs are kept on disk
1355 instead of in RAM. There is a small cache (2 builds per builder) kept in
1356 memory, but everything else lives on disk.
1358 The big change is that the buildmaster now keeps *all* status in these
1359 files. It is no longer necessary to preserve the buildbot-shutdown.tap file
1360 to run a persistent buildmaster. The buildmaster may be launched with
1361 'twistd -f buildbot.tap' each time, in fact the '-n' option can be added to
1362 prevent twistd from automatically creating the -shutdown.tap file.
1364 There is still one lingering bug with this change: the Expectations object
1365 for each builder (which records how long the various steps took, to provide
1366 an ETA value for the next time) is not yet saved. The result is that the
1367 first build after a restart will not provide an ETA value.
1369 0.6.0 keeps status in a single file per build, as opposed to 0.5.0 which
1370 kept status in many subdirectories (one layer for builds, another for steps,
1371 and a third for logs). 0.6.0 will detect and delete these subdirectories as
1372 it overwrites them.
1374 The saved builds are optional. To prevent disk usage from growing without
1375 bounds, you may want to set up a cron job to run 'find' and delete any which
1376 are too old. The status displays will happily survive without those saved
1377 build objects.
1379 The set of recorded Changes is kept in a similar file named 'changes.pck'.
1382 *** source checkout now uses timestamp/revision
1384 Source checkouts are now performed with an appropriate -D TIMESTAMP (for
1385 CVS) or -r REVISION (for SVN) marker to obtain the exact sources that were
1386 specified by the most recent Change going into the current Build. This
1387 avoids a race condition in which a change might be committed after the build
1388 has started but before the source checkout has completed, resulting in a
1389 mismatched set of source files. Such changes are now ignored.
1391 This works by keeping track of repository-wide revision/transaction numbers
1392 (for version control systems that offer them, like SVN). The checkout or
1393 update is performed with the highest such revision number. For CVS (which
1394 does not have them), the timestamp of each commit message is used, and a -D
1395 argument is created to place the checkout squarely in the middle of the "tree
1396 stable timer"'s window.
1398 This also provides the infrastructure for the upcoming 'try' feature. All
1399 source-checkout commands can now obtain a base revision marker and a patch
1400 from the Build, allowing certain builds to be performed on something other
1401 than the most recent sources.
1403 See source.xhtml and steps.xhtml for details.
1406 *** Darcs and Arch support added
1408 There are now build steps which retrieve a source tree from Darcs and Arch
1409 repositories. See steps.xhtml for details.
1411 Preliminary P4 support has been added, thanks to code from Dave Peticolas.
1412 You must manually set up each build slave with an appropriate P4CLIENT: all
1413 buildbot does is run 'p4 sync' at the appropriate times.
1416 *** Status reporting rewritten
1418 Status reporting was completely revamped. The config file now accepts a
1419 BuildmasterConfig['status'] entry, with a list of objects that perform status
1420 delivery. The old config file entries which controlled the web status port
1421 and the IRC bot have been deprecated in favor of adding instances to
1422 ['status']. The following status-delivery classes have been implemented, all
1423 in the 'buildbot.status' package:
1425  client.PBListener(port, username, passwd)
1426  html.Waterfall(http_port, distrib_port)
1427  mail.MailNotifier(fromaddr, mode, extraRecipients..)
1428  words.IRC(host, nick, channels)
1430 See the individual docstrings for details about how to use each one. You can
1431 create new status-delivery objects by following the interfaces found in the
1432 buildbot.interfaces module.
1435 *** BuildFactory configuration process changed
1437 The basic BuildFactory class is now defined in buildbot.process.factory
1438 rather than buildbot.process.base, so you will have to update your config
1439 files. factory.BuildFactory is the base class, which accepts a list of Steps
1440 to run. See docs/factories.xhtml for details.
1442 There are now easier-to-use BuildFactory classes for projects which use GNU
1443 Autoconf, perl's MakeMaker (CPAN), python's distutils (but no unit tests),
1444 and Twisted's Trial. Each one takes a separate 'source' Step to obtain the
1445 source tree, and then fills in the rest of the Steps for you.
1448 *** CVS/SVN VC steps unified, simplified
1450 The confusing collection of arguments for the CVS step ('clobber=',
1451 'copydir=', and 'export=') have been removed in favor of a single 'mode'
1452 argument. This argument describes how you want to use the sources: whether
1453 you want to update and compile everything in the same tree (mode='update'),
1454 or do a fresh checkout and full build each time (mode='clobber'), or
1455 something in between.
1457 The SVN (Subversion) step has been unified and accepts the same mode=
1458 parameter as CVS. New version control steps will obey the same interface.
1460 Most of the old configuration arguments have been removed. You will need to
1461 update your configuration files to use the new arguments. See
1462 docs/steps.xhtml for a description of all the new parameters.
1465 *** Preliminary Debian packaging added
1467 Thanks to the contributions of Kirill Lapshin, we can now produce .deb
1468 installer packages. These are still experimental, but they include init.d
1469 startup/shutdown scripts, which the the new /usr/bin/buildbot to invoke
1470 twistd. Create your buildmasters in /var/lib/buildbot/master/FOO, and your
1471 slaves in /var/lib/buildbot/slave/BAR, then put FOO and BAR in the
1472 appropriate places in /etc/default/buildbot . After that, the buildmasters
1473 and slaves will be started at every boot.
1475 Pre-built .debs are not yet distributed. Use 'debuild -uc -us' from the
1476 source directory to create them.
1479 ** minor features
1482 *** Source Stamps
1484 Each build now has a "source stamp" which describes what sources it used. The
1485 idea is that the sources for this particular build can be completely
1486 regenerated from the stamp. The stamp is a tuple of (revision, patch), where
1487 the revision depends on the VC system being used (for CVS it is either a
1488 revision tag like "BUILDBOT-0_5_0" or a datestamp like "2004/07/23", for
1489 Subversion it is a revision number like 11455). This must be combined with
1490 information from the Builder that is constant across all builds (something to
1491 point at the repository, and possibly a branch indicator for CVS and other VC
1492 systems that don't fold this into the repository string).
1494 The patch is an optional unified diff file, ready to be applied by running
1495 'patch -p0 <PATCH' from inside the workdir. This provides support for the
1496 'try' feature that will eventually allow developers to run buildbot tests on
1497 their code before checking it in.
1500 *** SIGHUP causes the buildmaster's configuration file to be re-read
1502 *** IRC bot now has 'watch' command
1504 You can now tell the buildbot's IRC bot to 'watch <buildername>' on a builder
1505 which is currently performing a build. When that build is finished, the
1506 buildbot will make an announcement (including the results of the build).
1508 The IRC 'force build' command will also announce when the resulting build has
1509 completed.
1512 *** the 'force build' option on HTML and IRC status targets can be disabled
1514 The html.Waterfall display and the words.IRC bot may be constructed with an
1515 allowForce=False argument, which removes the ability to force a build through
1516 these interfaces. Future versions will be able to restrict this build-forcing
1517 capability to authenticated users. The per-builder HTML page no longer
1518 displays the 'Force Build' buttons if it does not have this ability. Thanks
1519 to Fred Drake for code and design suggestions.
1522 *** master now takes 'projectName' and 'projectURL' settings
1524 These strings allow the buildbot to describe what project it is working for.
1525 At the moment they are only displayed on the Waterfall page, but in the next
1526 release they will be retrieveable from the IRC bot as well.
1529 *** survive recent (SVN) Twisted versions
1531 The buildbot should run correctly (albeit with plenty of noisy deprecation
1532 warnings) under the upcoming Twisted-2.0 release.
1535 *** work-in-progress realtime Trial results acquisition
1537 Jonathan Simms (<slyphon>) has been working on 'retrial', a rewrite of
1538 Twisted's unit test framework that will most likely be available in
1539 Twisted-2.0 . Although it is not yet complete, the buildbot will be able to
1540 use retrial in such a way that build status is reported on a per-test basis,
1541 in real time. This will be the beginning of fine-grained test tracking and
1542 Problem management, described in docs/users.xhtml .
1545 * Release 0.5.0 (22 Jul 2004)
1547 ** new features
1549 *** web.distrib servers via TCP
1551 The 'webPathname' config option, which specifies a UNIX socket on which to
1552 publish the waterfall HTML page (for use by 'mktap web -u' or equivalent),
1553 now accepts a numeric port number. This publishes the same thing via TCP,
1554 allowing the parent web server to live on a separate machine.
1556 This config option could be named better, but it will go away altogether in
1557 a few releases, when status delivery is unified. It will be replaced with a
1558 WebStatusTarget object, and the config file will simply contain a list of
1559 various kinds of status targets.
1561 *** 'master.cfg' filename is configurable
1563 The buildmaster can use a config file named something other than
1564 "master.cfg". Use the --config=foo.cfg option to mktap to control this.
1566 *** FreshCVSSource now uses newcred (CVSToys >= 1.0.10)
1568 The FreshCVSSource class now defaults to speaking to freshcvs daemons from
1569 modern CVSToys releases. If you need to use the buildbot with a daemon from
1570 CVSToys-1.0.9 or earlier, use FreshCVSSourceOldcred instead. Note that the
1571 new form only requires host/port/username/passwd: the "serviceName"
1572 parameter is no longer meaningful.
1574 *** Builders are now configured with a dictionary, not a tuple
1576 The preferred way to set up a Builder in master.cfg is to provide a
1577 dictionary with various keys, rather than a (non-extensible) 4-tuple. See
1578 docs/config.xhtml for details. The old tuple-way is still supported for now,
1579 it will probably be deprecated in the next release and removed altogether in
1580 the following one.
1582 *** .periodicBuildTime is now exposed to the config file
1584 To set a builder to run at periodic intervals, simply add a
1585 'periodicBuildTime' key to its master.cfg dictionary. Again, see
1586 docs/config.xhtml for details.
1588 *** svn_buildbot.py adds --include, --exclude
1590 The commit trigger script now gives you more control over which files are
1591 sent to the buildmaster and which are not.
1593 *** usePTY is controllable at slave mktap time
1595 The buildslaves usually run their child processes in a pty, which creates a
1596 process group for all the children, which makes it much easier to kill them
1597 all at once (i.e. if a test hangs). However this causes problems on some
1598 systems. Rather than hacking slavecommand.py to disable the use of these
1599 ptys, you can now create the slave's .tap file with --usepty=0 at mktap
1600 time.
1602 ** Twisted changes
1604 A summary of warnings (e.g. DeprecationWarnings) is provided as part of the
1605 test-case summarizer. The summarizer also counts Skips, expectedFailures,
1606 and unexpectedSuccesses, displaying the counts on the test step's event box.
1608 The RunUnitTests step now uses "trial -R twisted" instead of "trial
1609 twisted.test", which is a bit cleaner. All .pyc files are deleted before
1610 starting trial, to avoid getting tripped up by deleted .py files.
1612 ** documentation
1614 docs/config.xhtml now describes the syntax and allowed contents of the
1615 'master.cfg' configuration file.
1617 ** bugfixes
1619 Interlocks had a race condition that could cause the lock to get stuck
1620 forever.
1622 FreshCVSSource has a prefix= argument that was moderately broken (it used to
1623 only work if the prefix was a single directory component). It now works with
1624 subdirectories.
1626 The buildmaster used to complain when it saw the "info" directory in a
1627 slave's workspace. This directory is used to publish information about the
1628 slave host and its administrator, and is not a leftover build directory as
1629 the complaint suggested. This complain has been silenced.
1632 * Release 0.4.3 (30 Apr 2004)
1634 ** PBChangeSource made explicit
1636 In 0.4.2 and before, an internal interface was available which allowed
1637 special clients to inject changes into the Buildmaster. This interface is
1638 used by the contrib/svn_buildbot.py script. The interface has been extracted
1639 into a proper PBChangeSource object, which should be created in the
1640 master.cfg file just like the other kinds of ChangeSources. See
1641 docs/sources.xhtml for details.
1643 If you were implicitly using this change source (for example, if you use
1644 Subversion and the svn_buildbot.py script), you *must* add this source to
1645 your master.cfg file, or changes will not be delivered and no builds will be
1646 triggered.
1648 The PBChangeSource accepts the same "prefix" argument as all other
1649 ChangeSources. For a SVN repository that follows the recommended practice of
1650 using "trunk/" for the trunk revisions, you probably want to construct the
1651 source like this:
1653  source = PBChangeSource(prefix="trunk")
1655 to make sure that the Builders are given sensible (trunk-relative)
1656 filenames for each changed source file.
1658 ** Twisted changes
1660 *** step_twisted.RunUnitTests can change "bin/trial"
1662 The twisted RunUnitTests step was enhanced to let you run something other
1663 than "bin/trial", making it easier to use a buildbot on projects which use
1664 Twisted but aren't actually Twisted itself.
1666 *** Twisted now uses Subversion
1668 Now that Twisted has moved from CVS to SVN, the Twisted build processes have
1669 been modified to perform source checkouts from the Subversion repository.
1671 ** minor feature additions
1673 *** display Changes with HTML
1675 Changes are displayed with a bit more pizazz, and a links= argument was
1676 added to allow things like ViewCVS links to be added to the display
1677 (although it is not yet clear how this argument should be used: the
1678 interface remains subject to change untill it has been documented).
1680 *** display ShellCommand logs with HTML
1682 Headers are in blue, stderr is in red (unless usePTY=1 in which case stderr
1683 and stdout are indistinguishable). A link is provided which returns the same
1684 contents as plain text (by appending "?text=1" to the URL).
1686 *** buildslaves send real tracebacks upon error
1688 The .unsafeTracebacks option has been turned on for the buildslaves,
1689 allowing them to send a full stack trace when an exception occurs, which is
1690 logged in the buildmaster's twistd.log file. This makes it much easier to
1691 determine what went wrong on the slave side.
1693 *** BasicBuildFactory refactored
1695 The BasicBuildFactory class was refactored to make it easier to create
1696 derivative classes, in particular the BasicSVN variant.
1698 *** "ping buildslave" web button added
1700 There is now a button on the "builder information" page that lets a web user
1701 initiate a ping of the corresponding build slave (right next to the button
1702 that lets them force a build). This was added to help track down a problem
1703 with the slave keepalives.
1705 ** bugs fixed:
1707 You can now have multiple BuildSteps with the same name (the names are used
1708 as hash keys in the data structure that helps determine ETA values for each
1709 step, the new code creates unique key names if necessary to avoid
1710 collisions). This means that, for example, you do not have to create a
1711 BuildStep subclass just to have two Compile steps in the same process.
1713 If CVSToys is not installed, the tests that depend upon it are skipped.
1715 Some tests in 0.4.2 failed because of a missing set of test files, they are
1716 now included in the tarball properly.
1718 Slave keepalives should work better now in the face of silent connection
1719 loss (such as when an intervening NAT box times out the association), the
1720 connection should be reestablished in minutes instead of hours.
1722 Shell commands on the slave are invoked with an argument list instead of the
1723 ugly and error-prone split-on-spaces approach. If the ShellCommand is given
1724 a string (instead of a list), it will fall back to splitting on spaces.
1725 Shell commands should work on win32 now (using COMSPEC instead of /bin/sh).
1727 Buildslaves under w32 should theoretically work now, and one was running for
1728 the Twisted buildbot for a while until the machine had to be returned.
1730 The "header" lines in ShellCommand logs (which include the first line, that
1731 displays the command being run, and the last, which shows its exit status)
1732 are now generated by the buildslave side instead of the local (buildmaster)
1733 side. This can provide better error handling and is generally cleaner.
1734 However, if you have an old buildslave (running 0.4.2 or earlier) and a new
1735 buildmaster, then neither end will generate these header lines.
1737 CVSCommand was improved, in certain situations 0.4.2 would perform
1738 unnecessary checkouts (when an update would have sufficed). Thanks to Johan
1739 Dahlin for the patches. The status output was fixed as well, so that
1740 failures in CVS and SVN commands (such as not being able to find the 'svn'
1741 executable) make the step status box red.
1743 Subversion support was refactored to make it behave more like CVS. This is a
1744 work in progress and will be improved in the next release.
1747 * Release 0.4.2 (08 Jan 2004)
1749 ** test suite updated
1751 The test suite has been completely moved over to Twisted's "Trial"
1752 framework, and all tests now pass. To run the test suite (consisting of 64
1753 tests, probably covering about 30% of BuildBot's logic), do this:
1755  PYTHONPATH=. trial -v buildbot.test
1757 ** Mail parsers updated
1759 Several bugs in the mail-parsing code were fixed, allowing a buildmaster to
1760 be triggered by mail sent out by a CVS repository. (The Twisted Buildbot is
1761 now using this to trigger builds, as their CVS server machine is having some
1762 difficulties with FreshCVS). The FreshCVS mail format for directory
1763 additions appears to have changed recently: the new parser should handle
1764 both old and new-style messages.
1766 A parser for Bonsai commit messages (buildbot.changes.mail.parseBonsaiMail)
1767 was contributed by Stephen Davis. Thanks Stephen!
1769 ** CVS "global options" now available
1771 The CVS build step can now accept a list of "global options" to give to the
1772 cvs command. These go before the "update"/"checkout" word, and are described
1773 fully by "cvs --help-options". Two useful ones might be "-r", which causes
1774 checked-out files to be read-only, and "-R", which assumes the repository is
1775 read-only (perhaps by not attempting to write to lock files).
1778 * Release 0.4.1 (09 Dec 2003)
1780 ** MaildirSources fixed
1782 Several bugs in MaildirSource made them unusable. These have been fixed (for
1783 real this time). The Twisted buildbot is using an FCMaildirSource while they
1784 fix some FreshCVS daemon problems, which provided the encouragement for
1785 getting these bugs fixed.
1787 In addition, the use of DNotify (only available under linux) was somehow
1788 broken, possibly by changes in some recent version of Python. It appears to
1789 be working again now (against both python-2.3.3c1 and python-2.2.1).
1791 ** master.cfg can use 'basedir' variable
1793 As documented in the sample configuration file (but not actually implemented
1794 until now), a variable named 'basedir' is inserted into the namespace used
1795 by master.cfg . This can be used with something like:
1797   os.path.join(basedir, "maildir")
1799 to obtain a master-basedir-relative location.
1802 * Release 0.4.0 (05 Dec 2003)
1804 ** newapp
1806 I've moved the codebase to Twisted's new 'application' framework, which
1807 drastically cleans up service startup/shutdown just like newcred did for
1808 authorization. This is mostly an internal change, but the interface to
1809 IChangeSources was modified, so in the off chance that someone has written a
1810 custom change source, it may have to be updated to the new scheme.
1812 The most user-visible consequence of this change is that now both
1813 buildmasters and buildslaves are generated with the standard Twisted 'mktap'
1814 utility. Basic documentation is in the README file.
1816 Both buildmaster and buildslave .tap files need to be re-generated to run
1817 under the new code. I have not figured out the styles.Versioned upgrade path
1818 well enough to avoid this yet. Sorry.
1820 This also means that both buildslaves and the buildmaster require
1821 Twisted-1.1.0 or later.
1823 ** reloadable master.cfg
1825 Most aspects of a buildmaster is now controlled by a configuration file
1826 which can be re-read at runtime without losing build history. This feature
1827 makes the buildmaster *much* easier to maintain.
1829 In the previous release, you would create the buildmaster by writing a
1830 program to define the Builders and ChangeSources and such, then run it to
1831 create the .tap file. In the new release, you use 'mktap' to create the .tap
1832 file, and the only parameter you give it is the base directory to use. Each
1833 time the buildmaster starts, it will look for a file named 'master.cfg' in
1834 that directory and parse it as a python script. That script must define a
1835 dictionary named 'BuildmasterConfig' with various keys to define the
1836 builders, the known slaves, what port to use for the web server, what IRC
1837 channels to connect to, etc.
1839 This config file can be re-read at runtime, and the buildmaster will compute
1840 the differences and add/remove services as necessary. The re-reading is
1841 currently triggered through the debug port (contrib/debugclient.py is the
1842 debug port client), but future releases will add the ability to trigger the
1843 reconfiguration by IRC command, web page button, and probably a local UNIX
1844 socket (with a helper script to trigger a rebuild locally).
1846 docs/examples/twisted_master.cfg contains a sample configuration file, which
1847 also lists all the keys that can be set.
1849 There may be some bugs lurking, such as re-configuring the buildmaster while
1850 a build is running. It needs more testing.
1852 ** MaxQ support
1854 Radix contributed some support scripts to run MaxQ test scripts. MaxQ
1855 (http://maxq.tigris.org/) is a web testing tool that allows you to record
1856 HTTP sessions and play them back.
1858 ** Builders can now wait on multiple Interlocks
1860 The "Interlock" code has been enhanced to allow multiple builders to wait on
1861 each one. This was done to support the new config-file syntax for specifying
1862 Interlocks (in which each interlock is a tuple of A and [B], where A is the
1863 builder the Interlock depends upon, and [B] is a list of builders that
1864 depend upon the Interlock).
1866 "Interlock" is misnamed. In the next release it will be changed to
1867 "Dependency", because that's what it really expresses. A new class (probably
1868 called Interlock) will be created to express the notion that two builders
1869 should not run at the same time, useful when multiple builders are run on
1870 the same machine and thrashing results when several CPU- or disk- intensive
1871 compiles are done simultaneously.
1873 ** FreshCVSSource can now handle newcred-enabled FreshCVS daemons
1875 There are now two FreshCVSSource classes: FreshCVSSourceNewcred talks to
1876 newcred daemons, and FreshCVSSourceOldcred talks to oldcred ones. Mind you,
1877 FreshCVS doesn't yet do newcred, but when it does, we'll be ready.
1879 'FreshCVSSource' maps to the oldcred form for now. That will probably change
1880 when the current release of CVSToys supports newcred by default.
1882 ** usePTY=1 on posix buildslaves
1884 When a buildslave is running under POSIX (i.e. pretty much everything except
1885 windows), child processes are created with a pty instead of separate
1886 stdin/stdout/stderr pipes. This makes it more likely that a hanging build
1887 (when killed off by the timeout code) will have all its sub-childred cleaned
1888 up. Non-pty children would tend to leave subprocesses running because the
1889 buildslave was only able to kill off the top-level process (typically
1890 'make').
1892 Windows doesn't have any concept of ptys, so non-posix systems do not try to
1893 enable them.
1895 ** mail parsers should actually work now
1897 The email parsing functions (FCMaildirSource and SyncmailMaildirSource) were
1898 broken because of my confused understanding of how python class methods
1899 work. These sources should be functional now.
1901 ** more irc bot sillyness
1903 The IRC bot can now perform half of the famous AYBABTO scene.
1906 * Release 0.3.5 (19 Sep 2003)
1908 ** newcred
1910 Buildbot has moved to "newcred", a new authorization framework provided by
1911 Twisted, which is a good bit cleaner and easier to work with than the
1912 "oldcred" scheme in older versions. This causes both buildmaster and
1913 buildslaves to depend upon Twisted 1.0.7 or later. The interface to
1914 'makeApp' has changed somewhat (the multiple kinds of remote connections all
1915 use the same TCP port now).
1917 Old buildslaves will get "_PortalWrapper instance has no attribute
1918 'remote_username'" errors when they try to connect. They must be upgraded.
1920 The FreshCVSSource uses PB to connect to the CVSToys server. This has been
1921 upgraded to use newcred too. If you get errors (TODO: what do they look
1922 like?) in the log when the buildmaster tries to connect, you need to upgrade
1923 your FreshCVS service or use the 'useOldcred' argument when creating your
1924 FreshCVSSource. This is a temporary hack to allow the buildmaster to talk to
1925 oldcred CVSToys servers. Using it will trigger deprecation warnings. It will
1926 go away eventually.
1928 In conjunction with this change, makeApp() now accepts a password which can
1929 be applied to the debug service.
1931 ** new features
1933 *** "copydir" for CVS checkouts
1935 The CVS build step can now accept a "copydir" parameter, which should be a
1936 directory name like "source" or "orig". If provided, the CVS checkout is
1937 done once into this directory, then copied into the actual working directory
1938 for compilation etc. Later updates are done in place in the copydir, then
1939 the workdir is replaced with a copy.
1941 This reduces CVS bandwidth (update instead of full checkout) at the expense
1942 of twice the disk space (two copies of the tree).
1944 *** Subversion (SVN) support
1946 Radix (Christopher Armstrong) contributed early support for building
1947 Subversion-based trees. The new 'SVN' buildstep behaves roughly like the
1948 'CVS' buildstep, and the contrib/svn_buildbot.py script can be used as a
1949 checkin trigger to feed changes to a running buildmaster.
1951 ** notable bugfixes
1953 *** .tap file generation
1955 We no longer set the .tap filename, because the buildmaster/buildslave
1956 service might be added to an existing .tap file and we shouldn't presume to
1957 own the whole thing. You may want to manually rename the "buildbot.tap" file
1958 to something more meaningful (like "buildslave-bot1.tap").
1960 *** IRC reconnect
1962 If the IRC server goes away (it was restarted, or the network connection was
1963 lost), the buildmaster will now schedule a reconnect attempt.
1965 *** w32 buildslave fixes
1967 An "rm -rf" was turned into shutil.rmtree on non-posix systems.
1970 * Release 0.3.4 (28 Jul 2003)
1972 ** IRC client
1974 The buildmaster can now join a set of IRC channels and respond to simple
1975 queries about builder status.
1977 ** slave information
1979 The build slaves can now report information from a set of info/* files in
1980 the slave base directory to the buildmaster. This will be used by the slave
1981 administrator to announce details about the system hosting the slave,
1982 contact information, etc. For now, info/admin should contain the name/email
1983 of the person who is responsible for the buildslave, and info/host should
1984 describe the system hosting the build slave (OS version, CPU speed, memory,
1985 etc). The contents of these files are made available through the waterfall
1986 display.
1988 ** change notification email parsers
1990 A parser for Syncmail (syncmail.sourceforge.net) was added. SourceForge
1991 provides examples of setting up syncmail to deliver CVS commit messages to
1992 mailing lists, so hopefully this will make it easier for sourceforge-hosted
1993 projects to set up a buildbot.
1995 email processors were moved into buildbot.changes.mail . FCMaildirSource was
1996 moved, and the compatibility location (buildbot.changes.freshcvsmail) will
1997 go away in the next release.
1999 ** w32 buildslave ought to work
2001 Some non-portable code was changed to make it more likely that the
2002 buildslave will run under windows. The Twisted buildbot now has a
2003 (more-or-less) working w32 buildslave.
2006 * Release 0.3.3 (21 May 2003):
2008 ** packaging changes
2010 *** include doc/examples in the release. Oops again.
2012 ** network changes
2014 *** add keepalives to deal with NAT boxes
2016 Some NAT boxes drop port mappings if the TCP connection looks idle for too
2017 long (maybe 30 minutes?). Add application-level keepalives (dummy commands
2018 sent from slave to master every 10 minutes) to appease the NAT box and keep
2019 our connection alive. Enable this with --keepalive in the slave mktap
2020 command line. Check the README for more details.
2022 ** UI changes
2024 *** allow slaves to trigger any build that they host
2026 Added an internal function to ask the buildmaster to start one of their
2027 builds. Must be triggered with a debugger or manhole on the slave side for
2028 now, will add a better UI later.
2030 *** allow web page viewers to trigger any build
2032 Added a button to the per-build page (linked by the build names on the third
2033 row of the waterfall page) to allow viewers to manually trigger builds.
2034 There is a field for them to indicate who they are and why they are
2035 triggering the build. It is possible to abuse this, but for now the benefits
2036 outweigh the damage that could be done (worst case, someone can make your
2037 machine run builds continuously).
2039 ** generic buildprocess changes
2041 *** don't queue multiple builds for offline slaves
2043 If a slave is not online when a build is ready to run, that build is queued
2044 so the slave will run it when it next connects. However, the buildmaster
2045 used to queue every such build, so the poor slave machine would be subject
2046 to tens or hundreds of builds in a row when they finally did come online.
2047 The buildmaster has been changed to merge these multiple builds into a
2048 single one.
2050 *** bump ShellCommand default timeout to 20 minutes
2052 Used for testing out the win32 twisted builder. I will probably revert this
2053 in the next relese.
2055 *** split args in ShellCommand ourselves instead of using /bin/sh
2057 This should remove the need for /bin/sh on the slave side, improving the
2058 chances that the buildslave can run on win32.
2060 *** add configureEnv argument to Configure step, pass env dict to slave
2062 Allows build processes to do things like 'CFLAGS=-O0 ./configure' without
2063 using /bin/sh to set the environment variable
2065 ** Twisted buildprocess changes
2067 *** warn instead of flunk the build when cReactor or qtreactor tests fail
2069 These two always fail. For now, downgrade those failures to a warning
2070 (orange box instead of red).
2072 *** don't use 'clobber' on remote builds
2074 Builds that run on remote machines (freebsd, OS-X) now use 'cvs update'
2075 instead of clobbering their trees and doing a fresh checkout. The multiple
2076 simultaneous CVS checkouts were causing a strain on Glyph's upstream
2077 bandwidth.
2079 *** use trial --testmodule instead of our own test-case-name grepper
2081 The Twisted coding/testing convention has developers put 'test-case-name'
2082 tags (emacs local variables, actually) in source files to indicate which
2083 test cases should be run to exercise that code. Twisted's unit-test
2084 framework just acquired an argument to look for these tags itself. Use that
2085 instead of the extra FindUnitTestsForFiles build step we were doing before.
2086 Removes a good bit of code from buildbot and into Twisted where it really
2087 belongs.
2090 * Release 0.3.2 (07 May 2003):
2092 ** packaging changes
2094 *** fix major packaging bug: none of the buildbot/* subdirectories were
2095 included in the 0.3.1 release. Sorry, I'm still figuring out distutils
2096 here..
2098 ** internal changes
2100 *** use pb.Cacheable to update Events in remote status client. much cleaner.
2102 *** start to clean up BuildProcess->status.builder interface
2104 ** bug fixes
2106 *** waterfall display was missing a <tr>, causing it to be misrendered in most
2107 browsers (except the one I was testing it with, of course)
2109 *** URL without trailing slash (when served in a twisted-web distributed
2110 server, with a url like "http://twistedmatrix.com/~warner.twistd") should do
2111 redirect to URL-with-trailing-slash, otherwise internal hrefs are broken.
2113 *** remote status clients: forget RemoteReferences at shutdown, removes
2114 warnings about "persisting Ephemerals"
2116 ** Twisted buildprocess updates:
2118 *** match build process as of twisted-1.0.5
2119 **** use python2.2 everywhere now that twisted rejects python2.1
2120 **** look for test-result constants in multiple places
2121 *** move experimental 'trial --jelly' code to separate module
2122 *** add FreeBSD builder
2123 *** catch rc!=0 in HLint step
2124 *** remove RunUnitTestsRandomly, use randomly=1 parameter instead
2125 *** parameterize ['twisted.test'] default test case to make subclassing easier
2126 *** ignore internal distutils warnings in python2.3 builder
2129 * Release 0.3.1 (29 Apr 2003):
2131 ** First release.
2133 ** Features implemented:
2135  change notification from FreshCVS server or parsed maildir contents
2137  timed builds
2139  basic builds, configure/compile/test
2141  some Twisted-specific build steps: docs, unit tests, debuild
2143  status reporting via web page
2145 ** Features still experimental/unpolished
2147  status reporting via PB client