Merge pull request #231316 from hercules-ci/nixos-system.checks

NixOS: add `system.checks`

Changed files
+33 -7
nixos
modules
security
wrappers
services
databases
web-servers
varnish
x11
system
activation
+1 -1
nixos/modules/security/wrappers/default.nix
···
'';
###### wrappers consistency checks
-
system.extraDependencies = lib.singleton (pkgs.runCommandLocal
+
system.checks = lib.singleton (pkgs.runCommandLocal
"ensure-all-wrappers-paths-exist" { }
''
# make sure we produce output
+1 -1
nixos/modules/services/databases/postgresql.nix
···
"/share/postgresql"
];
-
system.extraDependencies = lib.optional (cfg.checkConfig && pkgs.stdenv.hostPlatform == pkgs.stdenv.buildPlatform) configFileCheck;
+
system.checks = lib.optional (cfg.checkConfig && pkgs.stdenv.hostPlatform == pkgs.stdenv.buildPlatform) configFileCheck;
systemd.services.postgresql =
{ description = "PostgreSQL Server";
+1 -1
nixos/modules/services/web-servers/varnish/default.nix
···
environment.systemPackages = [ cfg.package ];
# check .vcl syntax at compile time (e.g. before nixops deployment)
-
system.extraDependencies = mkIf cfg.enableConfigCheck [
+
system.checks = mkIf cfg.enableConfigCheck [
(pkgs.runCommand "check-varnish-syntax" {} ''
${cfg.package}/bin/varnishd -C ${commandLine} 2> $out || (cat $out; exit 1)
'')
+1 -1
nixos/modules/services/x11/xserver.nix
···
xorg.xf86inputevdev.out
];
-
system.extraDependencies = singleton (pkgs.runCommand "xkb-validated" {
+
system.checks = singleton (pkgs.runCommand "xkb-validated" {
inherit (cfg) xkbModel layout xkbVariant xkbOptions;
nativeBuildInputs = with pkgs.buildPackages; [ xkbvalidate ];
preferLocalBuild = true;
+29 -3
nixos/modules/system/activation/top-level.nix
···
default = [];
description = lib.mdDoc ''
A list of packages that should be included in the system
-
closure but not otherwise made available to users. This is
-
primarily used by the installation tests.
+
closure but generally not visible to users.
+
+
This option has also been used for build-time checks, but the
+
`system.checks` option is more appropriate for that purpose as checks
+
should not leave a trace in the built system configuration.
+
'';
+
};
+
+
system.checks = mkOption {
+
type = types.listOf types.package;
+
default = [];
+
description = lib.mdDoc ''
+
Packages that are added as dependencies of the system's build, usually
+
for the purpose of validating some part of the configuration.
+
+
Unlike `system.extraDependencies`, these store paths do not
+
become part of the built system configuration.
'';
};
···
fi
'';
-
system.systemBuilderArgs = lib.optionalAttrs (config.system.forbiddenDependenciesRegex != "") {
+
system.systemBuilderArgs = {
+
# Not actually used in the builder. `passedChecks` is just here to create
+
# the build dependencies. Checks are similar to build dependencies in the
+
# sense that if they fail, the system build fails. However, checks do not
+
# produce any output of value, so they are not used by the system builder.
+
# In fact, using them runs the risk of accidentally adding unneeded paths
+
# to the system closure, which defeats the purpose of the `system.checks`
+
# option, as opposed to `system.extraDependencies`.
+
passedChecks = concatStringsSep " " config.system.checks;
+
}
+
// lib.optionalAttrs (config.system.forbiddenDependenciesRegex != "") {
inherit (config.system) forbiddenDependenciesRegex;
closureInfo = pkgs.closureInfo { rootPaths = [
# override to avoid infinite recursion (and to allow using extraDependencies to add forbidden dependencies)
(config.system.build.toplevel.overrideAttrs (_: { extraDependencies = []; closureInfo = null; }))
]; };
};
+
system.build.toplevel = if config.system.includeBuildDependencies then systemWithBuildDeps else system;