CI with GitHub Actions¶
How to run tests in CI. Docker is pre-installed on ubuntu-latest.
Test workflow¶
.github/workflows/test.yml
name: Test
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: astral-sh/setup-uv@v5
- run: uv sync --group test
- run: uv run pytest src/ -x --tb=short -q
That's it. testcontainers handles Postgres and Redis automatically — no services: block needed.
With E2E¶
.github/workflows/test.yml
name: Test
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: astral-sh/setup-uv@v5
- run: uv sync --group test
- run: uv run pytest src/ -x --tb=short -q
e2e:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: astral-sh/setup-uv@v5
- run: |
uv sync --group test
uv run playwright install chromium
- run: make e2e
Docs deployment¶
.github/workflows/docs.yml
name: Docs
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- uses: actions/checkout@v4
- uses: astral-sh/setup-uv@v5
- run: uv sync --group docs
- run: uv run mkdocs gh-deploy --force
Notes¶
- Docker is pre-installed on GitHub Actions
ubuntu-latestrunners - testcontainers starts containers with random ports — no port conflicts
- The
e2ejob needs Docker Compose for the full app stack - Separate
testande2ejobs so unit tests don't wait for E2E