nixos/release.nix: Add a callSubTests function

This should de-clutter the various redundant lines of callTest's on
subtests so that every main test file should have only one line with a
callSubTests instead.

Overrides work the same way as callTest, except that if the system
attribute is explicitly specified we do not generate attributes for all
available systems.

Signed-off-by: aszlig <aszlig@redmoonstudios.org>
Cc: @edolstra

aszlig b3337edd 5bab623f

Changed files
+19 -1
nixos
+19 -1
nixos/release.nix
···
forAllSystems = genAttrs supportedSystems;
-
callTest = fn: args: forAllSystems (system: hydraJob (import fn ({ inherit system; } // args)));
+
importTest = fn: args: system: import fn ({
+
inherit system;
+
} // args);
+
+
callTest = fn: args: forAllSystems (system: hydraJob (importTest fn args system));
+
+
callSubTests = fn: args: let
+
discover = attrs: let
+
subTests = filterAttrs (const (hasAttr "test")) attrs;
+
in mapAttrs (const (t: hydraJob t.test)) subTests;
+
+
discoverForSystem = system: mapAttrs (_: test: {
+
${system} = test;
+
}) (discover (importTest fn args system));
+
+
# If the test is only for a particular system, use only the specified
+
# system instead of generating attributes for all available systems.
+
in if args ? system then discover (import fn args)
+
else foldAttrs (a: b: a // b) {} (map discoverForSystem supportedSystems);
pkgs = import nixpkgs { system = "x86_64-linux"; };