diff --git a/tests/functional/dyn-drv/dep-built-drv-2.sh b/tests/functional/dyn-drv/dep-built-drv-2.sh new file mode 100644 index 00000000000..24628e85e52 --- /dev/null +++ b/tests/functional/dyn-drv/dep-built-drv-2.sh @@ -0,0 +1,15 @@ +#!/usr/bin/env bash + +source common.sh + +# Store layer needs bugfix +requireDaemonNewerThan "2.27pre20250205" + +TODO_NixOS # can't enable a sandbox feature easily + +enableFeatures 'recursive-nix' +restartDaemon + +export NIX_BIN_DIR=$(dirname $(type -p nix)) + +nix build -L --file ./non-trivial.nix diff --git a/tests/functional/dyn-drv/meson.build b/tests/functional/dyn-drv/meson.build index 4ad343aee8e..07145000d83 100644 --- a/tests/functional/dyn-drv/meson.build +++ b/tests/functional/dyn-drv/meson.build @@ -15,6 +15,7 @@ suites += { 'failing-outer.sh', 'dep-built-drv.sh', 'old-daemon-error-hack.sh', + 'dep-built-drv-2.sh', ], 'workdir': meson.current_source_dir(), } diff --git a/tests/functional/dyn-drv/non-trivial.nix b/tests/functional/dyn-drv/non-trivial.nix new file mode 100644 index 00000000000..1b7c1ed1895 --- /dev/null +++ b/tests/functional/dyn-drv/non-trivial.nix @@ -0,0 +1,75 @@ +with import ./config.nix; + +builtins.outputOf (mkDerivation { + name = "make-derivations.drv"; + + requiredSystemFeatures = [ "recursive-nix" ]; + + buildCommand = '' + set -e + set -u + + PATH=${builtins.getEnv "NIX_BIN_DIR"}:$PATH + + export NIX_CONFIG='extra-experimental-features = nix-command ca-derivations dynamic-derivations' + + declare -A deps=( + [a]="" + [b]="a" + [c]="a" + [d]="b c" + [e]="b c d" + ) + + # Cannot just literally include this, or Nix will think it is the + # *outer* derivation that's trying to refer to itself, and + # substitute the string too son. + placeholder=$(nix eval --raw --expr 'builtins.placeholder "out"') + + declare -A drvs=() + for word in a b c d e; do + inputDrvs="" + for dep in ''${deps[$word]}; do + if [[ "$inputDrvs" != "" ]]; then + inputDrvs+="," + fi + read -r -d "" line <> \"\$out\""], + "builder": "${shell}", + "env": { + "out": "$placeholder", + "$word": "hello, from $word!", + "PATH": ${builtins.toJSON path} + }, + "inputDrvs": { + $inputDrvs + }, + "inputSrcs": [], + "name": "build-$word", + "outputs": { + "out": { + "method": "nar", + "hashAlgo": "sha256" + } + }, + "system": "${system}" + } + EOF + drvs[$word]="$(echo "$json" | nix derivation add)" + done + cp "''${drvs[e]}" $out + ''; + + __contentAddressed = true; + outputHashMode = "text"; + outputHashAlgo = "sha256"; +}).outPath "out"