- CI/CD (`.github/workflows/`, uv + `astral-sh/setup-uv@v9.0.0` — pin a full version; setup-uv has no floating `v8`/`v9` major tag): `ci.yml` (on push-main / PR / `workflow_call`) — `lint` + `test` (Python matrix 3.12/3.13/3.14, `pytest --cov` → 100% gate) + `test-floor` (`uv sync --resolution lowest-direct` then **`uv run --no-sync pytest`** — `uv run` alone re-syncs to the lockfile; floor = FastAPI 0.115 / pydantic 2.9, **no** coverage gate since the `iter_route_contexts` branch can't run there). Coverage is reported to **Coveralls** (`coverallsapp/github-action@v2`, `file: coverage.lcov` from `coverage lcov`) from the **3.12 matrix leg only** (gated `if: matrix.python-version == '3.12'` — identical 100% across versions; never from `test-floor`); uses the built-in `github.token` (public repo, no secret) and the Coveralls repo is auto-created on first post, so no manual enablement. Badge in both READMEs. `publish.yml` (on release published) reuses `ci.yml` then publishes via **PyPI Trusted Publishing / OIDC** (`environment: pypi`, `id-token: write`, `uv build` + smoke `scripts/smoke_test.py` on wheel+sdist + `uv publish`, no token) — needs a one-time PyPI pending-publisher config. `dependabot.yml` (monthly): the `uv` ecosystem updates **dev/docs groups only** (`allow: dependency-type: "development"` + explicit `ignore` of `fastapi`/`pydantic` as a guard, grouped into one PR); a separate `github-actions` ecosystem keeps the workflow action pins current.
0 commit comments