SNOW-3192362: migrate all Docker builds from manylinux2014 to manylinux_2_28 - #2971
Draft
sfc-gh-fpawlowski wants to merge 11 commits into
Draft
SNOW-3192362: migrate all Docker builds from manylinux2014 to manylinux_2_28#2971sfc-gh-fpawlowski wants to merge 11 commits into
sfc-gh-fpawlowski wants to merge 11 commits into
Conversation
…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 <[email protected]>
…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 <[email protected]>
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 <[email protected]>
…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 <[email protected]>
…_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 <[email protected]>
…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 <[email protected]>
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 <[email protected]>
…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 <[email protected]>
set_base_image.sh
- BASE_IMAGE_MANYLINUX2014 now resolves to manylinux_2_28_x86_64 (both Artifactory
and public paths). Requires IT to mirror quay.io/pypa/manylinux_2_28_* into
Artifactory before Jenkins picks up the change.
build_docker.sh
- Remove the 3.14t-only conditional; all builds now use manylinux_2_28 uniformly.
AUDITWHEEL_PLAT is always manylinux_2_28_{arch}.
build_linux.sh
- Update AUDITWHEEL_PLAT fallbacks from manylinux2014_* to manylinux_2_28_*.
test_docker.sh
- No logic change; inherits manylinux_2_28 automatically from set_base_image.sh.
test_lambda_docker.sh / test_fips.sh / test_fips_docker.sh
- Update manylinux2014 wheel globs to manylinux_2_28.
The release manifest (ReleaseClientConnectorPythonSelf.groovy) already lists
manylinux_2_28 for all cp311-cp314 wheels — this aligns the CI build path with
the release target. GHA cibuildwheel path was already updated in the parent commit.
Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
pyproject.toml: manylinux-x86_64-image manylinux2014 → manylinux_2_28. build_linux.sh: update auditwheel plat fallbacks to manylinux_2_28_*. The release manifest expects manylinux_2_28 wheels for all versions. NOTE: build-python-release.yml must be authored after this PR merges. Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
sfc-gh-fpawlowski
force-pushed
the
SNOW-3192362-migrate-all-builds-to-manylinux-2-28
branch
from
July 22, 2026 14:50
4be33ea to
faee688
Compare
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
Follow-up to #2970. Migrates every Docker-based build and test script from
manylinux2014tomanylinux_2_28uniformly, removing the3.14t-only conditional introduced in the parent PR.ci/set_base_image.sh:BASE_IMAGE_MANYLINUX2014now resolves tomanylinux_2_28_*on both Jenkins (Artifactory) and public pathsci/build_docker.sh: drops 3.14t-only conditional;AUDITWHEEL_PLATalwaysmanylinux_2_28_{arch}ci/build_linux.sh: updatesAUDITWHEEL_PLATfallbacksci/test_docker.sh,test_lambda_docker.sh,test_fips.sh,test_fips_docker.sh: wheel globs updated tomanylinux_2_28Dependency
Blocked on Artifactory mirror — requires IT to mirror
quay.io/pypa/manylinux_2_28_{x86_64,aarch64}into the internal Artifactory registry before Jenkins builds pick this up. See Jira ticket filed under SNOW-3192362.Why this aligns with the release
ReleaseClientConnectorPythonSelf.groovyalready expectsmanylinux_2_28wheels for cp311–cp314t. This PR makes CI test builds consistent with the release target.🤖 Generated with Claude Code