3f1bcc3360
Migrate to the FabledRulebook CI-Runner contract: - .forgejo/workflows/ci.yml: all four jobs (typecheck/lint/test/build) now schedule on the `python-ci` runner label and run inside container.image: git.fabledsword.com/bvandeusen/ci-python:3.14 (Python 3.14 + Node 24 + ruff + uv + Docker CLI). Dropped the inline uv install in the test job — uv is now baked into the image. - Dockerfile: production runtime bumped to python:3.14-slim so test results stay representative against what we ship. - ci-requirements.md: new file at repo root declaring image deps and per-job installs (per FabledRulebook ci-runners.md). - infra/Dockerfile.runner-base: deleted. The in-repo runner base (Ubuntu 24.04 + Python 3.12 + Node 22) is superseded by the shared ci-python image. The runner-host deployment files (runner-compose.yml + act-runner-config.yml) stay as deployment-shape documentation; source of truth is the deployed config. - docs/development.md: CI/CD + Runner sections refreshed. 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.tomlkeepsrequires-python = ">=3.12"permissive so the package can still be installed against older interpreters by external consumers, but the CI/runtime target is 3.14.