forked from lix-project/lix
![Bruce Toll](/assets/img/avatar_default.png)
With --check and the --keep-failed (-K) flag, the temporary directory was being retained regardless of whether the build was successful and reproducible. This removes the temporary directory, as expected, on a reproducible check build. Added tests to verify that temporary build directories are not retained unnecessarily, particularly when using --check with --keep-failed.
96 lines
3.4 KiB
Bash
96 lines
3.4 KiB
Bash
source common.sh
|
|
|
|
checkBuildTempDirRemoved ()
|
|
{
|
|
buildDir=$(sed -n 's/CHECK_TMPDIR=//p' $1 | head -1)
|
|
checkBuildIdFile=${buildDir}/checkBuildId
|
|
[[ ! -f $checkBuildIdFile ]] || ! grep $checkBuildId $checkBuildIdFile
|
|
}
|
|
|
|
# written to build temp directories to verify created by this instance
|
|
checkBuildId=$(date +%s%N)
|
|
|
|
clearStore
|
|
|
|
nix-build dependencies.nix --no-out-link
|
|
nix-build dependencies.nix --no-out-link --check
|
|
|
|
# check for dangling temporary build directories
|
|
# only retain if build fails and --keep-failed is specified, or...
|
|
# ...build is non-deterministic and --check and --keep-failed are both specified
|
|
nix-build check.nix -A failed --argstr checkBuildId $checkBuildId \
|
|
--no-out-link 2> $TEST_ROOT/log || status=$?
|
|
[ "$status" = "100" ]
|
|
checkBuildTempDirRemoved $TEST_ROOT/log
|
|
|
|
nix-build check.nix -A failed --argstr checkBuildId $checkBuildId \
|
|
--no-out-link --keep-failed 2> $TEST_ROOT/log || status=$?
|
|
[ "$status" = "100" ]
|
|
if checkBuildTempDirRemoved $TEST_ROOT/log; then false; fi
|
|
|
|
nix-build check.nix -A deterministic --argstr checkBuildId $checkBuildId \
|
|
--no-out-link 2> $TEST_ROOT/log
|
|
checkBuildTempDirRemoved $TEST_ROOT/log
|
|
|
|
nix-build check.nix -A deterministic --argstr checkBuildId $checkBuildId \
|
|
--no-out-link --check --keep-failed 2> $TEST_ROOT/log
|
|
if grep -q 'may not be deterministic' $TEST_ROOT/log; then false; fi
|
|
checkBuildTempDirRemoved $TEST_ROOT/log
|
|
|
|
nix-build check.nix -A nondeterministic --argstr checkBuildId $checkBuildId \
|
|
--no-out-link 2> $TEST_ROOT/log
|
|
checkBuildTempDirRemoved $TEST_ROOT/log
|
|
|
|
nix-build check.nix -A nondeterministic --argstr checkBuildId $checkBuildId \
|
|
--no-out-link --check 2> $TEST_ROOT/log || status=$?
|
|
grep 'may not be deterministic' $TEST_ROOT/log
|
|
[ "$status" = "104" ]
|
|
checkBuildTempDirRemoved $TEST_ROOT/log
|
|
|
|
nix-build check.nix -A nondeterministic --argstr checkBuildId $checkBuildId \
|
|
--no-out-link --check --keep-failed 2> $TEST_ROOT/log || status=$?
|
|
|
|
# The above nix-build fails with status=1 on darwin (not sure why)
|
|
# ...but the primary purpose of the test case is to verify the temp directory is retained
|
|
if [ "$(uname -s)" != "Darwin" ]; then
|
|
grep 'may not be deterministic' $TEST_ROOT/log
|
|
[ "$status" = "104" ]
|
|
fi
|
|
if checkBuildTempDirRemoved $TEST_ROOT/log; then false; fi
|
|
|
|
clearStore
|
|
|
|
nix-build dependencies.nix --no-out-link --repeat 3
|
|
|
|
nix-build check.nix -A nondeterministic --no-out-link --repeat 1 2> $TEST_ROOT/log || status=$?
|
|
[ "$status" = "1" ]
|
|
grep 'differs from previous round' $TEST_ROOT/log
|
|
|
|
path=$(nix-build check.nix -A fetchurl --no-out-link --hashed-mirrors '')
|
|
|
|
chmod +w $path
|
|
echo foo > $path
|
|
chmod -w $path
|
|
|
|
nix-build check.nix -A fetchurl --no-out-link --check --hashed-mirrors ''
|
|
# Note: "check" doesn't repair anything, it just compares to the hash stored in the database.
|
|
[[ $(cat $path) = foo ]]
|
|
|
|
nix-build check.nix -A fetchurl --no-out-link --repair --hashed-mirrors ''
|
|
[[ $(cat $path) != foo ]]
|
|
|
|
nix-build check.nix -A hashmismatch --no-out-link --hashed-mirrors '' || status=$?
|
|
[ "$status" = "102" ]
|
|
|
|
echo -n > ./dummy
|
|
nix-build check.nix -A hashmismatch --no-out-link --hashed-mirrors ''
|
|
echo 'Hello World' > ./dummy
|
|
|
|
nix-build check.nix -A hashmismatch --no-out-link --check --hashed-mirrors '' || status=$?
|
|
[ "$status" = "102" ]
|
|
|
|
# Multiple failures with --keep-going
|
|
nix-build check.nix -A nondeterministic --no-out-link
|
|
nix-build check.nix -A nondeterministic -A hashmismatch --no-out-link --check --keep-going --hashed-mirrors '' || status=$?
|
|
[ "$status" = "110" ]
|