contrib/svn_buildbot.py: handle property changes correctly
[buildbot.git] / NEWS
blobcea8653d9799d1c334c42d653f4337b859b0bed4
1 User visible changes in Buildbot.
3 * Release 0.7.3 (23 May 2006)
5 ** compatibility
7 This release is compatible with Twisted-1.3.0, but the next one will not be.
8 Please upgrade to at least Twisted-2.0.x soon, as the next buildbot release
9 will require it.
11 ** new features
13 *** Mercurial support
15 Support for Mercurial version control system (http://selenic.com/mercurial)
16 has been added. This adds a buildbot.process.step.Mercurial BuildStep. A
17 suitable hook script to deliver changes to the buildmaster is still missing.
19 *** 'buildbot restart' command
21 The 'buildbot restart BASEDIR' command will perform a 'buildbot stop' and
22 'buildbot start', and will attempt to wait for the buildbot process to shut
23 down in between. This is useful when you need to upgrade the code on your
24 buildmaster or buildslave and want to take it down for a minimum amount of
25 time.
27 *** build properties
29 Each build now has a set of named "Build Properties", which can be set by
30 steps and interpolated into ShellCommands. The 'revision' and 'got_revision'
31 properties are the most interesting ones available at this point, and can be
32 used e.g. to get the VC revision number into the filename of a generated
33 tarball. See the user's manual section entited "Build Properties" for more
34 details.
36 ** minor features
38 *** IRC now takes password= argument
40 Useful for letting your bot claim a persistent identity.
42 *** svn_buildbot.py is easier to modify to understand branches
43 *** BuildFactory has a new .addStep method
44 *** p4poller has new arguments
45 *** new contrib scripts: viewcvspoll, svnpoller, svn_watcher
47 These poll an external VC repository to watch for changes, as opposed to
48 adding a hook script to the repository that pushes changes into the
49 buildmaster. This means higher latency but may be easier to configure,
50 especially if you do not have authority on the repository host.
52 *** VC build property 'got_revision'
54 The 'got_revision' property reports what revision a VC step actually
55 acquired, which may be useful to know when building from HEAD.
57 *** improved CSS in Waterfall
59 The Waterfall display has a few new class= tags, which may make it easier to
60 write custom CSS to make it look prettier.
62 *** robots_txt= argument in Waterfall
64 You can now pass a filename to the robots_txt= argument, which will be served
65 as the "robots.txt" file. This can be used to discourage search engine
66 spiders from crawling through the numerous build-status pages.
68 ** bugfixes
70 *** tests more likely to pass on non-English systems
72 The unit test suite now sets $LANG='C' to make subcommands emit error
73 messages in english instead of whatever native language is in use on the
74 host. This improves the chances that the unit tests will pass on such
75 systems. This affects certain VC-related subcommands too.
77 test_vc was assuming that the system time was expressed with a numeric
78 timezone, which is not always the case, especially under windows. This
79 probably works better now than it did before. This only affects the CVS
80 tests.
82 'buildbot try' (for CVS) now uses UTC instead of the local timezone. The
83 'got_revision' property is also expressed in UTC. Both should help deal with
84 buggy versions of CVS that don't parse numeric timezones properly.
87 * Release 0.7.2 (17 Feb 2006)
89 ** new features
91 *** all TCP port numbers in config file now accept a strports string
93 Sometimes it is useful to restrict certain TCP ports that the buildmaster
94 listens on to use specific network interfaces. In particular, if the
95 buildmaster and SVN repository live on the same machine, you may want to
96 restrict the PBChangeSource to only listen on the loopback interface,
97 insuring that no external entities can inject Changes into the buildbot.
98 Likewise, if you are using something like Apache's reverse-proxy feature to
99 provide access to the buildmaster's HTML status page, you might want to hide
100 the real Waterfall port by having it only bind to the loopback interface.
102 To accomplish this, use a string like "tcp:12345:interface=127.0.0.1" instead
103 of a number like 12345. These strings are called "strports specification
104 strings", and are documented in twisted's twisted.application.strports module
105 (you can probably type 'pydoc twisted.application.strports' to see this
106 documentation). Pretty much everywhere the buildbot takes a port number will
107 now accept a strports spec, and any bare numbers are translated into TCP port
108 numbers (listening on all network interfaces) for compatibility.
110 *** buildslave --umask control
112 Twisted's daemonization utility (/usr/bin/twistd) automatically sets the
113 umask to 077, which means that all files generated by both the buildmaster
114 and the buildslave will only be readable by the account under which the
115 respective daemon is running. This makes it unnecessarily difficult to share
116 build products (e.g. by symlinking ~/public_html/current_docs/ to a directory
117 within the slave's build directory where each build puts the results of a
118 "make docs" step).
120 The 'buildbot slave <PARAMS>' command now accepts a --umask argument, which
121 can be used to override the umask set by twistd. If you create the buildslave
122 with '--umask=022', then all build products will be world-readable, making it
123 easier for other processes (run under other accounts) to access them.
125 ** bug fixes
127 The 0.7.1 release had a bug whereby reloading the config file could break all
128 configured Schedulers, causing them to raise an exception when new changes
129 arrived but not actually schedule a new build. This has been fixed.
131 Fixed a bug which caused the AnyBranchScheduler to explode when branch==None.
132 Thanks to Kevin Turner for the catch. I also think I fixed a bug whereby the
133 TryScheduler would explode when it was given a Change (which it is supposed
134 to simply ignore).
136 The Waterfall display now does more quoting of names (including Builder
137 names, BuildStep names, etc), so it is more likely that these names can
138 contain unusual characters like spaces, quotes, and slashes. There may still
139 be some problems with these kinds of names, however.. please report any bugs
140 to the mailing list.
143 * Release 0.7.1 (26 Nov 2005)
145 ** new features
147 *** scheduler.Nightly
149 Dobes Vandermeer contributed a cron-style 'Nightly' scheduler. Unlike the
150 more-primitive Periodic class (which only lets you specify the duration
151 between build attempts), Nightly lets you schedule builds for specific times
152 of day, week, month, or year. The interface is very much like the crontab(5)
153 file. See the buildbot.scheduler.Nightly docstring for complete details.
155 ** minor new features
157 *** step.Trial can work with Trial from Twisted >2.1.0
159 The 'Trial' step now accepts the trialMode= argument, which should be a list
160 of strings to be added to trial's argv array. This defaults to ["-to"], which
161 is appropriate for the Trial that ships in Twisted-2.1.0 and earlier, and
162 tells Trial to emit non-colorized verbose output. To use this step with
163 trials from later versions of Twisted, this should be changed to
164 ["--reporter=bwverbose"].
166 In addition, you can now set other Trial command-line parameters through the
167 trialArgs= argument. This is a list of strings, and defaults to an empty list.
169 *** Added a 'resubmit this build' button to the web page
171 *** Make the VC-checkout step's description more useful
173 Added the word "[branch]" to the VC step's description (used in the Step's
174 box on the Waterfall page, among others) when we're checking out a
175 non-default branch. Also add "rNNN" where appropriate to indicate which
176 revision is being checked out. Thanks to Brad Hards and Nathaniel Smith for
177 the suggestion.
179 ** bugs fixed
181 Several patches from Dobes Vandermeer: Escape the URLs in email, in case they
182 have spaces and such. Fill otherwise-empty <td> elements, as a workaround for
183 buggy browsers that might optimize them away. Also use binary mode when
184 opening status pickle files, to make windows work better. The
185 AnyBranchScheduler now works even when you don't provide a fileIsImportant=
186 argument.
188 Stringify the base revision before stuffing it into a 'try' jobfile, helping
189 SVN and Arch implement 'try' builds better. Thanks to Steven Walter for the
190 patch.
192 Fix the compare_attrs list in PBChangeSource, FreshCVSSource, and Waterfall.
193 Before this, certain changes to these objects in the master.cfg file were
194 ignored, such that you would have to stop and re-start the buildmaster to
195 make them take effect.
197 The config file is now loaded serially, shutting down old (or replaced)
198 Status/ChangeSource plugins before starting new ones. This fixes a bug in
199 which changing an aspect of, say, the Waterfall display would cause an
200 exception as both old and new instances fight over the same TCP port. This
201 should also fix a bug whereby new Periodic Schedulers could fire a build
202 before the Builders have finished being added.
204 There was a bug in the way Locks were handled when the config file was
205 reloaded: changing one Builder (but not the others) and reloading master.cfg
206 would result in multiple instances of the same Lock object, so the Locks
207 would fail to prevent simultaneous execution of Builds or Steps. This has
208 been fixed.
210 ** other changes
212 For a long time, certain StatusReceiver methods (like buildStarted and
213 stepStarted) have been able to return another StatusReceiver instance
214 (usually 'self') to indicate that they wish to subscribe to events within the
215 new object. For example, if the buildStarted() method returns 'self', the
216 status receiver will also receive events for the new build, like
217 stepStarted() and buildETAUpdate(). Returning a 'self' from buildStarted() is
218 equivalent to calling build.subscribe(self).
220 Starting with buildbot-0.7.1, this auto-subscribe convenience will also
221 register to automatically unsubscribe the target when the build or step has
222 finished, just as if build.unsubscribe(self) had been called. Also, the
223 unsubscribe() method has been changed to not explode if the same receiver is
224 unsubscribed multiple times. (note that it will still explode is the same
225 receiver is *subscribed* multiple times, so please continue to refrain from
226 doing that).
229 * Release 0.7.0 (24 Oct 2005)
231 ** new features
233 *** new c['schedulers'] config-file element (REQUIRED)
235 The code which decides exactly *when* a build is performed has been massively
236 refactored, enabling much more flexible build scheduling. YOU MUST UPDATE
237 your master.cfg files to match: in general this will merely require you to
238 add an appropriate c['schedulers'] entry. Any old ".treeStableTime" settings
239 on the BuildFactory instances will now be ignored. The user's manual has
240 complete details with examples of how the new Scheduler classes work.
242 *** c['interlocks'] removed, Locks and Dependencies now separate items
244 The c['interlocks'] config element has been removed, and its functionality
245 replaced with two separate objects. Locks are used to tell the buildmaster
246 that certain Steps or Builds should not run at the same time as other Steps
247 or Builds (useful for test suites that require exclusive access to some
248 external resource: of course the real fix is to fix the tests, because
249 otherwise your developers will be suffering from the same limitations). The
250 Lock object is created in the config file and then referenced by a Step
251 specification tuple or by the 'locks' key of the Builder specification
252 dictionary. Locks come in two flavors: MasterLocks are buildmaster-wide,
253 while SlaveLocks are specific to a single buildslave.
255 When you want to have one Build run or not run depending upon whether some
256 other set of Builds have passed or failed, you use a special kind of
257 Scheduler defined in the scheduler.Dependent class. This scheduler watches an
258 upstream Scheduler for builds of a given source version to complete, and only
259 fires off its own Builders when all of the upstream's Builders have built
260 that version successfully.
262 Both features are fully documented in the user's manual.
264 *** 'buildbot try'
266 The 'try' feature has finally been added. There is some configuration
267 involved, both in the buildmaster config and on the developer's side, but
268 once in place this allows the developer to type 'buildbot try' in their
269 locally-modified tree and to be given a report of what would happen if their
270 changes were to be committed. This works by computing a (base revision,
271 patch) tuple that describes the developer's tree, sending that to the
272 buildmaster, then running a build with that source on a given set of
273 Builders. The 'buildbot try' tool then emits status messages until the builds
274 have finished.
276 'try' exists to allow developers to run cross-platform tests on their code
277 before committing it, reducing the chances they will inconvenience other
278 developers by breaking the build. The UI is still clunky, but expect it to
279 change and improve over the next few releases.
281 Instructions for developers who want to use 'try' (and the configuration
282 changes necessary to enable its use) are in the user's manual.
284 *** Build-On-Branch
286 When suitably configured, the buildbot can be used to build trees from a
287 variety of related branches. You can set up Schedulers to build a tree using
288 whichever branch was last changed, or users can request builds of specific
289 branches through IRC, the web page, or (eventually) the CLI 'buildbot force'
290 subcommand.
292 The IRC 'force' command now takes --branch and --revision arguments (not that
293 they always make sense). Likewise the HTML 'force build' button now has an
294 input field for branch and revision. Your build's source-checkout step must
295 be suitably configured to support this: for SVN it involves giving both a
296 base URL and a default branch. Other VC systems are configured differently.
297 The ChangeSource must also provide branch information: the 'buildbot
298 sendchange' command now takes a --branch argument to help hook script writers
299 accomplish this.
301 *** Multiple slaves per Builder
303 You can now attach multiple buildslaves to each Builder. This can provide
304 redundancy or primitive load-balancing among many machines equally capable of
305 running the build. To use this, define a key in the Builder specification
306 dictionary named 'slavenames' with a list of buildslave names (instead of the
307 usual 'slavename' that contains just a single slavename).
309 *** minor new features
311 The IRC and email status-reporting facilities now provide more specific URLs
312 for particular builds, in addition to the generic buildmaster home page. The
313 HTML per-build page now has more information.
315 The Twisted-specific test classes have been modified to match the argument
316 syntax preferred by Trial as of Twisted-2.1.0 and newer. The generic trial
317 steps are still suitable for the Trial that comes with older versions of
318 Twisted, but may produce deprecation warnings or errors when used with the
319 latest Trial.
321 ** bugs fixed
323 DNotify, used by the maildir-watching ChangeSources, had problems on some
324 64-bit systems relating to signed-vs-unsigned constants and the DN_MULTISHOT
325 flag. A workaround was provided by Brad Hards.
327 The web status page should now be valid XHTML, thanks to a patch by Brad
328 Hards. The charset parameter is specified to be UTF-8, so VC comments,
329 builder names, etc, should probably all be in UTF-8 to be displayed properly.
331 ** creeping version dependencies
333 The IRC 'force build' command now requires python2.3 (for the shlex.split
334 function).
337 * Release 0.6.6 (23 May 2005)
339 ** bugs fixed
341 The 'sendchange', 'stop', and 'sighup' subcommands were broken, simple bugs
342 that were not caught by the test suite. Sorry.
344 The 'buildbot master' command now uses "raw" strings to create .tac files
345 that will still function under windows (since we must put directory names
346 that contain backslashes into that file).
348 The keep-on-disk behavior added in 0.6.5 included the ability to upgrade old
349 in-pickle LogFile instances. This upgrade function was not added to the
350 HTMLLogFile class, so an exception would be raised when attempting to load or
351 display any build with one of these logs (which are normally used only for
352 showing build exceptions). This has been fixed.
354 Several unnecessary imports were removed, so the Buildbot should function
355 normally with just Twisted-2.0.0's "Core" module installed. (of course you
356 will need TwistedWeb, TwistedWords, and/or TwistedMail if you use status
357 targets that require them). The test suite should skip all tests that cannot
358 be run because of missing Twisted modules.
360 The master/slave's basedir is now prepended to sys.path before starting the
361 daemon. This used to happen implicitly (as a result of twistd's setup
362 preamble), but 0.6.5 internalized the invocation of twistd and did not copy
363 this behavior. This change restores the ability to access "private.py"-style
364 modules in the basedir from the master.cfg file with a simple "import
365 private" statement. Thanks to Thomas Vander Stichele for the catch.
368 * Release 0.6.5 (18 May 2005)
370 ** deprecated config keys removed
372 The 'webPortnum', 'webPathname', 'irc', and 'manholePort' config-file keys,
373 which were deprecated in the previous release, have now been removed. In
374 addition, Builders must now always be configured with dictionaries: the
375 support for configuring them with tuples has been removed.
377 ** master/slave creation and startup changed
379 The buildbot no longer uses .tap files to store serialized representations of
380 the buildmaster/buildslave applications. Instead, this release now uses .tac
381 files, which are human-readable scripts that create new instances (rather
382 than .tap files, which were pickles of pre-created instances). 'mktap
383 buildbot' is gone.
385 You will need to update your buildbot directories to handle this. The
386 procedure is the same as creating a new buildmaster or buildslave: use
387 'buildbot master BASEDIR' or 'buildbot slave BASEDIR ARGS..'. This will
388 create a 'buildbot.tac' file in the target directory. The 'buildbot start
389 BASEDIR' will use twistd to start the application.
391 The 'buildbot start' command now looks for a Makefile.buildbot, and if it
392 finds one (and /usr/bin/make exists), it will use it to start the application
393 instead of calling twistd directly. This allows you to customize startup,
394 perhaps by adding environment variables. The setup commands create a sample
395 file in Makefile.sample, but you must copy this to Makefile.buildbot to
396 actually use it. The previous release looked for a bare 'Makefile', and also
397 installed a 'Makefile', so you were always using the customized approach,
398 even if you didn't ask for it. That old Makefile launched the .tap file, so
399 changing names was also necessary to make sure that the new 'buildbot start'
400 doesn't try to run the old .tap file.
402 'buildbot stop' now uses os.kill instead of spawning an external process,
403 making it more likely to work under windows. It waits up to 5 seconds for the
404 daemon to go away, so you can now do 'buildbot stop BASEDIR; buildbot start
405 BASEDIR' with less risk of launching the new daemon before the old one has
406 fully shut down. Likewise, 'buildbot start' imports twistd's internals
407 directly instead of spawning an external copy, so it should work better under
408 windows.
410 ** new documentation
412 All of the old Lore-based documents were converted into a new Texinfo-format
413 manual, and considerable new text was added to describe the installation
414 process. The docs are not yet complete, but they're slowly shaping up to form
415 a proper user's manual.
417 ** new features
419 Arch checkouts can now use precise revision stamps instead of always using
420 the latest revision. A separate Source step for using Bazaar (an alternative
421 Arch client) instead of 'tla' was added. A Source step for Cogito (the new
422 linux kernel VC system) was contributed by Brandon Philips. All Source steps
423 now accept a retry= argument to indicate that failing VC checkouts should be
424 retried a few times (SF#1200395), note that this requires an updated
425 buildslave.
427 The 'buildbot sendchange' command was added, to be used in VC hook scripts to
428 send changes at a pb.PBChangeSource . contrib/arch_buildbot.py was added to
429 use this tool; it should be installed using the 'Arch meta hook' scheme.
431 Changes can now accept a branch= parameter, and Builders have an
432 isBranchImportant() test that acts like isFileImportant(). Thanks to Thomas
433 Vander Stichele. Note: I renamed his tag= to branch=, in anticipation of an
434 upcoming feature to build specific branches. "tag" seemed too CVS-centric.
436 LogFiles have been rewritten to stream the incoming data directly to disk
437 rather than keeping a copy in memory all the time (SF#1200392). This
438 drastically reduces the buildmaster's memory requirements and makes 100MB+
439 log files feasible. The log files are stored next to the serialized Builds,
440 in files like BASEDIR/builder-dir/12-log-compile-output, so you'll want a
441 cron job to delete old ones just like you do with old Builds. Old-style
442 Builds from 0.6.4 and earlier are converted when they are first read, so the
443 first load of the Waterfall display after updating to this release may take
444 quite some time.
446 ** build process updates
448 BuildSteps can now return a status of EXCEPTION, which terminates the build
449 right away. This allows exceptions to be caught right away, but still make
450 sure the build stops quickly.
452 ** bug fixes
454 Some more windows incompatibilities were fixed. The test suite now has two
455 failing tests remaining, both of which appear to be Twisted issues that
456 should not affect normal operation.
458 The test suite no longer raises any deprecation warnings when run against
459 twisted-2.0 (except for the ones which come from Twisted itself).
462 * Release 0.6.4 (28 Apr 2005)
464 ** major bugs fixed
466 The 'buildbot' tool in 0.6.3, when used to create a new buildmaster, failed
467 unless it found a 'changes.pck' file. As this file is created by a running
468 buildmaster, this made 0.6.3 completely unusable for first-time
469 installations. This has been fixed.
471 ** minor bugs fixed
473 The IRC bot had a bug wherein asking it to watch a certain builder (the "I'll
474 give a shout when the build finishes" message) would cause an exception, so
475 it would not, in fact, shout. The HTML page had an exception in the "change
476 sources" page (reached by following the "Changes" link at the top of the
477 column that shows the names of commiters). Re-loading the config file while
478 builders were already attached would result in a benign error message. The
479 server side of the PBListener status client had an exception when providing
480 information about a non-existent Build (e.g., when the client asks for the
481 Build that is currently running, and the server says "None").
483 These bugs have all been fixed.
485 The unit tests now pass under python2.2; they were failing before because of
486 some 2.3isms that crept in. More unit tests which failed under windows now
487 pass, only one (test_webPathname_port) is still failing.
489 ** 'buildbot' tool looks for a .buildbot/options file
491 The 'statusgui' and the 'debugclient' subcommands can both look for a
492 .buildbot/ directory, and an 'options' file therein, to extract default
493 values for the location of the buildmaster. This directory is searched in the
494 current directory, its parent, etc, all the way up to the filesystem root
495 (assuming you own the directories in question). It also look in ~/.buildbot/
496 for this file. This feature allows you to put a .buildbot at the top of your
497 working tree, telling any 'buildbot' invocations you perform therein how to
498 get to the buildmaster associated with that tree's project.
500 Windows users get something similar, using %APPDATA%/buildbot instead of
501 ~/.buildbot .
503 ** windows ShellCommands are launched with 'cmd.exe'
505 The buildslave has been modified to run all list-based ShellCommands by
506 prepending [os.environ['COMSPEC'], '/c'] to the argv list before execution.
507 This should allow the buildslave's PATH to be searched for commands,
508 improving the chances that it can run the same 'trial -o foo' commands as a
509 unix buildslave. The potential downside is that spaces in argv elements might
510 be re-parsed, or quotes might be re-interpreted. The consensus on the mailing
511 list was that this is a useful thing to do, but please report any problems
512 you encounter with it.
514 ** minor features
516 The Waterfall display now shows the buildbot's home timezone at the top of
517 the timestamp column. The default favicon.ico is now much nicer-looking (it
518 is generated with Blender.. the icon.blend file is available in CVS in
519 docs/images/ should you care to play with it).
523 * Release 0.6.3 (25 Apr 2005)
525 ** 'buildbot' tool gets more uses
527 The 'buildbot' executable has acquired three new subcommands. 'buildbot
528 debugclient' brings up the small remote-control panel that connects to a
529 buildmaster (via the slave port and the c['debugPassword']). This tool,
530 formerly in contrib/debugclient.py, lets you reload the config file, force
531 builds, and simulate inbound commit messages. It requires gtk2, glade, and
532 the python bindings for both to be installed.
534 'buildbot statusgui' brings up a live status client, formerly available by
535 running buildbot/clients/gtkPanes.py as a program. This connects to the PB
536 status port that you create with:
538   c['status'].append(client.PBListener(portnum))
540 and shows two boxes per Builder, one for the last build, one for current
541 activity. These boxes are updated in realtime. The effect is primitive, but
542 is intended as an example of what's possible with the PB status interface.
544 'buildbot statuslog' provides a text-based running log of buildmaster events.
546 Note: command names are subject to change. These should get much more useful
547 over time.
549 ** web page has a favicon
551 When constructing the html.Waterfall instance, you can provide the filename
552 of an image that will be provided when the "favicon.ico" resource is
553 requested. Many web browsers display this as an icon next to the URL or
554 bookmark. A goofy little default icon is included.
556 ** web page has CSS
558 Thanks to Thomas Vander Stichele, the Waterfall page is now themable through
559 CSS. The default CSS is located in buildbot/status/classic.css, and creates a
560 page that is mostly identical to the old, non-CSS based table.
562 You can specify a different CSS file to use by passing it as the css=
563 argument to html.Waterfall(). See the docstring for Waterfall for some more
564 details.
566 ** builder "categories"
568 Thomas has added code which places each Builder in an optional "category".
569 The various status targets (Waterfall, IRC, MailNotifier) can accept a list
570 of categories, and they will ignore any activity in builders outside this
571 list. This makes it easy to create some Builders which are "experimental" or
572 otherwise not yet ready for the world to see, or indicate that certain
573 builders should not harass developers when their tests fail, perhaps because
574 the build slaves for them are not yet fully functional.
576 ** Deprecated features
578 *** defining Builders with tuples is deprecated
580 For a long time, the preferred way to define builders in the config file has
581 been with a dictionary. The less-flexible old style of a 4-item tuple (name,
582 slavename, builddir, factory) is now officially deprecated (i.e., it will
583 emit a warning if you use it), and will be removed in the next release.
584 Dictionaries are more flexible: additional keys like periodicBuildTime are
585 simply unavailable to tuple-defined builders.
587 Note: it is a good idea to watch the logfile (usually in twistd.log) when you
588 first start the buildmaster, or whenever you reload the config file. Any
589 warnings or errors in the config file will be found there.
591 *** c['webPortnum'], c['webPathname'], c['irc'] are deprecated
593 All status reporters should be defined in the c['status'] array, using
594 buildbot.status.html.Waterfall or buildbot.status.words.IRC . These have been
595 deprecated for a while, but this is fair warning that these keys will be
596 removed in the next release.
598 *** c['manholePort'] is deprecated
600 Again, this has been deprecated for a while, in favor of:
602  c['manhole'] = master.Manhole(port, username, password)
604 The preferred syntax will eventually let us use other, better kinds of debug
605 shells, such as the experimental curses-based ones in the Twisted sandbox
606 (which would offer command-line editing and history).
608 ** bug fixes
610 The waterfall page has been improved a bit. A circular-reference bug in the
611 web page's TextLog class was fixed, which caused a major memory leak in a
612 long-running buildmaster with large logfiles that are viewed frequently.
613 Modifying the config file in a way which only changed a builder's base
614 directory now works correctly. The 'buildbot' command tries to create
615 slightly more useful master/slave directories, adding a Makefile entry to
616 re-create the .tap file, and removing global-read permissions from the files
617 that may contain buildslave passwords.
619 ** twisted-2.0.0 compatibility
621 Both buildmaster and buildslave should run properly under Twisted-2.0 . There
622 are still some warnings about deprecated functions, some of which could be
623 fixed, but there are others that would require removing compatibility with
624 Twisted-1.3, and I don't expect to do that until 2.0 has been out and stable
625 for at least several months. The unit tests should pass under 2.0, whereas
626 the previous buildbot release had tests which could hang when run against the
627 new "trial" framework in 2.0.
629 The Twisted-specific steps (including Trial) have been updated to match 2.0
630 functionality.
632 ** win32 compatibility
634 Thankt to Nick Trout, more compatibility fixes have been incorporated,
635 improving the chances that the unit tests will pass on windows systems. There
636 are still some problems, and a step-by-step "running buildslaves on windows"
637 document would be greatly appreciated.
639 ** API docs
641 Thanks to Thomas Vander Stichele, most of the docstrings have been converted
642 to epydoc format. There is a utility in docs/gen-reference to turn these into
643 a tree of cross-referenced HTML pages. Eventually these docs will be
644 auto-generated and somehow published on the buildbot web page.
648 * Release 0.6.2 (13 Dec 2004)
650 ** new features
652 It is now possible to interrupt a running build. Both the web page and the
653 IRC bot feature 'stop build' commands, which can be used to interrupt the
654 current BuildStep and accelerate the termination of the overall Build. The
655 status reporting for these still leaves something to be desired (an
656 'interrupt' event is pushed into the column, and the reason for the interrupt
657 is added to a pseudo-logfile for the step that was stopped, but if you only
658 look at the top-level status it appears that the build failed on its own).
660 Builds are also halted if the connection to the buildslave is lost. On the
661 slave side, any active commands are halted if the connection to the
662 buildmaster is lost.
664 ** minor new features
666 The IRC log bot now reports ETA times in a MMSS format like "2m45s" instead
667 of the clunky "165 seconds".
669 ** bug fixes
671 *** Slave Disconnect
673 Slave disconnects should be handled better now: the current build should be
674 abandoned properly. Earlier versions could get into weird states where the
675 build failed to finish, clogging the builder forever (or at least until the
676 buildmaster was restarted).
678 In addition, there are weird network conditions which could cause a
679 buildslave to attempt to connect twice to the same buildmaster. This can
680 happen when the slave is sending large logfiles over a slow link, while using
681 short keepalive timeouts. The buildmaster has been fixed to allow the second
682 connection attempt to take precedence over the first, so that the older
683 connection is jettisoned to make way for the newer one.
685 In addition, the buildslave has been fixed to be less twitchy about timeouts.
686 There are now two parameters: keepaliveInterval (which is controlled by the
687 mktap 'keepalive' argument), and keepaliveTimeout (which requires editing the
688 .py source to change from the default of 30 seconds). The slave expects to
689 see *something* from the master at least once every keepaliveInterval
690 seconds, and will try to provoke a response (by sending a keepalive request)
691 'keepaliveTimeout' seconds before the end of this interval just in case there
692 was no regular traffic. Any kind of traffic will qualify, including
693 acknowledgements of normal build-status updates.
695 The net result is that, as long as any given PB message can be sent over the
696 wire in less than 'keepaliveTimeout' seconds, the slave should not mistakenly
697 disconnect because of a timeout. There will be traffic on the wire at least
698 every 'keepaliveInterval' seconds, which is what you want to pay attention to
699 if you're trying to keep an intervening NAT box from dropping what it thinks
700 is an abandoned connection. A quiet loss of connection will be detected
701 within 'keepaliveInterval' seconds.
703 *** Large Logfiles
705 The web page rendering code has been fixed to deliver large logfiles in
706 pieces, using a producer/consumer apparatus. This avoids the large spike in
707 memory consumption when the log file body was linearized into a single string
708 and then buffered in the socket's application-side transmit buffer. This
709 should also avoid the 640k single-string limit for web.distrib servers that
710 could be hit by large (>640k) logfiles.
714 * Release 0.6.1 (23 Nov 2004)
716 ** win32 improvements/bugfixes
718 Several changes have gone in to improve portability to non-unix systems. It
719 should be possible to run a build slave under windows without major issues
720 (although step-by-step documentation is still greatly desired: check the
721 mailing list for suggestions from current win32 users).
723 *** PBChangeSource: use configurable directory separator, not os.sep
725 The PBChangeSource, which listens on a TCP socket for change notices
726 delivered from tools like contrib/svn_buildbot.py, was splitting source
727 filenames with os.sep . This is inappropriate, because those file names are
728 coming from the VC repository, not the local filesystem, and the repository
729 host may be running a different OS (with a different separator convention)
730 than the buildmaster host. In particular, a win32 buildmaster using a CVS
731 repository running on a unix box would be confused.
733 PBChangeSource now takes a sep= argument to indicate the separator character
734 to use.
736 *** build saving should work better
738 windows cannot do the atomic os.rename() trick that unix can, so under win32
739 the buildmaster falls back to save/delete-old/rename, which carries a slight
740 risk of losing a saved build log (if the system were to crash between the
741 delete-old and the rename).
743 ** new features
745 *** test-result tracking
747 Work has begun on fine-grained test-result handling. The eventual goal is to
748 be able to track individual tests over time, and create problem reports when
749 a test starts failing (which then are resolved when the test starts passing
750 again). The first step towards this is an ITestResult interface, and code in
751 the TrialTestParser to create such results for all non-passing tests (the
752 ones for which Trial emits exception tracebacks).
754 These test results are currently displayed in a tree-like display in a page
755 accessible from each Build's page (follow the numbered link in the yellow
756 box at the start of each build to get there).
758 This interface is still in flux, as it really wants to be able to accomodate
759 things like compiler warnings and tests that are skipped because of missing
760 libraries or unsupported architectures.
762 ** bug fixes
764 *** VC updates should survive temporary failures
766 Some VC systems (CVS and SVN in particular) get upset when files are turned
767 into directories or vice versa, or when repository items are moved without
768 the knowledge of the VC system. The usual symptom is that a 'cvs update'
769 fails where a fresh checkout succeeds.
771 To avoid having to manually intervene, the build slaves' VC commands have
772 been refactored to respond to update failures by deleting the tree and
773 attempting a full checkout. This may cause some unnecessary effort when,
774 e.g., the CVS server falls off the net, but in the normal case it will only
775 come into play when one of these can't-cope situations arises.
777 *** forget about an existing build when the slave detaches
779 If the slave was lost during a build, the master did not clear the
780 .currentBuild reference, making that builder unavailable for later builds.
781 This has been fixed, so that losing a slave should be handled better. This
782 area still needs some work, I think it's still possible to get both the
783 slave and the master wedged by breaking the connection at just the right
784 time. Eventually I want to be able to resume interrupted builds (especially
785 when the interruption is the result of a network failure and not because the
786 slave or the master actually died).
788 *** large logfiles now consume less memory
790 Build logs are stored as lists of (type,text) chunks, so that
791 stdout/stderr/headers can be displayed differently (if they were
792 distinguishable when they were generated: stdout and stderr are merged when
793 usePTY=1). For multi-megabyte logfiles, a large list with many short strings
794 could incur a large overhead. The new behavior is to merge same-type string
795 chunks together as they are received, aiming for a chunk size of about 10kb,
796 which should bring the overhead down to a more reasonable level.
798 There remains an issue with actually delivering large logfiles over, say,
799 the HTML interface. The string chunks must be merged together into a single
800 string before delivery, which causes a spike in the memory usage when the
801 logfile is viewed. This can also break twisted.web.distrib -type servers,
802 where the underlying PB protocol imposes a 640k limit on the size of
803 strings. This will be fixed (with a proper Producer/Consumer scheme) in the
804 next release.
807 * Release 0.6.0 (30 Sep 2004)
809 ** new features
811 *** /usr/bin/buildbot control tool
813 There is now an executable named 'buildbot'. For now, this just provides a
814 convenient front-end to mktap/twistd/kill, but eventually it will provide
815 access to other client functionality (like the 'try' builds, and a status
816 client). Assuming you put your buildbots in /var/lib/buildbot/master/FOO,
817 you can do 'buildbot create-master /var/lib/buildbot/master/FOO' and it will
818 create the .tap file and set up a sample master.cfg for you. Later,
819 'buildbot start /var/lib/buildbot/master/FOO' will start the daemon.
822 *** build status now saved in external files, -shutdown.tap unnecessary
824 The status rewrite included a change to save all build status in a set of
825 external files. These files, one per build, are put in a subdirectory of the
826 master's basedir (named according to the 'builddir' parameter of the Builder
827 configuration dictionary). This helps keep the buildmaster's memory
828 consumption small: the (potentially large) build logs are kept on disk
829 instead of in RAM. There is a small cache (2 builds per builder) kept in
830 memory, but everything else lives on disk.
832 The big change is that the buildmaster now keeps *all* status in these
833 files. It is no longer necessary to preserve the buildbot-shutdown.tap file
834 to run a persistent buildmaster. The buildmaster may be launched with
835 'twistd -f buildbot.tap' each time, in fact the '-n' option can be added to
836 prevent twistd from automatically creating the -shutdown.tap file.
838 There is still one lingering bug with this change: the Expectations object
839 for each builder (which records how long the various steps took, to provide
840 an ETA value for the next time) is not yet saved. The result is that the
841 first build after a restart will not provide an ETA value.
843 0.6.0 keeps status in a single file per build, as opposed to 0.5.0 which
844 kept status in many subdirectories (one layer for builds, another for steps,
845 and a third for logs). 0.6.0 will detect and delete these subdirectories as
846 it overwrites them.
848 The saved builds are optional. To prevent disk usage from growing without
849 bounds, you may want to set up a cron job to run 'find' and delete any which
850 are too old. The status displays will happily survive without those saved
851 build objects.
853 The set of recorded Changes is kept in a similar file named 'changes.pck'.
856 *** source checkout now uses timestamp/revision
858 Source checkouts are now performed with an appropriate -D TIMESTAMP (for
859 CVS) or -r REVISION (for SVN) marker to obtain the exact sources that were
860 specified by the most recent Change going into the current Build. This
861 avoids a race condition in which a change might be committed after the build
862 has started but before the source checkout has completed, resulting in a
863 mismatched set of source files. Such changes are now ignored.
865 This works by keeping track of repository-wide revision/transaction numbers
866 (for version control systems that offer them, like SVN). The checkout or
867 update is performed with the highest such revision number. For CVS (which
868 does not have them), the timestamp of each commit message is used, and a -D
869 argument is created to place the checkout squarely in the middle of the "tree
870 stable timer"'s window.
872 This also provides the infrastructure for the upcoming 'try' feature. All
873 source-checkout commands can now obtain a base revision marker and a patch
874 from the Build, allowing certain builds to be performed on something other
875 than the most recent sources.
877 See source.xhtml and steps.xhtml for details.
880 *** Darcs and Arch support added
882 There are now build steps which retrieve a source tree from Darcs and Arch
883 repositories. See steps.xhtml for details.
885 Preliminary P4 support has been added, thanks to code from Dave Peticolas.
886 You must manually set up each build slave with an appropriate P4CLIENT: all
887 buildbot does is run 'p4 sync' at the appropriate times.
890 *** Status reporting rewritten
892 Status reporting was completely revamped. The config file now accepts a
893 BuildmasterConfig['status'] entry, with a list of objects that perform status
894 delivery. The old config file entries which controlled the web status port
895 and the IRC bot have been deprecated in favor of adding instances to
896 ['status']. The following status-delivery classes have been implemented, all
897 in the 'buildbot.status' package:
899  client.PBListener(port, username, passwd)
900  html.Waterfall(http_port, distrib_port)
901  mail.MailNotifier(fromaddr, mode, extraRecipients..)
902  words.IRC(host, nick, channels)
904 See the individual docstrings for details about how to use each one. You can
905 create new status-delivery objects by following the interfaces found in the
906 buildbot.interfaces module.
909 *** BuildFactory configuration process changed
911 The basic BuildFactory class is now defined in buildbot.process.factory
912 rather than buildbot.process.base, so you will have to update your config
913 files. factory.BuildFactory is the base class, which accepts a list of Steps
914 to run. See docs/factories.xhtml for details.
916 There are now easier-to-use BuildFactory classes for projects which use GNU
917 Autoconf, perl's MakeMaker (CPAN), python's distutils (but no unit tests),
918 and Twisted's Trial. Each one takes a separate 'source' Step to obtain the
919 source tree, and then fills in the rest of the Steps for you.
922 *** CVS/SVN VC steps unified, simplified
924 The confusing collection of arguments for the CVS step ('clobber=',
925 'copydir=', and 'export=') have been removed in favor of a single 'mode'
926 argument. This argument describes how you want to use the sources: whether
927 you want to update and compile everything in the same tree (mode='update'),
928 or do a fresh checkout and full build each time (mode='clobber'), or
929 something in between.
931 The SVN (Subversion) step has been unified and accepts the same mode=
932 parameter as CVS. New version control steps will obey the same interface.
934 Most of the old configuration arguments have been removed. You will need to
935 update your configuration files to use the new arguments. See
936 docs/steps.xhtml for a description of all the new parameters.
939 *** Preliminary Debian packaging added
941 Thanks to the contributions of Kirill Lapshin, we can now produce .deb
942 installer packages. These are still experimental, but they include init.d
943 startup/shutdown scripts, which the the new /usr/bin/buildbot to invoke
944 twistd. Create your buildmasters in /var/lib/buildbot/master/FOO, and your
945 slaves in /var/lib/buildbot/slave/BAR, then put FOO and BAR in the
946 appropriate places in /etc/default/buildbot . After that, the buildmasters
947 and slaves will be started at every boot.
949 Pre-built .debs are not yet distributed. Use 'debuild -uc -us' from the
950 source directory to create them.
953 ** minor features
956 *** Source Stamps
958 Each build now has a "source stamp" which describes what sources it used. The
959 idea is that the sources for this particular build can be completely
960 regenerated from the stamp. The stamp is a tuple of (revision, patch), where
961 the revision depends on the VC system being used (for CVS it is either a
962 revision tag like "BUILDBOT-0_5_0" or a datestamp like "2004/07/23", for
963 Subversion it is a revision number like 11455). This must be combined with
964 information from the Builder that is constant across all builds (something to
965 point at the repository, and possibly a branch indicator for CVS and other VC
966 systems that don't fold this into the repository string).
968 The patch is an optional unified diff file, ready to be applied by running
969 'patch -p0 <PATCH' from inside the workdir. This provides support for the
970 'try' feature that will eventually allow developers to run buildbot tests on
971 their code before checking it in.
974 *** SIGHUP causes the buildmaster's configuration file to be re-read
976 *** IRC bot now has 'watch' command
978 You can now tell the buildbot's IRC bot to 'watch <buildername>' on a builder
979 which is currently performing a build. When that build is finished, the
980 buildbot will make an announcement (including the results of the build).
982 The IRC 'force build' command will also announce when the resulting build has
983 completed.
986 *** the 'force build' option on HTML and IRC status targets can be disabled
988 The html.Waterfall display and the words.IRC bot may be constructed with an
989 allowForce=False argument, which removes the ability to force a build through
990 these interfaces. Future versions will be able to restrict this build-forcing
991 capability to authenticated users. The per-builder HTML page no longer
992 displays the 'Force Build' buttons if it does not have this ability. Thanks
993 to Fred Drake for code and design suggestions.
996 *** master now takes 'projectName' and 'projectURL' settings
998 These strings allow the buildbot to describe what project it is working for.
999 At the moment they are only displayed on the Waterfall page, but in the next
1000 release they will be retrieveable from the IRC bot as well.
1003 *** survive recent (SVN) Twisted versions
1005 The buildbot should run correctly (albeit with plenty of noisy deprecation
1006 warnings) under the upcoming Twisted-2.0 release.
1009 *** work-in-progress realtime Trial results acquisition
1011 Jonathan Simms (<slyphon>) has been working on 'retrial', a rewrite of
1012 Twisted's unit test framework that will most likely be available in
1013 Twisted-2.0 . Although it is not yet complete, the buildbot will be able to
1014 use retrial in such a way that build status is reported on a per-test basis,
1015 in real time. This will be the beginning of fine-grained test tracking and
1016 Problem management, described in docs/users.xhtml .
1019 * Release 0.5.0 (22 Jul 2004)
1021 ** new features
1023 *** web.distrib servers via TCP
1025 The 'webPathname' config option, which specifies a UNIX socket on which to
1026 publish the waterfall HTML page (for use by 'mktap web -u' or equivalent),
1027 now accepts a numeric port number. This publishes the same thing via TCP,
1028 allowing the parent web server to live on a separate machine.
1030 This config option could be named better, but it will go away altogether in
1031 a few releases, when status delivery is unified. It will be replaced with a
1032 WebStatusTarget object, and the config file will simply contain a list of
1033 various kinds of status targets.
1035 *** 'master.cfg' filename is configurable
1037 The buildmaster can use a config file named something other than
1038 "master.cfg". Use the --config=foo.cfg option to mktap to control this.
1040 *** FreshCVSSource now uses newcred (CVSToys >= 1.0.10)
1042 The FreshCVSSource class now defaults to speaking to freshcvs daemons from
1043 modern CVSToys releases. If you need to use the buildbot with a daemon from
1044 CVSToys-1.0.9 or earlier, use FreshCVSSourceOldcred instead. Note that the
1045 new form only requires host/port/username/passwd: the "serviceName"
1046 parameter is no longer meaningful.
1048 *** Builders are now configured with a dictionary, not a tuple
1050 The preferred way to set up a Builder in master.cfg is to provide a
1051 dictionary with various keys, rather than a (non-extensible) 4-tuple. See
1052 docs/config.xhtml for details. The old tuple-way is still supported for now,
1053 it will probably be deprecated in the next release and removed altogether in
1054 the following one.
1056 *** .periodicBuildTime is now exposed to the config file
1058 To set a builder to run at periodic intervals, simply add a
1059 'periodicBuildTime' key to its master.cfg dictionary. Again, see
1060 docs/config.xhtml for details.
1062 *** svn_buildbot.py adds --include, --exclude
1064 The commit trigger script now gives you more control over which files are
1065 sent to the buildmaster and which are not.
1067 *** usePTY is controllable at slave mktap time
1069 The buildslaves usually run their child processes in a pty, which creates a
1070 process group for all the children, which makes it much easier to kill them
1071 all at once (i.e. if a test hangs). However this causes problems on some
1072 systems. Rather than hacking slavecommand.py to disable the use of these
1073 ptys, you can now create the slave's .tap file with --usepty=0 at mktap
1074 time.
1076 ** Twisted changes
1078 A summary of warnings (e.g. DeprecationWarnings) is provided as part of the
1079 test-case summarizer. The summarizer also counts Skips, expectedFailures,
1080 and unexpectedSuccesses, displaying the counts on the test step's event box.
1082 The RunUnitTests step now uses "trial -R twisted" instead of "trial
1083 twisted.test", which is a bit cleaner. All .pyc files are deleted before
1084 starting trial, to avoid getting tripped up by deleted .py files.
1086 ** documentation
1088 docs/config.xhtml now describes the syntax and allowed contents of the
1089 'master.cfg' configuration file.
1091 ** bugfixes
1093 Interlocks had a race condition that could cause the lock to get stuck
1094 forever.
1096 FreshCVSSource has a prefix= argument that was moderately broken (it used to
1097 only work if the prefix was a single directory component). It now works with
1098 subdirectories.
1100 The buildmaster used to complain when it saw the "info" directory in a
1101 slave's workspace. This directory is used to publish information about the
1102 slave host and its administrator, and is not a leftover build directory as
1103 the complaint suggested. This complain has been silenced.
1106 * Release 0.4.3 (30 Apr 2004)
1108 ** PBChangeSource made explicit
1110 In 0.4.2 and before, an internal interface was available which allowed
1111 special clients to inject changes into the Buildmaster. This interface is
1112 used by the contrib/svn_buildbot.py script. The interface has been extracted
1113 into a proper PBChangeSource object, which should be created in the
1114 master.cfg file just like the other kinds of ChangeSources. See
1115 docs/sources.xhtml for details.
1117 If you were implicitly using this change source (for example, if you use
1118 Subversion and the svn_buildbot.py script), you *must* add this source to
1119 your master.cfg file, or changes will not be delivered and no builds will be
1120 triggered.
1122 The PBChangeSource accepts the same "prefix" argument as all other
1123 ChangeSources. For a SVN repository that follows the recommended practice of
1124 using "trunk/" for the trunk revisions, you probably want to construct the
1125 source like this:
1127  source = PBChangeSource(prefix="trunk")
1129 to make sure that the Builders are given sensible (trunk-relative)
1130 filenames for each changed source file.
1132 ** Twisted changes
1134 *** step_twisted.RunUnitTests can change "bin/trial"
1136 The twisted RunUnitTests step was enhanced to let you run something other
1137 than "bin/trial", making it easier to use a buildbot on projects which use
1138 Twisted but aren't actually Twisted itself.
1140 *** Twisted now uses Subversion
1142 Now that Twisted has moved from CVS to SVN, the Twisted build processes have
1143 been modified to perform source checkouts from the Subversion repository.
1145 ** minor feature additions
1147 *** display Changes with HTML
1149 Changes are displayed with a bit more pizazz, and a links= argument was
1150 added to allow things like ViewCVS links to be added to the display
1151 (although it is not yet clear how this argument should be used: the
1152 interface remains subject to change untill it has been documented).
1154 *** display ShellCommand logs with HTML
1156 Headers are in blue, stderr is in red (unless usePTY=1 in which case stderr
1157 and stdout are indistinguishable). A link is provided which returns the same
1158 contents as plain text (by appending "?text=1" to the URL).
1160 *** buildslaves send real tracebacks upon error
1162 The .unsafeTracebacks option has been turned on for the buildslaves,
1163 allowing them to send a full stack trace when an exception occurs, which is
1164 logged in the buildmaster's twistd.log file. This makes it much easier to
1165 determine what went wrong on the slave side.
1167 *** BasicBuildFactory refactored
1169 The BasicBuildFactory class was refactored to make it easier to create
1170 derivative classes, in particular the BasicSVN variant.
1172 *** "ping buildslave" web button added
1174 There is now a button on the "builder information" page that lets a web user
1175 initiate a ping of the corresponding build slave (right next to the button
1176 that lets them force a build). This was added to help track down a problem
1177 with the slave keepalives.
1179 ** bugs fixed:
1181 You can now have multiple BuildSteps with the same name (the names are used
1182 as hash keys in the data structure that helps determine ETA values for each
1183 step, the new code creates unique key names if necessary to avoid
1184 collisions). This means that, for example, you do not have to create a
1185 BuildStep subclass just to have two Compile steps in the same process.
1187 If CVSToys is not installed, the tests that depend upon it are skipped.
1189 Some tests in 0.4.2 failed because of a missing set of test files, they are
1190 now included in the tarball properly.
1192 Slave keepalives should work better now in the face of silent connection
1193 loss (such as when an intervening NAT box times out the association), the
1194 connection should be reestablished in minutes instead of hours.
1196 Shell commands on the slave are invoked with an argument list instead of the
1197 ugly and error-prone split-on-spaces approach. If the ShellCommand is given
1198 a string (instead of a list), it will fall back to splitting on spaces.
1199 Shell commands should work on win32 now (using COMSPEC instead of /bin/sh).
1201 Buildslaves under w32 should theoretically work now, and one was running for
1202 the Twisted buildbot for a while until the machine had to be returned.
1204 The "header" lines in ShellCommand logs (which include the first line, that
1205 displays the command being run, and the last, which shows its exit status)
1206 are now generated by the buildslave side instead of the local (buildmaster)
1207 side. This can provide better error handling and is generally cleaner.
1208 However, if you have an old buildslave (running 0.4.2 or earlier) and a new
1209 buildmaster, then neither end will generate these header lines.
1211 CVSCommand was improved, in certain situations 0.4.2 would perform
1212 unnecessary checkouts (when an update would have sufficed). Thanks to Johan
1213 Dahlin for the patches. The status output was fixed as well, so that
1214 failures in CVS and SVN commands (such as not being able to find the 'svn'
1215 executable) make the step status box red.
1217 Subversion support was refactored to make it behave more like CVS. This is a
1218 work in progress and will be improved in the next release.
1221 * Release 0.4.2 (08 Jan 2004)
1223 ** test suite updated
1225 The test suite has been completely moved over to Twisted's "Trial"
1226 framework, and all tests now pass. To run the test suite (consisting of 64
1227 tests, probably covering about 30% of BuildBot's logic), do this:
1229  PYTHONPATH=. trial -v buildbot.test
1231 ** Mail parsers updated
1233 Several bugs in the mail-parsing code were fixed, allowing a buildmaster to
1234 be triggered by mail sent out by a CVS repository. (The Twisted Buildbot is
1235 now using this to trigger builds, as their CVS server machine is having some
1236 difficulties with FreshCVS). The FreshCVS mail format for directory
1237 additions appears to have changed recently: the new parser should handle
1238 both old and new-style messages.
1240 A parser for Bonsai commit messages (buildbot.changes.mail.parseBonsaiMail)
1241 was contributed by Stephen Davis. Thanks Stephen!
1243 ** CVS "global options" now available
1245 The CVS build step can now accept a list of "global options" to give to the
1246 cvs command. These go before the "update"/"checkout" word, and are described
1247 fully by "cvs --help-options". Two useful ones might be "-r", which causes
1248 checked-out files to be read-only, and "-R", which assumes the repository is
1249 read-only (perhaps by not attempting to write to lock files).
1252 * Release 0.4.1 (09 Dec 2003)
1254 ** MaildirSources fixed
1256 Several bugs in MaildirSource made them unusable. These have been fixed (for
1257 real this time). The Twisted buildbot is using an FCMaildirSource while they
1258 fix some FreshCVS daemon problems, which provided the encouragement for
1259 getting these bugs fixed.
1261 In addition, the use of DNotify (only available under linux) was somehow
1262 broken, possibly by changes in some recent version of Python. It appears to
1263 be working again now (against both python-2.3.3c1 and python-2.2.1).
1265 ** master.cfg can use 'basedir' variable
1267 As documented in the sample configuration file (but not actually implemented
1268 until now), a variable named 'basedir' is inserted into the namespace used
1269 by master.cfg . This can be used with something like:
1271   os.path.join(basedir, "maildir")
1273 to obtain a master-basedir-relative location.
1276 * Release 0.4.0 (05 Dec 2003)
1278 ** newapp
1280 I've moved the codebase to Twisted's new 'application' framework, which
1281 drastically cleans up service startup/shutdown just like newcred did for
1282 authorization. This is mostly an internal change, but the interface to
1283 IChangeSources was modified, so in the off chance that someone has written a
1284 custom change source, it may have to be updated to the new scheme.
1286 The most user-visible consequence of this change is that now both
1287 buildmasters and buildslaves are generated with the standard Twisted 'mktap'
1288 utility. Basic documentation is in the README file.
1290 Both buildmaster and buildslave .tap files need to be re-generated to run
1291 under the new code. I have not figured out the styles.Versioned upgrade path
1292 well enough to avoid this yet. Sorry.
1294 This also means that both buildslaves and the buildmaster require
1295 Twisted-1.1.0 or later.
1297 ** reloadable master.cfg
1299 Most aspects of a buildmaster is now controlled by a configuration file
1300 which can be re-read at runtime without losing build history. This feature
1301 makes the buildmaster *much* easier to maintain.
1303 In the previous release, you would create the buildmaster by writing a
1304 program to define the Builders and ChangeSources and such, then run it to
1305 create the .tap file. In the new release, you use 'mktap' to create the .tap
1306 file, and the only parameter you give it is the base directory to use. Each
1307 time the buildmaster starts, it will look for a file named 'master.cfg' in
1308 that directory and parse it as a python script. That script must define a
1309 dictionary named 'BuildmasterConfig' with various keys to define the
1310 builders, the known slaves, what port to use for the web server, what IRC
1311 channels to connect to, etc.
1313 This config file can be re-read at runtime, and the buildmaster will compute
1314 the differences and add/remove services as necessary. The re-reading is
1315 currently triggered through the debug port (contrib/debugclient.py is the
1316 debug port client), but future releases will add the ability to trigger the
1317 reconfiguration by IRC command, web page button, and probably a local UNIX
1318 socket (with a helper script to trigger a rebuild locally).
1320 docs/examples/twisted_master.cfg contains a sample configuration file, which
1321 also lists all the keys that can be set.
1323 There may be some bugs lurking, such as re-configuring the buildmaster while
1324 a build is running. It needs more testing.
1326 ** MaxQ support
1328 Radix contributed some support scripts to run MaxQ test scripts. MaxQ
1329 (http://maxq.tigris.org/) is a web testing tool that allows you to record
1330 HTTP sessions and play them back.
1332 ** Builders can now wait on multiple Interlocks
1334 The "Interlock" code has been enhanced to allow multiple builders to wait on
1335 each one. This was done to support the new config-file syntax for specifying
1336 Interlocks (in which each interlock is a tuple of A and [B], where A is the
1337 builder the Interlock depends upon, and [B] is a list of builders that
1338 depend upon the Interlock).
1340 "Interlock" is misnamed. In the next release it will be changed to
1341 "Dependency", because that's what it really expresses. A new class (probably
1342 called Interlock) will be created to express the notion that two builders
1343 should not run at the same time, useful when multiple builders are run on
1344 the same machine and thrashing results when several CPU- or disk- intensive
1345 compiles are done simultaneously.
1347 ** FreshCVSSource can now handle newcred-enabled FreshCVS daemons
1349 There are now two FreshCVSSource classes: FreshCVSSourceNewcred talks to
1350 newcred daemons, and FreshCVSSourceOldcred talks to oldcred ones. Mind you,
1351 FreshCVS doesn't yet do newcred, but when it does, we'll be ready.
1353 'FreshCVSSource' maps to the oldcred form for now. That will probably change
1354 when the current release of CVSToys supports newcred by default.
1356 ** usePTY=1 on posix buildslaves
1358 When a buildslave is running under POSIX (i.e. pretty much everything except
1359 windows), child processes are created with a pty instead of separate
1360 stdin/stdout/stderr pipes. This makes it more likely that a hanging build
1361 (when killed off by the timeout code) will have all its sub-childred cleaned
1362 up. Non-pty children would tend to leave subprocesses running because the
1363 buildslave was only able to kill off the top-level process (typically
1364 'make').
1366 Windows doesn't have any concept of ptys, so non-posix systems do not try to
1367 enable them.
1369 ** mail parsers should actually work now
1371 The email parsing functions (FCMaildirSource and SyncmailMaildirSource) were
1372 broken because of my confused understanding of how python class methods
1373 work. These sources should be functional now.
1375 ** more irc bot sillyness
1377 The IRC bot can now perform half of the famous AYBABTO scene.
1380 * Release 0.3.5 (19 Sep 2003)
1382 ** newcred
1384 Buildbot has moved to "newcred", a new authorization framework provided by
1385 Twisted, which is a good bit cleaner and easier to work with than the
1386 "oldcred" scheme in older versions. This causes both buildmaster and
1387 buildslaves to depend upon Twisted 1.0.7 or later. The interface to
1388 'makeApp' has changed somewhat (the multiple kinds of remote connections all
1389 use the same TCP port now).
1391 Old buildslaves will get "_PortalWrapper instance has no attribute
1392 'remote_username'" errors when they try to connect. They must be upgraded.
1394 The FreshCVSSource uses PB to connect to the CVSToys server. This has been
1395 upgraded to use newcred too. If you get errors (TODO: what do they look
1396 like?) in the log when the buildmaster tries to connect, you need to upgrade
1397 your FreshCVS service or use the 'useOldcred' argument when creating your
1398 FreshCVSSource. This is a temporary hack to allow the buildmaster to talk to
1399 oldcred CVSToys servers. Using it will trigger deprecation warnings. It will
1400 go away eventually.
1402 In conjunction with this change, makeApp() now accepts a password which can
1403 be applied to the debug service.
1405 ** new features
1407 *** "copydir" for CVS checkouts
1409 The CVS build step can now accept a "copydir" parameter, which should be a
1410 directory name like "source" or "orig". If provided, the CVS checkout is
1411 done once into this directory, then copied into the actual working directory
1412 for compilation etc. Later updates are done in place in the copydir, then
1413 the workdir is replaced with a copy.
1415 This reduces CVS bandwidth (update instead of full checkout) at the expense
1416 of twice the disk space (two copies of the tree).
1418 *** Subversion (SVN) support
1420 Radix (Christopher Armstrong) contributed early support for building
1421 Subversion-based trees. The new 'SVN' buildstep behaves roughly like the
1422 'CVS' buildstep, and the contrib/svn_buildbot.py script can be used as a
1423 checkin trigger to feed changes to a running buildmaster.
1425 ** notable bugfixes
1427 *** .tap file generation
1429 We no longer set the .tap filename, because the buildmaster/buildslave
1430 service might be added to an existing .tap file and we shouldn't presume to
1431 own the whole thing. You may want to manually rename the "buildbot.tap" file
1432 to something more meaningful (like "buildslave-bot1.tap").
1434 *** IRC reconnect
1436 If the IRC server goes away (it was restarted, or the network connection was
1437 lost), the buildmaster will now schedule a reconnect attempt.
1439 *** w32 buildslave fixes
1441 An "rm -rf" was turned into shutil.rmtree on non-posix systems.
1444 * Release 0.3.4 (28 Jul 2003)
1446 ** IRC client
1448 The buildmaster can now join a set of IRC channels and respond to simple
1449 queries about builder status.
1451 ** slave information
1453 The build slaves can now report information from a set of info/* files in
1454 the slave base directory to the buildmaster. This will be used by the slave
1455 administrator to announce details about the system hosting the slave,
1456 contact information, etc. For now, info/admin should contain the name/email
1457 of the person who is responsible for the buildslave, and info/host should
1458 describe the system hosting the build slave (OS version, CPU speed, memory,
1459 etc). The contents of these files are made available through the waterfall
1460 display.
1462 ** change notification email parsers
1464 A parser for Syncmail (syncmail.sourceforge.net) was added. SourceForge
1465 provides examples of setting up syncmail to deliver CVS commit messages to
1466 mailing lists, so hopefully this will make it easier for sourceforge-hosted
1467 projects to set up a buildbot.
1469 email processors were moved into buildbot.changes.mail . FCMaildirSource was
1470 moved, and the compatibility location (buildbot.changes.freshcvsmail) will
1471 go away in the next release.
1473 ** w32 buildslave ought to work
1475 Some non-portable code was changed to make it more likely that the
1476 buildslave will run under windows. The Twisted buildbot now has a
1477 (more-or-less) working w32 buildslave.
1480 * Release 0.3.3 (21 May 2003):
1482 ** packaging changes
1484 *** include doc/examples in the release. Oops again.
1486 ** network changes
1488 *** add keepalives to deal with NAT boxes
1490 Some NAT boxes drop port mappings if the TCP connection looks idle for too
1491 long (maybe 30 minutes?). Add application-level keepalives (dummy commands
1492 sent from slave to master every 10 minutes) to appease the NAT box and keep
1493 our connection alive. Enable this with --keepalive in the slave mktap
1494 command line. Check the README for more details.
1496 ** UI changes
1498 *** allow slaves to trigger any build that they host
1500 Added an internal function to ask the buildmaster to start one of their
1501 builds. Must be triggered with a debugger or manhole on the slave side for
1502 now, will add a better UI later.
1504 *** allow web page viewers to trigger any build
1506 Added a button to the per-build page (linked by the build names on the third
1507 row of the waterfall page) to allow viewers to manually trigger builds.
1508 There is a field for them to indicate who they are and why they are
1509 triggering the build. It is possible to abuse this, but for now the benefits
1510 outweigh the damage that could be done (worst case, someone can make your
1511 machine run builds continuously).
1513 ** generic buildprocess changes
1515 *** don't queue multiple builds for offline slaves
1517 If a slave is not online when a build is ready to run, that build is queued
1518 so the slave will run it when it next connects. However, the buildmaster
1519 used to queue every such build, so the poor slave machine would be subject
1520 to tens or hundreds of builds in a row when they finally did come online.
1521 The buildmaster has been changed to merge these multiple builds into a
1522 single one.
1524 *** bump ShellCommand default timeout to 20 minutes
1526 Used for testing out the win32 twisted builder. I will probably revert this
1527 in the next relese.
1529 *** split args in ShellCommand ourselves instead of using /bin/sh
1531 This should remove the need for /bin/sh on the slave side, improving the
1532 chances that the buildslave can run on win32.
1534 *** add configureEnv argument to Configure step, pass env dict to slave
1536 Allows build processes to do things like 'CFLAGS=-O0 ./configure' without
1537 using /bin/sh to set the environment variable
1539 ** Twisted buildprocess changes
1541 *** warn instead of flunk the build when cReactor or qtreactor tests fail
1543 These two always fail. For now, downgrade those failures to a warning
1544 (orange box instead of red).
1546 *** don't use 'clobber' on remote builds
1548 Builds that run on remote machines (freebsd, OS-X) now use 'cvs update'
1549 instead of clobbering their trees and doing a fresh checkout. The multiple
1550 simultaneous CVS checkouts were causing a strain on Glyph's upstream
1551 bandwidth.
1553 *** use trial --testmodule instead of our own test-case-name grepper
1555 The Twisted coding/testing convention has developers put 'test-case-name'
1556 tags (emacs local variables, actually) in source files to indicate which
1557 test cases should be run to exercise that code. Twisted's unit-test
1558 framework just acquired an argument to look for these tags itself. Use that
1559 instead of the extra FindUnitTestsForFiles build step we were doing before.
1560 Removes a good bit of code from buildbot and into Twisted where it really
1561 belongs.
1564 * Release 0.3.2 (07 May 2003):
1566 ** packaging changes
1568 *** fix major packaging bug: none of the buildbot/* subdirectories were
1569 included in the 0.3.1 release. Sorry, I'm still figuring out distutils
1570 here..
1572 ** internal changes
1574 *** use pb.Cacheable to update Events in remote status client. much cleaner.
1576 *** start to clean up BuildProcess->status.builder interface
1578 ** bug fixes
1580 *** waterfall display was missing a <tr>, causing it to be misrendered in most
1581 browsers (except the one I was testing it with, of course)
1583 *** URL without trailing slash (when served in a twisted-web distributed
1584 server, with a url like "http://twistedmatrix.com/~warner.twistd") should do
1585 redirect to URL-with-trailing-slash, otherwise internal hrefs are broken.
1587 *** remote status clients: forget RemoteReferences at shutdown, removes
1588 warnings about "persisting Ephemerals"
1590 ** Twisted buildprocess updates:
1592 *** match build process as of twisted-1.0.5
1593 **** use python2.2 everywhere now that twisted rejects python2.1
1594 **** look for test-result constants in multiple places
1595 *** move experimental 'trial --jelly' code to separate module
1596 *** add FreeBSD builder
1597 *** catch rc!=0 in HLint step
1598 *** remove RunUnitTestsRandomly, use randomly=1 parameter instead
1599 *** parameterize ['twisted.test'] default test case to make subclassing easier
1600 *** ignore internal distutils warnings in python2.3 builder
1603 * Release 0.3.1 (29 Apr 2003):
1605 ** First release.
1607 ** Features implemented:
1609  change notification from FreshCVS server or parsed maildir contents
1611  timed builds
1613  basic builds, configure/compile/test
1615  some Twisted-specific build steps: docs, unit tests, debuild
1617  status reporting via web page
1619 ** Features still experimental/unpolished
1621  status reporting via PB client