Skip to content

Commit 35f3830

Browse files
authored
docs(standard): pin the floors with builds allowed, then install them wheel-only (#115)
1 parent 67048ee commit 35f3830

1 file changed

Lines changed: 17 additions & 4 deletions

File tree

‎docs/standard.md‎

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -207,9 +207,16 @@ The `pytest` job MUST run `just install` then `just test-ci` on every matrix ent
207207

208208
### CI6 · `floors` job { #CI6 }
209209

210-
The `floors` job MUST resolve every direct dependency at its declared floor, wheel-only
211-
(`--no-build`, or `--only-binary` naming the dependency that needs it), on every matrix entry, then
212-
run the suite or an import. It MUST gate every pull request and MUST be skipped on the schedule,
210+
The `floors` job MUST install every direct dependency at its declared floor, wheel-only, on every
211+
matrix entry, then run the suite or an import. It MUST do so in two steps, pinning the floors with
212+
builds allowed and then installing the pins with builds disabled:
213+
214+
```yaml
215+
- run: uv pip compile pyproject.toml --all-extras --no-deps --resolution lowest-direct -o floors.txt
216+
- run: uv pip install -r pyproject.toml --all-extras --constraints floors.txt --no-build
217+
```
218+
219+
A repo that runs the suite adds `--group dev` to the install. It MUST gate every pull request and MUST be skipped on the schedule,
213220
with `if: github.event_name != 'schedule'` on the job (a called workflow sees its caller's `github`
214221
context).
215222

@@ -222,7 +229,13 @@ declared range ships untested. It has rotted there before
222229
([compose2pod#126](https://github.com/modern-python/compose2pod/issues/126),
223230
[faststream-outbox#190](https://github.com/modern-python/faststream-outbox/pull/190)).
224231
Wheel-only, because a floor reachable only by compiling an sdist is not one a user installing a
225-
wheel can reach, and without the flag the resolver builds one and reports success. Every matrix
232+
wheel can reach, and without the flag the resolver builds one and reports success. Two steps,
233+
because the flag alone does not fail on such a floor: it makes the wheel-less version ineligible,
234+
and `lowest-direct` climbs to the lowest version that has a wheel, so the job passes on a version
235+
the repo never declared
236+
([compose2pod#135](https://github.com/modern-python/compose2pod/pull/135)). Pinning with builds
237+
allowed fixes the declared floor first, and the wheel-only install then fails on it
238+
([compose2pod#139](https://github.com/modern-python/compose2pod/pull/139)). Every matrix
226239
entry, because wheel coverage is per interpreter. On the pull request, because that is where a floor
227240
breaks: a diff starts using an API newer than the declared floor. `lite-bootstrap` ran its floors
228241
only on the schedule and shipped such a break to PyPI

0 commit comments

Comments
 (0)