more script change

This commit is contained in:
Lifei Zhou
2026-03-24 16:22:23 +11:00
parent 62091332b4
commit 2dcb343a45
5 changed files with 31 additions and 25 deletions
+2 -2
View File
@@ -23,8 +23,8 @@ Then wait for the port file and verify the app is listening:
```bash
# Wait for port file and app to be ready (up to 30s)
for i in $(seq 1 30); do
if [[ -f "/tmp/goose-e2e/$TEST_SESSION_NAME/.port" ]]; then
CDP_PORT=$(cat /tmp/goose-e2e/$TEST_SESSION_NAME/.port)
if [[ -f "/tmp/goose-e2e/sessions/$TEST_SESSION_NAME/.port" ]]; then
CDP_PORT=$(cat /tmp/goose-e2e/sessions/$TEST_SESSION_NAME/.port)
if lsof -i :"$CDP_PORT" &>/dev/null; then
echo "App ready — Test session name: $TEST_SESSION_NAME, CDP port: $CDP_PORT"
break
@@ -9,6 +9,7 @@ DESKTOP_DIR="$(cd "$SCRIPT_DIR/../../.." && pwd)"
PROJECT_DIR="$(cd "$DESKTOP_DIR/../.." && pwd)"
RECORDINGS_DIR="$SCRIPT_DIR/../recordings"
RESULTS_DIR="$SCRIPT_DIR/../results"
BASE_DIR="/tmp/goose-e2e"
source "$PROJECT_DIR/bin/activate-hermit"
WORKERS=4
@@ -39,8 +40,8 @@ if [[ ${#RECORDINGS[@]} -eq 0 ]]; then
fi
# Clean up previous test sessions
pkill -9 -f "/tmp/goose-e2e" 2>/dev/null || true
rm -rf /tmp/goose-e2e
pkill -9 -f "$BASE_DIR" 2>/dev/null || true
rm -rf "$BASE_DIR"
rm -rf "$RESULTS_DIR"
mkdir -p "$RESULTS_DIR/logs" "$RESULTS_DIR/screenshots"
@@ -48,19 +49,17 @@ echo "Installing agent-browser..."
cd "$DESKTOP_DIR"
pnpm exec agent-browser install
ts() { date '+%H:%M:%S'; }
echo "=== E2E Test Runner ==="
echo "Recordings: ${#RECORDINGS[@]}, Workers: $WORKERS, Timeout: ${TIMEOUT}s"
cleanup_sessions() {
bash "$SCRIPT_DIR/e2e-stop.sh" 2>/dev/null || true
}
# Wait for the app to write its port file and the port to be listening.
# Usage: wait_for_app <test-name>
# Prints the CDP port on success, returns 1 on timeout.
wait_for_app() {
local TEST_NAME="$1"
local PORT_FILE="/tmp/goose-e2e/$TEST_NAME/.port"
local PORT_FILE="$BASE_DIR/sessions/${TEST_NAME}/.port"
for _ in $(seq 1 30); do
sleep 1
if [[ -f "$PORT_FILE" ]]; then
@@ -86,17 +85,18 @@ run_one() {
local LOG_FILE="$RESULTS_DIR/logs/$TEST_NAME.log"
local EXIT_CODE
echo "[$(date '+%H:%M:%S')] [$TEST_NAME] Starting app..."
echo "[$(ts)] [$TEST_NAME] Starting app..."
screen -dmS "$TEST_NAME" bash -c "bash '$SCRIPT_DIR/e2e-start.sh' '$TEST_NAME'" 2>/dev/null
local CDP_PORT
if ! CDP_PORT=$(wait_for_app "$TEST_NAME"); then
local DURATION=$(( SECONDS - START_TIME ))
echo "[$(date '+%H:%M:%S')] [$TEST_NAME] FAIL — app did not start within 30s (${DURATION}s)"
echo "[$(ts)] [$TEST_NAME] FAIL — app did not start within 30s (${DURATION}s)"
echo "FAIL ${DURATION}s" > "$STATUS_DIR/$TEST_NAME"
bash "$SCRIPT_DIR/e2e-stop.sh" "$TEST_NAME" 2>/dev/null || true
return
fi
echo "[$(date '+%H:%M:%S')] [$TEST_NAME] App ready: port=$CDP_PORT"
echo "[$(ts)] [$TEST_NAME] App ready: port=$CDP_PORT"
set +e
timeout "$TIMEOUT" bash "$SCRIPT_DIR/replay.sh" \
@@ -104,34 +104,34 @@ run_one() {
--connect "$CDP_PORT" \
--browser-session "$TEST_NAME" \
--results-dir "$RESULTS_DIR" \
2>&1 | tee "$LOG_FILE"
2>&1 | tee -a "$LOG_FILE"
EXIT_CODE=${PIPESTATUS[0]}
set -e
local DURATION=$(( SECONDS - START_TIME ))
if [[ "$EXIT_CODE" -eq 0 ]]; then
echo "PASS ${DURATION}s" > "$STATUS_DIR/$TEST_NAME"
echo "[$(date '+%H:%M:%S')] [$TEST_NAME] PASS (${DURATION}s)"
echo "[$(ts)] [$TEST_NAME] PASS (${DURATION}s)"
elif [[ "$EXIT_CODE" -eq 124 ]]; then
echo "TIMEOUT ${DURATION}s" > "$STATUS_DIR/$TEST_NAME"
echo "[$(date '+%H:%M:%S')] [$TEST_NAME] TIMEOUT (${DURATION}s)"
echo "[$(ts)] [$TEST_NAME] TIMEOUT (${DURATION}s)"
else
echo "FAIL ${DURATION}s" > "$STATUS_DIR/$TEST_NAME"
echo "[$(date '+%H:%M:%S')] [$TEST_NAME] FAIL (${DURATION}s, exit=$EXIT_CODE)"
echo "[$(ts)] [$TEST_NAME] FAIL (${DURATION}s, exit=$EXIT_CODE)"
fi
bash "$SCRIPT_DIR/e2e-stop.sh" "$TEST_NAME" 2>/dev/null || true
}
export -f wait_for_app run_one
export SCRIPT_DIR TIMEOUT RESULTS_DIR
export -f ts wait_for_app run_one
export BASE_DIR SCRIPT_DIR TIMEOUT RESULTS_DIR
# Temp dir for pass/fail status
STATUS_DIR=$(mktemp -d)
cleanup_and_exit() {
local exit_code="${1:-$?}"
trap - EXIT INT TERM
cleanup_sessions
bash "$SCRIPT_DIR/e2e-stop.sh" 2>/dev/null || true
rm -rf "$STATUS_DIR"
exit "$exit_code"
}
@@ -9,13 +9,14 @@ DESKTOP_DIR="$(cd "$SCRIPT_DIR/../../.." && pwd)"
PROJECT_DIR="$(cd "$DESKTOP_DIR/../.." && pwd)"
FIXTURES_DIR="$SCRIPT_DIR/../fixtures"
BASE_DIR="/tmp/goose-e2e"
SESSIONS_DIR="$BASE_DIR/sessions"
source "$PROJECT_DIR/bin/activate-hermit"
cd "$DESKTOP_DIR"
TEST_SESSION_NAME="${1:-$(date +"%y%m%d-%H%M%S")}"
SESSION_DIR="$BASE_DIR/$TEST_SESSION_NAME"
SESSION_DIR="$SESSIONS_DIR/$TEST_SESSION_NAME"
# Pick an available port in range 9300-9399, using a lock file to prevent
# parallel instances from selecting the same port (TOCTOU race condition).
@@ -42,6 +43,7 @@ pick_port() {
CDP_PORT=$(pick_port)
# Create clean session directory
mkdir -p "$SESSIONS_DIR"
rm -rf "$SESSION_DIR"
mkdir -p "$SESSION_DIR/root"
mkdir -p "$SESSION_DIR/workspace"
@@ -56,6 +58,9 @@ echo "CDP port: $CDP_PORT"
echo "Session dir: $SESSION_DIR"
echo ""
# Clean up lock file when Electron exits
trap 'rm -f "$BASE_DIR/.port-locks/$CDP_PORT"' EXIT
# Start the app in foreground (Ctrl+C to stop)
export GOOSE_ALLOWLIST_BYPASS=true
export GOOSE_DISABLE_KEYRING=1
@@ -67,4 +72,4 @@ export ANTHROPIC_API_KEY="${ANTHROPIC_API_KEY:?ANTHROPIC_API_KEY must be set}"
export GOOSE_TELEMETRY_ENABLED=false
export ENABLE_PLAYWRIGHT=true
export PLAYWRIGHT_DEBUG_PORT="$CDP_PORT"
exec pnpm exec electron-forge start
pnpm exec electron-forge start
@@ -4,10 +4,11 @@
set -euo pipefail
BASE_DIR="/tmp/goose-e2e"
SESSIONS_DIR="$BASE_DIR/sessions"
stop_session() {
local TEST_SESSION_NAME="$1"
local SESSION_DIR="$BASE_DIR/$TEST_SESSION_NAME"
local SESSION_DIR="$SESSIONS_DIR/$TEST_SESSION_NAME"
if [[ ! -d "$SESSION_DIR" ]]; then
echo "Error: session not found: $SESSION_DIR" >&2
@@ -35,11 +36,11 @@ if [[ $# -gt 0 ]]; then
exit 0
fi
if [[ ! -d "$BASE_DIR" ]]; then
if [[ ! -d "$SESSIONS_DIR" ]]; then
exit 0
fi
for session_dir in "$BASE_DIR"/*; do
for session_dir in "$SESSIONS_DIR"/*; do
[[ -d "$session_dir" ]] || continue
stop_session "$(basename "$session_dir")" || true
done
+1 -1
View File
@@ -52,7 +52,7 @@ if [[ -n "$CONNECT_PORT" ]]; then
break
fi
if [[ "$attempt" -eq "$MAX_CONNECT_RETRIES" ]]; then
echo "Failed to connect after $MAX_CONNECT_RETRIES attempts"
echo "[$(ts)] Failed to connect after $MAX_CONNECT_RETRIES attempts"
exit 1
fi
echo "[$(ts)] Connect failed, retrying in ${CONNECT_RETRY_DELAY}s..."