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:
@@ -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.
|
||||
|
||||
@@ -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
@@ -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).
|
||||
|
||||
@@ -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",
|
||||
|
||||
Reference in New Issue
Block a user