125 lines
3.9 KiB
Bash
Executable File

#!/usr/bin/env zsh
set -euo pipefail
# run_e2e_auto.sh
# Script helper para ejecutar los runners E2E del broadcast-panel (browserless o local)
# - Crea un OUT_DIR con timestamp
# - Exporta variables necesarias y ejecuta el runner seleccionado
# - Guarda stdout/stderr en OUT_DIR/e2e.log
# Defaults (puedes sobrescribir por env o con flags)
BROWSERLESS_WS_DEFAULT="wss://browserless.bfzqqk.easypanel.host"
BROWSERLESS_TOKEN_DEFAULT=""
ROOM_DEFAULT="e2e-room"
TOKEN_SERVER_DEFAULT="https://avanzacast-servertokens.bfzqqk.easypanel.host"
BROADCAST_URL_DEFAULT="http://avanzacast-studio.bfzqqk.easypanel.host"
# Parse args simples
LOCAL_MODE=0
SHOW=0
BROWSERLESS_WS="${BROWSERLESS_WS:-$BROWSERLESS_WS_DEFAULT}"
BROWSERLESS_TOKEN="${BROWSERLESS_TOKEN:-$BROWSERLESS_TOKEN_DEFAULT}"
ROOM="${ROOM:-$ROOM_DEFAULT}"
TOKEN_SERVER="${TOKEN_SERVER:-$TOKEN_SERVER_DEFAULT}"
BROADCAST_URL="${BROADCAST_URL:-$BROADCAST_URL_DEFAULT}"
OUT_DIR="${OUT_DIR:-}"
usage() {
cat <<EOF
Usage: run_e2e_auto.sh [--local] [--show] [--room NAME] [--ws URL] [--token TOKEN] [--token-server URL] [--broadcast-url URL]
Options:
--local Use run_local_e2e.js (con --ws o REMOTE_WS para apuntar a Chrome remoto)
--show Pass flag --show to the local runner (visual mode)
--room NAME Room name to create (env ROOM)
--ws URL Browserless/remote ws base (env BROWSERLESS_WS / REMOTE_WS)
--token TOKEN Browserless token (env BROWSERLESS_TOKEN)
--token-server URL Token server (env TOKEN_SERVER)
--broadcast-url URL Broadcast panel URL (env BROADCAST_URL)
--out DIR Directory where logs/screenshots will be stored (overrides default)
-h, --help Show this help
Examples:
# Run against browserless remote (recommended)
BROWSERLESS_TOKEN=xxx ./run_e2e_auto.sh --room iuqiw-aksjka
# Run local remote-debugging chrome
./run_e2e_auto.sh --local --ws http://localhost:9222 --show
EOF
}
# simple arg loop
while [[ $# -gt 0 ]]; do
case "$1" in
--local) LOCAL_MODE=1; shift ;;
--show) SHOW=1; shift ;;
--room) ROOM="$2"; shift 2 ;;
--ws) BROWSERLESS_WS="$2"; shift 2 ;;
--token) BROWSERLESS_TOKEN="$2"; shift 2 ;;
--token-server) TOKEN_SERVER="$2"; shift 2 ;;
--broadcast-url) BROADCAST_URL="$2"; shift 2 ;;
--out) OUT_DIR="$2"; shift 2 ;;
-h|--help) usage; exit 0 ;;
*) echo "Unknown arg: $1"; usage; exit 2 ;;
esac
done
# prepare outdir with timestamp if not provided
if [[ -z "${OUT_DIR}" ]]; then
TIMESTAMP=$(date -u +"%Y%m%dT%H%M%SZ")
OUT_DIR="./e2e/out/$TIMESTAMP"
fi
mkdir -p "$OUT_DIR"
# decide runner
if [[ "$LOCAL_MODE" -eq 1 ]]; then
RUNNER_JS="e2e/run_local_e2e.js"
# If SHOW requested, pass flag through env to the runner via --show
RUN_CMD=(node "$RUNNER_JS")
if [[ "$SHOW" -eq 1 ]]; then RUN_CMD+=(--show); fi
else
RUNNER_JS="e2e/run_browserless_e2e.js"
RUN_CMD=(node "$RUNNER_JS")
fi
echo "[run_e2e_auto] Starting E2E runner"
echo " Runner: $RUNNER_JS"
echo " OUT_DIR: $OUT_DIR"
echo " ROOM: $ROOM"
if [[ -n "$BROWSERLESS_TOKEN" ]]; then
echo " BROWSERLESS_TOKEN: (present)"
else
echo " BROWSERLESS_TOKEN: (empty)"
fi
# Build environment for the child process
export BROWSERLESS_WS BROWSERLESS_TOKEN ROOM TOKEN_SERVER BROADCAST_URL OUT_DIR
# Show final command (for debugging)
echo "[run_e2e_auto] Executing: ${RUN_CMD[@]}"
# Run and tee output
LOGFILE="$OUT_DIR/e2e.log"
(
echo "=== START $(date -u) ==="
echo "Command: ${RUN_CMD[@]}"
echo "Environment: BROWSERLESS_WS=$BROWSERLESS_WS ROOM=$ROOM TOKEN_SERVER=$TOKEN_SERVER BROADCAST_URL=$BROADCAST_URL"
echo "--- OUTPUT ---"
) > "$LOGFILE"
# run and capture both stdout and stderr
{
"${RUN_CMD[@]}" 2>&1
} | tee -a "$LOGFILE"
EXIT_CODE=${PIPESTATUS[1]:-0}
echo "=== FINISH $(date -u) exit=$EXIT_CODE ===" | tee -a "$LOGFILE"
if [[ $EXIT_CODE -ne 0 ]]; then
echo "Runner exited with code $EXIT_CODE. Revisa $LOGFILE y los archivos en $OUT_DIR"
exit $EXIT_CODE
fi
echo "E2E runner finished OK. Revisa logs y capturas en: $OUT_DIR"
exit 0