From b057ff48f9c8bf0c991a85d797d0323d531cc062 Mon Sep 17 00:00:00 2001 From: Sirius DevOps Date: Fri, 28 Aug 2026 20:35:31 -0400 Subject: [PATCH] fix(ci): recreate named compose containers without collisions CI ran `compose up --force-recreate` without the ingest profile, so compose tried to *create* osint-dashboard while the old name-pinned container was still running. down + rm -f the known names, then up --profile ingest. Volumes stay. --- .forgejo/workflows/build.yml | 8 ++++++- scripts/compose-reup.sh | 42 ++++++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+), 1 deletion(-) create mode 100755 scripts/compose-reup.sh 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