about summary refs log tree commit diff
path: root/pkgs/test/incrementalBuild/default.nix
diff options
context:
space:
mode:
authorMartin Messer <martin.messer@cyberus-technology.de>2022-04-07 16:28:20 +0200
committerMartin Messer <martin.messer@cyberus-technology.de>2023-12-07 16:38:48 +0100
commit17e88c2890068e944c61dbaf7493ae12417b8944 (patch)
tree8a6c526ab1391a63dc10a29d59d7539344ae9594 /pkgs/test/incrementalBuild/default.nix
parent1cd6b7fdc37cdc7a4a31c87aa31e4ebf5ed930c8 (diff)
downloadnixlib-17e88c2890068e944c61dbaf7493ae12417b8944.tar
nixlib-17e88c2890068e944c61dbaf7493ae12417b8944.tar.gz
nixlib-17e88c2890068e944c61dbaf7493ae12417b8944.tar.bz2
nixlib-17e88c2890068e944c61dbaf7493ae12417b8944.tar.lz
nixlib-17e88c2890068e944c61dbaf7493ae12417b8944.tar.xz
nixlib-17e88c2890068e944c61dbaf7493ae12417b8944.tar.zst
nixlib-17e88c2890068e944c61dbaf7493ae12417b8944.zip
checkpointedBuild: add checkpointed build test based on pkgs hello
Diffstat (limited to 'pkgs/test/incrementalBuild/default.nix')
-rw-r--r--pkgs/test/incrementalBuild/default.nix57
1 files changed, 57 insertions, 0 deletions
diff --git a/pkgs/test/incrementalBuild/default.nix b/pkgs/test/incrementalBuild/default.nix
new file mode 100644
index 000000000000..cff1efee9a12
--- /dev/null
+++ b/pkgs/test/incrementalBuild/default.nix
@@ -0,0 +1,57 @@
+{ hello, buildIncremental, runCommandNoCC, texinfo, stdenv, rsync }:
+let
+  baseHello = buildIncremental.prepareIncrementalBuild hello;
+  patchedHello = hello.overrideAttrs (old: {
+    buildInputs = [ texinfo ];
+    src = runCommandNoCC "patch-hello-src" { } ''
+      mkdir -p $out
+      cd $out
+      tar xf ${hello.src} --strip-components=1
+      patch -p1 < ${./hello.patch}
+    '';
+  });
+  incrementalBuiltHello = buildIncremental.mkIncrementalBuild patchedHello baseHello.incrementalBuildArtifacts;
+
+  incrementalBuiltHelloWithCheck = incrementalBuiltHello.overrideAttrs (old: {
+    doCheck = true;
+    checkPhase = ''
+      echo "checking if unchanged source file is not recompiled"
+        [ "$(stat --format="%Y" lib/exitfail.o)" = "$(stat --format="%Y" ${baseHello.incrementalBuildArtifacts}/lib/exitfail.o)" ]
+    '';
+  });
+
+  baseHelloRemoveFile = buildIncremental.prepareIncrementalBuild (hello.overrideAttrs (old: {
+    patches = [ ./hello-additionalFile.patch ];
+  }));
+
+  preparedHelloRemoveFileSrc = runCommandNoCC "patch-hello-src" { } ''
+    mkdir -p $out
+    cd $out
+    tar xf ${hello.src} --strip-components=1
+    patch -p1 < ${./hello-additionalFile.patch}
+  '';
+
+  patchedHelloRemoveFile = hello.overrideAttrs (old: {
+    buildInputs = [ texinfo ];
+    src = runCommandNoCC "patch-hello-src" { } ''
+      mkdir -p $out
+      cd $out
+      ${rsync}/bin/rsync -cutU --chown=$USER:$USER --chmod=+w -r ${preparedHelloRemoveFileSrc}/* .
+      patch -p1 < ${./hello-removeFile.patch}
+    '';
+  });
+
+  incrementalBuiltHelloWithRemovedFile = buildIncremental.mkIncrementalBuild patchedHelloRemoveFile baseHelloRemoveFile.incrementalBuildArtifacts;
+in
+stdenv.mkDerivation {
+  name = "patched-hello-returns-correct-output";
+  buildCommand = ''
+    touch $out
+
+    echo "testing output of hello binary"
+    [ "$(${incrementalBuiltHelloWithCheck}/bin/hello)" = "Hello, incremental world!" ]
+    echo "testing output of hello with removed file"
+    [ "$(${incrementalBuiltHelloWithRemovedFile}/bin/hello)" = "Hello, incremental world!" ]
+  '';
+}
+