diff --git a/.forgejo/workflows/ci.yml b/.forgejo/workflows/ci.yml index 994bcdc..50d88e4 100644 --- a/.forgejo/workflows/ci.yml +++ b/.forgejo/workflows/ci.yml @@ -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