123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391 |
- # -*- python -*-
- # ex: set syntax=python:
- from buildbot.plugins import *
- from buildbot.plugins import buildslave, util
- # This is a sample buildmaster config file. It must be installed as
- # 'master.cfg' in your buildmaster's base directory.
- # This is the dictionary that the buildmaster pays attention to. We also use
- # a shorter alias to save typing.
- c = BuildmasterConfig = {}
- quaggagit = 'git://git.sv.gnu.org/quagga.git'
- # password defs
- execfile("pass.cfg")
- workers = {
- "fedora-24": {
- "os": "Fedora",
- "version": "24",
- "vm": False,
- "pkg": "rpm",
- },
- "centos-7": {
- "os": "CentOS",
- "version": "7",
- "vm": False,
- "pkg": "rpm",
- },
- "debian-8": {
- "os": "Debian",
- "version": "8",
- "vm": True,
- "pkg": "dpkg",
- "latent": True,
- "hd_image": "/var/lib/libvirt/images/debian8.qcow2",
- },
- "debian-9": {
- "os": "Debian",
- "version": "9",
- "vm": True,
- "pkg": "dpkg",
- "latent": True,
- "hd_image": "/var/lib/libvirt/images/debian9.qcow2",
- },
- "freebsd-10": {
- "os": "FreeBSD",
- "version": "10",
- "vm": True,
- "pkg": "",
- "latent": True,
- "hd_image": "/var/lib/libvirt/images/freebsd103.qcow2",
- },
- "freebsd-11": {
- "os": "FreeBSD",
- "version": "11",
- "vm": True,
- "pkg": "",
- "latent": True,
- "hd_image": "/var/lib/libvirt/images/freebsd110.qcow2",
- },
- }
- # ensure "latent" is set to false, where not set.
- # add in the passwords
- for kw in workers:
- w = workers[kw]
- w["bot"] = "buildbot-" + kw
- if "latent" not in w:
- w["latent"] = False
- w["pass"] = workers_pass[kw]
- analyses_builders = [ "clang-analyzer" ]
- # default Libvirt session
- for w in (w for w in workers.values () if ("latent" in w)
- and ("session" not in w)):
- w["session"] = 'qemu+ssh://buildbot@sagan.jakma.org/system'
- osbuilders = list("build-" + kw for kw in workers)
- allbuilders = []
- allbuilders += osbuilders
- allbuilders += analyses_builders
- allbuilders += ["commit-builder"]
- allbuilders += ["build-distcheck"]
- # Force merging of requests.
- c['mergeRequests'] = lambda *args, **kwargs: True
- ####### BUILDSLAVES
- c['slaves'] = []
- # The 'slaves' list defines the set of recognized buildslaves. Each element is
- # a BuildSlave object, specifying a unique slave name and password. The same
- # slave name and password must be configured on the slave.
- for w in (w for w in workers.values() if ("latent" not in w)
- or (w["latent"] == False)):
- c['slaves'].append(buildslave.BuildSlave(w["bot"], w["pass"]))
- for w in (w for w in workers.values()
- if ("latent" in w)
- and w["latent"]
- and "hd_image" in w):
- c['slaves'].append(buildslave.LibVirtSlave(
- w["bot"],
- w["pass"],
- util.Connection(w["session"]),
- w["hd_image"],
- ))
- # 'protocols' contains information about protocols which master will use for
- # communicating with slaves.
- # You must define at least 'port' option that slaves could connect to your master
- # with this protocol.
- # 'port' must match the value configured into the buildslaves (with their
- # --master option)
- c['protocols'] = {'pb': {'port': 9989}}
- ####### CHANGESOURCES
- # the 'change_source' setting tells the buildmaster how it should find out
- # about source code changes. Here we point to the buildbot clone of pyflakes.
- c['change_source'] = []
- c['change_source'].append(changes.GitPoller(
- quaggagit,
- workdir='gitpoller-workdir',
- branches=['master','volatile/next'],
- pollinterval=300))
- ####### SCHEDULERS
- # Configure the Schedulers, which decide how to react to incoming changes.
- # We want a first line of 'quick' builds, which then trigger further builds.
- #
- # A control-flow builder, "commit-builder", used to sequence the 'real'
- # sets of builders, via Triggers.
- c['schedulers'] = []
- c['schedulers'].append(schedulers.SingleBranchScheduler(
- name="master-change",
- change_filter=util.ChangeFilter(branch='master'),
- treeStableTimer=10,
- builderNames=[ "commit-builder" ]))
- c['schedulers'].append(schedulers.SingleBranchScheduler(
- name="next-change",
- change_filter=util.ChangeFilter(
- branch='volatile/next'),
- treeStableTimer=10,
- builderNames=[ "commit-builder" ] ))
- # Initial build checks on faster, non-VM
- c['schedulers'].append(schedulers.Triggerable(
- name="trigger-build-first",
- builderNames=list("build-" + kw
- for kw in workers
- if workers[kw]["vm"] == False)))
- # Build using remaining builders, after firstbuilders.
- c['schedulers'].append(schedulers.Triggerable(
- name="trigger-build-rest",
- builderNames=list("build-" + kw
- for w in workers
- if workers[kw]["vm"] == True)))
- # Analyses tools, e.g. CLang Analyzer scan-build
- c['schedulers'].append(schedulers.Triggerable(
- name="trigger-build-analyses",
- builderNames=analyses_builders))
- # Dist check
- c['schedulers'].append(schedulers.Triggerable(
- name="trigger-distcheck",
- builderNames=["build-distcheck"]))
- # Try and force schedulers
- c['schedulers'].append(schedulers.ForceScheduler(
- name="force",
- builderNames=allbuilders))
- c['schedulers'].append(schedulers.Try_Userpass(
- name="try",
- builderNames=list("build-" + kw
- for w in workers)
- + ["build-distcheck",
- "clang-analyzer" ],
- userpass=users,
- port=8031))
- ####### BUILDERS
- c['builders'] = []
- # The 'builders' list defines the Builders, which tell Buildbot how to perform a build:
- # what steps, and which slaves can execute them. Note that any particular build will
- # only take place on one slave.
- common_steps = [
- steps.Git(repourl=quaggagit, mode='incremental'),
- steps.ShellCommand(command=["./update-autotools"]),
- steps.Configure(),
- steps.ShellCommand(command=["make", "clean"]),
- steps.Compile(),
- ]
- ### Each OS specific builder
- factory = util.BuildFactory()
- # check out the source
- factory.addStep(steps.Git(repourl=quaggagit, mode='incremental'))
- factory.addStep(steps.ShellCommand(command=["./update-autotools"],
- description="generating autoconf",
- descriptionDone="autoconf generated"))
- factory.addStep(steps.Configure())
- factory.addStep(steps.ShellCommand(command=["make", "clean"],
- description="cleaning",
- descriptionDone="cleaned"))
- factory.addStep(steps.Compile(command=["make", "-j", "2", "all"]))
- factory.addStep(steps.ShellCommand(command=["make", "check"],
- description="testing",
- descriptionDone="tests"))
- for kw in workers:
- c['builders'].append(util.BuilderConfig(
- name="build-" + kw,
- slavenames=workers[kw]["bot"],
- factory=factory))
- ### distcheck
- factory = util.BuildFactory()
- # check out the source
- factory.addStep(steps.Git(repourl=quaggagit, mode='incremental'))
- factory.addStep(steps.ShellCommand(command=["./update-autotools"],
- description="generating autoconf",
- descriptionDone="autoconf generated"))
- factory.addStep(steps.Configure())
- factory.addStep(steps.ShellCommand(command=["make", "clean"],
- description="cleaning",
- descriptionDone="cleaned"))
- factory.addStep(steps.ShellCommand(command=["make", "distcheck"],
- description="distcheck",
- descriptionDone="distcheck passes"))
- c['builders'].append(
- util.BuilderConfig(name="build-distcheck",
- slavenames=list(w["bot"] for w in workers.values()),
- factory=factory,
- ))
- ### LLVM clang-analyzer build
- f = util.BuildFactory()
- # check out the source
- f.addStep(steps.Git(repourl=quaggagit, mode='incremental',
- getDescription=True))
- f.addStep(steps.ShellCommand(command=["./update-autotools"],
- description="autotools",
- descriptionDone="autoconf generated"))
- f.addStep(steps.Configure())
- f.addStep(steps.ShellCommand(command=["make", "clean"],
- description="cleaning",
- descriptionDone="cleaned"))
- f.addStep(steps.SetProperty(property="clang-id",
- value=util.Interpolate("%(prop:commit-description)s-%(prop:buildnumber)s")))
- f.addStep(steps.SetProperty(property="clang-output-dir",
- value=util.Interpolate("../CLANG-%(prop:clang-id)s")))
- f.addStep(steps.SetProperty(property="clang-uri",
- value=util.Interpolate("/clang-analyzer/%(prop:clang-id)s")))
- # relative to buildbot master working directory
- f.addStep(steps.SetProperty(property="clang-upload-dir",
- value=util.Interpolate("public_html/clang-analyzer/%(prop:clang-id)s")))
- f.addStep(steps.Compile(command=["scan-build",
- "-analyze-headers",
- "-o",
- util.Interpolate("%(prop:clang-output-dir)s"),
- "make", "-j", "all"]))
- f.addStep(steps.DirectoryUpload(
- slavesrc=util.Interpolate("%(prop:clang-output-dir)s"),
- masterdest = util.Interpolate("%(prop:clang-upload-dir)s"),
- compress = 'bz2',
- name = "clang report",
- url = util.Interpolate("%(prop:clang-uri)s"),
- ))
- f.addStep(steps.RemoveDirectory(
- dir=util.Interpolate("%(prop:clang-output-dir)s")
- ))
- c['builders'].append(
- util.BuilderConfig(name="clang-analyzer",
- slavenames=list(w["bot"] for w in workers.values() if not w["vm"]),
- factory=f))
- ## Co-ordination builds used to sequence parallel builds via Triggerable
- f = util.BuildFactory()
- f.addStep(steps.Trigger (
- schedulerNames = [ "trigger-build-first" ],
- waitForFinish=True
- ))
- f.addStep(steps.Trigger (
- schedulerNames = [ "trigger-build-rest" ],
- waitForFinish=True
- ))
- f.addStep(steps.Trigger (
- schedulerNames = [ "trigger-build-analyses", "trigger-distcheck" ],
- waitForFinish=True
- ))
- c['builders'].append(
- util.BuilderConfig(name="commit-builder",
- slavenames=["buildbot-fedora-24"],
- factory=f
- ))
- ####### STATUS TARGETS
- # 'status' is a list of Status Targets. The results of each build will be
- # pushed to these targets. buildbot/status/*.py has a variety to choose from,
- # including web pages, email senders, and IRC bots.
- c['status'] = []
- from buildbot.status import html
- from buildbot.status.web import authz, auth
- authz_cfg=authz.Authz(
- # change any of these to True to enable; see the manual for more
- # options
- #auth=auth.BasicAuth([("pyflakes","pyflakes")]),
- auth=util.BasicAuth(users),
- gracefulShutdown = False,
- forceBuild = 'auth', # use this to test your slave once it is set up
- forceAllBuilds = 'auth', # ..or this
- pingBuilder = 'auth',
- stopBuild = 'auth',
- stopAllBuilds = 'auth',
- cancelPendingBuild = 'auth',
- cancelAllPendingBuilds = 'auth',
- pauseSlave = 'auth',
- )
- c['status'].append(html.WebStatus(http_port=8010, authz=authz_cfg))
- c['status'].append(status.MailNotifier(
- fromaddr="buildbot@quagga.net",
- extraRecipients=["paul@jakma.org"],
- sendToInterestedUsers=False,
- ))
- c['status'].append (status.IRC(
- "irc.freenode.net", "bb-quagga",
- useColors=True,
- channels=[{"channel": "#quagga"}],
- notify_events={
- 'exception': 1,
- 'successToFailure': 1,
- 'failureToSuccess': 1,
- },
- ))
- ####### PROJECT IDENTITY
- # the 'title' string will appear at the top of this buildbot
- # installation's html.WebStatus home page (linked to the
- # 'titleURL') and is embedded in the title of the waterfall HTML page.
- c['title'] = "Quagga"
- c['titleURL'] = "https://www.quagga.net/"
- # the 'buildbotURL' string should point to the location where the buildbot's
- # internal web server (usually the html.WebStatus page) is visible. This
- # typically uses the port number set in the Waterfall 'status' entry, but
- # with an externally-visible host name which the buildbot cannot figure out
- # without some help.
- c['buildbotURL'] = "http://buildbot.quagga.net/"
- ####### DB URL
- c['db'] = {
- # This specifies what database buildbot uses to store its state. You can leave
- # this at its default for all but the largest installations.
- 'db_url' : "sqlite:///state.sqlite",
- }
- #### debug
- c['debugPassword'] = debugPassword
|