41d252e9d1
Match CI + runtime target exactly — both run Python 3.14, so the package metadata signals consumers that we don't test against 3.12/3.13. uv.lock is tracked so the test job's `uv venv` resolution is reproducible (currently the test job installs the editable package without consulting the lockfile; future work could wire `uv sync` in). Lockfile resolves 179 packages against Python 3.14.4. ci-requirements.md updated to drop the prior "permissive lower bound" caveat. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1.9 KiB
1.9 KiB
CI Requirements — FabledScribe
Spec lives in
docs/process.mdin the CI-Runner repo.
Runtime image
git.fabledsword.com/bvandeusen/ci-python:3.14
Used by all four jobs in .forgejo/workflows/ci.yml: typecheck (Vue/TS),
lint (ruff), test (pytest), build (docker buildx).
Image deps used
- python 3.14
- node 24 (used for
npm ci+vue-tscin the typecheck job, and as the frontend builder stage inside the productionDockerfile) - ruff (lint job runs
ruff check src/with zero install overhead) - docker CLI + buildx (build job pushes the production image to the Forgejo registry)
Per-job tool installs
Anything CI installs at job time that isn't in the image. Promotion candidates if more than one project needs them.
uv— installed inline in the test job (curl -LsSf https://astral.sh/uv/install.sh | sh). Temporary: belongs in the ci-python image so every consumer doesn't re-install on cold start. Tracked at CI-Runner.http-eceis--no-build-isolation-installed before the editable package install because http-ece doesn't declaresetuptoolsas a build dep and uv creates bare venvs without it. Not promotion-worthy (one project, one wheel).
Notes
- Production runtime image (
Dockerfile) also tracks Python 3.14 — the CI image and runtime image stay aligned by design so test results are representative. - Build wall time: dominated by
pytest(full async test suite). Cold ci-python pulls add ~30s; not a blocker. - Registry-backed BuildKit layer cache (
type=registry,ref=…:cache,mode=max) gives ~80% speedup on warm builds — see the build job comment. pyproject.tomlpinsrequires-python = ">=3.14"to match the CI + runtime target; lockfile (uv.lock) is committed and resolves against Python 3.14.