diff --git a/.forgejo/workflows/build.yml b/.forgejo/workflows/build.yml index 0eae41f..6116fdf 100644 --- a/.forgejo/workflows/build.yml +++ b/.forgejo/workflows/build.yml @@ -141,7 +141,13 @@ jobs: # osint-dashboard_osint-pgdata (pinned by `name:` in compose). docker compose build --no-cache app ingester camera-service news-scraper news-summarizer || \ docker compose build app ingester camera-service news-scraper news-summarizer - docker compose up -d --force-recreate + # Name-pinned containers (container_name: osint-dashboard, …) collide + # when compose tries to create instead of recreate — e.g. leftover from + # a different working_dir or a half-failed previous up. down + rm -f + # the known names, then up the full ingest profile. + chmod +x scripts/compose-reup.sh + COMPOSE_PROJECT_NAME=osint-dashboard COMPOSE_PROFILES=ingest \ + scripts/compose-reup.sh docker image prune -f echo "osint-dashboard deployed; images also on ${PUB}/${OWN}/" diff --git a/scripts/compose-reup.sh b/scripts/compose-reup.sh new file mode 100755 index 0000000..f279981 --- /dev/null +++ b/scripts/compose-reup.sh @@ -0,0 +1,42 @@ +#!/usr/bin/env bash +# Recreate the OSINT compose stack without container_name collisions. +# Named volumes (osint-dashboard_osint-pgdata, camera-snapshots) are kept — +# never pass -v to `compose down`. +# +# Usage: scripts/compose-reup.sh +# Env: COMPOSE_PROJECT_NAME (default osint-dashboard) +# COMPOSE_PROFILES (default ingest — nats/ingester/news/cameras) +set -euo pipefail + +ROOT="$(cd "$(dirname "$0")/.." && pwd)" +cd "$ROOT" + +export COMPOSE_PROJECT_NAME="${COMPOSE_PROJECT_NAME:-osint-dashboard}" +PROFILE="${COMPOSE_PROFILES:-ingest}" + +NAMES=( + osint-dashboard + osint-db + osint-nats + osint-ingester + osint-camera-scraper + osint-news-scraper + osint-news-summarizer +) + +echo "compose-reup: project=${COMPOSE_PROJECT_NAME} profile=${PROFILE} dir=${ROOT}" + +# Stop compose-owned containers first. Foreign/name-pinned leftovers survive this. +docker compose --profile "${PROFILE}" down --remove-orphans || true + +# Drop any leftover name-pinned containers compose does not own (the +# "Conflict. The container name is already in use" failure mode). +for c in "${NAMES[@]}"; do + if docker inspect "$c" >/dev/null 2>&1; then + echo "compose-reup: removing leftover ${c}" + docker rm -f "$c" >/dev/null + fi +done + +docker compose --profile "${PROFILE}" up -d --no-build "$@" +docker compose --profile "${PROFILE}" ps