Skip to content

SNOW-3192362: add Python 3.14t (free-threaded) to build/test defaults - #2970

Merged
sfc-gh-fpawlowski merged 14 commits into
mainfrom
SNOW-3192362-python-314t-ci-support
Aug 18, 2026
Merged

sfc-gh-fpawlowski merged 14 commits into
mainfrom
SNOW-3192362-python-314t-ci-support

Conversation

@sfc-gh-fpawlowski

Copy link
Copy Markdown
Contributor

Summary

  • Appends 3.14t to the PYTHON_VERSIONS default string in ci/build_linux.sh and ci/test_linux.sh
  • The matrix generator (PY314t), tox envlist, pyproject.toml (enable = ["cpython-freethreading"]), and cibuildwheel config were already updated in a prior commit (Enable free-threaded (no-GIL) CPython support for the Arrow iterator #2881)
  • This change ensures the Jenkins build/test Docker scripts include the free-threaded wheel automatically when no explicit version list is passed

Test plan

  • Verify build_docker.sh produces *cp314t-cp314t-manylinux*.whl artifacts
  • Check S3: aws s3 ls s3://sfc-eng-jenkins/repository/python_connector/linux/main/<commit>/

🤖 Generated with Claude Code

sfc-gh-fpawlowski and others added 5 commits July 22, 2026 07:25
…ERSIONS defaults

The matrix generator, tox envlist, cibuildwheel config, and pyproject.toml
already opted in to free-threaded builds (cp314t) in a prior commit.  The
build and test Linux shell scripts still defaulted to 3.10-3.14; append 3.14t
so that build_docker.sh / test_docker.sh include the free-threaded wheel
automatically when no explicit version list is passed.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…les matrix

Gap-fill: matches the pattern used when 3.14 was added (Snow-2684150).
- ci/build_darwin.sh: append 3.14t to PYTHON_VERSIONS default
- ci/test_darwin.sh: append 3.14t to PYTHON_VERSIONS default
- .github/workflows/create_req_files.yml: add "3.14t" to python-version matrix

Intentionally skipped: build_windows.bat (no Windows free-threaded wheel yet),
Lambda Dockerfiles (version-pinned), FIPS/RockyLinux scripts (Python 3.9-pinned).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
The [testenv:py{...}-coverage] env is what Jenkins uses for coverage
aggregation. It listed 310–314 but omitted 314t, which is already in
the top-level `coverage` env's `depends` list.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…wheels

pyproject.toml
- Switch cibuildwheel image from manylinux2014 to manylinux_2_28; cp314t is
  not available in manylinux2014. Unblocks GHA cp314t wheel builds immediately
  (GHA pulls from quay.io directly, no Artifactory dependency).
- Aligns with the release manifest which already expects manylinux_2_28 wheels.

ci/set_base_image.sh
- Pre-wire BASE_IMAGE_MANYLINUX2_28 / BASE_IMAGE_MANYLINUX2_28AARCH64 for both
  Jenkins (Artifactory path) and public registry. No-op on Jenkins until IT
  mirrors quay.io/pypa/manylinux_2_28_* into Artifactory.

ci/build_docker.sh
- Select manylinux_2_28 image and auditwheel plat when building 3.14t;
  keep manylinux2014 for all other versions (zero impact on existing jobs).
- Pass AUDITWHEEL_PLAT into the container via -e.

ci/build_linux.sh
- Use AUDITWHEEL_PLAT env var for auditwheel repair target; fall back to
  manylinux2014_* if unset (preserves existing Jenkins behaviour).

ci/test_linux.sh
- Widen wheel glob from *manylinux2014* to *manylinux* so it matches both
  manylinux2014 and manylinux_2_28 tagged wheels without further changes.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@codecov-commenter

codecov-commenter commented Jul 22, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 64.99%. Comparing base (cb9b9d9) to head (ee49464).
✅ All tests successful. No failed tests found.

Additional details and impacted files
@@            Coverage Diff             @@
##             main    #2970      +/-   ##
==========================================
- Coverage   65.07%   64.99%   -0.08%     
==========================================
  Files         123      123              
  Lines       17408    17408              
  Branches     2387     2387              
==========================================
- Hits        11328    11315      -13     
- Misses       5639     5653      +14     
+ Partials      441      440       -1     

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

sfc-gh-fpawlowski and others added 6 commits July 22, 2026 14:03
…_path for free-threaded

set_base_image.sh
- Add BASE_IMAGE_MANYLINUX2_28_PUBLIC / _AARCH64 that always resolve to quay.io/pypa
  unconditionally (not inside the JENKINS_HOME branch). Jenkins Linux agents can reach
  quay.io directly, so cp314t builds do not need an Artifactory mirror.

build_docker.sh
- Switch the 3.14t arm from BASE_IMAGE_MANYLINUX2_28 (Artifactory-backed) to
  BASE_IMAGE_MANYLINUX2_28_PUBLIC (always quay.io) so the build works on Jenkins
  without waiting for IT to mirror the image.

build_linux.sh
- Add a special-case path for free-threaded versions (*t suffix): the manylinux_2_28
  image stores the interpreter under cp{base}-cp{base}t (e.g. cp314-cp314t), not
  cp{ver}-cp{ver} as cpython_path would compute. Without this fix, the build fails
  with "Python not found" even when the image is correct.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…ainer

Without this, calling build_docker.sh with no args (manylinux2014 image,
default PYTHON_VERSIONS including 3.14t) would fail with set -e when the
loop tries to execute a non-existent interpreter. Now it warns and continues,
so standard 3.10-3.14 builds are unaffected when the manylinux_2_28 image
is not used.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Verified: quay.io/pypa/manylinux2014_aarch64 (and by parity x86_64) ships
cp314t at /opt/python/cp314-cp314t/. No image upgrade needed for 3.14t.

- set_base_image.sh: remove manylinux_2_28 and _PUBLIC variables (those
  belong in the separate full-migration PR, not here)
- build_docker.sh: remove 3.14t conditional and AUDITWHEEL_PLAT env var;
  unconditional manylinux2014 selection is correct for all versions
- build_linux.sh: shorten warning message (no longer implies a different
  image is required)

The manylinux_2_28 migration (aligning with release manifest) stays in
the follow-up PR SNOW-3192362-migrate-all-builds-to-manylinux-2-28.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…l on missing interpreter

pyproject.toml: revert manylinux_2_28 back to manylinux2014. The full image
migration (all builds) belongs in SNOW-3192362-migrate-all-builds-to-manylinux-2-28
so that this PR is purely additive — 3.14t support on the existing image.

build_linux.sh: remove graceful skip. A missing interpreter should fail loudly
(set -e) at build time, not skip silently and produce a missing wheel in S3 that
causes a confusing downstream failure. Consistent with how every other Python
version in this script is handled.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
sys.version_info returns (3, 14) for both Python 3.14 and 3.14t, so the
previous naming logic produced requirements_314.txt for both — triggering a
"cp: will not overwrite" error observed in the PR #2970 Jenkins build.

Use the loop's PYTHON_VERSION variable (which has the 't' suffix) to write
requirements_314t.txt for free-threaded builds.

Observed in: #2970

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…ker.sh

Mirrors the pattern from SNOW-3289793 (commit 225b237) which added the
same timestamped log() convention to build_darwin.sh.

build_docker.sh: log host info, selected base image, versions arg
build_linux.sh:  log available interpreters, per-version interpreter path
                 and existence check, pip/build progress, auditwheel plat,
                 repaired wheel listing, and final summary

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@sfc-gh-fpawlowski
sfc-gh-fpawlowski marked this pull request as ready for review July 22, 2026 15:47
@sfc-gh-fpawlowski
sfc-gh-fpawlowski requested a review from a team as a code owner July 22, 2026 15:47
build_darwin.sh and build_linux.sh already build the free-threaded
cp314t interpreter (added to their PYTHON_VERSIONS defaults), but
build_windows.bat's python_versions list stopped at 3.14. This left
Windows without a 3.14t wheel, even though the release manifest
(ReleaseClientConnectorPythonSelf.groovy) expects
cp314t-cp314t-win_amd64.whl to be produced.

Add "3.14t" to python_versions so the existing build_wheel_file loop
picks it up via the py launcher (py -3.14t), matching how the loop
already handles every other Python version.

@snowflake-security-bot snowflake-security-bot Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Snowflake Security Review

Security grade: A — Passed ✅

This PR was classified as LOW risk by the automated pre-screen.

@snowflake-security-bot snowflake-security-bot Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Snowflake Security Review

Security grade: A — Passed ✅

This PR was classified as LOW risk by the automated pre-screen.

@snowflake-security-bot snowflake-security-bot Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Snowflake Security Review

Security grade: A — Passed ✅

This PR was classified as LOW risk by the automated pre-screen.

@snowflake-security-bot snowflake-security-bot Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Snowflake Security Review

Security grade: A — Passed ✅

This PR was classified as LOW risk by the automated pre-screen.

@sfc-gh-fpawlowski
sfc-gh-fpawlowski enabled auto-merge (squash) August 18, 2026 07:12
@sfc-gh-fpawlowski
sfc-gh-fpawlowski merged commit 0adeb83 into main Aug 18, 2026
51 of 56 checks passed
@sfc-gh-fpawlowski
sfc-gh-fpawlowski deleted the SNOW-3192362-python-314t-ci-support branch August 18, 2026 07:14
@github-actions github-actions Bot locked and limited conversation to collaborators Aug 18, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants