# -*- python -*- # ex: set filetype=python: from buildbot.plugins import * # 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 = {} ####### WORKERS # The 'workers' list defines the set of recognized workers. Each element is # a Worker object, specifying a unique worker name and password. The same # worker name and password must be configured on the worker. c['workers'] = [worker.Worker("lcov-worker", "lcov-pass"), worker.Worker("selenium-worker", "selenium-pass"), worker.Worker("switcher-worker", "switcher-pass")] # 'protocols' contains information about protocols which master will use for # communicating with workers. You must define at least 'port' option that workers # could connect to your master with this protocol. # 'port' must match the value configured into the workers (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( 'git://taler.net/wallet-webex', workdir='gitpoller-workdir', branch='master', pollinterval=300)) c['change_source'].append(changes.GitPoller( 'git://taler.net/merchant', workdir='gitpoller-workdir', branch='master', pollinterval=300)) c['change_source'].append(changes.GitPoller( 'git://taler.net/exchange', workdir='gitpoller-workdir', branch='master', pollinterval=300)) ####### SCHEDULERS # Configure the Schedulers, which decide how to react to incoming changes. In this # case, just kick off a 'runtests' build c['schedulers'] = [] c['schedulers'].append(schedulers.SingleBranchScheduler( name="all", change_filter=util.ChangeFilter(branch='master'), treeStableTimer=None, builderNames=["lcov-builder", "selenium-builder", "switcher-builder"])) c['schedulers'].append(schedulers.ForceScheduler( name="force", builderNames=["lcov-builder", "selenium-builder", "switcher-builder"])) ####### BUILDERS # The 'builders' list defines the Builders, which tell Buildbot how to perform a build: # what steps, and which workers can execute them. Note that any particular build will # only take place on one worker. # FIXME: the bad side of these builders is that they expect the worker's environment # to be _already_ set up (codedbases, scripts, etc). In other words, it's not "self-contained". from buildbot.steps.source.git import Git from buildbot.steps.shell import ShellCommand lcov_factory = util.BuildFactory() lcov_factory.addStep(Git(repourl='git://git.taler.net/deployment.git', mode='full', method='fresh', alwaysUseLatest=True, haltOnFailure=True, branch='master')) lcov_factory.addStep(ShellCommand(name="invalidation", description="Invalidating timestamps", descriptionDone="timestamps invalidated", command=["./invalidate.sh"], workdir="build/taler-build")) lcov_factory.addStep(ShellCommand(name="builder", description="Compiling..", descriptionDone="lcov files generated", command=["make", "lcov"], workdir="build/taler-build", env={'PATH': "${HOME}/local/bin:${PATH}", 'TALER_CHECKDB': "postgresql:///talercheck?host=/home/${USER}/sockets"})) switcher_factory = util.BuildFactory() switcher_factory.addStep(Git(repourl='git://git.taler.net/deployment.git', mode='full', method='fresh', alwaysUseLatest=True, haltOnFailure=True, branch='master')) switcher_factory.addStep(ShellCommand(name="build", description="Building inactive blue-green party.", descriptionDone="Compile.", command=["./build.sh"], workdir="build/buildbot")) switcher_factory.addStep(ShellCommand(name="build", description="Starting inactive blue-green party.", descriptionDone="Restarting Taler.", command=["./restart.sh"], workdir="build/buildbot")) switcher_factory.addStep(ShellCommand(name="build", description="Checking services are correctly restarted.", descriptionDone="All services are correctly restarted.", command=["./checks.sh"], workdir="build/buildbot")) switcher_factory.addStep(ShellCommand(name="build", description="Switching active party.", descriptionDone="Active party has been switched.", command=["./switch.sh"], workdir="build/buildbot")) selenium_factory = util.BuildFactory() selenium_factory.addStep(ShellCommand(name="selenium", description="Headless browser test", descriptionDone="Test finished", command=["launch_selenium_test"], env={'PATH': "${HOME}/local/bin:/usr/lib/chromium:${PATH}"})) c['builders'] = [] c['builders'].append( util.BuilderConfig(name="lcov-builder", workernames=["lcov-worker"], factory=lcov_factory)) c['builders'].append( util.BuilderConfig(name="switcher-builder", workernames=["switcher-worker"], factory=switcher_factory)) c['builders'].append( util.BuilderConfig(name="selenium-builder", workernames=["selenium-worker"], factory=selenium_factory)) ####### BUILDBOT SERVICES # 'services' is a list of BuildbotService items like reporter targets. The # status of each build will be pushed to these targets. buildbot/reporters/*.py # has a variety to choose from, like IRC bots. c['services'] = [] c['services'] = [] from buildbot.plugins import reporters irc = reporters.IRC("irc.eu.freenode.net", "taler-bb", useColors=False, channels=[{"channel": "#taler"}], password="taler-bb-pass19", notify_events={ 'exception': 1, 'successToFailure': 1, 'failureToSuccess': 1, }) email = reporters.MailNotifier(fromaddr="testbuild@taler.net", sendToInterestedUsers=False, mode=("problem"), builders=("switcher-builder"), extraRecipients=["marcello.stanisci@inria.fr", "florian.dold@inria.fr", "christian@grothoff.org"], subject="Taler build.") c['services'].append(irc) c['services'].append(email) ####### PROJECT IDENTITY # the 'title' string will appear at the top of this buildbot installation's # home pages (linked to the 'titleURL'). c['title'] = "Taler" c['titleURL'] = "https://taler.net" # the 'buildbotURL' string should point to the location where the buildbot's # internal web server is visible. This typically uses the port number set in # the 'www' entry below, but with an externally-visible host name which the # buildbot cannot figure out without some help. c['buildbotURL'] = "https://buildbot.taler.net/" # minimalistic config to activate new web UI c['www'] = dict(port=8010, plugins=dict(waterfall_view={}, console_view={}), allowed_origins=["https://*.taler.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", }