diff options
author | Jon TURNEY <jon.turney@dronecode.org.uk> | 2015-08-30 13:14:21 +0100 |
---|---|---|
committer | Jon TURNEY <jon.turney@dronecode.org.uk> | 2015-08-30 13:14:21 +0100 |
commit | 00b039dca69a48ecf02c6db497dce1ab8a9fb51c (patch) | |
tree | fdd0bf797e4ac3db21bbd1677cf32acbecac08a0 | |
parent | c10e6b232ba091acd88f5312c99cf4426341ae08 (diff) |
Add triggerable schedulers for all dependencies
-rwxr-xr-x[-rw-r--r--] | master.cfg | 3 | ||||
-rwxr-xr-x | moduleset_parser.py | 75 |
2 files changed, 51 insertions, 27 deletions
diff --git a/master.cfg b/master.cfg index 9a7a1de..7436b72 100644..100755 --- a/master.cfg +++ b/master.cfg @@ -60,9 +60,8 @@ 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([("pyflakes","pyflakes")]), gracefulShutdown = False, - forceBuild = 'auth', # use this to test your slave once it is set up + forceBuild = True, forceAllBuilds = False, pingBuilder = False, stopBuild = False, diff --git a/moduleset_parser.py b/moduleset_parser.py index 97d858f..aa3c578 100755 --- a/moduleset_parser.py +++ b/moduleset_parser.py @@ -1,19 +1,23 @@ #!/usr/bin/env python +from collections import defaultdict from lxml import etree from buildbot.changes.gitpoller import GitPoller from buildbot.schedulers.basic import SingleBranchScheduler from buildbot.schedulers.forcesched import ForceScheduler +from buildbot.schedulers.triggerable import Triggerable from buildbot.changes.filter import ChangeFilter from buildbot.process.factory import BuildFactory from buildbot.process.properties import Interpolate from buildbot.steps.source.git import Git from buildbot.steps.shell import Configure,Compile +from buildbot.steps.trigger import Trigger from buildbot.config import BuilderConfig tree = None repos = {} default_repo = None +rdep = defaultdict(list) def parse(): global tree @@ -27,7 +31,7 @@ def parse(): moduleset = open('xorg.modules', 'r') tree = etree.parse(moduleset) - # process 'repository' nodes + # process 'repository' elements for r in tree.iter('repository'): t = r.get('type') n = r.get('name') @@ -44,6 +48,12 @@ def parse(): else: default_repo = r + # process module elements + for m in tree.iter('autotools', 'metamodule'): + for d in m.iter('dependencies'): + for p in m.iter('dep'): + rdep[p.get('package')].append(m.get('id')) + return def get_repo(e): @@ -69,8 +79,9 @@ def changesources(): repo = get_repo(e) if repo.get('type') == 'git': - result.append(GitPoller(repo.get('href') + b.get('module'), branches=['master'], - workdir='gitpoller-work/' + e.get('id'))) + pass +# result.append(GitPoller(repo.get('href') + b.get('module'), branches=['master'], +# workdir='gitpoller-work/' + e.get('id'))) else: print("error: repo type %s unhandled" % repo.get('type')) @@ -81,22 +92,28 @@ def schedulers(): result = [] - for e in tree.iter('autotools'): + for e in tree.iter('autotools', 'metamodule'): b = e.find('branch') - repo = get_repo(e) - repo_url = repo.get('href') + b.get('module') - - # a scheduler which builds the repo when changes occur in that repo - filter = ChangeFilter(repository=repo_url, branch='master') - result.append(SingleBranchScheduler( - name=e.get('id'), - change_filter=filter, - treeStableTimer=None, - builderNames=[e.get('id')])) - + if b is not None: + repo = get_repo(e) + repo_url = repo.get('href') + b.get('module') + + # a scheduler which builds the repo when changes occur in that repo + filter = ChangeFilter(repository=repo_url, branch='master') + result.append(SingleBranchScheduler( + name=e.get('id'), + change_filter=filter, + treeStableTimer=None, + builderNames=[e.get('id')])) + + # a scheduler to force building the module result.append(ForceScheduler(name='force-' + e.get('id'), builderNames=[e.get('id')])) + # a scheduler to trigger building the module when a dependency is rebuilt + result.append(Triggerable(name='triggerable-' + e.get('id'), + builderNames=[e.get('id')])) + return result def builders(slaves): @@ -104,17 +121,25 @@ def builders(slaves): result = [] - for e in tree.iter('autotools'): + for e in tree.iter('autotools','metamodule'): + factory = BuildFactory() + b = e.find('branch') - repo = get_repo(e) - repo_url = repo.get('href') + b.get('module') + if b is not None: + repo = get_repo(e) + repo_url = repo.get('href') + b.get('module') - # construct a build factory which knows how to build this repo - factory = BuildFactory() - factory.addStep(Git(repourl=repo_url, mode='full', method='fresh', logEnviron=False)) - factory.addStep(Configure(command=['./autogen.sh', Interpolate('--prefix=%(prop:workdir)s/install')], logEnviron=False)) - factory.addStep(Compile(logEnviron=False)) - factory.addStep(Compile(['make','install'], name='install', logEnviron=False)) + # construct a build factory which knows how to build this repo + factory.addStep(Git(repourl=repo_url, mode='full', method='fresh', logEnviron=False)) + factory.addStep(Configure(command=['./autogen.sh', Interpolate('--prefix=%(prop:workdir)s/install')], logEnviron=False)) + factory.addStep(Compile(logEnviron=False)) + factory.addStep(Compile(command=['make','install'], name='install', logEnviron=False)) + + # add build step to trigger dependent modules (if any) +# print("%s rdeps are %s" % (e.get('id'), rdep[e.get('id')])) + if len(rdep[e.get('id')]): + factory.addStep(Trigger(schedulerNames=['triggerable-' + i for i in rdep[e.get('id')] ], + alwaysUseLatest=True)) result.append(BuilderConfig(name=e.get('id'), builddir='builder-work/' + e.get('id'), @@ -126,4 +151,4 @@ def builders(slaves): if __name__ == "__main__": print("%d changesources " % len(changesources())) print("%d schedulers " % len(schedulers())) - print("%d builder" % len(builders(''))) + print("%d builders" % len(builders(''))) |