# -*- 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 = {} # Silence warning and allow very basic phoning home. c["buildbotNetUsageData"] = "basic" ####### 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("doc-worker", "doc-pass"), worker.Worker("switcher-worker", "switcher-pass"), worker.Worker("wallet-worker", "wallet-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": "tcp:9989:interface=127.0.0.1"}} ####### CHANGESOURCES # the 'change_source' setting tells the buildmaster how it should find out # about source code changes. cs_wallet = changes.GitPoller( "git://taler.net/wallet-webex", project="wallet", workdir="gitpoller-workdir", branch="master", pollinterval=300) cs_merchant = changes.GitPoller( "git://taler.net/merchant", project="merchant", workdir="gitpoller-workdir", branch="master", pollinterval=300) cs_exchange = changes.GitPoller( "git://taler.net/exchange", project="exchange", workdir="gitpoller-workdir", branch="master", pollinterval=300) cs_bank = changes.GitPoller( "git://taler.net/bank", project="bank", workdir="gitpoller-workdir", branch="master", pollinterval=300) cs_api = changes.GitPoller( "git://taler.net/api", project="api", workdir="gitpoller-workdir", branch="master", pollinterval=300) cs_deployment = changes.GitPoller( "git://taler.net/deployment", project="deployment", workdir="gitpoller-workdir", branch="master", pollinterval=300) c["change_source"] = [cs_api, cs_wallet, cs_merchant, cs_exchange, cs_bank, cs_deployment] ####### SCHEDULERS # Configure the Schedulers, which decide how to react to incoming changes. # Re-build documentation periodically doc_scheduler = schedulers.Periodic( name="periodic-doc-scheduler", builderNames=["doc-builder"], periodicBuildTimer=12*60*60) wallet_scheduler = schedulers.SingleBranchScheduler( name="wallet-scheduler", change_filter=util.ChangeFilter(branch="master", project_re="wallet|deployment"), treeStableTimer=None, builderNames=["wallet-builder"]) all_scheduler = schedulers.SingleBranchScheduler( name="all-scheduler", change_filter=util.ChangeFilter(branch="master", project_re="wallet|bank|exchange|merchant|deployment"), treeStableTimer=None, builderNames=[ "lcov-builder", "selenium-builder", "switcher-builder", "wallet-builder"]) # Provide "force" button in the web UI force_scheduler = schedulers.ForceScheduler( name="force-scheduler", builderNames=[ "lcov-builder", "selenium-builder", "switcher-builder", "doc-builder", "wallet-builder"]) c["schedulers"] = [doc_scheduler, wallet_scheduler, all_scheduler, force_scheduler] ####### 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 wallet_factory = util.BuildFactory() wallet_factory.addStep(Git(repourl="git://git.taler.net/wallet-webex.git", mode="full", method="fresh", logEnviron=False, alwaysUseLatest=True, haltOnFailure=True, branch="master")) wallet_factory.addStep(ShellCommand(name="configuration", description="Running configure script", descriptionDone="Correctly configured", command=["./configure"], workdir="build/")) wallet_factory.addStep(ShellCommand(name="test", description="Running wallet tests", descriptionDone="Test correctly run", command=["make", "check"], workdir="build/")) lcov_factory = util.BuildFactory() lcov_factory.addStep(Git(repourl='git://git.taler.net/deployment.git', mode="full", method='fresh', logEnviron=False, 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="build", 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", logEnviron=False, 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="restart services", description="Restarting inactive blue-green party.", descriptionDone="Restarting Taler.", command=["./restart.sh"], workdir="build/buildbot")) switcher_factory.addStep(ShellCommand(name="check services correctly restarted", description="Checking services are correctly restarted.", descriptionDone="All services are correctly restarted.", command=["./checks.sh"], workdir="build/buildbot")) switcher_factory.addStep(ShellCommand(name="switch active party", description="Switch to the party which was inactive.", 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}"})) # this factory builds {api,docs}.taler.net AND {www,stage}.taler.net doc_factory = util.BuildFactory() doc_factory.addStep(Git(repourl="git://git.taler.net/deployment.git", mode="full", method="fresh", logEnviron=False, alwaysUseLatest=True, haltOnFailure=True, branch='master')) doc_factory.addStep(ShellCommand(name="build docs", description="Building documentation.", descriptionDone="Documentation built.", command=["./update_docs.sh"], workdir="build/taler-build")) doc_factory.addStep(ShellCommand(name="build www", description="Building www.taler.net.", descriptionDone="www.taler.net built", command=["./update_www.sh"], workdir="build/taler-build")) doc_factory.addStep(ShellCommand(name="build www-stage", description="Building stage.taler.net.", descriptionDone="stage.taler.net built", command=["./update_stage.sh"], workdir="build/taler-build")) lcov_builder = util.BuilderConfig( name="lcov-builder", workernames=["lcov-worker"], factory=lcov_factory) switcher_builder = util.BuilderConfig( name="switcher-builder", workernames=["switcher-worker"], factory=switcher_factory) selenium_builder = util.BuilderConfig( name="selenium-builder", workernames=["selenium-worker"], factory=selenium_factory) doc_builder = util.BuilderConfig( name="doc-builder", workernames=["doc-worker"], factory=doc_factory) wallet_builder = util.BuilderConfig( name="wallet-builder", workernames=["wallet-worker"], factory=wallet_factory) c["builders"] = [lcov_builder, switcher_builder, selenium_builder, doc_builder, wallet_builder] ####### 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. 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", "doc-builder", "wallet-builder", "selenium-builder"), extraRecipients=["buildfailures@taler.net"], subject="Taler build.") c["services"] = [irc, email] ####### PROJECT IDENTITY c["title"] = "Taler" c["titleURL"] = "https://taler.net" # We use nginx to expose the BB under this URL. 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", }