fix(ci): add 30s grace period after services report healthy
CI / Build (push) Successful in 24s
CI / Update Infra Image Tags (push) Has been skipped
CI / Lint & Typecheck (push) Successful in 23s
CI / E2E Tests (push) Failing after 45s
CI / Build & Push Docker Images (push) Has been skipped
CI / Test (push) Successful in 26s
CI / Web E2E (Dev) (push) Has been cancelled
CI / Deploy PR to groombook-dev (push) Has been cancelled

Even after nginx is listening on port 80, there can be a brief window
where the first Playwright requests hit still-warming router logic or
upstream connection pool setup, causing inconsistent E2E failures.

Now the readiness step:
1. Polls until both http://localhost:8080 and http://localhost:3000/health
   return HTTP 200 (up to 60 attempts = 10 min max)
2. Once both are confirmed up, sleeps 30 additional seconds before
   proceeding to E2E tests — a settling period for nginx and the Node
   server to fully stabilize

Co-Authored-By: Paperclip <noreply@paperclip.ing>
This commit is contained in:
2026-05-21 21:19:22 +00:00
parent 990bc4400c
commit 15af4f0962
+12 -6
View File
@@ -82,16 +82,22 @@ jobs:
- name: Wait for services to be ready
run: |
echo "Waiting for services to become ready..."
for i in $(seq 1 30); do
if curl -sf http://localhost:8080 > /dev/null 2>&1 && curl -sf http://localhost:3000/health > /dev/null 2>&1; then
echo "Services ready after ${i} attempts"
for i in $(seq 1 60); do
# Poll both the web root (proves nginx + static app are up) and the
# API /health endpoint (proves the Node server is responding).
WEB_STATUS=$(curl -sf -o /dev/null -w "%{http_code}" http://localhost:8080 2>/dev/null || echo "000")
API_STATUS=$(curl -sf -o /dev/null -w "%{http_code}" http://localhost:3000/health 2>/dev/null || echo "000")
if [ "$WEB_STATUS" = "200" ] && [ "$API_STATUS" = "200" ]; then
echo "Both services healthy after ${i} attempts (web=$WEB_STATUS, api=$API_STATUS)"
echo "Allowing 30s grace period for nginx to fully initialize..."
sleep 30
exit 0
fi
echo "Attempt $i/30: services not ready yet, waiting 10s..."
echo "Attempt $i/60: web=$WEB_STATUS api=$API_STATUS — waiting 10s..."
sleep 10
done
echo "Warning: services may not be fully ready after 30 attempts (5m)"
timeout-minutes: 6
echo "Warning: services may not be fully ready after 60 attempts (10m)"
timeout-minutes: 12
- name: Run E2E tests
run: pnpm --filter @groombook/e2e test