#!/usr/bin/env bash set -euo pipefail # 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