diff --git a/.forgejo/workflows/deploy-metrics.yml b/.forgejo/workflows/deploy-metrics.yml index 5f2b8dc6..80a648ae 100644 --- a/.forgejo/workflows/deploy-metrics.yml +++ b/.forgejo/workflows/deploy-metrics.yml @@ -326,6 +326,43 @@ jobs: COMPOSE_PROFILES="$PROFILES" \ docker compose -p gendesign-metrics -f docker-compose.metrics.yml up -d --remove-orphans + # ── alert-ack / tg-relay: код монтируется с хоста ──────────────── + # Тот же класс бага, что у Alertmanager (см. ниже) и Caddyfile: + # `up -d` сравнивает ОПИСАНИЕ сервиса, а не содержимое бинд-маунта. + # alert-ack и tg-relay получают код именно бинд-маунтом файла + # (./ops/metrics/{alert-ack,tg-relay}/app.py:/app/app.py:ro), а не + # сборкой образа — правка app.py оставляет уже запущенный + # контейнер работать на СТАРОМ коде в памяти интерпретатора сколько + # угодно, и `up -d` этого не видит вовсе. + # + # Пойман на проде 12.09.2026: PR #3490 (фикс alert-ack) слился, + # `git reset --hard` обновил файл на диске (grep по новому + # комментарию находил его), а gendesign-alert-ack, запущенный за + # 25 минут до этого, продолжал отвечать по старой логике — + # зелёный деплой, тихо неверное поведение. Починил только ручной + # `docker restart gendesign-alert-ack`. force-recreate здесь — + # замена этому ручному шагу. + # + # case ",$PROFILES," — пересоздаём только если профиль сервиса + # реально включён в ЭТОМ прогоне, иначе force-recreate ругается на + # несуществующий контейнер (сервис не создан вовсе). + case ",$PROFILES," in + *,alerts,*) + COMPOSE_PROFILES="$PROFILES" \ + docker compose -p gendesign-metrics -f docker-compose.metrics.yml \ + up -d --force-recreate alert-ack + echo "alert-ack: контейнер пересоздан — код монтируется с хоста, up -d его не подхватывает (#3490)." + ;; + esac + case ",$PROFILES," in + *,relay,*) + COMPOSE_PROFILES="$PROFILES" \ + docker compose -p gendesign-metrics -f docker-compose.metrics.yml \ + up -d --force-recreate tg-relay + echo "tg-relay: контейнер пересоздан — код монтируется с хоста, up -d его не подхватывает (#3490)." + ;; + esac + # ── Alertmanager: пересоздать, если конфиг перерисовали ───────── # `up -d` выше СЧИТАЕТ alertmanager неизменившимся: он сравнивает # описание сервиса, а содержимое бинд-маунта в это сравнение не