ab21ab6501
Although the non-resolved derivation will never get a cache-hit (it doesn't have an output path to query the cache for anyways), we might get one on the resolved derivation.
54 lines
1.6 KiB
Bash
54 lines
1.6 KiB
Bash
#!/usr/bin/env bash
|
|
|
|
source common.sh
|
|
|
|
drv=$(nix-instantiate --experimental-features ca-derivations ./content-addressed.nix -A rootCA --arg seed 1)
|
|
nix --experimental-features 'nix-command ca-derivations' show-derivation --derivation "$drv" --arg seed 1
|
|
|
|
buildAttr () {
|
|
local derivationPath=$1
|
|
shift
|
|
local args=("--experimental-features" "ca-derivations" "./content-addressed.nix" "-A" "$derivationPath" "--no-out-link")
|
|
args+=("$@")
|
|
nix-build "${args[@]}"
|
|
}
|
|
|
|
testRemoteCache () {
|
|
clearCache
|
|
local outPath=$(buildAttr dependentNonCA)
|
|
nix copy --to file://$cacheDir $outPath
|
|
clearStore
|
|
buildAttr dependentNonCA --option substituters file://$cacheDir --no-require-sigs |& (! grep "building dependent-non-ca")
|
|
}
|
|
|
|
testDeterministicCA () {
|
|
[[ $(buildAttr rootCA) = $(buildAttr rootCA) ]]
|
|
}
|
|
|
|
testCutoffFor () {
|
|
local out1 out2
|
|
out1=$(buildAttr $1)
|
|
# The seed only changes the root derivation, and not it's output, so the
|
|
# dependent derivations should only need to be built once.
|
|
out2=$(buildAttr $1 -j0)
|
|
test "$out1" == "$out2"
|
|
}
|
|
|
|
testCutoff () {
|
|
# Don't directly build depenentCA, that way we'll make sure we dodn't rely on
|
|
# dependent derivations always being already built.
|
|
#testDerivation dependentCA
|
|
testCutoffFor transitivelyDependentCA
|
|
testCutoffFor dependentNonCA
|
|
}
|
|
|
|
testGC () {
|
|
nix-instantiate --experimental-features ca-derivations ./content-addressed.nix -A rootCA --arg seed 5
|
|
nix-collect-garbage --experimental-features ca-derivations --option keep-derivations true
|
|
}
|
|
|
|
testRemoteCache
|
|
testDeterministicCA
|
|
testCutoff
|
|
testGC
|