2 # vim: set syntax=python:et:ts=4:sw=4:
4 # This is a sample buildmaster config file. It must be installed as
5 # 'master.cfg' in your buildmaster's base directory.
7 # This is the dictionary that the buildmaster pays attention to. We also use
8 # a shorter alias to save typing.
9 c = BuildmasterConfig = {}
11 # WORKDIR must be an absolute path that is not volatile; systems
12 # like Ubuntu wipe /tmp/ on a reboot, for example, which is
13 # disastrous for build history, at least for gitpoller
14 WORKDIR = '/home/buildmaster/'
18 # The 'slaves' list defines the set of recognized buildslaves. Each element is
19 # a BuildSlave object, specifying a username and password. The same username and
20 # password must be configured on the slave.
21 from buildbot.buildslave import BuildSlave
23 BuildSlave("opensrf-slave", "XXX", max_builds=1),
24 BuildSlave("eg-slave", "XXX", max_builds=1),
25 BuildSlave("eg-u1004", "XXX", max_builds=1)
28 # 'slavePortnum' defines the TCP port to listen on for connections from slaves.
29 # This must match the value configured into the buildslaves (with their
31 c['slavePortnum'] = XXX
33 # Branches and distros to build
34 OSRF_BRANCHES = ('master', 'rel_2_1', 'rel_2_0')
35 OSRF_DISTROS = [('ubuntu-10.04-x86_64', 'opensrf-slave')]
36 EG_BRANCHES = ('master', 'rel_2_2', 'rel_2_1')
38 ('debian-6.00-x86_64', 'eg-slave'), # UPEI
39 ('ubuntu-10.04-x86', 'eg-u1004') # GPLS
42 eg_git = 'git://git.evergreen-ils.org/Evergreen.git'
43 osrf_git = 'git://git.evergreen-ils.org/OpenSRF.git'
47 # the 'change_source' setting tells the buildmaster how it should find out
48 # about source code changes
50 from buildbot.changes import gitpoller
51 c['change_source'] = []
52 for osrf_branch in OSRF_BRANCHES:
53 c['change_source'].append(gitpoller.GitPoller(
56 workdir= WORKDIR + 'buildbot_osrf_' + osrf_branch,
60 for eg_branch in EG_BRANCHES:
61 c['change_source'].append(gitpoller.GitPoller(
64 workdir= WORKDIR + 'buildbot_eg_' + eg_branch,
69 from buildbot.changes.filter import ChangeFilter
70 master_filter = ChangeFilter(project='OpenSRF', branch="master")
71 rel_2_0_filter = ChangeFilter(project='OpenSRF', branch="rel_2_0")
72 rel_2_1_filter = ChangeFilter(project='OpenSRF', branch="rel_2_1")
73 eg_rel_2_1_filter = ChangeFilter(project='Evergreen', branch="rel_2_1")
74 eg_rel_2_2_filter = ChangeFilter(project='Evergreen', branch="rel_2_2")
75 eg_master_filter = ChangeFilter(project='Evergreen', branch="master")
79 # Configure the Schedulers, which decide how to react to incoming changes. In this
80 # case, just kick off a 'runtests' build
82 from buildbot.schedulers.basic import SingleBranchScheduler
84 c['schedulers'].append(SingleBranchScheduler(name="osrf-master-full",
86 change_filter=master_filter,
87 builderNames=["osrf-master-ubuntu-10.04-x86_64"]))
89 c['schedulers'].append(SingleBranchScheduler(name="osrf-rel_2_1",
91 change_filter=rel_2_1_filter,
92 builderNames=["osrf-rel_2_1-ubuntu-10.04-x86_64"]))
94 c['schedulers'].append(SingleBranchScheduler(name="osrf-rel_2_0",
96 change_filter=rel_2_0_filter,
97 builderNames=["osrf-rel_2_0-ubuntu-10.04-x86_64"]))
99 c['schedulers'].append(SingleBranchScheduler(name="evergreen-rel_2_2",
101 change_filter=eg_rel_2_2_filter,
103 "evergreen-rel_2_2-debian-6.00-x86_64",
104 "evergreen-rel_2_2-ubuntu-10.04-x86"
107 c['schedulers'].append(SingleBranchScheduler(name="evergreen-rel_2_1",
109 change_filter=eg_rel_2_1_filter,
111 "evergreen-rel_2_1-debian-6.00-x86_64",
112 "evergreen-rel_2_1-ubuntu-10.04-x86"
115 c['schedulers'].append(SingleBranchScheduler(name="evergreen-master",
117 change_filter=eg_master_filter,
119 "evergreen-master-debian-6.00-x86_64",
120 "evergreen-master-ubuntu-10.04-x86"
123 #### Build step tests
124 def eg_requires_autogen(step):
125 'Old versions of Evergreen require autogen.sh to bootstrap'
126 if (step.build.getProperty('branch') == 'rel_2_1'):
130 def eg_requires_autoreconf(step):
131 'Modern versions of Evergreen use autoreconf to bootstrap'
132 if eg_requires_autogen(step):
136 def has_perl_unit_tests(step):
137 'Only run Perl tests if there are tests'
138 if (step.build.getProperty('branch') == 'rel_2_0'):
142 def osrf_requires_autogen(step):
143 'Old versions of OpenSRF require autogen.sh to bootstrap'
144 if (step.build.getProperty('branch') == 'rel_2_0'):
148 def osrf_requires_autoreconf(step):
149 'Modern versions of OpenSRF use autoreconf to bootstrap'
150 if osrf_requires_autogen(step):
156 # The 'builders' list defines the Builders, which tell Buildbot how to perform a build:
157 # what steps, and which slaves can execute them. Note that any particular build will
158 # only take place on one slave.
160 from buildbot.process.factory import BuildFactory
161 from buildbot.steps import source
162 from buildbot.steps import shell
163 from buildbot.steps import python
164 from buildbot.steps import python_twisted
166 osrf_factory = BuildFactory()
167 # check out the source
168 osrf_factory.addStep(source.Git(
173 # bootstrap the code - old branches require autogen.sh
174 osrf_factory.addStep(
175 shell.ShellCommand(command=["./autogen.sh"],
176 doStepIf=osrf_requires_autogen,
177 name="Bootstrap via autogen"
181 osrf_factory.addStep(
182 shell.ShellCommand(command=["autoreconf", "-i"],
183 doStepIf=osrf_requires_autoreconf,
184 name="Bootstrap via autoreconf"
188 # configure (default args for now)
189 osrf_factory.addStep(shell.Configure())
192 osrf_factory.addStep(shell.Compile(command=["make"]))
194 # run the Perl unit tests
195 osrf_factory.addStep(shell.PerlModuleTest(workdir="build/src/perl"))
197 osrf_factory.addStep(python_twisted.Trial(
199 tests="src/python/tests/json_test.py"))
201 # report on the Python code
202 osrf_factory.addStep(python.PyLint(
203 env={"PYTHONPATH": ["src/python"]},
204 flunkOnFailure=False,
206 "--output-format=parseable",
207 "src/python/opensrf.py",
208 "src/python/osrf/app.py",
209 "src/python/osrf/cache.py",
210 "src/python/osrf/conf.py",
211 "src/python/osrf/const.py",
212 "src/python/osrf/ex.py",
213 "src/python/osrf/gateway.py",
214 "src/python/osrf/http_translator.py",
215 "src/python/osrf/json.py",
216 "src/python/osrf/log.py",
217 "src/python/osrf/net_obj.py",
218 "src/python/osrf/net.py",
219 "src/python/osrf/server.py",
220 "src/python/osrf/ses.py",
221 "src/python/osrf/set.py",
222 "src/python/osrf/stack.py",
223 "src/python/osrf/system.py",
224 "src/python/osrf/xml_obj.py",
225 "src/python/osrf/apps/example.py"]))
227 eg_factory = BuildFactory()
228 # check out the source
229 eg_factory.addStep(source.Git(
234 # bootstrap the code - old branches require autogen.sh
236 shell.ShellCommand(command=["./autogen.sh"],
237 doStepIf=eg_requires_autogen,
238 name="Bootstrap via autogen"
243 shell.ShellCommand(command=["autoreconf", "-f", "-i"],
244 doStepIf=eg_requires_autoreconf,
245 name="Bootstrap via autoreconf"
249 # configure (default args for now)
250 eg_factory.addStep(shell.Configure())
253 eg_factory.addStep(shell.Compile(command=["make"]))
255 perldir = 'build/Open-ILS/src/perlmods'
256 class PerlModuleTestMFHDMadness(shell.PerlModuleTest):
257 'Override PerlModuleTest with nonstandard library location for testlib.pm'
258 command = ['prove', '--lib', 'lib', '-I', 'lib/OpenILS/Utils/MFHD/test', '-r', 't']
261 # run the Perl unit tests
262 eg_factory.addStep(PerlModuleTestMFHDMadness(
263 doStepIf=has_perl_unit_tests,
267 # report on the Python code
268 eg_factory.addStep(python.PyLint(
269 env={"PYTHONPATH": ["Open-ILS/src/python"]},
270 flunkOnFailure=False,
272 "--output-format=parseable",
273 "Open-ILS/src/python/setup.py",
274 "Open-ILS/src/python/oils/const.py",
275 "Open-ILS/src/python/oils/event.py",
276 "Open-ILS/src/python/oils/__init__.py",
277 "Open-ILS/src/python/oils/org.py",
278 "Open-ILS/src/python/oils/srfsh.py",
279 "Open-ILS/src/python/oils/system.py",
280 "Open-ILS/src/python/oils/utils/csedit.py",
281 "Open-ILS/src/python/oils/utils/idl.py",
282 "Open-ILS/src/python/oils/utils/__init__.py",
283 "Open-ILS/src/python/oils/utils/utils.py"
287 from buildbot.config import BuilderConfig
291 for branch in OSRF_BRANCHES:
292 for distro, slave in OSRF_DISTROS:
293 build = "osrf-%s-%s" % (branch, distro)
294 c['builders'].append(BuilderConfig(name=build, slavenames=slave, factory=osrf_factory))
296 for branch in EG_BRANCHES:
297 for distro, slave in EG_DISTROS:
298 build = "evergreen-%s-%s" % (branch, distro)
299 c['builders'].append(BuilderConfig(name=build, slavenames=slave, factory=eg_factory))
301 ####### STATUS TARGETS
303 # 'status' is a list of Status Targets. The results of each build will be
304 # pushed to these targets. buildbot/status/*.py has a variety to choose from,
305 # including web pages, email senders, and IRC bots.
309 from buildbot.status import html
310 from buildbot.status.web import auth, authz
312 users = [('XXX', 'XXX'), ('XXX', 'XXX')]
313 authz_cfg = authz.Authz(
314 auth=auth.BasicAuth(users),
315 # change any of these to True to enable; see the manual for more
317 gracefulShutdown = False,
318 forceBuild = 'auth', # use this to test your slave once it is set up
319 forceAllBuilds = False,
322 stopAllBuilds = False,
323 cancelPendingBuild = False,
325 c['status'].append(html.WebStatus(http_port=8010, authz=authz_cfg))
327 # Send mail when a build is broken
328 from buildbot.status.mail import MailNotifier
330 fromaddr="buildbot@testing.evergreen-ils.org",
331 sendToInterestedUsers=True,
333 # , extraRecipients=["dan@coffeecode.net","open-ils-dev@list.georgialibraries.org"]
336 # Uncomment to actually send mail
337 c['status'].append(MN)
340 from buildbot.status import words
341 IRC = words.IRC("chat.freenode.net", "egbuilder",
342 channels=["#evergreen"],
347 'successToFailure': 1,
348 'failureToSuccess': 1,
350 c['status'].append(IRC)
352 ####### PROJECT IDENTITY
354 # the 'projectName' string will be used to describe the project that this
355 # buildbot is working on. For example, it is used as the title of the
356 # waterfall HTML page. The 'projectURL' string will be used to provide a link
357 # from buildbot HTML pages to your project's home page.
359 c['projectName'] = "Evergreen and OpenSRF"
360 c['projectURL'] = "http://evergreen-ils.org/"
362 # the 'buildbotURL' string should point to the location where the buildbot's
363 # internal web server (usually the html.WebStatus page) is visible. This
364 # typically uses the port number set in the Waterfall 'status' entry, but
365 # with an externally-visible host name which the buildbot cannot figure out
368 c['buildbotURL'] = "http://testing.evergreen-ils.org/buildbot/"
372 # This specifies what database buildbot uses to store change and scheduler
373 # state. You can leave this at its default for all but the largest
375 c['db_url'] = "sqlite:///state.sqlite"