chore(third_party/crate2nix): run tests in /build/source
Cherry-pick of https://github.com/nix-community/crate2nix/pull/328. This should fix rstest runs inside crate2nix-generated derivations. Change-Id: I9d393768f7f764e33c5938bd8fa14bd1bb0b72e1 Reviewed-on: https://cl.tvl.fyi/c/depot/+/10650 Reviewed-by: raitobezarius <tvl@lahfa.xyz> Tested-by: BuildkiteCI
This commit is contained in:
parent
62b10cac44
commit
850a4bfc7b
3 changed files with 81 additions and 0 deletions
69
third_party/overlays/patches/crate2nix-run-tests-in-build-source.patch
vendored
Normal file
69
third_party/overlays/patches/crate2nix-run-tests-in-build-source.patch
vendored
Normal file
|
@ -0,0 +1,69 @@
|
||||||
|
From 7cf084f73f7d15fe0538a625182fa7179c083b3d Mon Sep 17 00:00:00 2001
|
||||||
|
From: Raito Bezarius <masterancpp@gmail.com>
|
||||||
|
Date: Tue, 16 Jan 2024 02:10:48 +0100
|
||||||
|
Subject: [PATCH] fix(template): run tests in `/build/source` instead `/build`
|
||||||
|
|
||||||
|
Previously, the source tree was located inline in `/build` during tests, this was a mistake
|
||||||
|
because the crates more than often are built in `/build/source` as per the `sourceRoot` system.
|
||||||
|
|
||||||
|
This can cause issues with test binaries hardcoding `/build/source/...` as their choice for doing things,
|
||||||
|
causing them to be confused in the test phase which is relocated without rewriting the paths inside test binaries.
|
||||||
|
|
||||||
|
We fix that by relocating ourselves in the right hierarchy.
|
||||||
|
|
||||||
|
This is a "simple" fix in the sense that more edge cases could exist but they are hard to reason about
|
||||||
|
because they would be crates using custom `sourceRoot`, i.e. having `crate.sourceRoot` set and then it becomes
|
||||||
|
a bit hard to reproduce the hierarchy, you need to analyze whether the path is absolute or relative,
|
||||||
|
|
||||||
|
If it's relative, you can just reuse it and reproduce that specific hierarchy.
|
||||||
|
If it's absolute, you need to cut the "absolute" meaningless part, e.g. `$NIX_BUILD_TOP/` and proceed like
|
||||||
|
it's a relative path IMHO.
|
||||||
|
---
|
||||||
|
crate2nix/Cargo.nix | 10 ++++++++++
|
||||||
|
crate2nix/templates/nix/crate2nix/default.nix | 10 ++++++++++
|
||||||
|
|
||||||
|
diff --git a/Cargo.nix b/Cargo.nix
|
||||||
|
index 6ef7a49..172ff34 100644
|
||||||
|
--- a/Cargo.nix
|
||||||
|
+++ b/Cargo.nix
|
||||||
|
@@ -2889,6 +2889,16 @@ rec {
|
||||||
|
# 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.
|
||||||
|
+ # TODO(raitobezarius): I believe there could be more edge cases if `crate.sourceRoot`
|
||||||
|
+ # do exist but it's very hard to reason about them, so let's wait until the first bug report.
|
||||||
|
+ mkdir -p source/
|
||||||
|
+ cd source/
|
||||||
|
+
|
||||||
|
${pkgs.buildPackages.xorg.lndir}/bin/lndir ${crate.src}
|
||||||
|
|
||||||
|
# build outputs
|
||||||
|
diff --git a/crate2nix/templates/nix/crate2nix/default.nix b/crate2nix/templates/nix/crate2nix/default.nix
|
||||||
|
index e4fc2e9..dfb14c4 100644
|
||||||
|
--- a/templates/nix/crate2nix/default.nix
|
||||||
|
+++ b/templates/nix/crate2nix/default.nix
|
||||||
|
@@ -135,6 +135,16 @@ rec {
|
||||||
|
# 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.
|
||||||
|
+ # TODO(raitobezarius): I believe there could be more edge cases if `crate.sourceRoot`
|
||||||
|
+ # do exist but it's very hard to reason about them, so let's wait until the first bug report.
|
||||||
|
+ mkdir -p source/
|
||||||
|
+ cd source/
|
||||||
|
+
|
||||||
|
${pkgs.buildPackages.xorg.lndir}/bin/lndir ${crate.src}
|
||||||
|
|
||||||
|
# build outputs
|
||||||
|
--
|
||||||
|
2.43.0
|
||||||
|
|
2
third_party/overlays/tvl.nix
vendored
2
third_party/overlays/tvl.nix
vendored
|
@ -85,6 +85,8 @@ depot.nix.readTree.drvTargets {
|
||||||
hash = "sha256-JTMe8GViCQt51WUiaaoIPmWtwEeeYrl6pBxo2DNuKig=";
|
hash = "sha256-JTMe8GViCQt51WUiaaoIPmWtwEeeYrl6pBxo2DNuKig=";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
patches = [ ./patches/crate2nix-run-tests-in-build-source.patch ];
|
||||||
|
|
||||||
sourceRoot = "${src.name}/crate2nix";
|
sourceRoot = "${src.name}/crate2nix";
|
||||||
|
|
||||||
cargoHash = "sha256-dhlSXY1CJE+JJt+6Y7W1MVMz36nwr6ny543py1TcjyY=";
|
cargoHash = "sha256-dhlSXY1CJE+JJt+6Y7W1MVMz36nwr6ny543py1TcjyY=";
|
||||||
|
|
|
@ -13541,6 +13541,16 @@ rec {
|
||||||
# recreate a file hierarchy as when running tests with cargo
|
# recreate a file hierarchy as when running tests with cargo
|
||||||
|
|
||||||
# the source for test data
|
# 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.
|
||||||
|
# TODO(raitobezarius): I believe there could be more edge cases if `crate.sourceRoot`
|
||||||
|
# do exist but it's very hard to reason about them, so let's wait until the first bug report.
|
||||||
|
mkdir -p source/
|
||||||
|
cd source/
|
||||||
|
|
||||||
${pkgs.buildPackages.xorg.lndir}/bin/lndir ${crate.src}
|
${pkgs.buildPackages.xorg.lndir}/bin/lndir ${crate.src}
|
||||||
|
|
||||||
# build outputs
|
# build outputs
|
||||||
|
|
Loading…
Reference in a new issue