diff --git a/src/build-remote/build-remote.cc b/src/build-remote/build-remote.cc index a5268bce6..cd13e6670 100644 --- a/src/build-remote/build-remote.cc +++ b/src/build-remote/build-remote.cc @@ -329,8 +329,17 @@ connected: drv.inputSrcs = store->parseStorePathSet(inputs); optResult = sshStore->buildDerivation(*drvPath, (const BasicDerivation &) drv); auto & result = *optResult; - if (!result.success()) + if (!result.success()) { + if (settings.keepFailed) { + warn( + "The failed build directory was kept on the remote builder due to `--keep-failed`.%s", + (settings.thisSystem == drv.platform || settings.extraPlatforms.get().count(drv.platform) > 0) + ? " You can re-run the command with `--builders ''` to disable remote building for this invocation." + : "" + ); + } throw Error("build of '%s' on '%s' failed: %s", store->printStorePath(*drvPath), storeUri, result.errorMsg); + } } else { copyClosure(*store, *sshStore, StorePathSet {*drvPath}, NoRepair, NoCheckSigs, substitute); auto res = sshStore->buildPathsWithResults({ diff --git a/tests/functional/build-remote.sh b/tests/functional/build-remote.sh index 62cc85888..765cd71b4 100644 --- a/tests/functional/build-remote.sh +++ b/tests/functional/build-remote.sh @@ -85,6 +85,7 @@ out="$(nix-build 2>&1 failing.nix \ --arg busybox "$busybox")" || true [[ "$out" =~ .*"note: keeping build directory".* ]] +[[ "$out" =~ .*"The failed build directory was kept on the remote builder due to".* ]] build_dir="$(grep "note: keeping build" <<< "$out" | sed -E "s/^(.*)note: keeping build directory '(.*)'(.*)$/\2/")" [[ "foo" = $(<"$build_dir"/bar) ]]