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
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:
@@ -82,16 +82,22 @@ jobs:
|
|||||||
- name: Wait for services to be ready
|
- name: Wait for services to be ready
|
||||||
run: |
|
run: |
|
||||||
echo "Waiting for services to become ready..."
|
echo "Waiting for services to become ready..."
|
||||||
for i in $(seq 1 30); do
|
for i in $(seq 1 60); do
|
||||||
if curl -sf http://localhost:8080 > /dev/null 2>&1 && curl -sf http://localhost:3000/health > /dev/null 2>&1; then
|
# Poll both the web root (proves nginx + static app are up) and the
|
||||||
echo "Services ready after ${i} attempts"
|
# 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
|
exit 0
|
||||||
fi
|
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
|
sleep 10
|
||||||
done
|
done
|
||||||
echo "Warning: services may not be fully ready after 30 attempts (5m)"
|
echo "Warning: services may not be fully ready after 60 attempts (10m)"
|
||||||
timeout-minutes: 6
|
timeout-minutes: 12
|
||||||
|
|
||||||
- name: Run E2E tests
|
- name: Run E2E tests
|
||||||
run: pnpm --filter @groombook/e2e test
|
run: pnpm --filter @groombook/e2e test
|
||||||
|
|||||||
Reference in New Issue
Block a user