Add Python 3.14 to the CI matrix - #201
Conversation
Same shape as xmscore: Windows gains 3.14 alongside 3.10 and 3.13, while macOS and Linux gain it alongside 3.13 through the per-platform lists. The lists stay separate because 3.10 is Windows-only for the desktop products, and because each Linux entry needs a published conan-gcc13-py<version> container, which exists for 3.13 and 3.14 only. The xmscore dependency moves 7.0.12 -> 7.0.13 because it has to. Conan propagates python_version to xms_dependencies, and the generated CI runs build.py without --build-missing, so a 3.14 pybind leg needs a prebuilt xmscore binary at that ABI. 7.0.12 predates 3.14 support and has none; 7.0.13 is the first xmscore release that carries it. Workflows regenerated with xmsconan 2.21.0, which also bumps the pin from 2.18.0. The mac and linux release assets and wheel artifacts pick up a -py<version> suffix, since those platforms now produce two ABIs each and the old names would collide between legs. No coverage pin here: xmsgrid does not set [ci].coverage, so there is no Coverage workflow whose Python version could drift.
|
CI green — all 15 legs, including every 3.14 leg on all three platforms: That covers the one thing this PR could still teach us: xmsgrid's own pybind bindings compile and pass their tests against the Python 3.14 C API on MSVC, Clang and GCC. It also confirms the dependency bump works end to end — the 3.14 legs resolved Ready for review. The warning annotations on the run are the pre-existing Node 20 deprecation ones, unrelated to this change and tracked in Aquaveo/xmsconan#102. |
|
Correction to my comment above: when I said "CI green" I had only looked at the What failedOne job — Not a 3.14 problem: the four failing configurations were all CauseThe generated workflow passes Re-run: all 15 jobs green, no changes. Filed the underlying asymmetry as Aquaveo/xmsconan#104 — adding Worth noting the exposure grew with this change: the 3.14 fan-out roughly doubled the job count per repo, so it roughly doubled the number of conancenter calls per run. This surfacing on the first repo after the fan-out is probably not a coincidence. Still ready for review — the diff is unchanged. |
Second repo in the 3.14 rollout, following xmscore. Same shape as xmscore#131, which is merged and released as 7.0.13.
The change
build.tomlonly — everything else in the diff is regenerated byxmsconan_ciat 2.21.0:Why the xmscore bump is required, not incidental
Conan propagates
python_versiontoxms_dependencies, and the generated CI runsbuild.pywithout--build-missing. So a 3.14 pybind leg here needs a prebuilt xmscore binary at that ABI or Conan fails resolution outright. 7.0.12 predates 3.14 support and has none.xmscore 7.0.13 now carries them — verified on the remote rather than assumed:
Three lists, not one
Windows carries 3.10 for the desktop products' wheel and nothing else needs it. Every Linux entry needs a published
conan-gcc13-py<version>container, and those exist for 3.13 and 3.14 only — there is no py3.10/3.11/3.12 image on either registry. So Linux can't simply trackpython_versions.What to expect on merge
-py<version>:linux-GCC13-Release-py3.13.tar.gzrather thanlinux-GCC13-Release.tar.gz. Those platforms produce two ABIs each now and the old names would have one leg overwrite the other. Windows already worked this way. Anything fetching these by exact name needs updating.linuxjob's status-check name gains the ABI.masterhas norequired_status_checksconfigured, so nothing is blocked by the rename — I checked before pushing.cp3XYtags, so they coexist. Wheel upload stays gated onrefs/tags/plusbuild_type == 'Release', so this PR itself publishes nothing.CI time and Conan storage roughly double, as they did for xmscore.
No coverage pin needed
xmsgrid doesn't set
[ci].coverage, so there's noCoverage.yamlwhose Python version could drift. xmscore needed[coverage].python_version = "3.13"because coverage there follows the highest Linux entry and would otherwise have moved to 3.14 as a side effect.Risk
Low, relative to xmscore. That PR was the first compile of anything in the suite against the 3.14 C API, and it passed on MSVC, Clang and GCC — so the pybind layer is proven. xmsgrid has its own bindings, so this run is still the first look at its glue against 3.14, but the shared foundation is known good.
Post-merge plan, once green: tag 9.1.1 (patch — the change is CI plus a dependency bump, no library source change), then the manual VS2019 pass and its cp310 wheel to
aquaveo/stable.