From 156e6e3deae3edd06de7de1dc1dd20de0b6a4c74 Mon Sep 17 00:00:00 2001 From: eldritch horrors Date: Mon, 11 Mar 2024 06:24:51 +0100 Subject: [PATCH] remove skipped-builds builder run all of them on the normal build worker. this significantly simplifies the overall scheduler/builder config and removes a triplication of possible builds paths. --- buildbot_nix/__init__.py | 80 +++++++++------------------------------- 1 file changed, 17 insertions(+), 63 deletions(-) diff --git a/buildbot_nix/__init__.py b/buildbot_nix/__init__.py index 43d9fe0..b795afe 100644 --- a/buildbot_nix/__init__.py +++ b/buildbot_nix/__init__.py @@ -31,8 +31,6 @@ from .github_projects import ( slugify_project_name, ) -SKIPPED_BUILDER_NAME = "skipped-builds" - log = Logger() class LixSystemsOAuth2(OAuth2Auth): @@ -57,7 +55,6 @@ class BuildTrigger(Trigger): def __init__( self, builds_scheduler: str, - skipped_builds_scheduler: str, jobs: list[dict[str, Any]], **kwargs: Any, ) -> None: @@ -66,11 +63,10 @@ class BuildTrigger(Trigger): self.jobs = jobs self.config = None self.builds_scheduler = builds_scheduler - self.skipped_builds_scheduler = skipped_builds_scheduler Trigger.__init__( self, waitForFinish=True, - schedulerNames=[builds_scheduler, skipped_builds_scheduler], + schedulerNames=[builds_scheduler], haltOnFailure=True, flunkOnFailure=True, sourceStamps=[], @@ -99,11 +95,7 @@ class BuildTrigger(Trigger): if error is not None: props.setProperty("error", error, source) - triggered_schedulers.append((self.skipped_builds_scheduler, props)) - continue - - if job.get("isCached"): - triggered_schedulers.append((self.skipped_builds_scheduler, props)) + triggered_schedulers.append((self.builds_scheduler, props)) continue drv_path = job.get("drvPath") @@ -117,6 +109,7 @@ class BuildTrigger(Trigger): props.setProperty("system", system, source) props.setProperty("drv_path", drv_path, source) props.setProperty("out_path", out_path, source) + props.setProperty("isCached", job.get("isCached"), source) triggered_schedulers.append((self.builds_scheduler, props)) return triggered_schedulers @@ -179,7 +172,6 @@ class NixEvalCommand(buildstep.ShellMixin, steps.BuildStep): [ BuildTrigger( builds_scheduler=f"lix-nix-build", - skipped_builds_scheduler=f"lix-nix-skipped-build", name="build flake", jobs=filtered_jobs, ), @@ -189,19 +181,6 @@ class NixEvalCommand(buildstep.ShellMixin, steps.BuildStep): return result -class EvalErrorStep(steps.BuildStep): - """Shows the error message of a failed evaluation.""" - - @defer.inlineCallbacks - def run(self) -> Generator[Any, object, Any]: - error = self.getProperty("error") - attr = self.getProperty("attr") - # show eval error - error_log: Log = yield self.addLog("nix_error") - error_log.addStderr(f"{attr} failed to evaluate:\n{error}") - return util.FAILURE - - class NixBuildCommand(buildstep.ShellMixin, steps.BuildStep): """Builds a nix derivation.""" @@ -211,6 +190,20 @@ class NixBuildCommand(buildstep.ShellMixin, steps.BuildStep): @defer.inlineCallbacks def run(self) -> Generator[Any, object, Any]: + if error := self.getProperty("error"): + attr = self.getProperty("attr") + # show eval error + error_log: Log = yield self.addLog("nix_error") + error_log.addStderr(f"{attr} failed to evaluate:\n{error}") + return util.FAILURE + + if self.getProperty("isCached"): + yield self.addCompleteLog( + "cached outpath from previous builds", + # buildbot apparently hides the first line in the ui? + f'\n{self.getProperty("out_path")}\n') + return util.SKIPPED + # run `nix build` cmd: remotecommand.RemoteCommand = yield self.makeRemoteShellCommand() yield self.runCommand(cmd) @@ -390,38 +383,6 @@ def nix_build_config( ) -def nix_skipped_build_config( - project: GerritProject, - worker_names: list[str], -) -> util.BuilderConfig: - """Dummy builder that is triggered when a build is skipped.""" - factory = util.BuildFactory() - factory.addStep( - EvalErrorStep( - name="Nix evaluation", - doStepIf=lambda s: s.getProperty("error"), - hideStepIf=lambda _, s: not s.getProperty("error"), - ), - ) - - # This is just a dummy step showing the cached build - factory.addStep( - steps.BuildStep( - name="Nix build (cached)", - doStepIf=lambda _: False, - hideStepIf=lambda _, s: s.getProperty("error"), - ), - ) - return util.BuilderConfig( - name=f"{project.name}/nix-skipped-build", - project=project.name, - workernames=worker_names, - collapseRequests=False, - env={}, - factory=factory, - ) - - def read_secret_file(secret_name: str) -> str: directory = os.environ.get("CREDENTIALS_DIRECTORY") if directory is None: @@ -458,11 +419,6 @@ def config_for_project( name=f"{project.name}-nix-build", builderNames=[f"{project.name}/nix-build"], ), - # this is triggered from `nix-eval` when the build is skipped - schedulers.Triggerable( - name=f"{project.name}-nix-skipped-build", - builderNames=[f"{project.name}/nix-skipped-build"], - ), # allow to manually trigger a nix-build schedulers.ForceScheduler( name=f"{project.name}-force", @@ -502,7 +458,6 @@ def config_for_project( worker_names, outputs_path=outputs_path, ), - nix_skipped_build_config(project, [SKIPPED_BUILDER_NAME]), ], ) @@ -688,7 +643,6 @@ class GerritNixConfigurator(ConfiguratorBase): ) config["change_source"] = self.gerrit_change_source - config["workers"].append(worker.LocalWorker(SKIPPED_BUILDER_NAME)) config["services"].append( reporters.GerritStatusPush(self.gerrit_server, self.gerrit_user, port=2022,