## # This file is part of TALER # (C) 2016-2020 Taler Systems SA # # TALER is free software; you can redistribute it and/or # modify it under the terms of the GNU Affero General Public # License as published by the Free Software Foundation; either # version 3, or (at your option) any later version. # # TALER is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty # of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public # License along with TALER; see the file COPYING. If not, # see # # @author Florian Dold # @author Marcello Stanisci # @author ng0 # @author Christian Grothoff import re from getpass import getuser from buildbot.steps.source.git import Git from buildbot.steps.shell import ShellCommand from buildbot.plugins import (reporters, worker, changes, schedulers, 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 = {} # 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"] = [ ## # This worker restarts the buildmaster itself on # changes to this file. worker.Worker("buildmaster-worker", "buildmaster-pass"), ## # This worker makes the code coverage and publishes it # under the "lcov" Website. worker.Worker("lcov-worker", "lcov-pass"), ## # This worker builds everything and runs our 'make check' # test suite against 'everything'. worker.Worker("checker-worker", "checker-pass"), ## # This worker builds manuals / API docs / tutorials. # worker.Worker("doc-worker", "doc-pass"), ## # This worker builds Websites: www and stage. # worker.Worker("sites-worker", "sites-pass"), ## # This worker builds Taler for the 'test' deployment. worker.Worker("test-worker", "test-pass"), ## # Tip reserve toppers. worker.Worker("test-topper-worker", "test-topper-pass"), worker.Worker("demo-topper-worker", "demo-topper-pass"), ## # This worker compiles the auditor reports for the "green" # demo deployment. worker.Worker("test-auditor-worker", "test-auditor-pass"), worker.Worker("demo-auditor-worker", "demo-auditor-pass"), ## # This worker checks that all the services run under the # 'demo' deployment are up&running. worker.Worker("demo-worker", "demo-pass"), ## # This worker builds wallet-core. worker.Worker("wallet-worker", "wallet-pass"), ## # health checks performed by wallet-cli for demo worker.Worker("taler-demo-healthcheck", "taler-demo-healthcheck-pass"), ## # health checks performed by wallet-cli for test worker.Worker("taler-test-healthcheck", "taler-test-healthcheck-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. # NOTE: BB is bound to localhost ALLCS = changes.PBChangeSource(user="allcs", passwd="allcs") c["change_source"] = [ALLCS] ####### SCHEDULERS # Configure the Schedulers, which decide how to react to incoming # changes. # Jobs we run at 6am every day: coverage analysis and auditor. NIGHTLY_SCHEDULER = schedulers.Nightly( name="nightly-scheduler", builderNames=["lcov-builder", "auditor-builder-demo", "auditor-builder-test"], branch="master", hour=6, minute=0 ) # Docs run if master or stable branch of 'docs' (or deployment) changed. DOC_SCHEDULER = schedulers.SingleBranchScheduler( name="periodic-doc-scheduler", builderNames=["doc-builder"], change_filter=util.ChangeFilter( branch_re="(master|stable)", project_re="(docs|deployment)" ), treeStableTimer=None ) # The web page changed if 'www' changed OR if 'web' in the 'twister' repo changed: def twister_web_page(change): _change = change.asDict() repo = _change.get("project") if repo in ["www", "buywith", "deployment"]: return True files = _change.get("files") for file in files: if re.search(r"web", file.get("name", "")) \ and "twister" == repo: return True return False # Sites are re-build whenever deployment, www buywith, or twister changes. SITES_SCHEDULER = schedulers.SingleBranchScheduler( name="sites-scheduler", builderNames=["sites-builder"], change_filter=util.ChangeFilter( branch_re="(master|stable)", filter_fn=twister_web_page ), treeStableTimer=None ) # Buildmaster is notified whenever deployment changes BUILDMASTER_SCHEDULER = schedulers.SingleBranchScheduler( name="buildmaster-scheduler", change_filter=util.ChangeFilter( branch="master", project_re="(deployment)" ), treeStableTimer=None, builderNames=["buildmaster-builder"] ) # Wallet is re-build whenever wallet-core or deployment changes WALLET_SCHEDULER = schedulers.SingleBranchScheduler( name="wallet-scheduler", change_filter=util.ChangeFilter( branch="master", project_re="(wallet-core|deployment)" ), treeStableTimer=None, builderNames=["wallet-builder"] ) # Healthchecks are done on wallet or deployment changes to master TALER_HEALTHCHECK_SCHEDULER = schedulers.SingleBranchScheduler( name="taler-healthcheck-scheduler", change_filter=util.ChangeFilter( branch="master", project_re="(wallet|deployment)" ), treeStableTimer=None, builderNames=["taler-test-healthcheck-builder", "taler-demo-healthcheck-builder"] ) # We check demo once per hour. DEMO_SERVICES_CHECKER_SCHEDULER = schedulers.Periodic( name="demo-services-checker-scheduler", periodicBuildTimer=60 * 60, # 1 hour builderNames=["demo-services-checker-builder"] ) # We top-up the tipping reserve every 10 days. TIP_RESERVE_TOPPER_SCHEDULER = schedulers.Periodic( name="tip-reserve-topper-scheduler", periodicBuildTimer=60 * 60 * 24 * 10, # 10 days builderNames=["tip-reserve-topper-builder-demo", "tip-reserve-topper-builder-test"] ) # Scheduler that triggers if anything changes ALL_SCHEDULER = schedulers.SingleBranchScheduler( name="all-scheduler", change_filter=util.ChangeFilter( branch_re="(master|stable)", project_re="(backoffice|wallet-core|bank|exchange|" "merchant|deployment|donations|twister|sync|" "blog|help|survey|landing)" ), treeStableTimer=None, builderNames=["test-builder", "checker-builder"] ) # Consider adding other Python parts, like the various frontends. # NOTE: scheduler is NOT active! (commented out below) LINT_SCHEDULER = schedulers.SingleBranchScheduler( name="lint-scheduler", change_filter=util.ChangeFilter( branch="master", project_re="(bank|donations|survey|blog)" ), treeStableTimer=None, builderNames=["lint-builder"] ) # Provide "force" button in the web UI. FORCE_SCHEDULER = schedulers.ForceScheduler( name="force-scheduler", builderNames=[ "lcov-builder", "checker-builder", "auditor-builder-test", "auditor-builder-demo", "test-builder", "doc-builder", "sites-builder", "wallet-builder", "taler-test-healthcheck-builder", "taler-demo-healthcheck-builder", "tip-reserve-topper-builder-test", "tip-reserve-topper-builder-demo" ] ) c["schedulers"] = [ NIGHTLY_SCHEDULER, TIP_RESERVE_TOPPER_SCHEDULER, DEMO_SERVICES_CHECKER_SCHEDULER, DOC_SCHEDULER, BUILDMASTER_SCHEDULER, SITES_SCHEDULER, ALL_SCHEDULER, FORCE_SCHEDULER, WALLET_SCHEDULER, TALER_HEALTHCHECK_SCHEDULER, ## # Rarely/never used, excluding. # DEBUG_SCHEDULER, # LINT_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. # Convenience function that checks out a Git repository. # First argument is the URL of the Git to clone, second # the desired branch. Default is 'master'. def git_step(repo,target_branch="master"): return Git( repourl=repo, mode="full", method="fresh", logEnviron=False, alwaysUseLatest=True, haltOnFailure=True, branch=target_branch ) # Convenience function that runs 'make check' in a # directory of the code inside of a netjail. def jailed_check(package,srcdir): return ShellCommand( name="Test of " + srcdir + " in " + package, description="Testing " + srcdir + " in " + package, descriptionDone="Pass", command=["sudo", "/usr/local/bin/netjail.sh", "/home/integrationtest/deployment/buildbot/with-postgres.sh", "make", "check"], workdir="../../sources/" + package + "/src/" + srcdir ) # Convenience function that checks out the deployment. def update_deployment(factory): factory.addStep(ShellCommand( name="clean old deployment", description="cleaning previous deployment repository", descriptionDone="Deployment removed", command=["rm", "-rf", "deployment"], workdir="../.." )) factory.addStep(ShellCommand( name="update deployment", description="fetching latest deployment repository", descriptionDone="Deployment updated", command=["git", "clone", "git://git.taler.net/deployment"], workdir="../.." )) # Create a FACTORY with a deployment.git checkout as the first step. def create_factory_with_deployment(): f = util.BuildFactory() update_deployment (f); return f # Factory for a job to update the buildmaster itself. BUILDMASTER_FACTORY = create_factory_with_deployment() BUILDMASTER_FACTORY.addStep( ShellCommand( name="restart buildmaster", description="trigger buildmaster restart with new configuration", descriptionDone="Buildmaster updated", command=["buildbot", "reconfig"], workdir="../../master/" ) ) TALER_DEMO_HEALTHCHECK_FACTORY = create_factory_with_deployment() TALER_DEMO_HEALTHCHECK_FACTORY.addStep(git_step("git://git.taler.net/wallet-core.git")) TALER_DEMO_HEALTHCHECK_FACTORY.addStep( ShellCommand( name="fetch", description="Running yarn install", descriptionDone="Correctly installed", command=["npm", "install", "-g", "--prefix", "$HOME", "taler-wallet"], workdir="build/" ) ) TALER_DEMO_HEALTHCHECK_FACTORY.addStep( ShellCommand( name="test-withdraw", description="Running wallet withdraw tests", descriptionDone="Test correctly run", command=["timeout", "--preserve-status", "5m", "./$HOME/bin/taler-wallet-cli", "integrationtest", "--verbose", "-b", "https://bank.demo.taler.net", "-w", "TESTKUDOS:10"], workdir="build/", ) ) TALER_DEMO_HEALTHCHECK_FACTORY.addStep( ShellCommand( name="test-spend", description="Running wallet spend tests", descriptionDone="Test correctly run", command=["timeout", "--preserve-status", "5m", "./$HOME/bin/taler-wallet-cli", "integrationtest", "--verbose", "-b", "https://bank.demo.taler.net", "-s", "TESTKUDOS:4"], workdir="build/", ) ) TALER_TEST_HEALTHCHECK_FACTORY = create_factory_with_deployment() TALER_TEST_HEALTHCHECK_FACTORY.addStep(git_step("git://git.taler.net/wallet-core.git")) TALER_TEST_HEALTHCHECK_FACTORY.addStep( ShellCommand( name="fetch", description="Running yarn install", descriptionDone="Correctly installed", command=["npm", "install", "-g", "--prefix", "$HOME", "taler-wallet"], workdir="build/" ) ) TALER_TEST_HEALTHCHECK_FACTORY.addStep( ShellCommand( name="test-withdraw", description="Running wallet withdraw tests", descriptionDone="Test correctly run", command=["timeout", "--preserve-status", "5m", "./$HOME/bin/taler-wallet-cli", "integrationtest", "--verbose", "-b", "https://bank.test.taler.net", "-w", "TESTKUDOS:10"], workdir="build/", ) ) TALER_TEST_HEALTHCHECK_FACTORY.addStep( ShellCommand( name="test-spend", description="Running wallet spend tests", descriptionDone="Test correctly run", command=["timeout", "--preserve-status", "5m", "./$HOME/bin/taler-wallet-cli", "integrationtest", "--verbose", "-b", "https://bank.test.taler.net", "-s", "TESTKUDOS:4"], workdir="build/", ) ) WALLET_FACTORY = create_factory_with_deployment() WALLET_FACTORY.addStep(git_step("git://git.taler.net/wallet-core.git")) WALLET_FACTORY.addStep( ShellCommand( name="fetch", description="Running yarn install", descriptionDone="Correctly installed", command=["npm", "install", "-g", "--prefix", "$HOME", "taler-wallet"], workdir="build/" ) ) WALLET_FACTORY.addStep( ShellCommand( name="test", description="Running wallet tests", descriptionDone="Test correctly run", command=["timeout", "--preserve-status", "5m", "./$HOME/bin/taler-wallet-cli", "integrationtest", "--verbose"], workdir="build/", ) ) WALLET_FACTORY.addStep( ShellCommand( name="test-withdraw", description="Running wallet withdraw tests", descriptionDone="Test correctly run", command=["timeout", "--preserve-status", "5m", "./$HOME/bin/taler-wallet-cli", "integrationtest", "--verbose", "-w", "TESTKUDOS:10"], workdir="build/", ) ) WALLET_FACTORY.addStep( ShellCommand( name="test-spend", description="Running wallet spend tests", descriptionDone="Test correctly run", command=["timeout", "--preserve-status", "5m", "./$HOME/bin/taler-wallet-cli", "integrationtest", "--verbose", "-s", "TESTKUDOS:4"], workdir="build/", ) ) # WALLET_FACTORY.addStep( # ShellCommand( # name="lint", # description="Linting the wallet", # descriptionDone="Linting done", # command=["make", "lint"], # workdir="build/" # ) # ) DEBUG_FACTORY = util.BuildFactory() DEBUG_FACTORY.addStep( ShellCommand( name="echo debug", description="just echoing a word", descriptionDone="builder responded", command=["echo", "I'm here!"] ) ) def lint_dispatcher(project): return "./lint_%s.sh" % project LINT_FACTORY = util.BuildFactory() LINT_FACTORY.addStep( ShellCommand( name="Python linter", description="linting Python", descriptionDone="linting done", command=util.Transform(lint_dispatcher, util.Property("project")), workdir="../../deployment/taler-build" ) ) INTEGRATIONTEST_FACTORY = create_factory_with_deployment() INTEGRATIONTEST_FACTORY.addStep( ShellCommand( name="remove old binaries", description="removing binaries from previous runs", descriptionDone="Setup clean", command=["rm", "-rf", "local"], workdir="../.." ) ) INTEGRATIONTEST_FACTORY.addStep( ShellCommand( name="fetch gnunet.org sources", description="fetching latest deployment repositories from git.gnunet.org", descriptionDone="GNUnet code base updated", command=["./update-sources.sh", "git://git.gnunet.org/", "libmicrohttpd", "gnunet"], workdir="../../deployment/buildbot" ) ) INTEGRATIONTEST_FACTORY.addStep( ShellCommand( name="fetch taler.net sources", description="fetching latest deployment repositories from git.taler.net", descriptionDone="Taler code base updated", command=["./update-sources.sh", "git://git.taler.net/", "exchange", "merchant", "wallet-core", "sync", "anastasis", "bank", "twister"], workdir="../../deployment/buildbot" ) ) INTEGRATIONTEST_FACTORY.addStep(git_step("git://git.taler.net/wallet-core.git")) INTEGRATIONTEST_FACTORY.addStep( ShellCommand( name="fetch", description="Running yarn install of wallet", descriptionDone="Correctly installed", command=["npm", "install", "-g", "--prefix", "$HOME", "taler-wallet"], workdir="../../sources/wallet-core" ) ) INTEGRATIONTEST_FACTORY.addStep( ShellCommand( name="fetch", description="Running local bootstrap of wallet", descriptionDone="wallet bootstrap done", command=["bootstrap"], workdir="../../sources/wallet-core" ) ) INTEGRATIONTEST_FACTORY.addStep( ShellCommand( name="fetch", description="Running local configure of wallet", descriptionDone="wallet configure done", command=["configure", "--prefix=$HOME/local/"], workdir="../../sources/wallet-core" ) ) INTEGRATIONTEST_FACTORY.addStep( ShellCommand( name="fetch", description="Running local make of wallet", descriptionDone="wallet make done", command=["make"], workdir="../../sources/wallet-core" ) ) INTEGRATIONTEST_FACTORY.addStep( ShellCommand( name="build", description="Building other Taler components", descriptionDone="Taler built", command=["./build.sh"], workdir="../../deployment/buildbot", haltOnFailure=False ) ) INTEGRATIONTEST_FACTORY.addStep(jailed_check ("libmicrohttpd", "microhttpd")) INTEGRATIONTEST_FACTORY.addStep(jailed_check ("libmicrohttpd", "testcurl")) INTEGRATIONTEST_FACTORY.addStep(jailed_check ("libmicrohttpd", "testzzuf")) INTEGRATIONTEST_FACTORY.addStep(jailed_check ("gnunet", "util")) INTEGRATIONTEST_FACTORY.addStep(jailed_check ("gnunet", "pq")) INTEGRATIONTEST_FACTORY.addStep(jailed_check ("gnunet", "curl")) INTEGRATIONTEST_FACTORY.addStep(jailed_check ("gnunet", "json")) INTEGRATIONTEST_FACTORY.addStep(jailed_check ("twister", "test")) INTEGRATIONTEST_FACTORY.addStep(jailed_check ("exchange", "util")) INTEGRATIONTEST_FACTORY.addStep(jailed_check ("exchange", "curl")) INTEGRATIONTEST_FACTORY.addStep(jailed_check ("exchange", "mhd")) INTEGRATIONTEST_FACTORY.addStep(jailed_check ("exchange", "pq")) INTEGRATIONTEST_FACTORY.addStep(jailed_check ("exchange", "json")) INTEGRATIONTEST_FACTORY.addStep(jailed_check ("exchange", "bank-lib")) INTEGRATIONTEST_FACTORY.addStep(jailed_check ("exchange", "exchangedb")) INTEGRATIONTEST_FACTORY.addStep(jailed_check ("exchange", "auditordb")) INTEGRATIONTEST_FACTORY.addStep(jailed_check ("exchange", "exchange")) INTEGRATIONTEST_FACTORY.addStep(jailed_check ("exchange", "auditor")) INTEGRATIONTEST_FACTORY.addStep(jailed_check ("exchange", "lib")) INTEGRATIONTEST_FACTORY.addStep(jailed_check ("exchange", "exchange-tools")) INTEGRATIONTEST_FACTORY.addStep(jailed_check ("exchange", "testing")) INTEGRATIONTEST_FACTORY.addStep(jailed_check ("exchange", "benchmark")) INTEGRATIONTEST_FACTORY.addStep(jailed_check ("merchant", "backenddb")) INTEGRATIONTEST_FACTORY.addStep(jailed_check ("merchant", "backend")) INTEGRATIONTEST_FACTORY.addStep(jailed_check ("merchant", "lib")) INTEGRATIONTEST_FACTORY.addStep(jailed_check ("merchant", "merchant-tools")) INTEGRATIONTEST_FACTORY.addStep(jailed_check ("sync", "util")) INTEGRATIONTEST_FACTORY.addStep(jailed_check ("sync", "syncdb")) INTEGRATIONTEST_FACTORY.addStep(jailed_check ("sync", "sync")) INTEGRATIONTEST_FACTORY.addStep(jailed_check ("sync", "lib")) INTEGRATIONTEST_FACTORY.addStep( ShellCommand( name="bank check", description="Testing Taler Python bank", descriptionDone="Done", command=["sudo", "/usr/local/bin/netjail.sh", "/home/integrationtest/deployment/buildbot/with-postgres.sh", "make", "check"], workdir="../../sources/bank", haltOnFailure=False, env={'PYTHONUSERBASE': "$HOME/local" } ) ) INTEGRATIONTEST_FACTORY.addStep( ShellCommand( name="wallet check", description="Testing wallet-core", descriptionDone="Done", command=["make", "check"], workdir="../../sources/wallet-core", haltOnFailure=False ) ) # FIXME: INTEGRATIONTEST_FACTORY is incomplete at this time: we still need # to do the actual 'make check' steps (in a jail!) LCOV_FACTORY = create_factory_with_deployment() LCOV_FACTORY.addStep(git_step("git://git.taler.net/wallet-core.git")) LCOV_FACTORY.addStep( ShellCommand( name="fetch", description="Running yarn install of wallet", descriptionDone="Correctly installed", command=["npm", "install", "-g", "--prefix", "$HOME", "taler-wallet"], workdir="build/" ) ) LCOV_FACTORY.addStep( ShellCommand( name="build", description="Building other Taler components", descriptionDone="Taler built", command=["./build.sh"], workdir="../../deployment/buildbot", env={'TALER_COVERAGE': "1"} ) ) LCOV_FACTORY.addStep( ShellCommand( name="coverage generation", description="running tests", descriptionDone="generating HTML report", command=["/usr/bin/sudo", "/usr/local/bin/netjail.sh", "./coverage.sh"], workdir="../../deployment/buildbot", ) ) AUDITOR_FACTORY_TEST = create_factory_with_deployment() AUDITOR_FACTORY_TEST.addStep( ShellCommand( name="Auditor reports generator", description="Generating auditor reports.", descriptionDone="Auditor reports correctly generated.", command=["./make_auditor_reports.sh"], workdir="../../deployment/buildbot", env={'TALER_HOME': "/home/taler-test/"} ) ) AUDITOR_FACTORY_DEMO = create_factory_with_deployment() AUDITOR_FACTORY_DEMO.addStep( ShellCommand( name="Auditor reports generator", description="Generating auditor reports.", descriptionDone="Auditor reports correctly generated.", command=["./make_auditor_reports.sh"], workdir="../../deployment/buildbot", env={'TALER_HOME': "/home/demo/active-home/"} ) ) TIP_RESERVE_TOPPER_FACTORY = create_factory_with_deployment() TIP_RESERVE_TOPPER_FACTORY.addStep( ShellCommand( name="tip reserve topper", description="Topping the tip reserve.", descriptionDone="Tip reserve has been topped.", command=["./top_reserve.sh"], workdir="../../deployment/buildbot" ) ) BUILD_FACTORY = create_factory_with_deployment() BUILD_FACTORY.addStep( ShellCommand( name="build", description="Building all Taler codebase.", descriptionDone="Taler built.", command=["./build.sh"], workdir="../../deployment/buildbot", haltOnFailure=True ) ) BUILD_FACTORY.addStep( ShellCommand( name="config", description="Generating configuration file.", descriptionDone="Configuration file generated.", command=["./config.sh"], workdir="../../deployment/buildbot", haltOnFailure=True ) ) BUILD_FACTORY.addStep( ShellCommand( name="keys generation and sign", description="Generating exchange keys, and auditor-sign them.", descriptionDone="Exchange keys generated, and auditor-signed.", command=["./keys.sh"], workdir="../../deployment/buildbot", haltOnFailure=True, env={'BRANCH': util.Property("branch")} ) ) BUILD_FACTORY.addStep( ShellCommand( name="restart services", description="Restarting inactive blue-green party.", descriptionDone="Restarting Taler.", command=["./restart.sh"], workdir="../../deployment/buildbot", haltOnFailure=True, env={'BRANCH': util.Property("branch")} ) ) BUILD_FACTORY.addStep( ShellCommand( name="check services correctly restarted", description="Checking services are correctly restarted.", descriptionDone="All services are correctly restarted.", command=["./checks.sh"], workdir="../../deployment/buildbot", haltOnFailure=True, env={'DEPLOYMENT': "test"} ) ) SELENIUM_FACTORY = create_factory_with_deployment() 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}"} ) ) DOC_FACTORY = create_factory_with_deployment() DOC_FACTORY.addStep( ShellCommand( name="build docs", description="Building documentation", descriptionDone="Documentation built.", command=["./build-docs.sh"], workdir="../../deployment/buildbot", haltOnFailure=True ) ) SITES_FACTORY = create_factory_with_deployment() SITES_FACTORY.addStep( ShellCommand( name="build Web sites", description="Building all the Taler homepages", descriptionDone="Sites built.", command=["./build-sites.sh"], workdir="../../deployment/buildbot", haltOnFailure=True ) ) DEMO_SERVICES_INTEGRATIONTEST_FACTORY = create_factory_with_deployment() DEMO_SERVICES_INTEGRATIONTEST_FACTORY.addStep( ShellCommand( name="demo services checker", description="Checking demo services are online", descriptionDone="Demo services are online!.", command=["./checks.sh"], workdir="../../deployment/buildbot", haltOnFailure=True, # Needed to test the 'demo' deployment. env={"DEPLOYMENT": "demo"} ) ) # Builder to update the buildmaster itself. BUILDMASTER_BUILDER = util.BuilderConfig( name="buildmaster-builder", workernames=["buildmaster-worker"], factory=BUILDMASTER_FACTORY ) # This builder is NOT ACTIVE! LINT_BUILDER = util.BuilderConfig( name="lint-builder", workernames=["lint-worker"], factory=LINT_FACTORY ) LCOV_BUILDER = util.BuilderConfig( name="lcov-builder", workernames=["lcov-worker"], factory=LCOV_FACTORY ) CHECKER_BUILDER = util.BuilderConfig( name="checker-builder", workernames=["checker-worker"], factory=INTEGRATIONTEST_FACTORY ) AUDITOR_BUILDER_TEST = util.BuilderConfig( name="auditor-builder-test", workernames=["test-auditor-worker"], factory=AUDITOR_FACTORY_TEST ) AUDITOR_BUILDER_DEMO = util.BuilderConfig( name="auditor-builder-demo", workernames=["demo-auditor-worker"], factory=AUDITOR_FACTORY_DEMO ) TIP_RESERVE_TOPPER_BUILDER_DEMO = util.BuilderConfig( name="tip-reserve-topper-builder-demo", workernames=["demo-topper-worker"], factory=TIP_RESERVE_TOPPER_FACTORY ) TIP_RESERVE_TOPPER_BUILDER_TEST = util.BuilderConfig( name="tip-reserve-topper-builder-test", workernames=["test-topper-worker"], factory=TIP_RESERVE_TOPPER_FACTORY ) DEMO_SERVICES_CHECKER_BUILDER = util.BuilderConfig( name="demo-services-checker-builder", workernames="demo-worker", factory=DEMO_SERVICES_INTEGRATIONTEST_FACTORY ) TEST_BUILDER = util.BuilderConfig( name="test-builder", workernames=["test-worker"], factory=BUILD_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 ) SITES_BUILDER = util.BuilderConfig( name="sites-builder", workernames=["sites-worker"], factory=SITES_FACTORY ) WALLET_BUILDER = util.BuilderConfig( name="wallet-builder", workernames=["wallet-worker"], factory=WALLET_FACTORY ) TALER_TEST_HEALTHCHECK_BUILDER = util.BuilderConfig( name="taler-test-healthcheck-builder", workernames=["taler-test-healthcheck"], factory=TALER_TEST_HEALTHCHECK_FACTORY ) TALER_DEMO_HEALTHCHECK_BUILDER = util.BuilderConfig( name="taler-demo-healthcheck-builder", workernames=["taler-demo-healthcheck"], factory=TALER_DEMO_HEALTHCHECK_FACTORY ) c["builders"] = [ BUILDMASTER_BUILDER, LCOV_BUILDER, CHECKER_BUILDER, AUDITOR_BUILDER_TEST, AUDITOR_BUILDER_DEMO, TEST_BUILDER, TIP_RESERVE_TOPPER_BUILDER_DEMO, TIP_RESERVE_TOPPER_BUILDER_TEST, DEMO_SERVICES_CHECKER_BUILDER, DOC_BUILDER, SITES_BUILDER, WALLET_BUILDER, TALER_DEMO_HEALTHCHECK_BUILDER, TALER_TEST_HEALTHCHECK_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. 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, # notify from pass to fail, and viceversa. mode=("change"), builders=( "lcov-builder", "checker-builder", "doc-builder", "test-builder", "wallet-builder", ## # Rarely/never used, excluding. # "selenium-builder" ), extraRecipients=["buildfailures@taler.net"], subject="Taler build." ) c["services"] = [IRC, EMAIL] ####### PROJECT IDENTITY c["title"] = "GNU Taler" c["titleURL"] = "https://taler.net" # We use nginx to expose the BB under this URL. c["buildbotURL"] = "https://buildbot.taler.net/" from taler_bb_userpass_db import USER_PASSWORD_DB BUILDER_LIST = [ "buildmaster-builder", "doc-builder", "lcov-builder", "checker-builder", "auditor-builder", "auditor-builder-test", "auditor-builder-demo", "demo-services-checker-builder", "tip-reserve-topper-builder-demo", "tip-reserve-topper-builder-test", "sites-builder", "test-builder", "wallet-builder", "taler-demo-healthcheck-builder", "taler-test-healthcheck-builder", ] authz = util.Authz( allowRules=[ util.ForceBuildEndpointMatcher(role="admins", builder=b) for b in BUILDER_LIST ] + [ util.StopBuildEndpointMatcher(role="admins", builder=b) for b in BUILDER_LIST ] + [ util.RebuildBuildEndpointMatcher(role="admins", builder=b) for b in BUILDER_LIST ] + [ util.ForceBuildEndpointMatcher(role="norole", builder=b) for b in BUILDER_LIST ] + [ util.StopBuildEndpointMatcher(role="norole", builder=b) for b in BUILDER_LIST ] + [ util.RebuildBuildEndpointMatcher(role="norole", builder=b) for b in BUILDER_LIST ], roleMatchers=[ util.RolesFromUsername( roles=["admins"], usernames=["marcello", "florian", "christian"] ) ] ) # minimalistic config to activate new web UI c["www"] = { "port": 8010, "plugins": { "waterfall_view": {}, "console_view": {} }, "allowed_origins": ["https://*.taler.net"], "avatar_methods": [], "auth": util.UserPasswordAuth(USER_PASSWORD_DB), "authz": authz } ####### 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", }