Skip to content

fix(deps): declare the floors the extras require, and pin them before installing wheel-only - #259

Merged
lesnik512 merged 2 commits into
mainfrom
ci/floors-exact-pins
Sep 27, 2026
Merged

lesnik512 merged 2 commits into
mainfrom
ci/floors-exact-pins

Conversation

@lesnik512

Copy link
Copy Markdown
Member

This PR moves the floors job to the two-step install in CI6 of the standard (modern-python/.github#115), and fixes the floors that change exposes.

CI

Each target now runs:

  1. uv pip compile pyproject.toml <extras> --no-deps --resolution lowest-direct pins the declared floors, with builds allowed.
  2. uv pip install -r pyproject.toml <extras> --constraints floors.txt --no-build installs those pins wheel-only.
  3. uv pip install --no-deps . installs lite-bootstrap itself, which floor_smoke.py imports.

The matrix extras values become --extra flags. Targets are still per framework, as before.

Before, uv pip install --resolution lowest-direct ".[extras]" let the resolver raise any direct dependency until the set fit, and compile any sdist it needed. So several floors were never installed, and the (3.14, free) leg spent 16 minutes compiling an old grpcio.

Floors that could not be installed

I found these by comparing, for every extra on 3.10 to 3.14, the declared floors with what a wheel-only lowest-direct resolve picks for the direct dependencies. Each difference is a floor the old job silently raised.

Extra Added floor Why
fastapi-metrics fastapi>=0.133 prometheus-fastapi-instrumentator>=8.0.1 requires starlette>=1.0, which fastapi first allows at 0.133. The fastapi-all target never tested fastapi 0.112.2.
fastapi-metrics typing-extensions>=4.12 (<3.13), >=4.14.1 (3.13+) the lowest a wheel-only resolve accepts with fastapi 0.133
fastapi typing-extensions>=4.8 fastapi 0.112.2 requires it
fastmcp typing-extensions>=4.15 fastmcp 3.0 pulls py-key-value-aio, which requires it
otl typing-extensions>=4.12 on 3.14 the first grpcio releases with cp314 wheels require it (this caused the 16-minute build)
faststream typing-extensions>=4.14.1 on 3.14 pydantic 2.12, the 3.14 floor, requires it

The core typing-extensions>=4.6 is unchanged, so users installing without these extras keep the lower floor. After these changes, the comparison finds no raises for any extra on any interpreter.

Verified locally

  • Install: all 25 target × interpreter legs pass the wheel-only install with runner-accurate Linux wheels (x86_64-manylinux_2_39).
  • Smoke: the (3.12, fastapi) leg runs end to end and floor_smoke.py passes.
  • Repo checks: just lint-ci passes, and just test-ci passes 331 tests at 100% coverage.

Not covered

  • fastapi 0.112.2: no target installs the fastapi extra without fastapi-metrics, so this floor is still untested. A fastapi target without metrics would cover it.
  • The standard: CI6 shows the commands with --all-extras. lite-bootstrap's per-target extras are stricter, but the standard doesn't mention the variant yet.

@lesnik512
lesnik512 merged commit e13c5cb into main Sep 27, 2026
37 checks passed
@lesnik512
lesnik512 deleted the ci/floors-exact-pins branch September 27, 2026 15:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant