taler-deployment

Deployment scripts and configuration files
Log | Files | Refs | README

commit 3566669088b674cd6f8a5947941325c94c900cd5
parent c5d93947d4ae73ba74f2c216e7b5afe686e62701
Author: Christian Grothoff <christian@grothoff.org>
Date:   Sun, 15 Dec 2019 16:31:11 +0100

documenting the master.cfg a bit better, minor refactoring, adding deployment checkout as first step to factories, and adding new job for updating the buildmaster if the deployment changes

Diffstat:
Abootstrap-buildmaster | 25+++++++++++++++++++++++++
Mbuildbot/master.cfg | 111+++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------
2 files changed, 99 insertions(+), 37 deletions(-)

diff --git a/bootstrap-buildmaster b/bootstrap-buildmaster @@ -0,0 +1,25 @@ +#!/bin/bash + +# Bootstrap the Taler setup for the buildmaster. + +set -eu + +BRANCH=master +REPOS="deployment" + +cd $HOME + +for component in $REPOS; do + if ! test -d $HOME/$component; then + git clone git://git.taler.net/$component.git + fi +done + +for component in $REPOS; do + echo "Checking out $component to $BRANCH" + git -C $HOME/$component checkout $BRANCH +done + +if [[ ! -d worker ]]; then + buildbot-worker create-worker --umask=0o22 ~/worker localhost:9989 buildmaster-worker buildmaster-pass +fi diff --git a/buildbot/master.cfg b/buildbot/master.cfg @@ -46,6 +46,11 @@ c["buildbotNetUsageData"] = "basic" 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"), @@ -115,7 +120,7 @@ c["change_source"] = [ALLCS] # Configure the Schedulers, which decide how to react to incoming # changes. - +# 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") @@ -127,10 +132,9 @@ def twister_web_page(change): if re.search(r"web", file.get("name", "")) \ and "twister" == repo: return True - return False - +# Jobs we run at 6am every day: coverage analysis and auditor. NIGHTLY_SCHEDULER = schedulers.Nightly( name="nightly-scheduler", builderNames=["lcov-builder", @@ -141,15 +145,17 @@ NIGHTLY_SCHEDULER = schedulers.Nightly( 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)" + branch_re="(master|stable)", project_re="(docs|deployment)" ), treeStableTimer=None ) +# Sites are re-build whenever deployment, www or twister changes. SITES_SCHEDULER = schedulers.SingleBranchScheduler( name="sites-scheduler", builderNames=["sites-builder"], @@ -157,48 +163,43 @@ SITES_SCHEDULER = schedulers.SingleBranchScheduler( branch_re="(master|stable)", # Given that filter_fn is used, the line below could be # removed (?) - project_re="(www|twister)", + project_re="(www|twister|deployment)", filter_fn=twister_web_page ), treeStableTimer=None ) +# 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|deployment)" + project_re="(wallet-core|deployment)" ), treeStableTimer=None, builderNames=["wallet-builder"] ) -TALER_TEST_HEALTHCHECK = schedulers.SingleBranchScheduler( - name="taler-test-healthcheck-scheduler", +# 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 = schedulers.SingleBranchScheduler( - name="taler-demo-healthcheck-scheduler", - change_filter=util.ChangeFilter( - branch="master", - project_re="(wallet|deployment)" - ), - treeStableTimer=None, - builderNames=["taler-demo-healthcheck-builder"] + 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 @@ -206,11 +207,12 @@ TIP_RESERVE_TOPPER_SCHEDULER = schedulers.Periodic( "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|bank|exchange|" + project_re="(backoffice|wallet-core|bank|exchange|" "merchant|deployment|donations|twister|" "blog|help|survey|landing)" ), @@ -220,6 +222,7 @@ ALL_SCHEDULER = schedulers.SingleBranchScheduler( # Scheduler monitoring the help.git repo; a forgotten repo we # use to test BB. +# NOTE: scheduler is NOT active! (commented out below) DEBUG_SCHEDULER = schedulers.SingleBranchScheduler( name="debug-scheduler", change_filter=util.ChangeFilter(branch="master", project="help"), @@ -228,6 +231,7 @@ DEBUG_SCHEDULER = schedulers.SingleBranchScheduler( ) # 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( @@ -237,8 +241,7 @@ LINT_SCHEDULER = schedulers.SingleBranchScheduler( builderNames=["lint-builder"] ) -# Provide "force" button in the web UI. To be removed in the -# future ? +# Provide "force" button in the web UI. FORCE_SCHEDULER = schedulers.ForceScheduler( name="force-scheduler", builderNames=[ @@ -265,8 +268,7 @@ c["schedulers"] = [ ALL_SCHEDULER, FORCE_SCHEDULER, WALLET_SCHEDULER, - TALER_DEMO_HEALTHCHECK, - TALER_TEST_HEALTHCHECK, + TALER_HEALTHCHECK_SCHEDULER, ## # Rarely/never used, excluding. @@ -282,7 +284,10 @@ c["schedulers"] = [ # one worker. -def git_step(repo): +# 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", @@ -290,10 +295,32 @@ def git_step(repo): logEnviron=False, alwaysUseLatest=True, haltOnFailure=True, - branch="master" + branch=target_branch + ) + +# Convenience function that checks out the deployment. +def update_deployment(factory): + return factory.addStep(git_step("git://git.taler.net/deployment.git")) + +# 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 = util.BuildFactory() +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( @@ -323,7 +350,7 @@ TALER_DEMO_HEALTHCHECK_FACTORY.addStep( ) ) -TALER_TEST_HEALTHCHECK_FACTORY = util.BuildFactory() +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( @@ -354,7 +381,7 @@ TALER_TEST_HEALTHCHECK_FACTORY.addStep( ) -WALLET_FACTORY = util.BuildFactory() +WALLET_FACTORY = create_factory_with_deployment() WALLET_FACTORY.addStep(git_step("git://git.taler.net/wallet-core.git")) WALLET_FACTORY.addStep( ShellCommand( @@ -437,7 +464,7 @@ LINT_FACTORY.addStep( ) ) -LCOV_FACTORY = util.BuildFactory() +LCOV_FACTORY = create_factory_with_deployment() LCOV_FACTORY.addStep( ShellCommand( name="build", @@ -461,7 +488,7 @@ LCOV_FACTORY.addStep( ) # FIXME: 'demo' reports generator missing. -AUDITOR_FACTORY = util.BuildFactory() +AUDITOR_FACTORY = create_factory_with_deployment() AUDITOR_FACTORY.addStep( ShellCommand( name="Auditor reports generator", @@ -472,7 +499,7 @@ AUDITOR_FACTORY.addStep( ) ) -TIP_RESERVE_TOPPER_FACTORY = util.BuildFactory() +TIP_RESERVE_TOPPER_FACTORY = create_factory_with_deployment() TIP_RESERVE_TOPPER_FACTORY.addStep( ShellCommand( name="tip reserve topper", @@ -483,7 +510,7 @@ TIP_RESERVE_TOPPER_FACTORY.addStep( ) ) -BUILD_FACTORY = util.BuildFactory() +BUILD_FACTORY = create_factory_with_deployment() BUILD_FACTORY.addStep( ShellCommand( name="build", @@ -554,7 +581,7 @@ BUILD_FACTORY.addStep( ) ) -SELENIUM_FACTORY = util.BuildFactory() +SELENIUM_FACTORY = create_factory_with_deployment() SELENIUM_FACTORY.addStep( ShellCommand( name="selenium", @@ -565,7 +592,7 @@ SELENIUM_FACTORY.addStep( ) ) -DOC_FACTORY = util.BuildFactory() +DOC_FACTORY = create_factory_with_deployment() DOC_FACTORY.addStep( ShellCommand( name="build docs", @@ -577,7 +604,7 @@ DOC_FACTORY.addStep( ) ) -SITES_FACTORY = util.BuildFactory() +SITES_FACTORY = create_factory_with_deployment() SITES_FACTORY.addStep( ShellCommand( name="build Web sites", @@ -589,7 +616,7 @@ SITES_FACTORY.addStep( ) ) -DEMO_SERVICES_CHECKER_FACTORY = util.BuildFactory() +DEMO_SERVICES_CHECKER_FACTORY = create_factory_with_deployment() DEMO_SERVICES_CHECKER_FACTORY.addStep( ShellCommand( name="demo services checker", @@ -609,6 +636,14 @@ DEBUG_BUILDER = util.BuilderConfig( factory=DEBUG_FACTORY ) +# 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"], @@ -688,6 +723,7 @@ TALER_DEMO_HEALTHCHECK_BUILDER = util.BuilderConfig( ) c["builders"] = [ + BUILDMASTER_BUILDER, LCOV_BUILDER, AUDITOR_BUILDER_TEST, AUDITOR_BUILDER_DEMO, @@ -755,6 +791,7 @@ c["buildbotURL"] = "https://buildbot.taler.net/" from taler_bb_userpass_db import USER_PASSWORD_DB BUILDER_LIST = [ + "buildmaster-builder", "doc-builder", "lcov-builder", "auditor-builder",