diff --git a/pkgs/stdenv/generic/default.nix b/pkgs/stdenv/generic/default.nix index 4fa9ad6de2eec..81255726284b5 100644 --- a/pkgs/stdenv/generic/default.nix +++ b/pkgs/stdenv/generic/default.nix @@ -175,6 +175,11 @@ let # without running any commands. Because this will also skip `shopt -s extglob` # commands and extglob affects the Bash parser, we enable extglob always. shellDryRun = "${stdenv.shell} -n -O extglob"; + + tests = { + succeedOnFailure = import ../tests/succeedOnFailure.nix { inherit stdenv; }; + }; + passthru.tests = lib.warn "Use `stdenv.tests` instead. `passthru` is a `mkDerivation` detail." stdenv.tests; } # Propagate any extra attributes. For instance, we use this to diff --git a/pkgs/stdenv/generic/setup.sh b/pkgs/stdenv/generic/setup.sh index 62f9121d73d6b..c6cdb6c3df750 100644 --- a/pkgs/stdenv/generic/setup.sh +++ b/pkgs/stdenv/generic/setup.sh @@ -144,7 +144,7 @@ exitHandler() { echo "build failed with exit code $exitCode (ignored)" mkdir -p "$out/nix-support" printf "%s" "$exitCode" > "$out/nix-support/failed" - return 0 + exit 0 fi else diff --git a/pkgs/stdenv/tests/succeedOnFailure.nix b/pkgs/stdenv/tests/succeedOnFailure.nix new file mode 100644 index 0000000000000..fef7f17869979 --- /dev/null +++ b/pkgs/stdenv/tests/succeedOnFailure.nix @@ -0,0 +1,14 @@ +{ stdenv }: + +stdenv.mkDerivation { + name = "stdenv-test-succeedOnFailure"; + + succeedOnFailure = true; + + passAsFile = [ "buildCommand" ]; + buildCommand = '' + mkdir $out + echo foo > $out/foo + exit 1 + ''; +}