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