From 802bbc3158698f0d54b19a1c9dcd4e131f944cbb Mon Sep 17 00:00:00 2001 From: John McLear Date: Mon, 11 May 2026 15:47:43 +0100 Subject: [PATCH 1/2] ci(rate-limit): wait for etherpad to be ready before running the test MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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. --- .github/workflows/rate-limit.yml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/.github/workflows/rate-limit.yml b/.github/workflows/rate-limit.yml index 53f0448e63d..3c9dd9eeb8b 100644 --- a/.github/workflows/rate-limit.yml +++ b/.github/workflows/rate-limit.yml @@ -63,6 +63,25 @@ jobs: - 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: | + for i in $(seq 1 60); do + if curl -fsS -o /dev/null --max-time 2 http://127.0.0.1:8081/; then + echo "etherpad is ready behind nginx" + exit 0 + fi + sleep 2 + done + echo "ERROR: etherpad behind nginx did not become ready in time" + echo "--- etherpad-docker logs ---" + docker logs etherpad-docker || true + exit 1 - name: run rate limit test run: | From c38e5eae252f20c15effc3a1a86a37934a7d2a90 Mon Sep 17 00:00:00 2001 From: John McLear Date: Mon, 11 May 2026 15:53:07 +0100 Subject: [PATCH 2/2] ci(rate-limit): address Qodo review (nginx logs, tighter timeout) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 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. --- .github/workflows/rate-limit.yml | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/.github/workflows/rate-limit.yml b/.github/workflows/rate-limit.yml index 3c9dd9eeb8b..2363f98d64b 100644 --- a/.github/workflows/rate-limit.yml +++ b/.github/workflows/rate-limit.yml @@ -58,7 +58,7 @@ 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 @@ -71,14 +71,20 @@ jobs: # stops returning 5xx. name: Wait for etherpad behind nginx to be ready run: | - for i in $(seq 1 60); do - if curl -fsS -o /dev/null --max-time 2 http://127.0.0.1:8081/; then + # ~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 2 + 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