mirror of
https://github.com/Comfy-Org/ComfyUI-Manager.git
synced 2026-03-08 10:37:37 +08:00
Add automated E2E test scripts for unified dependency resolver: - setup_e2e_env.sh: idempotent environment setup (clone ComfyUI, create venv, install deps, symlink Manager, write config.ini) - start_comfyui.sh: foreground-blocking launcher using tail -f | grep -q readiness detection - stop_comfyui.sh: graceful SIGTERM → SIGKILL shutdown Update test documentation reflecting E2E testing findings: - TEST-environment-setup.md: add automated script usage, document caveats (PYTHONPATH, config.ini path, Manager v4 /v2/ prefix, Blocked by policy, bash ((var++)) trap, git+https:// rejection) - TEST-unified-dep-resolver.md: add TC-17 (restart dependency detection), TC-18 (real node pack integration), Validated Behaviors section, normalize API port to 8199 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
76 lines
2.0 KiB
Bash
Executable File
76 lines
2.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# stop_comfyui.sh — Graceful ComfyUI shutdown for E2E tests
|
|
#
|
|
# Stops a ComfyUI process previously started by start_comfyui.sh.
|
|
# Uses SIGTERM first, then SIGKILL after a grace period.
|
|
#
|
|
# Input env vars:
|
|
# E2E_ROOT — (required) path to E2E environment
|
|
# PORT — ComfyUI port for fallback pkill (default: 8199)
|
|
#
|
|
# Exit: 0=stopped, 1=failed
|
|
|
|
set -euo pipefail
|
|
|
|
PORT="${PORT:-8199}"
|
|
GRACE_PERIOD=10
|
|
|
|
# --- Logging helpers ---
|
|
log() { echo "[stop_comfyui] $*"; }
|
|
err() { echo "[stop_comfyui] ERROR: $*" >&2; }
|
|
die() { err "$@"; exit 1; }
|
|
|
|
# --- Validate ---
|
|
[[ -n "${E2E_ROOT:-}" ]] || die "E2E_ROOT is not set"
|
|
|
|
PID_FILE="$E2E_ROOT/logs/comfyui.pid"
|
|
|
|
# --- Read PID ---
|
|
COMFYUI_PID=""
|
|
if [[ -f "$PID_FILE" ]]; then
|
|
COMFYUI_PID="$(cat "$PID_FILE")"
|
|
log "Read PID=$COMFYUI_PID from $PID_FILE"
|
|
fi
|
|
|
|
# --- Graceful shutdown via SIGTERM ---
|
|
if [[ -n "$COMFYUI_PID" ]] && kill -0 "$COMFYUI_PID" 2>/dev/null; then
|
|
log "Sending SIGTERM to PID $COMFYUI_PID..."
|
|
kill "$COMFYUI_PID" 2>/dev/null || true
|
|
|
|
# Wait for graceful shutdown
|
|
elapsed=0
|
|
while kill -0 "$COMFYUI_PID" 2>/dev/null && [[ "$elapsed" -lt "$GRACE_PERIOD" ]]; do
|
|
sleep 1
|
|
elapsed=$((elapsed + 1))
|
|
done
|
|
|
|
# Force kill if still alive
|
|
if kill -0 "$COMFYUI_PID" 2>/dev/null; then
|
|
log "Process still alive after ${GRACE_PERIOD}s. Sending SIGKILL..."
|
|
kill -9 "$COMFYUI_PID" 2>/dev/null || true
|
|
sleep 1
|
|
fi
|
|
fi
|
|
|
|
# --- Fallback: kill by port pattern ---
|
|
if ss -tlnp 2>/dev/null | grep -q ":${PORT}\b"; then
|
|
log "Port $PORT still in use. Attempting pkill fallback..."
|
|
pkill -f "main\\.py.*--port $PORT" 2>/dev/null || true
|
|
sleep 2
|
|
|
|
if ss -tlnp 2>/dev/null | grep -q ":${PORT}\b"; then
|
|
pkill -9 -f "main\\.py.*--port $PORT" 2>/dev/null || true
|
|
sleep 1
|
|
fi
|
|
fi
|
|
|
|
# --- Cleanup PID file ---
|
|
rm -f "$PID_FILE"
|
|
|
|
# --- Verify port is free ---
|
|
if ss -tlnp 2>/dev/null | grep -q ":${PORT}\b"; then
|
|
die "Port $PORT is still in use after shutdown"
|
|
fi
|
|
|
|
log "ComfyUI stopped."
|