fix(ci): pin both cp314 and cp314t ABIs explicitly for Python 3.14 - #2346
Merged
Conversation
The previous fix pinned only the free-threaded variant (*_cp314t) and left the GIL variant relying on a bare `conda build --python 3.14`. That default is no longer reliable: conda-forge bumped the free-threaded python_abi to a higher build number (8_cp314t), so conda-build's solver now resolves a bare `--python 3.14` to cp314t rather than cp314. As a result both 3.14 build jobs produced cp314t artifacts, the GIL build disappeared, and the two upload jobs collided again on the identical cp314-cp314t wheel filename. Fix: remove 3.14 from every base `python` list and define both ABIs as explicit, pinned matrix entries (3.14.* *_cp314 for GIL and 3.14.* *_cp314t for free-threading) across all matrix blocks in both workflows. This makes the build/test/install steps request an explicit ABI instead of trusting whichever python_abi build number the solver happens to prefer. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
Deleted rendered PR docs from intelpython.github.com/dpctl, latest should be updated shortly. 🤞 |
Collaborator
antonwolfy
marked this pull request as ready for review
July 30, 2026 11:45
antonwolfy
requested review from
ndgrigorian and
vlad-perevezentsev
as code owners
July 30, 2026 11:45
ndgrigorian
approved these changes
Jul 30, 2026
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.
Summary
A follow-up fix to #2340. That PR stopped the original 3.14 upload collision by pinning the free-threaded variant (
*_cp314t), but left the GIL variant relying on a bareconda build --python 3.14. On master the collision has returned — this time both 3.14 jobs producecp314tartifacts.Failing run:
https://github.com/IntelPython/dpctl/actions/runs/30375407697/job/90332791079
— the job labeled
upload_linux (3.14)(the GIL variant) uploads acp314t(free-threaded) wheel.Root cause
The assumption behind #2340 was that a bare
conda build --python 3.14resolves to the GIL interpreter (*_cp314), so only the free-threaded entry needed an explicit spec. That default is no longer reliable.conda-forge has bumped the free-threaded
python_abito a higher build number than the GIL one (8_cp314t), and conda-build's solver — given an unconstrained--python 3.14— picks the highest build number. It now resolves tocp314t.The build logs confirm it. Job
build_linux (3.14)ranconda build --python 3.14(empty spec branch) but its host env resolved:producing a
cp314-cp314twheel and a conda package depending onpython_abi 3.14.* *_cp314t. So both 3.14 jobs became free-threaded, the GIL build vanished, and the two uploads collided on the identicalcp314twheel filename.(Python 3.13 is unaffected: its highest
python_abibuild is still the GIL8_cp313, so a bare--python 3.13correctly resolves tocp313.)Fix
Never rely on a bare
--python 3.14. Removed3.14from every basepythonlist and defined both ABIs as explicit, pinned matrix entries:With both entries carrying a non-empty spec, the build/test/install steps take the explicit-ABI branch (
conda build --python "$python_spec") instead of the bare---pythonfallback. The bare fallback now only serves 3.10–3.13, which have no free-threaded variant and thus no flip hazard. The artifact-naming and cache-key expressions already key offcontains(python_spec, 'cp314t'), so they remain correct.Note for future Python versions
This is the more robust pattern: whenever a Python version ships both GIL and free-threaded builds, pin both ABIs explicitly rather than trusting whichever
python_abibuild number the solver happens to prefer — that ordering can (and did) change under us.