Skip to content

Commit

Permalink
Define NixOS tests in tests/nixos/default.nix rather than flake.nix
Browse files Browse the repository at this point in the history
I think the our `flake.nix` is currently too large and too scary looking.
I think this matters --- if Nix cannot dog-food itself in a way that is
elegant, why should other people have confidence that their own code can
be elegant and easy to maintain?

We could do this at many points in time, but I think around now, when we
are thinking about stabilizing parts of Flakes, is an especially good
time.

This is a first step to make the `flake.nix` smaller, and make
individual components responsible for their own packaging. I hope we can
do this many more follow-ups like it, until the top-level `flake.nix` is
very small and just coordinates between other things.
  • Loading branch information
Ericson2314 committed Oct 6, 2023
1 parent 61720d0 commit 644ebaa
Show file tree
Hide file tree
Showing 2 changed files with 62 additions and 53 deletions.
74 changes: 21 additions & 53 deletions flake.nix
Original file line number Diff line number Diff line change
Expand Up @@ -509,18 +509,6 @@
};
};

nixos-lib = import (nixpkgs + "/nixos/lib") { };

# https://nixos.org/manual/nixos/unstable/index.html#sec-calling-nixos-tests
runNixOSTestFor = system: test: nixos-lib.runTest {
imports = [ test ];
hostPkgs = nixpkgsFor.${system}.native;
defaults = {
nixpkgs.pkgs = nixpkgsFor.${system}.native;
};
_module.args.nixpkgs = nixpkgs;
};

in {
# A Nixpkgs overlay that overrides the 'nix' and
# 'nix.perl-bindings' packages.
Expand Down Expand Up @@ -627,49 +615,29 @@
};

# System tests.
tests.authorization = runNixOSTestFor "x86_64-linux" ./tests/nixos/authorization.nix;

tests.remoteBuilds = runNixOSTestFor "x86_64-linux" ./tests/nixos/remote-builds.nix;

tests.nix-copy-closure = runNixOSTestFor "x86_64-linux" ./tests/nixos/nix-copy-closure.nix;

tests.nix-copy = runNixOSTestFor "x86_64-linux" ./tests/nixos/nix-copy.nix;

tests.nssPreload = runNixOSTestFor "x86_64-linux" ./tests/nixos/nss-preload.nix;

tests.githubFlakes = runNixOSTestFor "x86_64-linux" ./tests/nixos/github-flakes.nix;

tests.sourcehutFlakes = runNixOSTestFor "x86_64-linux" ./tests/nixos/sourcehut-flakes.nix;

tests.tarballFlakes = runNixOSTestFor "x86_64-linux" ./tests/nixos/tarball-flakes.nix;
tests = import ./tests/nixos { inherit lib nixpkgs nixpkgsFor; } // {

tests.containers = runNixOSTestFor "x86_64-linux" ./tests/nixos/containers/containers.nix;

tests.setuid = lib.genAttrs
["i686-linux" "x86_64-linux"]
(system: runNixOSTestFor system ./tests/nixos/setuid.nix);


# Make sure that nix-env still produces the exact same result
# on a particular version of Nixpkgs.
tests.evalNixpkgs =
with nixpkgsFor.x86_64-linux.native;
runCommand "eval-nixos" { buildInputs = [ nix ]; }
''
type -p nix-env
# Note: we're filtering out nixos-install-tools because https://github.com/NixOS/nixpkgs/pull/153594#issuecomment-1020530593.
time nix-env --store dummy:// -f ${nixpkgs-regression} -qaP --drv-path | sort | grep -v nixos-install-tools > packages
[[ $(sha1sum < packages | cut -c1-40) = ff451c521e61e4fe72bdbe2d0ca5d1809affa733 ]]
mkdir $out
'';
# Make sure that nix-env still produces the exact same result
# on a particular version of Nixpkgs.
evalNixpkgs =
with nixpkgsFor.x86_64-linux.native;
runCommand "eval-nixos" { buildInputs = [ nix ]; }
''
type -p nix-env
# Note: we're filtering out nixos-install-tools because https://github.com/NixOS/nixpkgs/pull/153594#issuecomment-1020530593.
time nix-env --store dummy:// -f ${nixpkgs-regression} -qaP --drv-path | sort | grep -v nixos-install-tools > packages
[[ $(sha1sum < packages | cut -c1-40) = ff451c521e61e4fe72bdbe2d0ca5d1809affa733 ]]
mkdir $out
'';

tests.nixpkgsLibTests =
forAllSystems (system:
import (nixpkgs + "/lib/tests/release.nix")
{ pkgs = nixpkgsFor.${system}.native;
nixVersions = [ self.packages.${system}.nix ];
}
);
nixpkgsLibTests =
forAllSystems (system:
import (nixpkgs + "/lib/tests/release.nix")
{ pkgs = nixpkgsFor.${system}.native;
nixVersions = [ self.packages.${system}.nix ];
}
);
};

metrics.nixpkgs = import "${nixpkgs-regression}/pkgs/top-level/metrics.nix" {
pkgs = nixpkgsFor.x86_64-linux.native;
Expand Down
41 changes: 41 additions & 0 deletions tests/nixos/default.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
{ lib, nixpkgs, nixpkgsFor }:

let

nixos-lib = import (nixpkgs + "/nixos/lib") { };

# https://nixos.org/manual/nixos/unstable/index.html#sec-calling-nixos-tests
runNixOSTestFor = system: test: nixos-lib.runTest {
imports = [ test ];
hostPkgs = nixpkgsFor.${system}.native;
defaults = {
nixpkgs.pkgs = nixpkgsFor.${system}.native;
};
_module.args.nixpkgs = nixpkgs;
};

in

{
authorization = runNixOSTestFor "x86_64-linux" ./authorization.nix;

remoteBuilds = runNixOSTestFor "x86_64-linux" ./remote-builds.nix;

nix-copy-closure = runNixOSTestFor "x86_64-linux" ./nix-copy-closure.nix;

nix-copy = runNixOSTestFor "x86_64-linux" ./nix-copy.nix;

nssPreload = runNixOSTestFor "x86_64-linux" ./nss-preload.nix;

githubFlakes = runNixOSTestFor "x86_64-linux" ./github-flakes.nix;

sourcehutFlakes = runNixOSTestFor "x86_64-linux" ./sourcehut-flakes.nix;

tarballFlakes = runNixOSTestFor "x86_64-linux" ./tarball-flakes.nix;

containers = runNixOSTestFor "x86_64-linux" ./containers/containers.nix;

setuid = lib.genAttrs
["i686-linux" "x86_64-linux"]
(system: runNixOSTestFor system ./setuid.nix);
}

0 comments on commit 644ebaa

Please sign in to comment.