From 7c8e14c44f4feef5fa81114181fc0644c30e40ff Mon Sep 17 00:00:00 2001 From: Toutsu Date: Sun, 24 May 2026 07:33:57 +0300 Subject: [PATCH] feat(ci): wait for bot/discord/web healthcheck after deploy Add loop that polls docker compose ps for healthy state. Timeout: 180s, interval: 5s. Workflow now fails if any service doesn't become healthy. --- .gitea/workflows/deploy.yml | 34 ++++++++++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml index 5265401..7678876 100644 --- a/.gitea/workflows/deploy.yml +++ b/.gitea/workflows/deploy.yml @@ -118,9 +118,39 @@ jobs: run: | # Авторизуемся локальным докером в нашей Gitea docker login git.codeanddice.ru/ -u toutsu -p ${{ secrets.GIT_TOKEN }} - + # Pull гарантирует, что мы получили нужную версию. docker compose pull bot discord web - + # Запускаем! Флаг -d оставит их работать в фоне. docker compose up -d + + # Ждём, пока сервисы перейдут в healthy или упадут + SERVICES="bot discord web" + MAX_WAIT=180 + INTERVAL=5 + ELAPSED=0 + + while [ $ELAPSED -lt $MAX_WAIT ]; do + NOT_HEALTHY=0 + for svc in $SERVICES; do + HEALTH=$(docker compose ps $svc --format="{{.Health}}" 2>/dev/null | head -n1) + if [ "$HEALTH" != "healthy" ]; then + STATE=$(docker compose ps $svc --format="{{.State}}" 2>/dev/null | head -n1) + echo "❌ $svc not healthy yet (state: ${STATE:-unknown})" + NOT_HEALTHY=$((NOT_HEALTHY + 1)) + fi + done + + if [ $NOT_HEALTHY -eq 0 ]; then + echo "✅ All services are healthy!" + exit 0 + fi + + sleep $INTERVAL + ELAPSED=$((ELAPSED + INTERVAL)) + done + + echo "⏰ Timed out waiting for services to become healthy" + docker compose ps + exit 1