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.
This commit is contained in:
@@ -118,9 +118,39 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
# Авторизуемся локальным докером в нашей Gitea
|
# Авторизуемся локальным докером в нашей Gitea
|
||||||
docker login git.codeanddice.ru/ -u toutsu -p ${{ secrets.GIT_TOKEN }}
|
docker login git.codeanddice.ru/ -u toutsu -p ${{ secrets.GIT_TOKEN }}
|
||||||
|
|
||||||
# Pull гарантирует, что мы получили нужную версию.
|
# Pull гарантирует, что мы получили нужную версию.
|
||||||
docker compose pull bot discord web
|
docker compose pull bot discord web
|
||||||
|
|
||||||
# Запускаем! Флаг -d оставит их работать в фоне.
|
# Запускаем! Флаг -d оставит их работать в фоне.
|
||||||
docker compose up -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
|
||||||
|
|||||||
Reference in New Issue
Block a user