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 = {}
13 # The 'slaves' list defines the set of recognized buildslaves. Each element is
14 # a BuildSlave object, specifying a username and password. The same username and
15 # password must be configured on the slave.
16 from buildbot.buildslave import BuildSlave
18 BuildSlave("opensrf-slave", "XXX", max_builds=1),
19 BuildSlave("eg-slave", "XXX", max_builds=1)
22 # 'slavePortnum' defines the TCP port to listen on for connections from slaves.
23 # This must match the value configured into the buildslaves (with their
25 c['slavePortnum'] = XXX
29 # the 'change_source' setting tells the buildmaster how it should find out
30 # about source code changes. Here we point to OpenSRF:
31 def split_file_branches_trunk(path):
32 pieces = path.split('/')
33 if pieces[0] == 'trunk':
34 return ('trunk', '/'.join(pieces[1:]))
35 elif pieces[0] == 'branches':
36 return ('/'.join(pieces[0:2]),
41 from buildbot.changes import svnpoller
42 c['change_source'] = (
45 svnurl='svn://svn.open-ils.org/OpenSRF',
46 split_file=svnpoller.split_file_branches,
50 svnurl='svn://svn.open-ils.org/ILS',
51 split_file=svnpoller.split_file_branches,
56 from buildbot.schedulers.filter import ChangeFilter
57 trunk_filter = ChangeFilter(project='OpenSRF', branch=None)
58 rel_1_6_filter = ChangeFilter(project='OpenSRF', branch="branches/rel_1_6")
59 rel_2_0_filter = ChangeFilter(project='OpenSRF', branch="branches/rel_2_0")
60 eg_rel_1_6_1_filter = ChangeFilter(project='Evergreen', branch="branches/rel_1_6_1")
61 eg_rel_2_0_filter = ChangeFilter(project='Evergreen', branch="branches/rel_2_0")
62 eg_rel_2_1_filter = ChangeFilter(project='Evergreen', branch="branches/rel_2_1")
63 eg_trunk_filter = ChangeFilter(project='Evergreen', branch=None)
67 # Configure the Schedulers, which decide how to react to incoming changes. In this
68 # case, just kick off a 'runtests' build
70 from buildbot.scheduler import Scheduler
72 c['schedulers'].append(Scheduler(name="osrf-trunk-full",
74 change_filter=trunk_filter,
75 builderNames=["osrf-trunk-ubuntu-10.04-x86_64"]))
77 c['schedulers'].append(Scheduler(name="osrf-rel_1_6",
79 change_filter=rel_1_6_filter,
80 builderNames=["osrf-rel_1_6-ubuntu-10.04-x86_64"]))
82 c['schedulers'].append(Scheduler(name="osrf-rel_2_0",
84 change_filter=rel_2_0_filter,
85 builderNames=["osrf-rel_2_0-ubuntu-10.04-x86_64"]))
87 c['schedulers'].append(Scheduler(name="evergreen-rel_1_6_1",
89 change_filter=eg_rel_1_6_1_filter,
90 builderNames=["evergreen-rel_1_6_1-debian-6.00-x86_64"]))
92 c['schedulers'].append(Scheduler(name="evergreen-rel_2_0",
94 change_filter=eg_rel_2_0_filter,
95 builderNames=["evergreen-rel_2_0-debian-6.00-x86_64"]))
97 c['schedulers'].append(Scheduler(name="evergreen-rel_2_1",
99 change_filter=eg_rel_2_1_filter,
100 builderNames=["evergreen-rel_2_1-debian-6.00-x86_64"]))
102 c['schedulers'].append(Scheduler(name="evergreen-trunk",
104 change_filter=eg_trunk_filter,
105 builderNames=["evergreen-trunk-debian-6.00-x86_64"]))
109 # The 'builders' list defines the Builders, which tell Buildbot how to perform a build:
110 # what steps, and which slaves can execute them. Note that any particular build will
111 # only take place on one slave.
113 from buildbot.process.factory import BuildFactory
114 from buildbot.steps import source
115 from buildbot.steps import shell
116 from buildbot.steps import python
117 from buildbot.steps import python_twisted
119 osrf_factory = BuildFactory()
120 # check out the source
121 osrf_factory.addStep(source.SVN(
122 baseURL='svn://svn.open-ils.org/OpenSRF/',
123 defaultBranch='trunk',
127 osrf_factory.addStep(shell.ShellCommand(command=["./autogen.sh"]))
129 # configure (default args for now)
130 osrf_factory.addStep(shell.Configure())
133 osrf_factory.addStep(shell.Compile(command=["make"]))
135 # run the Perl unit tests
136 osrf_factory.addStep(shell.PerlModuleTest(workdir="build/src/perl"))
138 # run the Python unit tests (available after rel_1_6)
139 def has_python_unit_test(step):
140 return step.build.getProperty('branch') != 'branches/rel_1_6'
142 osrf_factory.addStep(python_twisted.Trial(
143 doStepIf=has_python_unit_test,
145 tests="src/python/tests/json_test.py"))
147 # report on the Python code
148 osrf_factory.addStep(python.PyLint(
149 env={"PYTHONPATH": ["src/python"]},
150 flunkOnFailure=False,
152 "--output-format=parseable",
153 "src/python/opensrf.py",
154 "src/python/osrf/app.py",
155 "src/python/osrf/cache.py",
156 "src/python/osrf/conf.py",
157 "src/python/osrf/const.py",
158 "src/python/osrf/ex.py",
159 "src/python/osrf/gateway.py",
160 "src/python/osrf/http_translator.py",
161 "src/python/osrf/json.py",
162 "src/python/osrf/log.py",
163 "src/python/osrf/net_obj.py",
164 "src/python/osrf/net.py",
165 "src/python/osrf/server.py",
166 "src/python/osrf/ses.py",
167 "src/python/osrf/set.py",
168 "src/python/osrf/stack.py",
169 "src/python/osrf/system.py",
170 "src/python/osrf/xml_obj.py",
171 "src/python/osrf/apps/example.py"]))
173 eg_factory = BuildFactory()
174 # check out the source
175 eg_factory.addStep(source.SVN(
176 baseURL='svn://svn.open-ils.org/ILS/',
177 defaultBranch='trunk',
181 eg_factory.addStep(shell.ShellCommand(command=["./autogen.sh"]))
183 # configure (default args for now)
184 eg_factory.addStep(shell.Configure())
187 eg_factory.addStep(shell.Compile(command=["make"]))
189 perldir = 'build/Open-ILS/src/perlmods'
190 class PerlModuleTestMFHDMadness(shell.PerlModuleTest):
191 'Override PerlModuleTest with nonstandard library location for testlib.pm'
192 command = ['prove', '--lib', 'lib', '-I', 'lib/OpenILS/Utils/MFHD/test', '-r', 't']
195 def has_perl_unit_tests(step):
196 'Only run Perl tests if there are tests'
197 if (step.build.getProperty('branch') == 'branches/rel_1_6_1'):
199 elif (step.build.getProperty('branch') == 'branches/rel_2_0'):
203 # run the Perl unit tests
204 eg_factory.addStep(PerlModuleTestMFHDMadness(
205 doStepIf=has_perl_unit_tests,
209 # report on the Python code
210 eg_factory.addStep(python.PyLint(
211 env={"PYTHONPATH": ["Open-ILS/src/python"]},
212 flunkOnFailure=False,
214 "--output-format=parseable",
215 "Open-ILS/src/python/setup.py",
216 "Open-ILS/src/python/oils/const.py",
217 "Open-ILS/src/python/oils/event.py",
218 "Open-ILS/src/python/oils/__init__.py",
219 "Open-ILS/src/python/oils/org.py",
220 "Open-ILS/src/python/oils/srfsh.py",
221 "Open-ILS/src/python/oils/system.py",
222 "Open-ILS/src/python/oils/utils/csedit.py",
223 "Open-ILS/src/python/oils/utils/idl.py",
224 "Open-ILS/src/python/oils/utils/__init__.py",
225 "Open-ILS/src/python/oils/utils/utils.py"
229 from buildbot.config import BuilderConfig
232 c['builders'].append(
233 BuilderConfig(name="osrf-trunk-ubuntu-10.04-x86_64",
234 slavenames=["opensrf-slave"],
235 factory=osrf_factory))
236 c['builders'].append(
237 BuilderConfig(name="osrf-rel_1_6-ubuntu-10.04-x86_64",
238 slavenames=["opensrf-slave"],
239 factory=osrf_factory))
240 c['builders'].append(
241 BuilderConfig(name="osrf-rel_2_0-ubuntu-10.04-x86_64",
242 slavenames=["opensrf-slave"],
243 factory=osrf_factory))
244 c['builders'].append(
245 BuilderConfig(name="evergreen-rel_1_6_1-debian-6.00-x86_64",
246 slavenames=["eg-slave"],
248 c['builders'].append(
249 BuilderConfig(name="evergreen-rel_2_0-debian-6.00-x86_64",
250 slavenames=["eg-slave"],
252 c['builders'].append(
253 BuilderConfig(name="evergreen-rel_2_1-debian-6.00-x86_64",
254 slavenames=["eg-slave"],
256 c['builders'].append(
257 BuilderConfig(name="evergreen-trunk-debian-6.00-x86_64",
258 slavenames=["eg-slave"],
261 ####### STATUS TARGETS
263 # 'status' is a list of Status Targets. The results of each build will be
264 # pushed to these targets. buildbot/status/*.py has a variety to choose from,
265 # including web pages, email senders, and IRC bots.
269 from buildbot.status import html
270 from buildbot.status.web import auth, authz
272 users = [('XXX', 'XXX'), ('XXX', 'XXX')]
273 authz_cfg=authz.Authz(
274 auth=auth.BasicAuth(users),
275 # change any of these to True to enable; see the manual for more
277 gracefulShutdown = False,
278 forceBuild = 'auth', # use this to test your slave once it is set up
279 forceAllBuilds = False,
282 stopAllBuilds = False,
283 cancelPendingBuild = False,
285 c['status'].append(html.WebStatus(http_port=8010, authz=authz_cfg))
287 # Send mail when a build is broken
288 from buildbot.status.mail import MailNotifier
290 fromaddr="buildbot@testing.esilibrary.com",
291 sendToInterestedUsers=False,
293 extraRecipients=["dan@coffeecode.net","open-ils-dev@list.georgialibraries.org"])
295 # Uncomment to actually send mail
296 # c['status'].append(mn)
298 ####### PROJECT IDENTITY
300 # the 'projectName' string will be used to describe the project that this
301 # buildbot is working on. For example, it is used as the title of the
302 # waterfall HTML page. The 'projectURL' string will be used to provide a link
303 # from buildbot HTML pages to your project's home page.
305 c['projectName'] = "Evergreen and OpenSRF"
306 c['projectURL'] = "http://evergreen-ils.org/"
308 # the 'buildbotURL' string should point to the location where the buildbot's
309 # internal web server (usually the html.WebStatus page) is visible. This
310 # typically uses the port number set in the Waterfall 'status' entry, but
311 # with an externally-visible host name which the buildbot cannot figure out
314 c['buildbotURL'] = "http://testing.evergreen-ils.org/buildbot/"
318 # This specifies what database buildbot uses to store change and scheduler
319 # state. You can leave this at its default for all but the largest
321 c['db_url'] = "sqlite:///state.sqlite"