# -*- python -*- # ex: set syntax=python: c = BuildmasterConfig = {} local = "${HOME}/local" ####### LOGS SIZE c['changeHorizon'] = 20 c['buildHorizon'] = 10 c['eventHorizon'] = 5 c['logHorizon'] = 4 c['buildCacheSize'] = 2 ####### BUILDSLAVES from buildbot.buildslave import BuildSlave c['slaves'] = [BuildSlave("testGreenSlave", "taler"), BuildSlave("testBlueSlave", "taler"), BuildSlave("containersSlave", "taler"), BuildSlave("lcovSlave", "taler")] c['protocols'] = {'pb': {'port': 9989}} ####### CHANGESOURCES # They are just "pointers" to monitored codebases. from buildbot.changes.gitpoller import GitPoller c['change_source'] = [] c['change_source'].append(GitPoller( 'git://git.taler.net/exchange.git', workdir='gitpoller-workdir', branches=True, pollinterval=300)) c['change_source'].append(GitPoller( 'git://git.taler.net/merchant.git', workdir='gitpoller-workdir', branches=True, pollinterval=300)) c['change_source'].append(GitPoller( 'git://git.taler.net/bank.git', workdir='gitpoller-workdir', branches=True, pollinterval=300)) c['change_source'].append(GitPoller( 'git://git.taler.net/merchant-frontends.git', workdir='gitpoller-workdir', branches=True, pollinterval=300)) ####### SCHEDULERS # They take action: actually trigger the build. from buildbot.schedulers.basic import SingleBranchScheduler from buildbot.schedulers.forcesched import * from buildbot.schedulers.timed import * from buildbot.changes import filter c['schedulers'] = [] git_master = SingleBranchScheduler( name="global-master", reason="Commit pushed for one of the sub-projects", change_filter=filter.ChangeFilter(branch='master'), treeStableTimer=300, builderNames=["global-switcher", "lcov-build"]) force = ForceScheduler( name="force-build", revision=FixedParameter(name="revision", default=""), repository=FixedParameter(name="repository", default=""), project=FixedParameter(name="project", default=""), builderNames=["global-switcher", "lcov-build", "auto-click"]) selenium = Periodic( name="clicking", builderNames=["auto-click"], periodicBuildTimer=5*60*60) c['schedulers'] = [force, git_master, selenium] ####### BUILDERS # They know *how* to build: which scripts need to be invoked, # where in the filesystem.. from buildbot.process.factory import BuildFactory from buildbot.steps.source.git import Git from buildbot.steps.shell import ShellCommand from buildbot.steps.shell import Configure from buildbot.steps.shell import Compile from buildbot.steps.shell import Test import os def pickSlave(builder, slaves): map = {'green': 'testGreenSlave', 'blue': 'testBlueSlave'} toPick = "blue" activePath = os.readlink("/home/test/sockets") if "blue" in activePath: toPick = "green" for s in slaves: if map[toPick] == s.slave.slavename: return s print "No suitable slave found" return None globalSwitcher = BuildFactory() globalSwitcher.addStep(Git(repourl='git://git.taler.net/deployment.git', mode='full', method='fresh', alwaysUseLatest=True, haltOnFailure=True, branch='master')) globalSwitcher.addStep(ShellCommand(name="switcher", description="Compiling..", descriptionDone="Active party switched", command=["./switch_active.sh"], workdir="build/taler-build", env={'PATH': "${HOME}/bin:${PATH}", 'TALER_CHECKDB': "postgres:///taler-check-${USER}"})) lcov = BuildFactory() lcov.addStep(Git(repourl='git://git.taler.net/deployment.git', mode='full', method='fresh', alwaysUseLatest=True, haltOnFailure=True, branch='master')) lcov.addStep(ShellCommand( name="invalidation", description="Invalidating timestamps", descriptionDone="timestamps invalidated", command=["./invalidate.sh"], workdir="build/taler-build")) lcov.addStep(ShellCommand( name="builder", description="Compiling..", descriptionDone="lcov files generated", command=["make", "lcov"], workdir="build/taler-build")) autoClick = BuildFactory() autoClick.addStep(ShellCommand( name="auto-click", description="Performing demo", descriptionDone="Demo finished", command=["launch_selenium_test.sh"], env={'PATH': "${HOME}/deployment/docker/selenium:${PATH}"})) from buildbot.config import BuilderConfig c['builders'] = [] c['builders'].append( BuilderConfig(name="global-switcher", slavenames=["testGreenSlave", "testBlueSlave"], factory=globalSwitcher, nextSlave=pickSlave)) c['builders'].append( BuilderConfig(name="lcov-build", slavenames=["lcovSlave"], factory=lcov)) c['builders'].append( BuilderConfig(name="auto-click", slavenames=["containersSlave"], factory=autoClick)) ####### STATUS TARGETS 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([("marcello","taler")]), gracefulShutdown = False, forceBuild = 'auth', # use this to test your slave once it is set up forceAllBuilds = False, pingBuilder = False, stopBuild = False, stopAllBuilds = False, cancelPendingBuild = False, ) c['status'].append(html.WebStatus(http_port=8010, authz=authz_cfg)) ####### PROJECT IDENTITY c['title'] = "Taler" c['titleURL'] = "http://taler.net" c['buildbotURL'] = "http://buildbot.taler.net" ####### DB URL c['db'] = { 'db_url' : "sqlite:///state.sqlite", }