#!/usr/bin/env bash set -euo pipefail LEGACY_CONTAINERS=( storyforge-fastgpt-plugin storyforge-sandbox storyforge-pg storyforge-minio storyforge-redis storyforge-mongo ) LEGACY_NETWORK="storyforge-net" COLLECTOR_HEALTH_URL="${COLLECTOR_HEALTH_URL:-http://127.0.0.1:8081/healthz}" N8N_HEALTH_URL="${N8N_HEALTH_URL:-http://127.0.0.1:5670/healthz}" APPLY="${APPLY:-0}" log() { printf '[cleanup] %s\n' "$*" } check_url() { local url="$1" curl -fsS "$url" >/dev/null } log "preflight: verifying StoryForge collector and n8n" check_url "$COLLECTOR_HEALTH_URL" check_url "$N8N_HEALTH_URL" log "legacy containers:" for container in "${LEGACY_CONTAINERS[@]}"; do if docker ps -a --format '{{.Names}}' | grep -Fxq "$container"; then status="$(docker inspect --format '{{.State.Status}}' "$container")" printf ' - %s (%s)\n' "$container" "$status" else printf ' - %s (missing)\n' "$container" fi done if [[ "$APPLY" != "1" ]]; then log "dry run complete. Re-run with APPLY=1 to stop and remove legacy containers." exit 0 fi for container in "${LEGACY_CONTAINERS[@]}"; do if docker ps -a --format '{{.Names}}' | grep -Fxq "$container"; then log "removing $container" docker rm -f "$container" >/dev/null fi done if docker network inspect "$LEGACY_NETWORK" >/dev/null 2>&1; then if [[ "$(docker network inspect "$LEGACY_NETWORK" --format '{{len .Containers}}')" == "0" ]]; then log "removing empty network $LEGACY_NETWORK" docker network rm "$LEGACY_NETWORK" >/dev/null else log "network $LEGACY_NETWORK still has attached containers; leaving it in place" fi fi log "post-check: verifying StoryForge collector and n8n" check_url "$COLLECTOR_HEALTH_URL" check_url "$N8N_HEALTH_URL" log "legacy FastGPT runtime cleanup completed"