9c4b57ac63
The problem with using runCommand and recreating the src directory with lndir is that it changes the file types of individual files, they will now be a symlink instead of a regular file. If you have a crate that tests that a file is of regular type then it will fail inside the crate2nix derivation. Also regenerate Cargo.nix for //tvix as it will be needed in the next commit. Change-Id: I9275602cc17a428f9fdf0e55daf12cd673bbc030 Reviewed-on: https://cl.tvl.fyi/c/depot/+/12131 Autosubmit: Ilan Joselevich <personal@ilanjoselevich.com> Reviewed-by: flokli <flokli@flokli.de> Tested-by: BuildkiteCI
109 lines
3.7 KiB
Diff
109 lines
3.7 KiB
Diff
From 96f66ec32e003c6c215aa2a644281289a71dae7d Mon Sep 17 00:00:00 2001
|
|
From: Ilan Joselevich <personal@ilanjoselevich.com>
|
|
Date: Sun, 4 Aug 2024 02:35:27 +0300
|
|
Subject: [PATCH] Fix: Use mkDerivation with src instead of runCommand for test
|
|
derivation
|
|
|
|
The problem with using runCommand and recreating the src directory with
|
|
lndir is that it changes the file types of individual files, they will
|
|
now be a symlink instead of a regular file. If you have a crate that tests
|
|
that a file is of regular type then it will fail inside the crate2nix derivation.
|
|
---
|
|
templates/nix/crate2nix/default.nix | 81 ++++++++-----------
|
|
1 file changed, 35 insertions(+), 46 deletions(-)
|
|
|
|
diff --git a/templates/nix/crate2nix/default.nix b/templates/nix/crate2nix/default.nix
|
|
index c53925e..90e10c6 100644
|
|
--- a/templates/nix/crate2nix/default.nix
|
|
+++ b/templates/nix/crate2nix/default.nix
|
|
@@ -120,52 +120,41 @@ rec {
|
|
testPostRun
|
|
]);
|
|
in
|
|
- pkgs.runCommand "run-tests-${testCrate.name}"
|
|
- {
|
|
- inherit testCrateFlags;
|
|
- buildInputs = testInputs;
|
|
- } ''
|
|
- set -e
|
|
-
|
|
- export RUST_BACKTRACE=1
|
|
-
|
|
- # recreate a file hierarchy as when running tests with cargo
|
|
-
|
|
- # the source for test data
|
|
- # It's necessary to locate the source in $NIX_BUILD_TOP/source/
|
|
- # instead of $NIX_BUILD_TOP/
|
|
- # because we compiled those test binaries in the former and not the latter.
|
|
- # So all paths will expect source tree to be there and not in the build top directly.
|
|
- # For example: $NIX_BUILD_TOP := /build in general, if you ask yourself.
|
|
- # NOTE: There could be edge cases if `crate.sourceRoot` does exist but
|
|
- # it's very hard to reason about them.
|
|
- # Open a bug if you run into this!
|
|
- mkdir -p source/
|
|
- cd source/
|
|
-
|
|
- ${pkgs.buildPackages.xorg.lndir}/bin/lndir ${crate.src}
|
|
-
|
|
- # build outputs
|
|
- testRoot=target/debug
|
|
- mkdir -p $testRoot
|
|
-
|
|
- # executables of the crate
|
|
- # we copy to prevent std::env::current_exe() to resolve to a store location
|
|
- for i in ${crate}/bin/*; do
|
|
- cp "$i" "$testRoot"
|
|
- done
|
|
- chmod +w -R .
|
|
-
|
|
- # test harness executables are suffixed with a hash, like cargo does
|
|
- # this allows to prevent name collision with the main
|
|
- # executables of the crate
|
|
- hash=$(basename $out)
|
|
- for file in ${drv}/tests/*; do
|
|
- f=$testRoot/$(basename $file)-$hash
|
|
- cp $file $f
|
|
- ${testCommand}
|
|
- done
|
|
- '';
|
|
+ pkgs.stdenvNoCC.mkDerivation {
|
|
+ name = "run-tests-${testCrate.name}";
|
|
+
|
|
+ inherit (crate) src;
|
|
+
|
|
+ inherit testCrateFlags;
|
|
+
|
|
+ buildInputs = testInputs;
|
|
+
|
|
+ buildPhase = ''
|
|
+ set -e
|
|
+ export RUST_BACKTRACE=1
|
|
+
|
|
+ # build outputs
|
|
+ testRoot=target/debug
|
|
+ mkdir -p $testRoot
|
|
+
|
|
+ # executables of the crate
|
|
+ # we copy to prevent std::env::current_exe() to resolve to a store location
|
|
+ for i in ${crate}/bin/*; do
|
|
+ cp "$i" "$testRoot"
|
|
+ done
|
|
+ chmod +w -R .
|
|
+
|
|
+ # test harness executables are suffixed with a hash, like cargo does
|
|
+ # this allows to prevent name collision with the main
|
|
+ # executables of the crate
|
|
+ hash=$(basename $out)
|
|
+ for file in ${drv}/tests/*; do
|
|
+ f=$testRoot/$(basename $file)-$hash
|
|
+ cp $file $f
|
|
+ ${testCommand}
|
|
+ done
|
|
+ '';
|
|
+ };
|
|
in
|
|
pkgs.runCommand "${crate.name}-linked"
|
|
{
|
|
--
|
|
2.44.0
|
|
|