Skip to content

ci: run the floor as well as the latest Python - #20

Merged
dani1005 merged 2 commits into
v1from
ci/python-version-matrix
Sep 4, 2026
Merged

ci: run the floor as well as the latest Python#20
dani1005 merged 2 commits into
v1from
ci/python-version-matrix

Conversation

@dani1005

@dani1005 dani1005 commented Sep 4, 2026

Copy link
Copy Markdown
Collaborator

Runs the version python_requires promises, not just the newest one.

Why

CI has only ever run a single interpreter — 3.14 — while the package declared a different floor. That is how 1.0.0 and both 1.1.0 release candidates shipped a Requires-Python nobody had executed. In fact they shipped none at all: PYTHON_REQUIRES was defined in the factory's setup.mustache and never passed to setup(), so PyPI has no Requires-Python for any release of this package to date. pip therefore installs it on any interpreter and the user meets a traceback instead of a clear message.

The companion factory MR fixes that and sets the floor to 3.12. This makes the floor real by running it.

Change

python-version: "3.14" → a ["3.12", "3.14"] matrix, fail-fast: false so a break on one version still reports the other. Nothing else moves.

Verified locally, before this lands

Built from the 1.1.0 generated tree with the fixed template:

  • the wheel's METADATA now carries Requires-Python: >=3.12 and pydantic<3,>=2;
  • pip install on Python 3.10 refuses with requires a different Python: 3.10.17 not in '>=3.12' — which is the entire point of the fix;
  • installing on 3.14 and running this workflow's own import/config smoke plus the 50 wrapper tests in tests/ passes.

Keep the matrix in step with templates/setup.mustache in the SDK factory if the floor moves again.

CI has only ever run one interpreter — 3.14 — while the package declared a
different one. That is how 1.0.0 and both 1.1.0 release candidates shipped a
`python_requires` nobody had ever executed (in fact they shipped none at all:
the constant was defined in the template and never passed to setup()).

1.1.0 fixes the metadata and sets the floor to 3.12, so run 3.12 alongside
3.14 and let the promise be tested. fail-fast is off so a break on one
version still reports the other. Keep the matrix in step with
templates/setup.mustache in the SDK factory.
Turning the job into a matrix renamed it: `build` became `build (3.12)` and
`build (3.14)`. The v1 ruleset requires a check literally named `build`, so
that check stopped existing and every PR blocked waiting for a report that
could never arrive — this PR included.

Rename the matrix job to `test` and add a one-step `build` job that gates on
its aggregate result. Branch protection keeps pointing at one name, and the
matrix can grow or shrink without anyone editing the ruleset. `if: always()`
so the gate reports a failure rather than being skipped when a leg fails.
@dani1005
dani1005 merged commit 8cec201 into v1 Sep 4, 2026
3 checks passed
@dani1005
dani1005 deleted the ci/python-version-matrix branch September 4, 2026 19:19
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