89 lines
2.8 KiB
Bash
89 lines
2.8 KiB
Bash
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
|
|
mkdir -p "${AGENT_BROWSER_ASSETS_DIR:-reports/assets}"
|
|
if [ ! -f package.json ]; then
|
|
npm init -y >/dev/null
|
|
fi
|
|
if [ ! -x node_modules/.bin/agent-browser ]; then
|
|
npm install agent-browser@latest playwright@latest "$@"
|
|
fi
|
|
|
|
install_agent_browser_shim() {
|
|
local bin_dir="/usr/local/bin"
|
|
mkdir -p "$bin_dir"
|
|
cat > "$bin_dir/agent-browser" <<'SHIM'
|
|
#!/usr/bin/env bash
|
|
exec /workspace/node_modules/.bin/agent-browser "$@"
|
|
SHIM
|
|
chmod +x "$bin_dir/agent-browser"
|
|
}
|
|
|
|
install_agent_browser_shim
|
|
|
|
run_agent_browser_setup_check() {
|
|
if command -v timeout >/dev/null 2>&1; then
|
|
timeout 60s npx agent-browser --session setup-check open about:blank >/tmp/agent-browser-setup-check.log 2>&1
|
|
else
|
|
npx agent-browser --session setup-check open about:blank >/tmp/agent-browser-setup-check.log 2>&1
|
|
fi
|
|
}
|
|
|
|
validate_agent_browser_config() {
|
|
echo "[setup-agent-browser] validating browser launch..."
|
|
if run_agent_browser_setup_check; then
|
|
npx agent-browser --session setup-check close >/dev/null 2>&1 || true
|
|
echo "[setup-agent-browser] browser launch validation passed."
|
|
return 0
|
|
fi
|
|
|
|
npx agent-browser --session setup-check close >/dev/null 2>&1 || true
|
|
echo "[setup-agent-browser] browser launch validation failed:" >&2
|
|
cat /tmp/agent-browser-setup-check.log >&2 || true
|
|
rm -f agent-browser.json
|
|
return 1
|
|
}
|
|
|
|
if [ -f .agent-browser-ready ] && validate_agent_browser_config; then
|
|
exit 0
|
|
fi
|
|
rm -f .agent-browser-ready
|
|
|
|
install_system_chromium() {
|
|
if ! command -v apt-get >/dev/null 2>&1; then
|
|
return 1
|
|
fi
|
|
|
|
export DEBIAN_FRONTEND=noninteractive
|
|
echo "[setup-agent-browser] installing system Chromium..."
|
|
apt-get update
|
|
if ! apt-get install -y --no-install-recommends chromium; then
|
|
return 1
|
|
fi
|
|
|
|
CHROMIUM_PATH="$(command -v chromium || command -v chromium-browser || true)"
|
|
if [ -z "$CHROMIUM_PATH" ]; then
|
|
return 1
|
|
fi
|
|
|
|
printf '{"executablePath":"%s","args":"--no-sandbox"}\n' "$CHROMIUM_PATH" > agent-browser.json
|
|
echo "[setup-agent-browser] using Chromium at $CHROMIUM_PATH"
|
|
validate_agent_browser_config
|
|
}
|
|
|
|
install_playwright_chromium() {
|
|
echo "[setup-agent-browser] installing Playwright Chromium fallback..."
|
|
npx playwright install --with-deps chromium
|
|
CHROMIUM_PATH="$(node -e "const { chromium } = require('playwright'); console.log(chromium.executablePath())")"
|
|
printf '{"executablePath":"%s","args":"--no-sandbox"}\n' "$CHROMIUM_PATH" > agent-browser.json
|
|
echo "[setup-agent-browser] using Playwright Chromium at $CHROMIUM_PATH"
|
|
validate_agent_browser_config
|
|
}
|
|
|
|
if ! install_system_chromium; then
|
|
echo "[setup-agent-browser] system Chromium unavailable or unusable; falling back to Playwright Chromium..."
|
|
install_playwright_chromium
|
|
fi
|
|
touch .agent-browser-ready
|