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: |
|
||||
# Авторизуемся локальным докером в нашей 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
|
||||
|
||||
Reference in New Issue
Block a user