Ctrl K
ComunidadGuías…

scripts/capture-security-updates-ui-screenshots.sh

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
#!/usr/bin/env bash
set -euo pipefail

export PATH="${HOME}/.bun/bin:${PATH}"
cd "$(dirname "$0")/.."

PORT="${TINBASE_PORT:-55321}"
RUN_DIR="$(mktemp -d)"
LOG="${RUN_DIR}/tinbase.log"
VITE_LOG="${RUN_DIR}/vite.log"
TINBASE_DIR="${RUN_DIR}/tinbase"
BACKEND_LOG="${RUN_DIR}/backend.log"
BASE_REF="${SCREENSHOT_BASE_REF:-origin/main}"
OUTPUT_DIR="docs/screenshots/security-updates-ui"
GUARD_PATHS=(
  "src/pages/settings/account/Notifications.vue"
  "src/constants/observeTabs.ts"
  "src/pages/app/[app].observe.security.vue"
)

mkdir -p "$OUTPUT_DIR"

assert_clean_worktree_paths() {
  local path
  for path in "${GUARD_PATHS[@]}"; do
    if ! git diff --quiet -- "$path" || ! git diff --cached --quiet -- "$path"; then
      echo "Refusing to run: uncommitted changes in $path (commit or stash first)." >&2
      exit 1
    fi
  done
}

stop_vite() {
  if [[ -n "${VITE_PID:-}" ]] && kill -0 "$VITE_PID" 2>/dev/null; then
    kill "$VITE_PID" 2>/dev/null || true
    wait "$VITE_PID" 2>/dev/null || true
  fi
  VITE_PID=""
}

assert_clean_worktree_paths

cleanup() {
  kill "${TINBASE_PID:-}" 2>/dev/null || true
  kill "${VITE_PID:-}" 2>/dev/null || true
  kill "${BACKEND_PID:-}" 2>/dev/null || true
  git checkout HEAD -- src/pages/settings/account/Notifications.vue src/constants/observeTabs.ts 2>/dev/null || true
  test -f "$RUN_DIR/head-security-page.vue" && mv "$RUN_DIR/head-security-page.vue" "src/pages/app/[app].observe.security.vue" 2>/dev/null || true
  rm -rf "$RUN_DIR"
}
trap cleanup EXIT

bunx tinbase start --dir "$TINBASE_DIR" -p "$PORT" > "$LOG" 2>&1 &
TINBASE_PID=$!

for _ in $(seq 1 180); do
  grep -q "tinbase running" "$LOG" 2>/dev/null && break
  if ! kill -0 "$TINBASE_PID" 2>/dev/null; then
    break
  fi
  sleep 1
done

if ! grep -q "tinbase running" "$LOG" 2>/dev/null; then
  echo "Tinbase failed to start:" >&2
  tail -n 100 "$LOG" >&2 || true
  exit 1
fi

ANON_KEY="$(awk '/anon key:/ {print $NF; exit}' "$LOG")"
SERVICE_KEY="$(awk '/service_role key:/ {print $NF; exit}' "$LOG")"
if [ -z "$ANON_KEY" ] || [ -z "$SERVICE_KEY" ]; then
  echo "Failed to parse Tinbase keys from $LOG" >&2
  exit 1
fi

SUPABASE_URL="http://127.0.0.1:${PORT}"
API_DOMAIN="127.0.0.1:${PORT}/functions/v1"
TEST_USER_ID="6aa76066-55ef-4238-ade6-0b32334a4097"

if ! curl -sf -X PUT "${SUPABASE_URL}/auth/v1/admin/users/${TEST_USER_ID}" \
  -H "apikey: ${SERVICE_KEY}" \
  -H "Authorization: Bearer ${SERVICE_KEY}" \
  -H "Content-Type: application/json" \
  -d '{"password":"testtest","email_confirm":true}' >/dev/null; then
  echo "Warning: could not reset demo user password via Tinbase admin API; using seeded credentials." >&2
fi

start_vite() {
  ENV=local SUPA_URL="$SUPABASE_URL" SUPA_ANON="$ANON_KEY" API_DOMAIN="$API_DOMAIN" CAPTCHA_KEY='' \
    bun run serve:local > "$VITE_LOG" 2>&1 &
  VITE_PID=$!
  for _ in $(seq 1 120); do
    if curl -sf "http://localhost:5173/" >/dev/null 2>&1; then
      return 0
    fi
    sleep 1
  done
  echo "Vite failed to start:" >&2
  tail -n 80 "$VITE_LOG" >&2 || true
  exit 1
}

run_playwright_phase() {
  local phase="$1"
  CAPGO_PR_SCREENSHOTS=1 CAPGO_SCREENSHOT_PHASE="$phase" SKIP_BACKEND_START=1 SKIP_FRONTEND_START=1 SKIP_STRIPE_EMULATOR_START=1 \
    SUPABASE_URL="$SUPABASE_URL" SUPABASE_ANON_KEY="$ANON_KEY" \
    bunx playwright test playwright/e2e/security-updates-ui-screenshots.spec.ts
}

# --- Before (stack base UI) ---
if [ -f "src/pages/app/[app].observe.security.vue" ]; then
  mv "src/pages/app/[app].observe.security.vue" "$RUN_DIR/head-security-page.vue"
fi
git checkout "$BASE_REF" -- src/pages/settings/account/Notifications.vue src/constants/observeTabs.ts

start_vite
sleep 3
run_playwright_phase before
stop_vite
sleep 2

# --- After (PR head UI) ---
git checkout HEAD -- src/pages/settings/account/Notifications.vue src/constants/observeTabs.ts
if [ -f "$RUN_DIR/head-security-page.vue" ]; then
  mv "$RUN_DIR/head-security-page.vue" "src/pages/app/[app].observe.security.vue"
fi

start_vite
sleep 3
run_playwright_phase after

ls -la "$OUTPUT_DIR"