ci(rate-limit): wait for etherpad readiness before running test (#7726)

* ci(rate-limit): wait for etherpad to be ready before running the test

The workflow starts the etherpad container in the background, then runs
`pnpm install`, then runs the test. On a warm pnpm-store the install can
finish before etherpad is listening on 9001, at which point nginx returns
502 for the test request and the run fails. Recent README-only commits
on develop hit this race on three consecutive runs.

Poll the nginx-proxied endpoint (port 8081 — also what the test uses)
until it stops returning 5xx, with a 2-minute timeout and `docker logs
etherpad-docker` on giving up to make diagnosis straightforward.

* ci(rate-limit): address Qodo review (nginx logs, tighter timeout)

- Name the nginx container so its logs can be captured when the readiness
  poll times out — previously nginx was started anonymously and a
  502 caused by nginx itself (rather than etherpad) would have been
  hard to diagnose from the workflow log alone.
- On timeout also dump `docker ps -a` for container-state visibility.
- Tighten the readiness wait: 30 iterations × (1s curl timeout + 1s
  sleep) gives ~60s budget instead of ~240s, which is still well above
  observed cold-start time and keeps the failure-fast contract.
This commit is contained in:
John McLear 2026-05-11 16:01:29 +01:00 committed by GitHub
parent 8b14eb6eee
commit 3113c5096f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -58,11 +58,36 @@ jobs:
name: run docker images
run: |
docker run --name etherpad-docker -p 9000:9001 --rm --network ep_net --ip 172.23.42.2 -e 'TRUST_PROXY=true' epl-debian-slim &
docker run -p 8081:80 --rm --network ep_net --ip 172.23.42.1 -d nginx-latest
docker run --name nginx-docker -p 8081:80 --rm --network ep_net --ip 172.23.42.1 -d nginx-latest
docker run --rm --network ep_net --ip 172.23.42.3 --name anotherip -dt anotherip
-
name: install dependencies and create symlink for ep_etherpad-lite
run: pnpm install --frozen-lockfile
-
# The etherpad container is started in the background above; without
# this wait the test step can hit nginx before etherpad is listening
# and nginx returns 502, failing the run on a cold cache. Poll the
# nginx-proxied endpoint (which is also what the test hits) until it
# stops returning 5xx.
name: Wait for etherpad behind nginx to be ready
run: |
# ~60s budget: 30 iterations × (1s curl timeout + 1s sleep).
# Cold-start of the etherpad container is well under that.
for i in $(seq 1 30); do
if curl -fsS -o /dev/null --max-time 1 http://127.0.0.1:8081/; then
echo "etherpad is ready behind nginx"
exit 0
fi
sleep 1
done
echo "ERROR: etherpad behind nginx did not become ready in time"
echo "--- docker ps ---"
docker ps -a || true
echo "--- nginx-docker logs ---"
docker logs nginx-docker || true
echo "--- etherpad-docker logs ---"
docker logs etherpad-docker || true
exit 1
-
name: run rate limit test
run: |