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
		
			
				
	
	
		
			69 lines
		
	
	
	
		
			3.4 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			69 lines
		
	
	
	
		
			3.4 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| 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
 | |
| 
 |