Backend CI tests on Python 3.12 and 3.14, with the extras installed

A matrix of the declared floor and the newest release in place of 3.13
alone. The job now syncs --all-extras like `make test-backend`, since the
mail, MQTT and Influx tests fail on a fresh venv without the server extra.
Both packages list 3.14 among their classifiers.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WgBfkm4rCmtd1T4vHWjEPx
This commit is contained in:
2026-10-15 15:56:59 +02:00
co-authored by Claude Opus 5.5
parent e903b1ba1d
commit e6ce3feabb
4 changed files with 16 additions and 3 deletions
+13 -2
View File
@@ -27,18 +27,27 @@ env:
jobs:
test-backend:
runs-on: ubuntu-latest
# The floor `requires-python` declares and the newest release, so neither
# end of the supported range goes untested.
strategy:
fail-fast: false
matrix:
python-version: ["3.12", "3.14"]
env:
# Per run, so the `down -v` steps reach neither a dev stack nor a run
# still going. Unique names cannot be recycled, hence the always-on
# teardown below.
COMPOSE_PROJECT_NAME: fluksio-app-ci-backend-${{ github.run_id }}
# uv would otherwise take a managed interpreter it already has over the
# one set up below.
UV_PYTHON: ${{ matrix.python-version }}
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.13"
python-version: ${{ matrix.python-version }}
- name: Set up uv
uses: astral-sh/setup-uv@v7
with:
@@ -46,7 +55,9 @@ jobs:
pyproject.toml
backend/pyproject.toml
uv.lock
- run: uv sync
# The extras too, as `make test-backend` does: the mail, MQTT and Influx
# tests import what only the `server` extra installs.
- run: uv sync --all-extras
# Nothing to start: the suite names its own SQLite file in a temp
# directory (backend/tests/__init__.py), the mail paths are patched, and
# the flow engine falls back to in-memory state without a Redis host.
+1
View File
@@ -17,6 +17,7 @@ classifiers = [
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Programming Language :: Python :: 3.14",
"Topic :: Home Automation",
"Topic :: Scientific/Engineering",
"Topic :: System :: Distributed Computing",
+1 -1
View File
@@ -173,7 +173,7 @@ contract between the two frontends, and that target is the only thing checking i
## CI
`.gitea/workflows/` runs four jobs, each writing `.env` from `.env.example` first:
`test-backend.yml` (pytest, plus a check that both wheels build), `playwright.yml` (the e2e suite in
`test-backend.yml` (pytest on Python 3.12 and 3.14, plus a check that both wheels build), `playwright.yml` (the e2e suite in
two shards, one compose project each, the browser loading the SPA from the nginx `frontend`
service), `pre-commit.yml` (the hooks above, plus strict mypy, which they do not cover) and
`test-compose.yml` (a smoke test that the production images actually come up).
+1
View File
@@ -17,6 +17,7 @@ classifiers = [
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Programming Language :: Python :: 3.14",
"Topic :: Home Automation",
"Topic :: Scientific/Engineering",
"Topic :: System :: Distributed Computing",