77 lines
1.7 KiB
Bash
77 lines
1.7 KiB
Bash
#!/bin/sh
|
|
set -eu
|
|
|
|
resolve_chrome_path() {
|
|
if [ -n "${CHROME_PATH:-}" ] && [ -x "$CHROME_PATH" ]; then
|
|
return 0
|
|
fi
|
|
|
|
for candidate in \
|
|
/usr/bin/google-chrome-stable \
|
|
/usr/bin/google-chrome \
|
|
/opt/google/chrome/google-chrome \
|
|
/usr/bin/chromium \
|
|
/usr/bin/chromium-browser; do
|
|
if [ -x "$candidate" ]; then
|
|
CHROME_PATH="$candidate"
|
|
return 0
|
|
fi
|
|
done
|
|
|
|
if command -v google-chrome-stable >/dev/null 2>&1; then
|
|
CHROME_PATH="$(command -v google-chrome-stable)"
|
|
return 0
|
|
fi
|
|
if command -v google-chrome >/dev/null 2>&1; then
|
|
CHROME_PATH="$(command -v google-chrome)"
|
|
return 0
|
|
fi
|
|
if command -v chromium >/dev/null 2>&1; then
|
|
CHROME_PATH="$(command -v chromium)"
|
|
return 0
|
|
fi
|
|
if command -v chromium-browser >/dev/null 2>&1; then
|
|
CHROME_PATH="$(command -v chromium-browser)"
|
|
return 0
|
|
fi
|
|
|
|
echo "No Chrome/Chromium executable found. Set CHROME_PATH to a valid binary." >&2
|
|
exit 1
|
|
}
|
|
|
|
resolve_chrome_path
|
|
export CHROME_PATH
|
|
export PUPPETEER_EXECUTABLE_PATH="${PUPPETEER_EXECUTABLE_PATH:-$CHROME_PATH}"
|
|
|
|
rm -f /tmp/.X99-lock
|
|
Xvfb :99 -screen 0 1024x768x24 &
|
|
xvfb_pid=$!
|
|
|
|
export DISPLAY=:99
|
|
|
|
npm start &
|
|
app_pid=$!
|
|
|
|
term_handler() {
|
|
kill "$app_pid" 2>/dev/null || true
|
|
kill "$xvfb_pid" 2>/dev/null || true
|
|
}
|
|
|
|
trap term_handler INT TERM
|
|
|
|
while kill -0 "$app_pid" 2>/dev/null; do
|
|
if ! kill -0 "$xvfb_pid" 2>/dev/null; then
|
|
echo "Xvfb exited; stopping app." >&2
|
|
kill "$app_pid" 2>/dev/null || true
|
|
wait "$app_pid" 2>/dev/null || true
|
|
exit 1
|
|
fi
|
|
sleep 1
|
|
done
|
|
|
|
wait "$app_pid"
|
|
app_status=$?
|
|
kill "$xvfb_pid" 2>/dev/null || true
|
|
wait "$xvfb_pid" 2>/dev/null || true
|
|
exit "$app_status"
|