69 lines
2.0 KiB
Nix
69 lines
2.0 KiB
Nix
# Create a bash script that is checked with shellcheck. You can either use it
|
|
# directly, or use the .bin attribute to get the script in a bin/ directory,
|
|
# to be used in a path for example.
|
|
{ git
|
|
, lib
|
|
, runCommand
|
|
, runtimeShell
|
|
, shellcheck
|
|
, stdenv
|
|
, writeTextFile
|
|
}:
|
|
{ name, docs, inRootDir ? false, redirectTixFiles ? true, withTmpDir ? false }: text:
|
|
# TODO: do something sensible with docs, e.g. provide automated --help
|
|
let
|
|
bin =
|
|
writeTextFile {
|
|
inherit name;
|
|
executable = true;
|
|
destination = "/bin/${name}";
|
|
|
|
text =
|
|
''
|
|
#!${runtimeShell}
|
|
set -euo pipefail
|
|
''
|
|
+ lib.optionalString redirectTixFiles ''
|
|
# storing tix files in a temporary throw away directory avoids mix/tix conflicts after changes
|
|
hpctixdir=$(mktemp -d)
|
|
export HPCTIXFILE="$hpctixdir"/postgrest.tix
|
|
trap 'rm -rf $hpctixdir' EXIT
|
|
''
|
|
+ lib.optionalString inRootDir ''
|
|
cd "$(${git}/bin/git rev-parse --show-toplevel)"
|
|
|
|
if test ! -f postgrest.cabal; then
|
|
>&2 echo "Couldn't find postgrest.cabal. Please make sure to" \
|
|
"run this command somewhere in the PostgREST repo."
|
|
exit 1
|
|
fi
|
|
''
|
|
+ lib.optionalString withTmpDir ''
|
|
tmpdir="$(mktemp -d)"
|
|
|
|
# we keep the tmpdir when an error occurs for debugging
|
|
trap 'echo Temporary directory kept at: $tmpdir' ERR
|
|
# remove the tmpdir when cancelled (postgrest-watch)
|
|
trap 'rm -rf "$tmpdir"' SIGINT SIGTERM
|
|
''
|
|
+ "(${text})"
|
|
+ lib.optionalString withTmpDir ''
|
|
|
|
rm -rf "$tmpdir"
|
|
'';
|
|
|
|
checkPhase =
|
|
''
|
|
# check syntax
|
|
${stdenv.shell} -n $out/bin/${name}
|
|
|
|
# check for shellcheck recommendations
|
|
${shellcheck}/bin/shellcheck $out/bin/${name}
|
|
'';
|
|
};
|
|
|
|
script =
|
|
runCommand name { inherit bin name; } "ln -s $bin/bin/$name $out";
|
|
in
|
|
script // { inherit bin; }
|