Harden Docker CI smoke test readiness checks
All checks were successful
CI / Backend (Python) (push) Successful in 21s
CI / Frontend (TypeScript) (push) Successful in 13s
CI / Container (Docker) (push) Successful in 12s

This commit is contained in:
Elijah 2026-08-15 11:29:59 -07:00
parent e08c55d4c9
commit 5e19b78259

View file

@ -51,8 +51,6 @@ jobs:
uses: actions/setup-node@v4
with:
node-version: "22"
cache: "npm"
cache-dependency-path: frontend/package-lock.json
- name: Install dependencies
working-directory: frontend
@ -94,38 +92,67 @@ jobs:
run: |
set -Eeuo pipefail
docker rm --force paperjet-ci >/dev/null 2>&1 || true
docker run \
--detach \
--name paperjet-ci \
--publish 18080:80 \
--env PAPERJET_SECRET_KEY=ci-only-secret \
--env PAPERJET_COOKIE_SECURE=false \
--env PAPERJET_DEBUG=false \
paperjet:ci
cleanup() {
echo "----- PaperJet container logs -----"
docker logs paperjet-ci || true
docker rm --force paperjet-ci >/dev/null 2>&1 || true
}
trap cleanup EXIT
curl --fail --retry 30 --retry-delay 1 --retry-connrefused \
http://127.0.0.1:18080/
curl --fail --retry 30 --retry-delay 1 --retry-connrefused \
http://127.0.0.1:18080/api/v1/health
for attempt in $(seq 1 30); do
running=$(docker inspect --format '{{.State.Running}}' paperjet-ci 2>/dev/null || true)
if [ "$running" != "true" ]; then
echo "PaperJet container exited before becoming ready"
exit 1
fi
if docker exec paperjet-ci \
python -c "import urllib.request; response = urllib.request.urlopen('http://127.0.0.1/', timeout=2); assert response.status == 200" \
>/dev/null 2>&1 \
&& docker exec paperjet-ci \
python -c "import urllib.request; response = urllib.request.urlopen('http://127.0.0.1/api/v1/health', timeout=2); assert response.status == 200" \
>/dev/null 2>&1; then
break
fi
sleep 1
done
running=$(docker inspect --format '{{.State.Running}}' paperjet-ci)
if [ "$running" != "true" ]; then
echo "PaperJet container did not become ready within 30 seconds"
exit 1
fi
docker exec paperjet-ci \
python -c "import urllib.request; response = urllib.request.urlopen('http://127.0.0.1/', timeout=2); assert response.status == 200"
docker exec paperjet-ci \
python -c "import urllib.request; response = urllib.request.urlopen('http://127.0.0.1/api/v1/health', timeout=2); assert response.status == 200"
for attempt in $(seq 1 30); do
status=$(docker inspect --format '{{.State.Health.Status}}' paperjet-ci)
if [ "$status" = "healthy" ]; then
echo "PaperJet smoke test passed"
exit 0
fi
if [ "$status" = "unhealthy" ]; then
docker logs paperjet-ci
echo "PaperJet container healthcheck reported unhealthy"
exit 1
fi
sleep 1
done
docker logs paperjet-ci
echo "PaperJet container did not become healthy within 30 seconds"
exit 1
- name: Log into Local Registry