diff --git a/buildbot/osuosl/master/config/builders.py b/buildbot/osuosl/master/config/builders.py index 7b3dd72d2..a9ca3045c 100644 --- a/buildbot/osuosl/master/config/builders.py +++ b/buildbot/osuosl/master/config/builders.py @@ -442,6 +442,7 @@ 'tags' : ["clang"], 'workernames' : ["linaro-g3-01", "linaro-g3-02", "linaro-g3-03", "linaro-g3-04"], 'builddir': "clang-aarch64-sve-vla", + 'max_simultaneous_builds' : 1, 'factory' : ClangBuilder.getClangCMakeBuildFactory( clean=False, checkout_flang=True, @@ -465,6 +466,7 @@ 'tags' : ["clang"], 'workernames' : ["linaro-g3-01", "linaro-g3-02", "linaro-g3-03", "linaro-g3-04"], 'builddir': "clang-aarch64-sve-vla-2stage", + 'max_simultaneous_builds' : 1, 'factory' : ClangBuilder.getClangCMakeBuildFactory( clean=False, checkout_flang=True, @@ -490,6 +492,7 @@ 'tags' : ["clang"], 'workernames' : ["linaro-g3-01", "linaro-g3-02", "linaro-g3-03", "linaro-g3-04"], 'builddir': "clang-aarch64-sve-vls", + 'max_simultaneous_builds' : 1, 'factory' : ClangBuilder.getClangCMakeBuildFactory( clean=False, checkout_flang=True, @@ -513,6 +516,7 @@ 'tags' : ["clang"], 'workernames' : ["linaro-g3-01", "linaro-g3-02", "linaro-g3-03", "linaro-g3-04"], 'builddir': "clang-aarch64-sve-vls-2stage", + 'max_simultaneous_builds' : 1, 'factory' : ClangBuilder.getClangCMakeBuildFactory( clean=False, checkout_flang=True, diff --git a/buildbot/osuosl/master/master.cfg b/buildbot/osuosl/master/master.cfg index a9c529229..b0c9fe43d 100644 --- a/buildbot/osuosl/master/master.cfg +++ b/buildbot/osuosl/master/master.cfg @@ -61,8 +61,26 @@ c['collapseRequests'] = buildrequest.collapseRequests from buildbot.plugins import util +class SimultaneousBuildLimiter: + def __init__(self, max_simultaneous_builds): + assert isinstance(max_simultaneous_builds, int), \ + "max_simultaneous_builds must be int" + self.max_simultaneous_builds = max_simultaneous_builds + + def __call__(self, builder, reqs): + if len(builder.building) >= self.max_simultaneous_builds: + return False + return min(reqs, key=lambda req: req.submittedAt) + +def getBuilderConfig(builder): + if 'max_simultaneous_builds' in builder: + builder['nextBuild'] = \ + SimultaneousBuildLimiter(builder['max_simultaneous_builds']) + del builder['max_simultaneous_builds'] + return util.BuilderConfig(**builder) + c['builders'] = builders = [ - util.BuilderConfig(**b) for b in config.builders.all + getBuilderConfig(b) for b in config.builders.all ] for rb in config.release_builders.all: @@ -70,7 +88,7 @@ for rb in config.release_builders.all: tags = rb.get('tags', []) if 'release' not in tags: rb['tags'] = tags + ['release'] - builders.append(util.BuilderConfig(**rb)) + builders.append(getBuilderConfig(rb)) ####### SCHEDULERS