enhance 'buildbot sighup' to show all related twistd.log lines. Also rename it to...
[buildbot.git] / docs / PyCon-2003 / bb-slides.py
blob52ea7472d0a478d4ebdcca841a9ab343c774f4f4
1 #! /usr/bin/python
2 from slides import Lecture, NumSlide, Slide, Bullet, SubBullet, PRE, URL
4 class Raw:
5 def __init__(self, title, html):
6 self.title = title
7 self.html = html
8 def toHTML(self):
9 return self.html
11 class HTML(Raw):
12 def __init__(self, html):
13 self.html = html
15 lecture = Lecture(
16 "BuildBot: Build/Test Automation",
17 Slide("The BuildBot: Build/Test Automation",
18 Bullet("Home page: ",
19 URL("http://buildbot.sourceforge.net/"),
21 Bullet("Brian Warner < warner-buildbot @ lothar . com >"),
24 # quick description of what it does
25 # motivation: what is the problem it is trying to solve
26 # architecture: master+slaves
27 # design
28 # starting the build: changes, tree-stable timers
29 # doing the build: builders, processes
30 # describing the build: status
31 # status clients
32 # configuration: examples of Step, setup script
33 # demos: glib, show twisted status page
34 # future directions
35 # current status, availability, more info
37 Slide("Overview",
38 Bullet("What is the BuildBot?"),
39 Bullet("Motivation: What problem is it trying to solve?"),
40 Bullet("Architecture: What does it look like?"),
41 Bullet("Design: How does it work?"),
42 Bullet("Configuration: How do I make it do my bidding?"),
43 Bullet("Demo: Show me the code!"),
44 Bullet("Future Directons: What will it do in the future?"),
45 Bullet("More Information: How do I find out more?"),
48 # description
49 Slide("Automating the Compile/Test cycle",
50 Bullet("CVS commits trigger new builds"),
51 Bullet("Builds run on multiple machines to cover various platforms and environments"),
52 Bullet("Builds include running tests"),
53 Bullet("Build status easy to retrieve, can be pushed to developers"),
54 Bullet("inspired by Tinderbox"),
57 # motivation
58 Slide("Distributed cross-platform projects are tricky",
59 Bullet("Distance means poor communication"),
60 Bullet("Size leads to specialization: " + \
61 "Not everyone knows the whole tree"),
62 Bullet("Multiple platforms: hard to do sufficient testing"),
63 Bullet("Somebody has to keep it all working"),
65 # personal experience as chief harassment officer
67 Slide("Automating away the job of 'Build Sheriff'",
68 Bullet("Give quick feedback about build problems"),
69 Bullet("minimize inconvenience to other developers"),
70 Bullet("provide (gentle) incentive to fix bugs"),
71 Bullet("provide (less gentle) encouragement to fix bugs"),
72 Bullet("provide (outright hostile) harassment to STOP BREAKING STUFF!"),
73 Bullet("Help developers to Do The Right Thing"),
76 Slide("Features",
77 Bullet("Runs builds (and tests) when code is changed, report failures quickly"),
78 Bullet("Performs tests on a variety of slave platforms"),
79 Bullet("Handles arbitrary build processes: C, Python, Perl, etc"),
80 Bullet("Status delivery through web page, email, other protocols"),
81 Bullet("Track builds in progress, provide estimated completion time"),
82 Bullet("Flexible configuration by subclassing generic build process classes"),
83 Bullet("Minimal host requirements: Python and Twisted"),
84 Bullet("Released under the GPL"),
87 # master and slaves
88 # slaves can be behind a firewall if they can still do checkout
89 Raw("Architecture",
90 """<h2>Architecture</h2>
91 <img src=\"../overview.png\" />
92 """
95 # design
96 Slide("Starting the Build",
97 Bullet("Changes come from the version control system",
98 SubBullet("CVSToys listener"),
99 SubBullet("Parse cvs-commit email"),
101 Bullet("Builders wait for tree to be stable"),
102 Bullet("Builders can ignore some files which won't affect the build",
103 SubBullet("Documentation files"),
104 SubBullet("Example code"),
108 Slide("Running a Build",
109 Bullet("Build class defines each kind of build process",
110 SubBullet("Quick vs. clobber"),
111 SubBullet("Optimized vs. debug"),
112 SubBullet("Different versions of python, gcc, etc"),
114 Bullet("Sequence of Steps: CVS, Compile, Test",
115 SubBullet("Steps defined by subclasses of BuildStep"),
116 SubBullet("Steps invoke RemoteCommands on a connected slave"),
118 Bullet("Each Builder attaches to a BuildSlave (by name)"),
121 Slide("Describing the Build",
122 Bullet("Overall Status: success, fail, in-between"),
123 Bullet("Each step has status text, color, log files"),
124 Bullet("Progress events are distributed to HTML logger and status clients"),
127 Raw("HTML Build Status",
129 <img src="../waterfall.png" alt="waterfall display" width="323" height="457" align="right" />
131 <h2>HTML Build Status</h2>
132 <ul>
133 <li>web server listens on arbitrary port</li>
134 <li>waterfall display shows time, commits, build results</li>
135 <li>Log files and build information are available through links</li>
136 <li>Alternate displays with different URLs</li>
137 </ul>
141 Slide("Status Delivery",
142 Bullet("Build progress and status is given to a delivery object ..",
143 SubBullet(".. which can distribute it through arbitrary protocols"),
145 Bullet("HTML logger stores events, uses them to build waterfall display"),
146 Bullet("PB-based real-time status client",
147 SubBullet("Shows current activity, Time-Remaining for current build"),
152 Slide("Configuration",
153 Bullet("Everything driven by the buildmaster"),
154 # minimal slave setup: buildmaster location, dir, name/pw
155 Bullet("Classes provided for common build processes",
156 SubBullet("autoconf (C)"),
157 SubBullet("Makefile.PL (perl)"),
159 Bullet("Other BuildProcesses created by making subclasses"),
162 Slide("Demo",
163 Bullet("glib-1.2.10: simple C module with several self-tests"),
164 Bullet("python: Twisted BuildBot instance"),
167 Slide("Future Projects",
168 Bullet("Status Delivery through other protocols",
169 SubBullet("Email with build results and logfiles"),
170 SubBullet("IRC notification, interactive status queries"),
171 SubBullet("panel applet with highly summarized status"),
173 Bullet("Tracking test failures, history of each test"),
174 Bullet("Project-specific blame assignment, owner notification"),
175 Bullet("Web-based Builder Configuration"),
176 Bullet("bug-tracking integration"),
177 Bullet("'try': run tests on not-yet-committed changes"),
180 Slide("More Information",
181 Bullet("Home Page: ",
182 URL("http://buildbot.sourceforge.net/")),
183 Bullet("Sourceforge project page",
184 SubBullet("This paper and slides"),
185 SubBullet("Source available in CVS"),
186 SubBullet("Mailing list"),
187 SubBullet("Pointers to existing installations"),
189 Bullet("Please join the mailing list to find out about releases"),
195 lecture.renderHTML("slides", "slide-%02d.html", css="main.css")