2024-05-28 19:43:04 +03:00
|
|
|
|
#!/usr/bin/env bash
|
|
|
|
|
|
2018-01-19 14:58:28 +02:00
|
|
|
|
source common.sh
|
|
|
|
|
|
2021-07-26 07:54:55 +03:00
|
|
|
|
# XXX: This shouldn’t be, but #4813 cause this test to fail
|
|
|
|
|
buggyNeedLocalStore "see #4813"
|
|
|
|
|
|
2019-02-17 23:26:49 +02:00
|
|
|
|
checkBuildTempDirRemoved ()
|
|
|
|
|
{
|
2024-10-30 06:33:28 +02:00
|
|
|
|
buildDir=$(sed -n 's/CHECK_TMPDIR=//p' "$1" | head -1)
|
2019-02-17 23:26:49 +02:00
|
|
|
|
checkBuildIdFile=${buildDir}/checkBuildId
|
2024-10-30 06:33:28 +02:00
|
|
|
|
[[ ! -f $checkBuildIdFile ]] || ! grep "$checkBuildId" "$checkBuildIdFile"
|
2019-02-17 23:26:49 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# written to build temp directories to verify created by this instance
|
|
|
|
|
checkBuildId=$(date +%s%N)
|
|
|
|
|
|
2024-06-16 13:51:46 +03:00
|
|
|
|
TODO_NixOS
|
|
|
|
|
|
2018-01-19 14:58:28 +02:00
|
|
|
|
clearStore
|
|
|
|
|
|
|
|
|
|
nix-build dependencies.nix --no-out-link
|
|
|
|
|
nix-build dependencies.nix --no-out-link --check
|
|
|
|
|
|
2023-06-22 21:23:25 +03:00
|
|
|
|
# Build failure exit codes (100, 104, etc.) are from
|
2024-10-10 19:04:33 +03:00
|
|
|
|
# doc/manual/source/command-ref/status-build-failure.md
|
2023-06-22 21:23:25 +03:00
|
|
|
|
|
2019-02-17 23:26:49 +02:00
|
|
|
|
# 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
|
2024-10-30 06:33:28 +02:00
|
|
|
|
nix-build check.nix -A failed --argstr checkBuildId "$checkBuildId" \
|
|
|
|
|
--no-out-link 2> "$TEST_ROOT/log" || status=$?
|
2019-02-17 23:26:49 +02:00
|
|
|
|
[ "$status" = "100" ]
|
2024-10-30 06:33:28 +02:00
|
|
|
|
checkBuildTempDirRemoved "$TEST_ROOT/log"
|
2019-02-17 23:26:49 +02:00
|
|
|
|
|
2024-10-30 06:33:28 +02:00
|
|
|
|
nix-build check.nix -A failed --argstr checkBuildId "$checkBuildId" \
|
|
|
|
|
--no-out-link --keep-failed 2> "$TEST_ROOT/log" || status=$?
|
2019-02-17 23:26:49 +02:00
|
|
|
|
[ "$status" = "100" ]
|
2024-10-30 06:33:28 +02:00
|
|
|
|
if checkBuildTempDirRemoved "$TEST_ROOT/log"; then false; fi
|
2019-02-17 23:26:49 +02:00
|
|
|
|
|
2024-03-24 16:07:00 +02:00
|
|
|
|
test_custom_build_dir() {
|
|
|
|
|
local customBuildDir="$TEST_ROOT/custom-build-dir"
|
|
|
|
|
|
|
|
|
|
# Nix does not create the parent directories, and perhaps it shouldn't try to
|
|
|
|
|
# decide the permissions of build-dir.
|
|
|
|
|
mkdir "$customBuildDir"
|
2024-10-30 06:33:28 +02:00
|
|
|
|
nix-build check.nix -A failed --argstr checkBuildId "$checkBuildId" \
|
|
|
|
|
--no-out-link --keep-failed --option build-dir "$TEST_ROOT/custom-build-dir" 2> "$TEST_ROOT/log" || status=$?
|
2024-03-24 16:07:00 +02:00
|
|
|
|
[ "$status" = "100" ]
|
|
|
|
|
[[ 1 == "$(count "$customBuildDir/nix-build-"*)" ]]
|
2024-10-30 06:33:28 +02:00
|
|
|
|
local buildDir=("$customBuildDir/nix-build-"*)
|
2024-10-31 15:46:33 +02:00
|
|
|
|
if [[ "${#buildDir[@]}" -ne 1 ]]; then
|
|
|
|
|
echo "expected one nix-build-* directory, got: ${buildDir[*]}" >&2
|
|
|
|
|
exit 1
|
|
|
|
|
fi
|
2024-10-30 06:33:28 +02:00
|
|
|
|
if [[ -e ${buildDir[*]}/build ]]; then
|
|
|
|
|
buildDir[0]="${buildDir[*]}/build"
|
2024-05-14 15:12:08 +03:00
|
|
|
|
fi
|
2024-10-30 06:33:28 +02:00
|
|
|
|
grep "$checkBuildId" "${buildDir[*]}/checkBuildId"
|
2024-03-24 16:07:00 +02:00
|
|
|
|
}
|
|
|
|
|
test_custom_build_dir
|
|
|
|
|
|
2024-10-30 06:33:28 +02:00
|
|
|
|
nix-build check.nix -A deterministic --argstr checkBuildId "$checkBuildId" \
|
|
|
|
|
--no-out-link 2> "$TEST_ROOT/log"
|
|
|
|
|
checkBuildTempDirRemoved "$TEST_ROOT/log"
|
2019-02-17 23:26:49 +02:00
|
|
|
|
|
2024-10-30 06:33:28 +02:00
|
|
|
|
nix-build check.nix -A deterministic --argstr checkBuildId "$checkBuildId" \
|
|
|
|
|
--no-out-link --check --keep-failed 2> "$TEST_ROOT/log"
|
|
|
|
|
if grepQuiet 'may not be deterministic' "$TEST_ROOT/log"; then false; fi
|
|
|
|
|
checkBuildTempDirRemoved "$TEST_ROOT/log"
|
2019-02-17 23:26:49 +02:00
|
|
|
|
|
2024-10-30 06:33:28 +02:00
|
|
|
|
nix-build check.nix -A nondeterministic --argstr checkBuildId "$checkBuildId" \
|
|
|
|
|
--no-out-link 2> "$TEST_ROOT/log"
|
|
|
|
|
checkBuildTempDirRemoved "$TEST_ROOT/log"
|
2019-02-17 23:26:49 +02:00
|
|
|
|
|
2024-10-30 06:33:28 +02:00
|
|
|
|
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"
|
2019-02-17 23:26:49 +02:00
|
|
|
|
[ "$status" = "104" ]
|
2024-10-30 06:33:28 +02:00
|
|
|
|
checkBuildTempDirRemoved "$TEST_ROOT/log"
|
2019-02-17 23:26:49 +02:00
|
|
|
|
|
2024-10-30 06:33:28 +02:00
|
|
|
|
nix-build check.nix -A nondeterministic --argstr checkBuildId "$checkBuildId" \
|
|
|
|
|
--no-out-link --check --keep-failed 2> "$TEST_ROOT/log" || status=$?
|
|
|
|
|
grep 'may not be deterministic' "$TEST_ROOT/log"
|
2019-06-15 16:28:32 +03:00
|
|
|
|
[ "$status" = "104" ]
|
2024-10-30 06:33:28 +02:00
|
|
|
|
if checkBuildTempDirRemoved "$TEST_ROOT/log"; then false; fi
|
2018-01-19 14:58:28 +02:00
|
|
|
|
|
2024-06-16 13:51:46 +03:00
|
|
|
|
TODO_NixOS
|
|
|
|
|
|
2018-01-19 14:58:28 +02:00
|
|
|
|
clearStore
|
|
|
|
|
|
2020-06-12 22:39:44 +03:00
|
|
|
|
path=$(nix-build check.nix -A fetchurl --no-out-link)
|
2018-01-19 15:53:34 +02:00
|
|
|
|
|
2024-10-30 06:33:28 +02:00
|
|
|
|
chmod +w "$path"
|
|
|
|
|
echo foo > "$path"
|
|
|
|
|
chmod -w "$path"
|
2018-01-19 15:53:34 +02:00
|
|
|
|
|
2020-06-12 22:39:44 +03:00
|
|
|
|
nix-build check.nix -A fetchurl --no-out-link --check
|
2018-01-19 15:53:34 +02:00
|
|
|
|
# Note: "check" doesn't repair anything, it just compares to the hash stored in the database.
|
2024-10-30 06:33:28 +02:00
|
|
|
|
[[ $(cat "$path") = foo ]]
|
2018-01-19 15:53:34 +02:00
|
|
|
|
|
2020-06-12 22:39:44 +03:00
|
|
|
|
nix-build check.nix -A fetchurl --no-out-link --repair
|
2024-10-30 06:33:28 +02:00
|
|
|
|
[[ $(cat "$path") != foo ]]
|
2019-05-12 00:32:53 +03:00
|
|
|
|
|
2024-10-30 06:33:28 +02:00
|
|
|
|
echo 'Hello World' > "$TEST_ROOT/dummy"
|
2020-06-12 22:39:44 +03:00
|
|
|
|
nix-build check.nix -A hashmismatch --no-out-link || status=$?
|
2019-05-12 00:32:53 +03:00
|
|
|
|
[ "$status" = "102" ]
|
|
|
|
|
|
2024-10-30 06:33:28 +02:00
|
|
|
|
echo -n > "$TEST_ROOT/dummy"
|
2020-06-12 22:39:44 +03:00
|
|
|
|
nix-build check.nix -A hashmismatch --no-out-link
|
2024-10-30 06:33:28 +02:00
|
|
|
|
echo 'Hello World' > "$TEST_ROOT/dummy"
|
2019-05-12 00:32:53 +03:00
|
|
|
|
|
2020-06-12 22:39:44 +03:00
|
|
|
|
nix-build check.nix -A hashmismatch --no-out-link --check || status=$?
|
2019-05-12 00:32:53 +03:00
|
|
|
|
[ "$status" = "102" ]
|
|
|
|
|
|
|
|
|
|
# Multiple failures with --keep-going
|
|
|
|
|
nix-build check.nix -A nondeterministic --no-out-link
|
2020-06-12 22:39:44 +03:00
|
|
|
|
nix-build check.nix -A nondeterministic -A hashmismatch --no-out-link --check --keep-going || status=$?
|
2019-06-15 16:28:32 +03:00
|
|
|
|
[ "$status" = "110" ]
|