Files
semapform_api/.gitea/workflows/test_pr.yml
WorldTeacher 0e7c45182a
Some checks failed
PR tests / build-and-smoke (pull_request) Failing after 54s
chore: add uv, generate requirements.txt for tests
2025-11-25 09:12:51 +01:00

66 lines
1.9 KiB
YAML

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: Install uv
uses: astral-sh/setup-uv@v5
- name: Set up Python
run: uv python install
with:
python-version-file: "pyproject.toml"
- name: Install the project dependencies
run: |
uv sync --all-groups
uv add pip
uv export --format requirements.txt -o requirements.txt
# uv run python -m pip install --upgrade pip
# uv run python -m pip install -r requirements.txt
- 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