41 lines
880 B
Bash
41 lines
880 B
Bash
|
|
DUNE_RUNNING=0
|
||
|
|
|
||
|
|
start_dune () {
|
||
|
|
((dune build "$@" --passive-watch-mode > .#dune-output 2>&1) || (echo exit $? >> .#dune-output)) &
|
||
|
|
DUNE_PID=$!;
|
||
|
|
DUNE_RUNNING=1;
|
||
|
|
}
|
||
|
|
|
||
|
|
timeout="$(command -v timeout || echo gtimeout)"
|
||
|
|
|
||
|
|
with_timeout () {
|
||
|
|
$timeout 2 "$@"
|
||
|
|
exit_code=$?
|
||
|
|
if [ "$exit_code" = 124 ]
|
||
|
|
then
|
||
|
|
echo Timed out
|
||
|
|
cat .#dune-output
|
||
|
|
else
|
||
|
|
return "$exit_code"
|
||
|
|
fi
|
||
|
|
}
|
||
|
|
|
||
|
|
stop_dune () {
|
||
|
|
with_timeout dune shutdown;
|
||
|
|
# On Linux, we may run into a bash pid aliasing bug that causes wait to
|
||
|
|
# reject the pid. Therefore we use tail to wait instead.
|
||
|
|
if [ "$(uname -s)" = "Linux" ]
|
||
|
|
then
|
||
|
|
# wait for all child processes
|
||
|
|
tail --pid=$DUNE_PID -f /dev/null;
|
||
|
|
else
|
||
|
|
# wait for dune to exit
|
||
|
|
wait $DUNE_PID;
|
||
|
|
fi
|
||
|
|
cat .#dune-output;
|
||
|
|
}
|
||
|
|
|
||
|
|
build () {
|
||
|
|
with_timeout dune rpc build --wait "$@"
|
||
|
|
}
|