diff --git a/ci/eval/compare/default.nix b/ci/eval/compare/default.nix index 1c83ea8916300..2c428a8ebd33b 100644 --- a/ci/eval/compare/default.nix +++ b/ci/eval/compare/default.nix @@ -110,9 +110,15 @@ let // lib.mapAttrs' ( kernel: rebuilds: lib.nameValuePair "10.rebuild-${kernel}-stdenv" (lib.elem "stdenv" rebuilds) ) rebuildsByKernel - # Set the "11.by: package-maintainer" label to whether all packages directly - # changed are maintained by the PR's author. // { + "10.rebuild-nixos-tests" = + lib.elem "nixosTests.simple" (extractPackageNames diffAttrs.rebuilds) + && + # Only set this label when no other label with indication for staging has been set. + # This avoids confusion whether to target staging or batch this with kernel updates. + lib.last (lib.sort lib.lessThan (lib.attrValues rebuildCountByKernel)) <= 500; + # Set the "11.by: package-maintainer" label to whether all packages directly + # changed are maintained by the PR's author. "11.by: package-maintainer" = maintainers ? ${githubAuthorId} && lib.all (lib.flip lib.elem maintainers.${githubAuthorId}) ( diff --git a/ci/eval/outpaths.nix b/ci/eval/outpaths.nix index 4efe8d1dc0610..b4988e844e8e6 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 6a14c0559e2c6..79d45d231398f 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"; }; diff --git a/nixos/tests/simple.nix b/nixos/tests/simple.nix index ab9cf1d9768fe..0c2eeb8dbf665 100644 --- a/nixos/tests/simple.nix +++ b/nixos/tests/simple.nix @@ -1,21 +1,11 @@ -import ./make-test-python.nix ( - { pkgs, ... }: - { - name = "simple"; - meta = with pkgs.lib.maintainers; { - maintainers = [ ]; - }; +import ./make-test-python.nix ({ + name = "simple"; - nodes.machine = - { ... }: - { - imports = [ ../modules/profiles/minimal.nix ]; - }; + nodes.machine = { }; - testScript = '' - start_all() - machine.wait_for_unit("multi-user.target") - machine.shutdown() - ''; - } -) + testScript = '' + start_all() + machine.wait_for_unit("multi-user.target") + machine.shutdown() + ''; +})