testEqualDerivation: init

This commit is contained in:
Robert Hensing 2021-06-13 01:10:06 +02:00
parent 498f8e2662
commit c555a4e329
2 changed files with 45 additions and 0 deletions

View File

@ -0,0 +1,43 @@
{ lib, runCommand, emptyFile, nix-diff }:
/*
Checks that two packages produce the exact same build instructions.
This can be used to make sure that a certain difference of configuration,
such as the presence of an overlay does not cause a cache miss.
When the derivations are equal, the return value is an empty file.
Otherwise, the build log explains the difference via `nix-diff`.
Example:
testEqualDerivation
"The hello package must stay the same when enabling checks."
hello
(hello.overrideAttrs(o: { doCheck = true; }))
*/
assertion: a: b:
let
drvA = builtins.unsafeDiscardOutputDependency a.drvPath or (throw "testEqualDerivation second argument must be a package");
drvB = builtins.unsafeDiscardOutputDependency b.drvPath or (throw "testEqualDerivation third argument must be a package");
name =
if a?name
then lib.strings.sanitizeDerivationName "testEqualDerivation-${a.name}"
else "testEqualDerivation";
in
if drvA == drvB then
emptyFile
else
runCommand name
{
inherit assertion drvA drvB;
nativeBuildInputs = [ nix-diff ];
} ''
echo "$assertion"
echo "However, the derivations differ:"
echo
echo nix-diff $drvA $drvB
nix-diff $drvA $drvB
exit 1
''

View File

@ -10135,6 +10135,8 @@ with pkgs;
termplay = callPackage ../tools/misc/termplay { };
testEqualDerivation = callPackage ../build-support/test-equal-derivation.nix { };
tetrd = callPackage ../applications/networking/tetrd { };
tewisay = callPackage ../tools/misc/tewisay { };