mirror of
https://github.com/ether/etherpad-lite.git
synced 2026-07-17 16:47:05 +00:00
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:
parent
8b14eb6eee
commit
3113c5096f
1 changed files with 26 additions and 1 deletions
27
.github/workflows/rate-limit.yml
vendored
27
.github/workflows/rate-limit.yml
vendored
|
|
@ -58,11 +58,36 @@ jobs:
|
||||||
name: run docker images
|
name: run docker images
|
||||||
run: |
|
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 --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
|
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
|
name: install dependencies and create symlink for ep_etherpad-lite
|
||||||
run: pnpm install --frozen-lockfile
|
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
|
name: run rate limit test
|
||||||
run: |
|
run: |
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue