feat: add incoming ref data to non-flakes entrypoint

We can now implement a Nix library for Buildbot CI. :)

We dump it into a file, it's better to pass large stuff and easier to
escape things.

Signed-off-by: Raito Bezarius <raito@lix.systems>
This commit is contained in:
raito 2024-10-05 21:19:17 +02:00
parent b3a0b5a69e
commit d60403c3c0

View file

@ -8,6 +8,7 @@ from collections.abc import Generator
from dataclasses import dataclass, field from dataclasses import dataclass, field
from pathlib import Path from pathlib import Path
from typing import TYPE_CHECKING, Any from typing import TYPE_CHECKING, Any
import tempfile
import buildbot import buildbot
from buildbot.configurators import ConfiguratorBase from buildbot.configurators import ConfiguratorBase
@ -453,13 +454,14 @@ class NixEvalCommand(buildstep.ShellMixin, steps.BuildStep):
return result return result
def make_job_evaluator(name: str, settings: EvaluatorSettings, flake: bool) -> NixEvalCommand: def make_job_evaluator(name: str, settings: EvaluatorSettings, flake: bool, incoming_ref_filename: str) -> NixEvalCommand:
actual_command = [] actual_command = []
if flake: if flake:
actual_command += ["--flake", f".#{FLAKE_TARGET_ATTRIBUTE_FOR_JOBS}"] actual_command += ["--flake", f".#{FLAKE_TARGET_ATTRIBUTE_FOR_JOBS}"]
else: else:
actual_command += ["--expr", "import ./.ci/buildbot.nix"] actual_command += ["--expr",
f"import ./.ci/buildbot.nix {{ incoming_ref_data = builtins.fromJSON (builtins.readFile {incoming_ref_filename}); }}"]
return NixEvalCommand( return NixEvalCommand(
env={}, env={},
@ -514,7 +516,8 @@ class NixConfigure(buildstep.CommandMixin, steps.BuildStep):
make_job_evaluator( make_job_evaluator(
"evaluate `.ci/buildbot.nix` jobs", "evaluate `.ci/buildbot.nix` jobs",
self.evaluator_settings, self.evaluator_settings,
False False,
"build/incoming-ref.json"
) )
] ]
) )
@ -527,7 +530,8 @@ class NixConfigure(buildstep.CommandMixin, steps.BuildStep):
make_job_evaluator( make_job_evaluator(
"evaluate `flake.nix` jobs", "evaluate `flake.nix` jobs",
self.evaluator_settings, self.evaluator_settings,
True True,
"build/incoming-ref.json"
) )
] ]
) )
@ -616,6 +620,11 @@ def nix_eval_config(
lock=eval_lock lock=eval_lock
) )
# This information can be passed at job evaluation time
# to skip some jobs, e.g. expensive jobs, etc.
# Transfer incoming ref data to the target.
factory.addStep(steps.JSONPropertiesDownload(workerdest="incoming-ref.json"))
# NixConfigure will choose # NixConfigure will choose
# how to add a NixEvalCommand job # how to add a NixEvalCommand job
# based on whether there's a flake.nix or # based on whether there's a flake.nix or