Skip to content

Add a free-threaded 3.15t entry to the test matrix #223

Closed

Description

@jaraco

The test matrix in .github/workflows/main.yml covers 3.14t and 3.15, but not 3.15t:

        python:
        - "3.10"
        - "3.14"
        - "3.14t"
        ...
        include:
        ...
        - python: "3.15"
          platform: ubuntu-latest

Now that 3.15.0 has shipped, free-threaded 3.15 is worth its own entry. It is not simply "3.14t but newer": 3.15 is the first release with PEP 803's abi3t stable ABI, so code paths that branch on Py_GIL_DISABLED together with a 3.15-or-newer check cannot be reached by either existing job. 3.14t is free-threaded but too old; 3.15 is new enough but has the GIL.

This showed up concretely downstream in setuptools. pypa/setuptools#5193 adds abi3t wheel tagging and reported green CI while carrying a latent failure: the vendored packaging at the time could not emit an abi3t tag at all, so the PR's supported-tag assertion could never have held on a free-threaded 3.15. Nothing caught it, because nothing ran there. (That has since been fixed by pypa/setuptools#5361, but only the missing dependency — not the missing coverage.)

A 3.15t entry alongside the existing 3.15 one would close the gap for every skeleton-based project at once, rather than each repo adding it separately.

One caution from the downstream experience: free-threaded entries here have a history of dependency trouble. setuptools still carries a commented-out 3.13t entry noting "cffi (required by PyNaCl) doesn't support free-threaded CPython 3.13t", and pyobjc had issues on 3.15 (ronaldoussoren/pyobjc#671) that made 3.15 coverage Linux-only in practice. So it may be worth confirming the job can actually be green before adding it — an added-but-red matrix entry is worse than a missing one, since it makes every PR's CI unreadable.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions