Skip to content

Support Python 3.10 through 3.15 #18

Description

@BenWestgate

Motivation

Broaden codex32 compatibility from the original >=3.12,<3.14 range to Python 3.10 through 3.15.

Python 3.10 remains in security-fix support until October 2026, and Bitcoin Core uses Python 3.10 as its minimum for scripts and tests. Since codex32 has no runtime dependencies, supporting the full 3.10–3.15 range is useful and should carry little ongoing cost.

During review of #36, the project explicitly chose to promise Python 3.15 prerelease coverage rather than treat it as a permanently allowed-to-fail smoke job. Until 3.15 final is available, CI uses actions/setup-python prerelease support.

References:

Compatibility work

  • Replace enum.StrEnum (added in 3.11) with a 3.10-compatible string enum pattern.
  • Replace the PEP 695 type _ProfileRules = ... statement (added in 3.12) with a 3.10-compatible type alias.
  • Update requires-python, Trove classifiers, README support text, and the mypy target.
  • Keep the expensive cross-platform lint/build/wheel matrix on 3.12/3.13 while running the full pytest suite on Ubuntu for the remaining supported interpreters (3.10, 3.11, 3.14, and 3.15).
  • Use allow-prereleases for 3.15 until the final interpreter is available.

Acceptance criteria

  • Package metadata advertises >=3.10,<3.16 and the 3.10–3.15 classifiers.
  • The package installs and the full pytest suite passes on Python 3.10 through 3.15; prerelease 3.15 is tested with prereleases enabled until final release.
  • CI does not silently ignore failures on a supported Python version.
  • Compatibility code remains shared across supported Python versions.
  • The existing lint, type, build, wheel, and differential checks remain covered without unnecessarily multiplying expensive jobs.

Implemented by #36, which is merged into the #7 integration branch and will reach reviewability-v1 with #7.

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

    area: ciContinuous integration and workflow configuration.area: packaging/releasePackaging, artifacts, compatibility, and release qualification.gate: adversarial reviewResolve, merge, or explicitly defer before the next full adversarial review.

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions