50 lines
1.4 KiB
Nix
50 lines
1.4 KiB
Nix
|
{
|
||
|
bazel
|
||
|
, bazelTest
|
||
|
, distDir
|
||
|
, extracted
|
||
|
, runLocal
|
||
|
, unzip
|
||
|
}:
|
||
|
|
||
|
# Tests that all shebangs are patched appropriately.
|
||
|
# #!/usr/bin/... should be replaced by Nix store references.
|
||
|
# #!.../bin/env python should be replaced by Nix store reference to the python interpreter.
|
||
|
|
||
|
let
|
||
|
|
||
|
workspaceDir = runLocal "our_workspace" {} "mkdir $out";
|
||
|
|
||
|
testBazel = bazelTest {
|
||
|
name = "bazel-test-shebangs";
|
||
|
inherit workspaceDir;
|
||
|
bazelPkg = bazel;
|
||
|
bazelScript = ''
|
||
|
set -ueo pipefail
|
||
|
FAIL=
|
||
|
check_shebangs() {
|
||
|
local dir="$1"
|
||
|
{ grep -Re '#!/usr/bin' $dir && FAIL=1; } || true
|
||
|
{ grep -Re '#![^[:space:]]*/bin/env' $dir && FAIL=1; } || true
|
||
|
}
|
||
|
BAZEL_EXTRACTED=${extracted bazel}/install
|
||
|
check_shebangs $BAZEL_EXTRACTED
|
||
|
while IFS= read -r -d "" zip; do
|
||
|
unzipped="./$zip/UNPACKED"
|
||
|
mkdir -p "$unzipped"
|
||
|
unzip -qq $zip -d "$unzipped"
|
||
|
check_shebangs "$unzipped"
|
||
|
rm -rf unzipped
|
||
|
done < <(find $BAZEL_EXTRACTED -type f -name '*.zip' -or -name '*.jar' -print0)
|
||
|
if [[ $FAIL = 1 ]]; then
|
||
|
echo "Found files in the bazel distribution with illegal shebangs." >&2
|
||
|
echo "Replace those by explicit Nix store paths." >&2
|
||
|
echo "Python scripts should not use \`bin/env python' but the Python interpreter's store path." >&2
|
||
|
exit 1
|
||
|
fi
|
||
|
'';
|
||
|
buildInputs = [ unzip ];
|
||
|
};
|
||
|
|
||
|
in testBazel
|