diff options
-rw-r--r-- | default.nix | 19 | ||||
-rw-r--r-- | ops/nixos/default.nix | 1 | ||||
-rw-r--r-- | ops/pipelines/depot.nix | 19 |
3 files changed, 31 insertions, 8 deletions
diff --git a/default.nix b/default.nix index 151d8987ea3d..61821bce8fc2 100644 --- a/default.nix +++ b/default.nix @@ -50,10 +50,25 @@ let # Walk the tree starting with 'node', recursively extending the list # of build targets with anything that looks buildable. + # + # Any tree node can specify logical targets by exporting a + # 'meta.targets' attribute containing a list of keys in itself. This + # enables target specifications that do not exist on disk directly. gather = node: if node ? __readTree then - (if eligible node then [node] else []) ++ - concatMap gather (attrValues node) + # Include the node itself if it is eligible. + (if eligible node then [ node ] else []) + # Include eligible children of the node + ++ concatMap gather (attrValues node) + # Include specified sub-targets of the node + ++ filter eligible (map + (k: (node."${k}" or {}) // { + # Keep the same tree location, but explicitly mark this + # node as a subtarget. + __readTree = node.__readTree; + __subtarget = k; + }) + (node.meta.targets or [])) else []; in fix(self: { config = config self; diff --git a/ops/nixos/default.nix b/ops/nixos/default.nix index 917a56b766da..5bd32e40685b 100644 --- a/ops/nixos/default.nix +++ b/ops/nixos/default.nix @@ -48,4 +48,5 @@ rec { # TODO(tazjin): Refactor the whole systems setup, it's a bit # inconsistent at the moment. whitbySystem = (nixosFor whitby).system; + meta.targets = [ "whitbySystem" ]; } diff --git a/ops/pipelines/depot.nix b/ops/pipelines/depot.nix index 5d1f2babe123..ec7fb813278b 100644 --- a/ops/pipelines/depot.nix +++ b/ops/pipelines/depot.nix @@ -13,12 +13,19 @@ let # Create an expression that builds the target at the specified # location. - mkBuildExpr = - let descend = expr: attr: "builtins.getAttr \"${attr}\" (${expr})"; - in foldl' descend "import ./. {}"; + mkBuildExpr = target: + let + descend = expr: attr: "builtins.getAttr \"${attr}\" (${expr})"; + targetExpr = foldl' descend "import ./. {}" target.__readTree; + subtargetExpr = descend targetExpr target.__subtarget; + in if target ? __subtarget then subtargetExpr else targetExpr; # Create a pipeline label from the targets tree location. - mkLabel = concatStringsSep "/"; + mkLabel = target: + let label = concatStringsSep "/" target.__readTree; + in if target ? __subtarget + then "${label}:${target.__subtarget}" + else label; # Create a pipeline step from a single target. # @@ -27,9 +34,9 @@ let # regardless, but this data is not accessible. mkStep = target: { command = '' - nix-build -E '${mkBuildExpr target.__readTree}' || (buildkite-agent meta-data set "failure" "1"; exit 1) + nix-build -E '${mkBuildExpr target}' || (buildkite-agent meta-data set "failure" "1"; exit 1) ''; - label = ":nix: ${mkLabel target.__readTree}"; + label = ":nix: ${mkLabel target}"; }; # Protobuf check step which validates that changes to .proto files |