feat: add pr test workflow
This commit is contained in:
52
.gitea/workflows/test_pr.yml
Normal file
52
.gitea/workflows/test_pr.yml
Normal file
@@ -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
|
||||||
Reference in New Issue
Block a user