blob: 00e56dd9082695c90dcb11ccfc46f94186ede318 [file] [log] [blame]
Paul Jakma08815d52017-03-04 14:30:44 +00001# -*- python -*-
2# ex: set syntax=python:
3
4from buildbot.plugins import *
5from buildbot.plugins import buildslave, util
6
7# This is a sample buildmaster config file. It must be installed as
8# 'master.cfg' in your buildmaster's base directory.
9
10# This is the dictionary that the buildmaster pays attention to. We also use
11# a shorter alias to save typing.
12c = BuildmasterConfig = {}
13
14quaggagit = 'git://git.sv.gnu.org/quagga.git'
15
16# password defs
17execfile("pass.cfg")
18
Paul Jakma431900f2017-03-09 17:58:39 +000019# filter a given 'workers' entry into a property list
20# suitable for public display
21def workers2publicprops (worker):
22 publicprops = [ "os", "version", "vm", "pkg", "texi", "cc",
23 "latent", ]
24 return { k:worker[k] for k in worker if k in publicprops }
25
26# vm: non-VM are assumed faster and used for initial build
27# pkg: rpm, sysv, dpkg - only do test rpm builds at moment
28# texi: True or "true" if we can use for doc building
29# cc: List of tuples of installed compilers, with:
30# (<tag>, <version>, <command>)
31# tag: gcc, clang, sunpro
32# latent: VM spun up on demand via LatentSlave, uses "session" for
33# the libvirt URI.
34# session: libvirt URI to use for latent workers. Default will be set on
35# latent VMs if not specified.
36# hd_image: libvirt image to use
Paul Jakma08815d52017-03-04 14:30:44 +000037workers = {
38 "fedora-24": {
39 "os": "Fedora",
40 "version": "24",
41 "vm": False,
42 "pkg": "rpm",
Paul Jakma431900f2017-03-09 17:58:39 +000043 "texi": True,
44 "cc": [ ("gcc", "6.3.1"),
45 ("clang", "3.8.1"),
46 ("gcc", "3.4.6", "gcc34"),
47 ],
48 },
49 "fedora-26": {
50 "os": "Fedora",
51 "version": "26",
52 "vm": False,
53 "pkg": "rpm",
54 "cc": [ ("gcc", "7.0.1"),
55 ("clang", "3.9.0"),
56 ("gcc", "3.4.6", "gcc34"),
57 ],
Paul Jakma08815d52017-03-04 14:30:44 +000058 },
59 "centos-7": {
60 "os": "CentOS",
61 "version": "7",
62 "vm": False,
63 "pkg": "rpm",
Paul Jakma431900f2017-03-09 17:58:39 +000064 "cc": [ ("gcc", "4.8.5") ],
Paul Jakma08815d52017-03-04 14:30:44 +000065 },
66 "debian-8": {
67 "os": "Debian",
68 "version": "8",
69 "vm": True,
70 "pkg": "dpkg",
71 "latent": True,
Paul Jakma431900f2017-03-09 17:58:39 +000072 "cc": [ ("gcc", "4.9.2") ],
Paul Jakma08815d52017-03-04 14:30:44 +000073 "hd_image": "/var/lib/libvirt/images/debian8.qcow2",
74 },
75 "debian-9": {
76 "os": "Debian",
77 "version": "9",
78 "vm": True,
79 "pkg": "dpkg",
Paul Jakma431900f2017-03-09 17:58:39 +000080 "cc": [ ("gcc", "6.3.0") ],
Paul Jakma08815d52017-03-04 14:30:44 +000081 "latent": True,
82 "hd_image": "/var/lib/libvirt/images/debian9.qcow2",
83 },
84 "freebsd-10": {
85 "os": "FreeBSD",
86 "version": "10",
87 "vm": True,
88 "pkg": "",
89 "latent": True,
Paul Jakma431900f2017-03-09 17:58:39 +000090 "cc": [ ("clang", "3.4.1") ],
Paul Jakma08815d52017-03-04 14:30:44 +000091 "hd_image": "/var/lib/libvirt/images/freebsd103.qcow2",
92 },
93 "freebsd-11": {
94 "os": "FreeBSD",
95 "version": "11",
96 "vm": True,
97 "pkg": "",
Paul Jakma431900f2017-03-09 17:58:39 +000098 "cc": [ ("gcc", "4.9.4"), ("clang", "3.8.0"), ],
Paul Jakma08815d52017-03-04 14:30:44 +000099 "latent": True,
100 "hd_image": "/var/lib/libvirt/images/freebsd110.qcow2",
101 },
Paul Jakma203ab892017-03-07 14:54:28 +0000102 "oi-hipster": {
103 "os": "OpenIndiana",
104 "version": "hipster",
105 "vm": True,
106 "pkg": "sysv",
107 "latent": True,
Paul Jakma431900f2017-03-09 17:58:39 +0000108 "cc": [ ("gcc", "6.3.0"), ("sunpro", "12.0"),
109 ("gcc", "4.4.4")
110 ],
Paul Jakma203ab892017-03-07 14:54:28 +0000111 "hd_image": "/var/lib/libvirt/images/buildbot-oi-hipster.qcow2",
112 },
Paul Jakma08815d52017-03-04 14:30:44 +0000113}
114
115# ensure "latent" is set to false, where not set.
116# add in the passwords
117for kw in workers:
118 w = workers[kw]
119 w["bot"] = "buildbot-" + kw
120 if "latent" not in w:
121 w["latent"] = False
122 w["pass"] = workers_pass[kw]
123
124analyses_builders = [ "clang-analyzer" ]
125
126# default Libvirt session
Paul Jakma431900f2017-03-09 17:58:39 +0000127for w in (w for w in workers.values () if ("latent" in w and w["latent"])
Paul Jakma08815d52017-03-04 14:30:44 +0000128 and ("session" not in w)):
129 w["session"] = 'qemu+ssh://buildbot@sagan.jakma.org/system'
130
Paul Jakma390bffa2017-03-05 14:27:11 +0000131osbuilders = ["build-" + kw for kw in workers]
Paul Jakma0d917792017-03-05 14:53:59 +0000132osfastbuilders = ["build-" + kw for kw in workers if workers[kw]["vm"] == False]
133osslowbuilders = ["build-" + kw for kw in workers if workers[kw]["vm"] == True]
134
135rpmbuilders = ["rpm-" + kw for kw in workers if workers[kw]["pkg"] == "rpm"]
Paul Jakma08815d52017-03-04 14:30:44 +0000136
Paul Jakma431900f2017-03-09 17:58:39 +0000137# compilers
138# not using yet
139# [kw for kw in workers if len([v for (c,v) in workers[kw]["cc"] if c == "gcc"]) > 0 ]
140
Paul Jakma08815d52017-03-04 14:30:44 +0000141allbuilders = []
142allbuilders += osbuilders
Paul Jakma0d917792017-03-05 14:53:59 +0000143allbuilders += rpmbuilders
Paul Jakma08815d52017-03-04 14:30:44 +0000144allbuilders += analyses_builders
145allbuilders += ["commit-builder"]
146allbuilders += ["build-distcheck"]
Paul Jakma431900f2017-03-09 17:58:39 +0000147allbuilders += ["build-docs" ]
Paul Jakma08815d52017-03-04 14:30:44 +0000148
149# Force merging of requests.
Paul Jakma0d917792017-03-05 14:53:59 +0000150# c['mergeRequests'] = lambda *args, **kwargs: True
Paul Jakma08815d52017-03-04 14:30:44 +0000151
152####### BUILDSLAVES
153c['slaves'] = []
154
155# The 'slaves' list defines the set of recognized buildslaves. Each element is
156# a BuildSlave object, specifying a unique slave name and password. The same
157# slave name and password must be configured on the slave.
158
159for w in (w for w in workers.values() if ("latent" not in w)
160 or (w["latent"] == False)):
Paul Jakma431900f2017-03-09 17:58:39 +0000161 c['slaves'].append(buildslave.BuildSlave(w["bot"], w["pass"],
162 properties=workers2publicprops (w),
163 ))
Paul Jakma08815d52017-03-04 14:30:44 +0000164
165for w in (w for w in workers.values()
166 if ("latent" in w)
167 and w["latent"]
168 and "hd_image" in w):
169 c['slaves'].append(buildslave.LibVirtSlave(
170 w["bot"],
171 w["pass"],
172 util.Connection(w["session"]),
173 w["hd_image"],
Paul Jakma431900f2017-03-09 17:58:39 +0000174 properties=workers2publicprops (w),
Paul Jakma08815d52017-03-04 14:30:44 +0000175 ))
176
177# 'protocols' contains information about protocols which master will use for
178# communicating with slaves.
179# You must define at least 'port' option that slaves could connect to your master
180# with this protocol.
181# 'port' must match the value configured into the buildslaves (with their
182# --master option)
183c['protocols'] = {'pb': {'port': 9989}}
184
185####### CHANGESOURCES
186
187# the 'change_source' setting tells the buildmaster how it should find out
188# about source code changes. Here we point to the buildbot clone of pyflakes.
189
190c['change_source'] = []
191c['change_source'].append(changes.GitPoller(
192 quaggagit,
193 workdir='gitpoller-workdir',
194 branches=['master','volatile/next'],
195 pollinterval=300))
196
Paul Jakma72e3b8b2017-03-08 10:27:54 +0000197####### REVISION LINKS
198# associate changesouce repositories to URI templates for code view
199#
200c['revlink'] = util.RevlinkMatch([quaggagit + r"(.*)"],
201 r"http://git.savannah.gnu.org/cgit/quagga.git/commit/?id=%s")
202
Paul Jakma08815d52017-03-04 14:30:44 +0000203####### SCHEDULERS
204
205# Configure the Schedulers, which decide how to react to incoming changes.
206
207# We want a first line of 'quick' builds, which then trigger further builds.
208#
209# A control-flow builder, "commit-builder", used to sequence the 'real'
210# sets of builders, via Triggers.
211
212c['schedulers'] = []
213c['schedulers'].append(schedulers.SingleBranchScheduler(
214 name="master-change",
215 change_filter=util.ChangeFilter(branch='master'),
216 treeStableTimer=10,
217 builderNames=[ "commit-builder" ]))
218
219c['schedulers'].append(schedulers.SingleBranchScheduler(
220 name="next-change",
221 change_filter=util.ChangeFilter(
222 branch='volatile/next'),
223 treeStableTimer=10,
224 builderNames=[ "commit-builder" ] ))
225
226# Initial build checks on faster, non-VM
227c['schedulers'].append(schedulers.Triggerable(
228 name="trigger-build-first",
Paul Jakma0d917792017-03-05 14:53:59 +0000229 builderNames=osfastbuilders))
Paul Jakma08815d52017-03-04 14:30:44 +0000230
231# Build using remaining builders, after firstbuilders.
232c['schedulers'].append(schedulers.Triggerable(
233 name="trigger-build-rest",
Paul Jakma0d917792017-03-05 14:53:59 +0000234 builderNames=osslowbuilders))
Paul Jakma08815d52017-03-04 14:30:44 +0000235
236# Analyses tools, e.g. CLang Analyzer scan-build
237c['schedulers'].append(schedulers.Triggerable(
238 name="trigger-build-analyses",
239 builderNames=analyses_builders))
240# Dist check
241c['schedulers'].append(schedulers.Triggerable(
242 name="trigger-distcheck",
243 builderNames=["build-distcheck"]))
Paul Jakma390bffa2017-03-05 14:27:11 +0000244# RPM check and build
245c['schedulers'].append(schedulers.Triggerable(
246 name="trigger-rpm",
Paul Jakma0d917792017-03-05 14:53:59 +0000247 builderNames=rpmbuilders))
Paul Jakma08815d52017-03-04 14:30:44 +0000248
Paul Jakma431900f2017-03-09 17:58:39 +0000249# Doc build check (non-nightly, so no upload)
250c['schedulers'].append(schedulers.Triggerable(
251 name="trigger-build-docs",
252 builderNames=["build-docs"]))
253
Paul Jakma08815d52017-03-04 14:30:44 +0000254# Try and force schedulers
255c['schedulers'].append(schedulers.ForceScheduler(
256 name="force",
257 builderNames=allbuilders))
258
259c['schedulers'].append(schedulers.Try_Userpass(
260 name="try",
Paul Jakma0d917792017-03-05 14:53:59 +0000261 builderNames=osbuilders
262 + rpmbuilders
263 + ["build-distcheck",
Paul Jakma431900f2017-03-09 17:58:39 +0000264 "clang-analyzer",
265 "build-docs" ],
Paul Jakma08815d52017-03-04 14:30:44 +0000266 userpass=users,
267 port=8031))
268
Paul Jakma431900f2017-03-09 17:58:39 +0000269## nightly docs build
270c['schedulers'].append(schedulers.Nightly(
271 name="nightly-docs",
272 branch="master",
273 builderNames=[ "build-docs" ],
274 hour=3,
275 minute=0,
276 onlyIfChanged=True,
277 properties = { "nightly": True },
278))
279
280
Paul Jakma08815d52017-03-04 14:30:44 +0000281####### BUILDERS
282c['builders'] = []
283
284# The 'builders' list defines the Builders, which tell Buildbot how to perform a build:
285# what steps, and which slaves can execute them. Note that any particular build will
286# only take place on one slave.
287
Paul Jakma431900f2017-03-09 17:58:39 +0000288common_setup = [
289 steps.Git(repourl=quaggagit, mode='incremental'),
290 steps.ShellCommand(command=["./update-autotools"],
291 description="generating autoconf",
292 descriptionDone="autoconf"),
293 steps.Configure(command="../build/configure"),
294 steps.ShellCommand(command=["make", "clean"],
295 description="cleaning",
296 descriptionDone="make clean"),
Paul Jakma08815d52017-03-04 14:30:44 +0000297]
298
Paul Jakma390bffa2017-03-05 14:27:11 +0000299### Default 'check' build, builder instantiated for each OS
Paul Jakma08815d52017-03-04 14:30:44 +0000300
301factory = util.BuildFactory()
302# check out the source
303factory.addStep(steps.Git(repourl=quaggagit, mode='incremental'))
304factory.addStep(steps.ShellCommand(command=["./update-autotools"],
305 description="generating autoconf",
Paul Jakma390bffa2017-03-05 14:27:11 +0000306 descriptionDone="autoconf"))
Paul Jakma08815d52017-03-04 14:30:44 +0000307factory.addStep(steps.Configure())
308factory.addStep(steps.ShellCommand(command=["make", "clean"],
309 description="cleaning",
Paul Jakma390bffa2017-03-05 14:27:11 +0000310 descriptionDone="clean"))
Paul Jakma431900f2017-03-09 17:58:39 +0000311
312#factory.addSteps(common_setup)
Paul Jakma08815d52017-03-04 14:30:44 +0000313factory.addStep(steps.Compile(command=["make", "-j", "2", "all"]))
314factory.addStep(steps.ShellCommand(command=["make", "check"],
Paul Jakma390bffa2017-03-05 14:27:11 +0000315 description="checking",
316 descriptionDone="make check"))
Paul Jakma08815d52017-03-04 14:30:44 +0000317
Paul Jakma390bffa2017-03-05 14:27:11 +0000318# create builder for every OS, for every buildbot
319# XXX: at moment this assumes 1:1 OS<->bot
Paul Jakma08815d52017-03-04 14:30:44 +0000320for kw in workers:
321 c['builders'].append(util.BuilderConfig(
322 name="build-" + kw,
323 slavenames=workers[kw]["bot"],
324 factory=factory))
325
Paul Jakma390bffa2017-03-05 14:27:11 +0000326### distcheck Builder, executed on any available bot
Paul Jakma08815d52017-03-04 14:30:44 +0000327factory = util.BuildFactory()
328# check out the source
329factory.addStep(steps.Git(repourl=quaggagit, mode='incremental'))
330factory.addStep(steps.ShellCommand(command=["./update-autotools"],
331 description="generating autoconf",
Paul Jakma390bffa2017-03-05 14:27:11 +0000332 descriptionDone="autoconf"))
Paul Jakma08815d52017-03-04 14:30:44 +0000333factory.addStep(steps.Configure())
334factory.addStep(steps.ShellCommand(command=["make", "clean"],
335 description="cleaning",
Paul Jakma390bffa2017-03-05 14:27:11 +0000336 descriptionDone="make clean"))
Paul Jakma08815d52017-03-04 14:30:44 +0000337factory.addStep(steps.ShellCommand(command=["make", "distcheck"],
Paul Jakma390bffa2017-03-05 14:27:11 +0000338 description="run make distcheck",
339 descriptionDone="make distcheck"))
Paul Jakma08815d52017-03-04 14:30:44 +0000340c['builders'].append(
341 util.BuilderConfig(name="build-distcheck",
342 slavenames=list(w["bot"] for w in workers.values()),
343 factory=factory,
344))
345
Paul Jakma390bffa2017-03-05 14:27:11 +0000346### LLVM clang-analyzer build, executed on any available non-VM bot
Paul Jakma08815d52017-03-04 14:30:44 +0000347
348f = util.BuildFactory()
349# check out the source
350f.addStep(steps.Git(repourl=quaggagit, mode='incremental',
351 getDescription=True))
352f.addStep(steps.ShellCommand(command=["./update-autotools"],
Paul Jakma390bffa2017-03-05 14:27:11 +0000353 description="run autotools",
354 descriptionDone="autoconf"))
Paul Jakma08815d52017-03-04 14:30:44 +0000355f.addStep(steps.Configure())
356f.addStep(steps.ShellCommand(command=["make", "clean"],
357 description="cleaning",
Paul Jakma390bffa2017-03-05 14:27:11 +0000358 descriptionDone="make clean"))
Paul Jakma08815d52017-03-04 14:30:44 +0000359
360f.addStep(steps.SetProperty(property="clang-id",
361 value=util.Interpolate("%(prop:commit-description)s-%(prop:buildnumber)s")))
362
363f.addStep(steps.SetProperty(property="clang-output-dir",
364 value=util.Interpolate("../CLANG-%(prop:clang-id)s")))
365f.addStep(steps.SetProperty(property="clang-uri",
366 value=util.Interpolate("/clang-analyzer/%(prop:clang-id)s")))
367# relative to buildbot master working directory
368f.addStep(steps.SetProperty(property="clang-upload-dir",
369 value=util.Interpolate("public_html/clang-analyzer/%(prop:clang-id)s")))
370
371f.addStep(steps.Compile(command=["scan-build",
372 "-analyze-headers",
373 "-o",
374 util.Interpolate("%(prop:clang-output-dir)s"),
375 "make", "-j", "all"]))
376f.addStep(steps.DirectoryUpload(
377 slavesrc=util.Interpolate("%(prop:clang-output-dir)s"),
378 masterdest = util.Interpolate("%(prop:clang-upload-dir)s"),
379 compress = 'bz2',
380 name = "clang report",
381 url = util.Interpolate("%(prop:clang-uri)s"),
382))
383f.addStep(steps.RemoveDirectory(
384 dir=util.Interpolate("%(prop:clang-output-dir)s")
385))
386
Paul Jakma390bffa2017-03-05 14:27:11 +0000387
Paul Jakma08815d52017-03-04 14:30:44 +0000388c['builders'].append(
389 util.BuilderConfig(name="clang-analyzer",
390 slavenames=list(w["bot"] for w in workers.values() if not w["vm"]),
391 factory=f))
392
Paul Jakma390bffa2017-03-05 14:27:11 +0000393
394### RPM: check and build
395f = util.BuildFactory ()
396
397# check out the source
398f.addStep(steps.Git(repourl=quaggagit, mode='full'))
399f.addStep(steps.ShellCommand(command=["./update-autotools"],
400 description="run autotools",
401 descriptionDone="autotools"))
402f.addStep(steps.Configure())
403f.addStep(steps.ShellCommand(command=["make", "dist"],
404 description="run make dist",
405 descriptionDone="make dist"))
406# not imported somehow
407#f.addStep(steps.RpmLint(fileloc="redhat/quagga.spec"))
408f.addStep(steps.ShellCommand(command=["rpmlint", "-i", "redhat/quagga.spec"],
409 description="run rpmlint",
410 descriptionDone="rpmlint"))
411f.addStep(steps.RpmBuild(specfile="redhat/quagga.spec"))
412# rpmdir=util.Interpolate("%(prop:builddir)s/rpm")))
413
414# XXX: assuming 1:1 OS:buildbot mapping
415for kw in (kw for kw in workers if workers[kw]["pkg"] == "rpm"):
416 c['builders'].append(
417 util.BuilderConfig(name="rpm-" + kw,
418 slavenames="buildbot-" + kw,
419 factory=f
420 )
421 )
422
Paul Jakma431900f2017-03-09 17:58:39 +0000423### Build documentation
424
425def build_is_nightly (step):
426 n = step.getProperty("nightly")
427 if n == True or n == "True" or n == "true":
428 return True
429 return False
430
431f = util.BuildFactory ()
432f.addStep(steps.Git(repourl=quaggagit, mode='full'))
433f.addStep(steps.ShellCommand(command=["./update-autotools"],
434 description="run autotools",
435 descriptionDone="autotools"))
436f.addStep(steps.Configure(command=["../build/configure"],
437 workdir="docs"))
438f.addStep(steps.ShellCommand(command=["make", "V=99", "quagga.html"],
439 description="making split HTML doc",
440 descriptionDone="docs: split HTML",
441 workdir="docs/doc",
442 haltOnFailure=True,
443))
444#f.addStep(steps.FileUpload(
445# slavesrc="build/doc/fig-normal-processing.png",
446# masterdest = "public_html/docs/nightly/quagga/",
447# name = "Upload Fig 1",
448# doStepIf=build_is_nightly,
449#))
450#f.addStep(steps.FileUpload(
451# slavesrc="build/doc/fig-rs-processing.png",
452# masterdest = "public_html/docs/nightly/quagga/",
453# name = "Upload Fig 2",
454# doStepIf=build_is_nightly,
455#))
456f.addStep(steps.MultipleFileUpload(
457 slavesrcs=[ "doc/fig-rs-processing.png",
458 "doc/fig-normal-processing.png" ],
459 masterdest = "public_html/docs/nightly/quagga/",
460 name = "Upload Figures",
461 doStepIf=build_is_nightly,
462))
463f.addStep(steps.DirectoryUpload(
464 slavesrc="quagga.html",
465 masterdest = "public_html/docs/nightly/quagga",
466 compress = 'bz2',
467 name = "Upload split HTML",
468 url = "/docs/nightly/quagga/index.html",
469 workdir="docs/doc",
470 doStepIf=build_is_nightly,
471))
472f.addStep(steps.RemoveDirectory(
473 dir="docs/doc/quagga.html",
474))
475f.addStep(steps.ShellCommand(command=["make", "V=99",
476 "MAKEINFOFLAGS=--no-split",
477 "quagga.html"],
478 description="making one-page HTML doc",
479 descriptionDone="docs: one-page HTML",
480 workdir="docs/doc",
481 haltOnFailure=True
482))
483f.addStep(steps.FileUpload(
484 slavesrc="quagga.html",
485 masterdest = "public_html/docs/nightly/quagga/quagga.html",
486 name = "Upload single HTML",
487 url = "/docs/nightly/quagga/quagga.html",
488 workdir="docs/doc",
489 doStepIf=build_is_nightly,
490))
491f.addStep(steps.ShellCommand(command=["make", "V=99", "quagga.pdf"],
492 description="making PDF docs",
493 descriptionDone="docs: PDF",
494 workdir="docs/doc"
495))
496f.addStep(steps.FileUpload(
497 slavesrc="quagga.pdf",
498 masterdest = "public_html/docs/nightly/quagga/quagga.pdf",
499 name = "Upload PDF",
500 url = "/docs/nightly/quagga/quagga.pdf",
501 workdir="docs/doc",
502 doStepIf=build_is_nightly,
503))
504
505c['builders'].append(
506 util.BuilderConfig(name="build-docs",
507 slavenames=[w["bot"] for w in workers.values()
508 if "texi" in w and w["texi"] == True ],
509 factory=f
510))
511
Paul Jakma390bffa2017-03-05 14:27:11 +0000512### Co-ordination builds used to sequence parallel builds via Triggerable
513
514# to understand this you have to read this list and the Triggered schedulers
515# to see what sets of builds are being sequenced. Bit clunky, but Buildbot
516# doesn't have a way to just specify a pipeline of groups of builders more
517# cleanly.
518
Paul Jakma08815d52017-03-04 14:30:44 +0000519f = util.BuildFactory()
520f.addStep(steps.Trigger (
521 schedulerNames = [ "trigger-build-first" ],
Paul Jakma390bffa2017-03-05 14:27:11 +0000522 waitForFinish=True,
523 updateSourceStamp=True
Paul Jakma08815d52017-03-04 14:30:44 +0000524))
525f.addStep(steps.Trigger (
526 schedulerNames = [ "trigger-build-rest" ],
Paul Jakma390bffa2017-03-05 14:27:11 +0000527 waitForFinish=True,
528 updateSourceStamp=True
Paul Jakma08815d52017-03-04 14:30:44 +0000529))
530f.addStep(steps.Trigger (
Paul Jakma431900f2017-03-09 17:58:39 +0000531 schedulerNames = [ "trigger-build-analyses", "trigger-distcheck",
532 "trigger-build-docs" ],
Paul Jakma390bffa2017-03-05 14:27:11 +0000533 waitForFinish=True,
534 updateSourceStamp=True
535))
536f.addStep(steps.Trigger (
537 schedulerNames = [ "trigger-rpm" ],
538 waitForFinish=True,
539 updateSourceStamp=True
Paul Jakma08815d52017-03-04 14:30:44 +0000540))
541
542c['builders'].append(
543 util.BuilderConfig(name="commit-builder",
Paul Jakma390bffa2017-03-05 14:27:11 +0000544 slavenames=[w["bot"] for w in workers.values() if not w["vm"]],
545 factory=f)
546)
547
Paul Jakma08815d52017-03-04 14:30:44 +0000548####### STATUS TARGETS
549
550# 'status' is a list of Status Targets. The results of each build will be
551# pushed to these targets. buildbot/status/*.py has a variety to choose from,
552# including web pages, email senders, and IRC bots.
553
554c['status'] = []
555
556from buildbot.status import html
557from buildbot.status.web import authz, auth
558
559authz_cfg=authz.Authz(
560 # change any of these to True to enable; see the manual for more
561 # options
562 #auth=auth.BasicAuth([("pyflakes","pyflakes")]),
563 auth=util.BasicAuth(users),
564 gracefulShutdown = False,
565 forceBuild = 'auth', # use this to test your slave once it is set up
566 forceAllBuilds = 'auth', # ..or this
567 pingBuilder = 'auth',
568 stopBuild = 'auth',
569 stopAllBuilds = 'auth',
570 cancelPendingBuild = 'auth',
571 cancelAllPendingBuilds = 'auth',
572 pauseSlave = 'auth',
573)
574c['status'].append(html.WebStatus(http_port=8010, authz=authz_cfg))
575
576c['status'].append(status.MailNotifier(
577 fromaddr="buildbot@quagga.net",
578 extraRecipients=["paul@jakma.org"],
579 sendToInterestedUsers=False,
580))
581
582c['status'].append (status.IRC(
583 "irc.freenode.net", "bb-quagga",
584 useColors=True,
585 channels=[{"channel": "#quagga"}],
586 notify_events={
587 'exception': 1,
588 'successToFailure': 1,
589 'failureToSuccess': 1,
590 },
591))
592
593####### PROJECT IDENTITY
594
595# the 'title' string will appear at the top of this buildbot
596# installation's html.WebStatus home page (linked to the
597# 'titleURL') and is embedded in the title of the waterfall HTML page.
598
599c['title'] = "Quagga"
600c['titleURL'] = "https://www.quagga.net/"
601
602# the 'buildbotURL' string should point to the location where the buildbot's
603# internal web server (usually the html.WebStatus page) is visible. This
604# typically uses the port number set in the Waterfall 'status' entry, but
605# with an externally-visible host name which the buildbot cannot figure out
606# without some help.
607
608c['buildbotURL'] = "http://buildbot.quagga.net/"
609
610####### DB URL
611
612c['db'] = {
613 # This specifies what database buildbot uses to store its state. You can leave
614 # this at its default for all but the largest installations.
615 'db_url' : "sqlite:///state.sqlite",
616}
617
618#### debug
619c['debugPassword'] = debugPassword