From b2c38fca7d517596eae86b3fd77e7d9100517b57 Mon Sep 17 00:00:00 2001 From: Marc Mintel Date: Mon, 22 Jun 2026 00:12:09 +0200 Subject: [PATCH] refactor: improve deployment cleanup logic using explicit project-based teardown and label-based ghost container removal --- .gitea/workflows/deploy.yml | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml index 8fa35201f..520da2b63 100644 --- a/.gitea/workflows/deploy.yml +++ b/.gitea/workflows/deploy.yml @@ -400,10 +400,19 @@ jobs: scp docker-compose.yml root@alpha.mintel.me:$SITE_DIR/docker-compose.yml ssh root@alpha.mintel.me "docker system prune -f" - ssh root@alpha.mintel.me "docker rm -f \$(docker ps -a -q --filter name=${SLUG}-etib-) 2>/dev/null || true" + + # ── Deterministic cleanup: stop the EXACT compose project we're about to redeploy ── + ssh root@alpha.mintel.me "cd $SITE_DIR && docker compose -p '${PROJECT_NAME}' --env-file '$ENV_FILE' down --remove-orphans 2>/dev/null || true" + + # ── Safety net: kill ANY container whose Traefik host rule matches our target domain ── + # This catches ghost containers from prior deployments that used a different project name + # (e.g. 'e-tibcom' vs 'etib-production' due to Docker Compose defaulting to dir name) + ssh root@alpha.mintel.me "docker ps -q --filter label=traefik.http.routers.${PROJECT_NAME}.rule 2>/dev/null | xargs -r docker rm -f 2>/dev/null || true" + ssh root@alpha.mintel.me "docker ps --format '{{.Names}}' | grep -E '^e-tibcom-' | xargs -r docker rm -f 2>/dev/null || true" + ssh root@alpha.mintel.me "cd $SITE_DIR && echo '${{ secrets.REGISTRY_PASS }}' | docker login registry.infra.mintel.me -u '${{ secrets.REGISTRY_USER }}' --password-stdin" - ssh root@alpha.mintel.me "cd $SITE_DIR && docker compose -p '${{ needs.prepare.outputs.project_name }}' --env-file '$ENV_FILE' pull" - ssh root@alpha.mintel.me "cd $SITE_DIR && docker compose -p '${{ needs.prepare.outputs.project_name }}' --env-file '$ENV_FILE' up -d --remove-orphans" + ssh root@alpha.mintel.me "cd $SITE_DIR && docker compose -p '${PROJECT_NAME}' --env-file '$ENV_FILE' pull" + ssh root@alpha.mintel.me "cd $SITE_DIR && docker compose -p '${PROJECT_NAME}' --env-file '$ENV_FILE' up -d --remove-orphans" ssh root@alpha.mintel.me "docker system prune -f --filter 'until=24h'" # ──────────────────────────────────────────────────────────────────────────────