Skip to content

Commit

Permalink
More interesting dynamic derivations example
Browse files Browse the repository at this point in the history
  • Loading branch information
Ericson2314 committed Feb 5, 2025
1 parent c985252 commit 8158351
Show file tree
Hide file tree
Showing 3 changed files with 88 additions and 0 deletions.
12 changes: 12 additions & 0 deletions tests/functional/dyn-drv/dep-built-drv-2.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#!/usr/bin/env bash

source common.sh

# Store layer needs bugfix
requireDaemonNewerThan "2.27pre20250205"

enableFeatures 'recursive-nix'

export NIX_BIN_DIR=$(dirname $(type -p nix))

nix build -L --file ./non-trivial.nix
1 change: 1 addition & 0 deletions tests/functional/dyn-drv/meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -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(),
}
75 changes: 75 additions & 0 deletions tests/functional/dyn-drv/non-trivial.nix
Original file line number Diff line number Diff line change
@@ -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 <<EOF || true
"''${drvs[$dep]}": {
"outputs": ["out"],
"dynamicOutputs": {}
}
EOF
inputDrvs+="$line"
done
read -r -d "" json <<EOF || true
{
"args": ["-c", "set -xeu; echo \"word env vav $word is \$$word\" >> \"\$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"

0 comments on commit 8158351

Please sign in to comment.