summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWolfgang Walther <walther@technowledgy.de>2025-09-01 18:27:43 +0200
committerWolfgang Walther <walther@technowledgy.de>2025-09-03 18:35:01 +0200
commite3f583c5bf44c1bf8f62ae2e2dae2b65e7ca0500 (patch)
tree6c357f8e863bd1301ccf1e873a6b539bee6cf9ae
parentopenapv: 0.2.0.1 -> 0.2.0.2 (#439045) (diff)
downloadnixpkgs-e3f583c5bf44c1bf8f62ae2e2dae2b65e7ca0500.tar.gz
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.
-rw-r--r--ci/eval/outpaths.nix18
-rw-r--r--nixos/release.nix36
2 files changed, 44 insertions, 10 deletions
diff --git a/ci/eval/outpaths.nix b/ci/eval/outpaths.nix
index 4efe8d1dc061..b4988e844e8e 100644
--- a/ci/eval/outpaths.nix
+++ b/ci/eval/outpaths.nix
@@ -14,7 +14,8 @@
}:
let
lib = import (path + "/lib");
- hydraJobs =
+
+ nixpkgsJobs =
import (path + "/pkgs/top-level/release.nix")
# Compromise: accuracy vs. resources needed for evaluation.
{
@@ -59,9 +60,15 @@ let
__allowFileset = false;
};
};
+
+ nixosJobs = import (path + "/nixos/release.nix") {
+ inherit attrNamesOnly;
+ supportedSystems = if systems == null then [ builtins.currentSystem ] else systems;
+ };
+
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.
tweak = lib.mapAttrs (
name: val:
@@ -87,4 +94,9 @@ let
];
in
-tweak (builtins.removeAttrs hydraJobs blacklist)
+tweak (
+ (builtins.removeAttrs nixpkgsJobs blacklist)
+ // {
+ nixosTests.simple = nixosJobs.tests.simple;
+ }
+)
diff --git a/nixos/release.nix b/nixos/release.nix
index 207d76704b5e..c4a9be293743 100644
--- a/nixos/release.nix
+++ b/nixos/release.nix
@@ -12,6 +12,16 @@ with import ../lib;
"aarch64-linux"
],
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; };
@@ -31,9 +41,14 @@ let
import ./tests/all-tests.nix {
inherit system;
pkgs = import ./.. { inherit system; };
- callTest = config: {
- ${system} = hydraJob config.test;
- };
+ callTest =
+ config:
+ if attrNamesOnly then
+ hydraJob config.test
+ else
+ {
+ ${system} = hydraJob config.test;
+ };
}
// {
# for typechecking of the scripts and evaluation of
@@ -41,13 +56,20 @@ let
allDrivers = import ./tests/all-tests.nix {
inherit system;
pkgs = import ./.. { inherit system; };
- callTest = config: {
- ${system} = hydraJob config.driver;
- };
+ callTest =
+ 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"; };