Files

65 lines
1.4 KiB
Bash

#!/bin/bash
LOCK_FILE=./runner.lock
PID_FILE=./runner.pid
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"
kill_old_build() {
if [ -f "$PID_FILE" ]; then
OLD_PID=$(cat "$PID_FILE")
if ps -p "$OLD_PID" > /dev/null 2>&1; then
kill -TERM -"$OLD_PID"
echo "Previous build $OLD_PID in progress. Terminating..."
sleep 2
if ps -p "$OLD_PID" > /dev/null 2>&1; then
kill -KILL -"$OLD_PID"
echo "PID $OLD_PID still alive, sending SIGKILL!"
fi
fi
rm -f "$LOCK_FILE" "$PID_FILE"
fi
}
kill_old_build
if ! ln -s "$$" "$LOCK_FILE" 2>/dev/null; then
echo "Another build still running, exit"
exit 1
fi
CLEANED=0
cleanup() {
if [ "$CLEANED" -eq 0 ]; then
CLEANED=1
echo "Cleaning up from $$"
rm -f "$LOCK_FILE" "$PID_FILE"
if [ -n "$NODE_PID" ] && ps -p "$NODE_PID" > /dev/null 2>&1; then
kill -TERM -"$NODE_PID" 2>/dev/null || true
kill -KILL -"$NODE_PID" 2>/dev/null || true
fi
fi
}
trap cleanup EXIT HUP INT TERM
echo "Lock acquired by $$, starting build..."
BRANCH_ARG=""
if [ -n "$1" ]; then
BRANCH_ARG="branch=$1"
fi
if [ -z "$BRANCH_ARG" ]; then
setsid node ./runner.mjs &
else
setsid node ./runner.mjs "$BRANCH_ARG" &
fi
NODE_PID=$!
echo "$NODE_PID" > "$PID_FILE"
wait $NODE_PID
EXIT_CODE=$?
exit $EXIT_CODE