Add Python 3.14 to the CI matrix - #98
Merged
Merged
Conversation
Windows builds 3.10, 3.13 and 3.14; macOS and Linux build 3.13 and 3.14. The per-platform split is not cosmetic. `[ci].python_versions` fans out Windows only, where every interpreter comes from actions/setup-python and costs nothing but runner minutes. macOS and Linux need their own lists because 3.10 exists for the desktop products' Windows wheel and nothing else wants it, and because every Linux entry requires a published `conan-gcc13-py<version>` container -- those exist for 3.13 and 3.14 only, with no image for 3.10 through 3.12 on any registry. Dependencies move to the first releases carrying 3.14 binaries: xmscore 7.0.13 and xmsgrid 9.1.1. Both pins are exact and `python_version` propagates to every `xms_dependencies` entry in `configure()`, while the generated CI passes no `--build-missing` -- so a 3.14 configuration here cannot resolve until both dependencies have published 3.14 binaries. That ordering constraint is why the rollout walks the tree rather than landing everywhere at once. No `[coverage]` section here, so no coverage pin is needed. Where one exists it has to be pinned explicitly, because coverage otherwise follows the highest Linux entry and a matrix change would silently move the coverage gate too. The regeneration also picks up xmsconan 2.23.0, floor bumped from 2.18.0: - `--wheel-dir` is now gated on `matrix.build_type == 'Release'`, matching how repair, artifact upload and deploy in this workflow were already gated. 2.22.0 made the flag a request build.py must satisfy, exiting 1 when no complete set of wheels comes out, and `[matrix].pybind_build_types` defaults to Release only -- so without this every Debug leg fails. xmsgrid and xmsmesher both went red on it (Aquaveo/xmsconan#110). - Third-party actions pinned to commit SHAs, tag kept in a trailing comment. These steps run with the workflow's secrets in their environment, and a tag is a movable ref in someone else's repository. - `actions/setup-python` v2 to v5 on the flake job. - `flake8-tidy-imports` added. It registers `banned-modules`, which the generated `.flake8` sets; flake8 ignores config options no installed plugin claims, so the osgeo ban was silently enforcing nothing while the job reported green. No source changes.
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.
Third repo in the 3.14 rollout, after xmscore 7.0.13 and xmsgrid 9.1.1. No source changes.
Matrix
15 jobs, up from 11.
The per-platform split isn't cosmetic.
[ci].python_versionsfans out Windows only, where every interpreter comes fromactions/setup-pythonand costs nothing but runner minutes. macOS and Linux need their own lists because 3.10 exists for the desktop products' Windows wheel and nothing else wants it, and because every Linux entry requires a publishedconan-gcc13-py<version>container — those exist for 3.13 and 3.14 only, with no image for 3.10–3.12 on any registry.Dependency bumps
xmscore7.0.12 → 7.0.13,xmsgrid9.1.0 → 9.1.1 — the first releases of each carrying 3.14 binaries.This is a hard ordering constraint, not housekeeping: the pins are exact,
python_versionpropagates to everyxms_dependenciesentry inconfigure(), and the generated CI passes no--build-missing. A 3.14 configuration here cannot resolve until both dependencies have published 3.14 binaries. That's why the rollout walks the dependency tree one repo at a time.No
[coverage]section in this repo, so no coverage pin is needed. (Where one exists it must be pinned explicitly — coverage otherwise follows the highest Linux entry, so a matrix change would silently move the coverage gate too. xmscore needed that; this doesn't.)Also in the regeneration (xmsconan 2.18.0 → 2.23.0)
--wheel-dirgated on Release. 2.22.0 made the flag a requestbuild.pymust satisfy, exiting 1 when no complete set of wheels comes out, while the workflow passed it on every build type — and[matrix].pybind_build_typesdefaults to Release only. Without this, every Debug leg fails; xmsgrid and xmsmesher both went red on it (2.22.x breaks every Debug CI leg: --wheel-dir is now fatal, but the template still passes it where no pybind configuration exists xmsconan#110, Ask for a wheel only on the GitHub leg that publishes one xmsconan#111).actions/setup-pythonv2 → v5 on the flake job.flake8-tidy-importsadded. It registersbanned-modules, which the generated.flake8sets. flake8 ignores config options no installed plugin claims, so the osgeo ban was silently enforcing nothing while the job reported green.Two follow-ups
GCC-13 (Debug, Linux)/GCC-13 (Release, Linux)names no longer exist, since a fanned-out platform carries the version in its job name.mastermerged in before it can go green, for the same reason.Tag after merge: 7.0.12.