Skip to content

SNOW-3192362: migrate all Docker builds from manylinux2014 to manylinux_2_28 - #2971

Draft
sfc-gh-fpawlowski wants to merge 11 commits into
mainfrom
SNOW-3192362-migrate-all-builds-to-manylinux-2-28
Draft

SNOW-3192362: migrate all Docker builds from manylinux2014 to manylinux_2_28#2971
sfc-gh-fpawlowski wants to merge 11 commits into
mainfrom
SNOW-3192362-migrate-all-builds-to-manylinux-2-28

Conversation

@sfc-gh-fpawlowski

Copy link
Copy Markdown
Contributor

Summary

Follow-up to #2970. Migrates every Docker-based build and test script from manylinux2014 to manylinux_2_28 uniformly, removing the 3.14t-only conditional introduced in the parent PR.

  • ci/set_base_image.sh: BASE_IMAGE_MANYLINUX2014 now resolves to manylinux_2_28_* on both Jenkins (Artifactory) and public paths
  • ci/build_docker.sh: drops 3.14t-only conditional; AUDITWHEEL_PLAT always manylinux_2_28_{arch}
  • ci/build_linux.sh: updates AUDITWHEEL_PLAT fallbacks
  • ci/test_docker.sh, test_lambda_docker.sh, test_fips.sh, test_fips_docker.sh: wheel globs updated to manylinux_2_28

Dependency

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.groovy already expects manylinux_2_28 wheels for cp311–cp314t. This PR makes CI test builds consistent with the release target.

🤖 Generated with Claude Code

sfc-gh-fpawlowski and others added 11 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 <[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
sfc-gh-fpawlowski force-pushed the SNOW-3192362-migrate-all-builds-to-manylinux-2-28 branch from 4be33ea to faee688 Compare July 22, 2026 14:50
Base automatically changed from SNOW-3192362-python-314t-ci-support to main August 18, 2026 07:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant