diff --git a/wrapper/start.sh b/wrapper/start.sh index cc6ee89..7e17986 100644 --- a/wrapper/start.sh +++ b/wrapper/start.sh @@ -1,7 +1,35 @@ #!/usr/bin/env bash set -euo pipefail -# Ensure the external volumes are mounted and writable -mkdir -p /cache/app /cache/tmp /cache/prev /data +# Stable paths +export DATA_FILE="${DATA_FILE:-/data/data.json}" +export PLAYWRIGHT_BROWSERS_PATH="${PLAYWRIGHT_BROWSERS_PATH:-/cache/pw-browsers}" +export WITH_PLAYWRIGHT="${WITH_PLAYWRIGHT:-1}" +mkdir -p "$(dirname "$DATA_FILE")" /cache "$PLAYWRIGHT_BROWSERS_PATH" + +# Install browsers once if playwright is available in this image +if [ "$WITH_PLAYWRIGHT" = "1" ]; then + python - <<'PY' || true +import importlib, os, subprocess, sys, pathlib +ok = importlib.util.find_spec("playwright") is not None +if ok: + bpath = os.environ.get("PLAYWRIGHT_BROWSERS_PATH", "/cache/pw-browsers") + p = pathlib.Path(bpath) + need = True + if p.exists(): + # crude presence check: any chromium* dir inside browsers path + for child in p.glob("*chromium*"): + need = False + break + if need: + try: + subprocess.check_call([sys.executable, "-m", "playwright", "install-deps", "chromium"]) + except Exception: + pass # not fatal on slim images + subprocess.check_call([sys.executable, "-m", "playwright", "install", "chromium"]) +PY +fi + +# Hand off to the Python wrapper (nightly update + rollback) exec python -u /app/wrapper.py