Without https://github.com/NixOS/nixpkgs/pull/434761 evaluation of the `nixpkgsLibTests` will fail in CI with recent enough Lix, due to reliance on the TOML integer saturation bug. Reported-by: Sergei Zimmerman <sergei@zimmerman.foo> Change-Id: I6a6a6964838009d2c525f67035f84072fdfad988
76 lines
2.7 KiB
Nix
76 lines
2.7 KiB
Nix
{ lib, config, pkgs, ... }:
|
|
|
|
let
|
|
failedNormal = config: pkgs.writeText "failed.nix" ''
|
|
let utils = builtins.storePath ${config.system.build.extraUtils}; in
|
|
derivation {
|
|
name = "failed";
|
|
system = builtins.currentSystem;
|
|
PATH = "''${utils}/bin";
|
|
builder = "''${utils}/bin/sh";
|
|
args = [ "-c" "mkdir dir; echo test > dir/file" ];
|
|
}
|
|
'';
|
|
|
|
failedBuiltin = pkgs.writeText "failed.nix" ''
|
|
derivation {
|
|
name = "failed";
|
|
system = builtins.currentSystem;
|
|
builder = "builtin:fetchurl";
|
|
url = "http://localhost/foo";
|
|
outputHashMode = "flat";
|
|
}
|
|
'';
|
|
in
|
|
{
|
|
name = "chown-to-user";
|
|
|
|
nodes = {
|
|
machine = { config, lib, pkgs, ... }: {
|
|
virtualisation.writableStore = true;
|
|
virtualisation.additionalPaths = [ config.system.build.extraUtils ];
|
|
|
|
users.users.test = {
|
|
isNormalUser = true;
|
|
group = "test";
|
|
};
|
|
users.groups.test = {};
|
|
nix.nrBuildUsers = 1;
|
|
};
|
|
};
|
|
|
|
testScript = { nodes, ... }: ''
|
|
import re
|
|
|
|
machine.wait_for_unit("multi-user.target")
|
|
|
|
# builds using the daemon chown tempdirs
|
|
out = machine.fail("runuser -u test -- nix-build ${failedNormal nodes.machine} --keep-failed 2>&1")
|
|
dir = re.search("keeping build directory '(.+?)'", out)
|
|
assert dir
|
|
assert machine.succeed(f"stat -c %U:%G:%a {dir[1]}").strip() == "root:nixbld:755"
|
|
assert machine.succeed(f"stat -c %U:%G:%a {dir[1]}/b").strip() == "test:test:700"
|
|
assert machine.succeed(f"stat -c %U:%G:%a {dir[1]}/b/dir").strip() == "test:test:755"
|
|
assert machine.succeed(f"stat -c %U:%G:%a {dir[1]}/b/dir/file").strip() == "test:test:644"
|
|
|
|
# builds not using the daemon do not chown tempdirs
|
|
out = machine.fail("NIX_REMOTE=local nix-build ${failedNormal nodes.machine} --keep-failed 2>&1")
|
|
dir = re.search("keeping build directory '(.+?)'", out)
|
|
assert dir
|
|
assert machine.succeed(f"stat -c %U:%G:%a {dir[1]}").strip() == "root:nixbld:755"
|
|
assert machine.succeed(f"stat -c %U:%G:%a {dir[1]}/b").strip() == "nixbld1:nixbld:700"
|
|
assert machine.succeed(f"stat -c %U:%G:%a {dir[1]}/b/dir").strip() == "nixbld1:nixbld:755"
|
|
assert machine.succeed(f"stat -c %U:%G:%a {dir[1]}/b/dir/file").strip() == "nixbld1:nixbld:644"
|
|
|
|
# builds using builtin builders using the daemon do not keep tempdirs
|
|
out = machine.fail("runuser -u test -- nix-build ${failedBuiltin} --keep-failed 2>&1")
|
|
dir = re.search("keeping build directory '(.+?)'", out)
|
|
assert not dir
|
|
|
|
# builds using builtin builders not using the daemon do not keep tempdirs
|
|
out = machine.fail("NIX_REMOTE=local nix-build ${failedBuiltin} --keep-failed 2>&1")
|
|
dir = re.search("keeping build directory '(.+?)'", out)
|
|
assert not dir
|
|
'';
|
|
}
|