ci/eval: eval nixosTests.simple

We can't eval all nixos tests, this would be way too expensive. But we
can evaluate `nixosTests.simple` as an indication whether the nixos test
driver has changed. If that's the case, this means that *all* NixOS
tests need to be rebuilt.
This commit is contained in:
Wolfgang Walther
2025-09-01 18:27:43 +02:00
parent 16f9d53623
commit e3f583c5bf
2 changed files with 44 additions and 10 deletions

View File

@@ -14,7 +14,8 @@
}: }:
let let
lib = import (path + "/lib"); lib = import (path + "/lib");
hydraJobs =
nixpkgsJobs =
import (path + "/pkgs/top-level/release.nix") import (path + "/pkgs/top-level/release.nix")
# Compromise: accuracy vs. resources needed for evaluation. # Compromise: accuracy vs. resources needed for evaluation.
{ {
@@ -59,9 +60,15 @@ let
__allowFileset = false; __allowFileset = false;
}; };
}; };
nixosJobs = import (path + "/nixos/release.nix") {
inherit attrNamesOnly;
supportedSystems = if systems == null then [ builtins.currentSystem ] else systems;
};
recurseIntoAttrs = attrs: attrs // { recurseForDerivations = true; }; recurseIntoAttrs = attrs: attrs // { recurseForDerivations = true; };
# hydraJobs leaves recurseForDerivations as empty attrmaps; # release-lib leaves recurseForDerivations as empty attrmaps;
# that would break nix-env and we also need to recurse everywhere. # that would break nix-env and we also need to recurse everywhere.
tweak = lib.mapAttrs ( tweak = lib.mapAttrs (
name: val: name: val:
@@ -87,4 +94,9 @@ let
]; ];
in in
tweak (builtins.removeAttrs hydraJobs blacklist) tweak (
(builtins.removeAttrs nixpkgsJobs blacklist)
// {
nixosTests.simple = nixosJobs.tests.simple;
}
)

View File

@@ -12,6 +12,16 @@ with import ../lib;
"aarch64-linux" "aarch64-linux"
], ],
configuration ? { }, configuration ? { },
# This flag, if set to true, causes the resulting tree of attributes
# to *not* have a ".${system}" suffixed upon every job name like Hydra
# expects. So far, this is only implemented for `tests`.
#
# This flag exists mainly for use by ci/eval/attrpaths.nix; see
# that file for full details. The exact behavior of this flag
# may change; it should be considered an internal implementation
# detail of ci/eval.
attrNamesOnly ? false,
}: }:
with import ../pkgs/top-level/release-lib.nix { inherit supportedSystems; }; with import ../pkgs/top-level/release-lib.nix { inherit supportedSystems; };
@@ -31,9 +41,14 @@ let
import ./tests/all-tests.nix { import ./tests/all-tests.nix {
inherit system; inherit system;
pkgs = import ./.. { inherit system; }; pkgs = import ./.. { inherit system; };
callTest = config: { callTest =
${system} = hydraJob config.test; config:
}; if attrNamesOnly then
hydraJob config.test
else
{
${system} = hydraJob config.test;
};
} }
// { // {
# for typechecking of the scripts and evaluation of # for typechecking of the scripts and evaluation of
@@ -41,13 +56,20 @@ let
allDrivers = import ./tests/all-tests.nix { allDrivers = import ./tests/all-tests.nix {
inherit system; inherit system;
pkgs = import ./.. { inherit system; }; pkgs = import ./.. { inherit system; };
callTest = config: { callTest =
${system} = hydraJob config.driver; config:
}; if attrNamesOnly then
hydraJob config.test
else
{
${system} = hydraJob config.driver;
};
}; };
}; };
allTests = foldAttrs recursiveUpdate { } (map allTestsForSystem supportedSystems); allTests = foldAttrs recursiveUpdate { } (
map allTestsForSystem (if attrNamesOnly then [ (head supportedSystems) ] else supportedSystems)
);
pkgs = import ./.. { system = "x86_64-linux"; }; pkgs = import ./.. { system = "x86_64-linux"; };