From df527b30dab53c4fbe226a7727930194ce11ae04 Mon Sep 17 00:00:00 2001 From: WorldTeacher Date: Tue, 25 Nov 2025 09:09:44 +0100 Subject: [PATCH] feat: add pr test workflow --- .gitea/workflows/test_pr.yml | 52 ++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 .gitea/workflows/test_pr.yml diff --git a/.gitea/workflows/test_pr.yml b/.gitea/workflows/test_pr.yml new file mode 100644 index 0000000..979176d --- /dev/null +++ b/.gitea/workflows/test_pr.yml @@ -0,0 +1,52 @@ +name: PR tests + +on: + pull_request: + types: [opened, synchronize, edited, reopened] + +jobs: + build-and-smoke: + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + + - name: Build image + run: | + docker build -t semapform-api:test-pr . + + - name: Start container (background) + run: | + docker run -d --name semapform-test -p 8001:8001 semapform-api:test-pr sleep infinity + + - name: Verify python module imports + run: | + docker exec semapform-test python -c "import api_service; print('import ok')" + + - name: Start server in container and smoke test HTTP + env: + PORT: 8001 + run: | + # start uvicorn inside the container (background) + docker exec -d semapform-test uv run uvicorn api_service:app --host 0.0.0.0 --port $PORT + + # wait for up to 20s for the server to respond + SECONDS=0 + until curl -sS "http://localhost:${PORT}/" -o /dev/null; do + sleep 1 + SECONDS=$((SECONDS+1)) + if [ $SECONDS -ge 20 ]; then + echo "server failed to respond within timeout" >&2 + docker logs semapform-test || true + exit 1 + fi + done + + - name: Cleanup container + if: always() + run: | + docker rm -f semapform-test || true