fix(deps): declare the floors the extras require, and pin them before installing wheel-only - #259
Merged
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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:
uv pip compile pyproject.toml <extras> --no-deps --resolution lowest-directpins the declared floors, with builds allowed.uv pip install -r pyproject.toml <extras> --constraints floors.txt --no-buildinstalls those pins wheel-only.uv pip install --no-deps .installs lite-bootstrap itself, whichfloor_smoke.pyimports.The matrix
extrasvalues become--extraflags. 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.
fastapi-metricsfastapi>=0.133prometheus-fastapi-instrumentator>=8.0.1requiresstarlette>=1.0, which fastapi first allows at 0.133. The fastapi-all target never tested fastapi 0.112.2.fastapi-metricstyping-extensions>=4.12(<3.13),>=4.14.1(3.13+)fastapityping-extensions>=4.8fastmcptyping-extensions>=4.15otltyping-extensions>=4.12on 3.14faststreamtyping-extensions>=4.14.1on 3.14The core
typing-extensions>=4.6is 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
x86_64-manylinux_2_39).floor_smoke.pypasses.just lint-cipasses, andjust test-cipasses 331 tests at 100% coverage.Not covered
fastapiextra withoutfastapi-metrics, so this floor is still untested. Afastapitarget without metrics would cover it.--all-extras. lite-bootstrap's per-target extras are stricter, but the standard doesn't mention the variant yet.