#!/usr/bin/env bash # Full-system browser E2E via Playwright Docker (host lacks libatk; no sudo). # Hits host BASE_URL (default http://127.0.0.1:8080) with --network host. set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" WEB_DIR="$(cd "$SCRIPT_DIR/.." && pwd)" WT="$(cd "$WEB_DIR/.." && pwd)" # Prefer main repo .env (worktree may not have secrets). ROOT="${AGENT_SYSTEM_ROOT:-/home/weichen/projects/Agent-System}" if [[ ! -f "$ROOT/.env" && -f "$WT/.env" ]]; then ROOT="$WT" fi ASSETS="${UI_ACCEPTANCE_ASSETS_DIR:-$WT/.doc/test-reports/assets/2026-09-26-full-system-browser-e2e}" IMAGE="${PLAYWRIGHT_IMAGE:-mcr.microsoft.com/playwright:v1.63.0-noble}" BASE_URL="${BASE_URL:-http://127.0.0.1:8080}" mkdir -p "$ASSETS/screenshots" set -a # shellcheck disable=SC1091 source "$ROOT/.env" set +a if [[ -z "${ADMIN_USERNAME:-}" || -z "${ADMIN_PASSWORD:-}" ]]; then echo "ADMIN_USERNAME/ADMIN_PASSWORD required from $ROOT/.env" >&2 exit 2 fi echo "IMAGE=$IMAGE BASE_URL=$BASE_URL ASSETS=$ASSETS WT=$WT" | tee "$ASSETS/run-env.txt" NM_MOUNT=() if [[ -d "$WEB_DIR/node_modules" ]]; then NM_MOUNT=(-v "$WEB_DIR/node_modules:/work/web/node_modules") elif [[ -d "$ROOT/web/node_modules" ]]; then NM_MOUNT=(-v "$ROOT/web/node_modules:/work/web/node_modules") fi docker run --rm \ --network host \ --ipc host \ -e BASE_URL="$BASE_URL" \ -e RUN_UI_ACCEPTANCE=1 \ -e UI_ACCEPTANCE_ASSETS_DIR=/work/assets \ -e DISABLE_DEV_SEED_USERS=true \ -e ADMIN_USERNAME="$ADMIN_USERNAME" \ -e ADMIN_PASSWORD="$ADMIN_PASSWORD" \ -e CI=1 \ -v "$WEB_DIR:/work/web" \ -v "$ASSETS:/work/assets" \ "${NM_MOUNT[@]}" \ -w /work/web \ "$IMAGE" \ bash -lc 'if [[ ! -x node_modules/.bin/playwright ]]; then npm ci; fi; npx playwright test e2e/full-system-browser-e2e.spec.ts --reporter=list' \ 2>&1 | tee "$ASSETS/playwright.log"