This is an automated email from the ASF dual-hosted git repository.
lidavidm pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow-adbc.git
The following commit(s) were added to refs/heads/main by this push:
new f3668607d build: increase manylinux requirement to 2_28 from 2014
(#4146)
f3668607d is described below
commit f3668607d361b6b840c38544fc63fb89dbb7420b
Author: David Li <[email protected]>
AuthorDate: Thu Mar 26 13:28:32 2026 +0900
build: increase manylinux requirement to 2_28 from 2014 (#4146)
Also updates vcpkg and fixes the check for glibc compatibility.
Motivation: I was trying to solve #4143, but icu failed to build; I
tried to raise the vcpkg version but found that required a newer version
of other dependencies, and decided it was easiest to just raise the
manylinux version first. (That said it seems icu still doesn't build,
but that's a separate issue; it's still good to raise the vcpkg
version.)
Closes #4145.
---
.env | 4 ++--
ci/docker/python-wheel-manylinux.dockerfile | 8 ++++----
ci/scripts/python_sdist_test.sh | 6 +-----
ci/scripts/python_util.sh | 6 ++----
ci/scripts/python_wheel_unix_build.sh | 15 ++++++++-------
ci/scripts/python_wheel_unix_relocate.sh | 7 +++----
docs/source/driver/sqlite.rst | 2 +-
7 files changed, 21 insertions(+), 27 deletions(-)
diff --git a/.env b/.env
index 10e2f5746..607f2f52c 100644
--- a/.env
+++ b/.env
@@ -29,7 +29,7 @@ ARCH_CONDA_FORGE=linux_64_
# Default versions for various dependencies
JDK=21
-MANYLINUX=2014
+MANYLINUX=2_28
MAVEN=3.9.10
PLATFORM=linux/amd64
PYTHON=3.13
@@ -41,7 +41,7 @@ DOTNET=8.0
# ci/scripts/install_vcpkg.sh script. Keep in sync with apache/arrow .env.
# When updating, also update the docs, which list the version of libpq/SQLite
# that vcpkg (and hence our wheels) ship
-VCPKG="4334d8b4c8916018600212ab4dd4bbdc343065d1" # 2025.09.17 Release
+VCPKG="66c0373dc7fca549e5803087b9487edfe3aca0a1" # 2026.01.16 Release
# These are used to tell tests where to find services for integration testing.
# They are valid if the services are started with the compose config.
diff --git a/ci/docker/python-wheel-manylinux.dockerfile
b/ci/docker/python-wheel-manylinux.dockerfile
index 26b80cf64..3751171f8 100644
--- a/ci/docker/python-wheel-manylinux.dockerfile
+++ b/ci/docker/python-wheel-manylinux.dockerfile
@@ -16,11 +16,11 @@
# under the License.
ARG MANYLINUX
-FROM quay.io/pypa/manylinux${MANYLINUX}:latest
+FROM quay.io/pypa/manylinux_${MANYLINUX}:latest
-ARG CMAKE=4.1.2
+ARG CMAKE=4.3.0
ARG GO
-ARG NINJA=1.13.1
+ARG NINJA=1.13.2
ARG PYTHON
ARG VCPKG
ARG TARGETPLATFORM
@@ -35,7 +35,7 @@ RUN ulimit -n 1024 && yum install -y autoconf curl git flex
perl-IPC-Cmd unzip w
# (podman is just too different)
RUN ulimit -n 1024 && yum remove -y docker
RUN yum-config-manager --add-repo
https://download.docker.com/linux/centos/docker-ce.repo
-RUN ulimit -n 1024 && yum install -y docker-ce docker-ce-cli containerd.io
docker-buildx-plugin docker-compose-plugin
+RUN ulimit -n 1024 && yum install -y docker-ce docker-ce-cli containerd.io
docker-buildx-plugin docker-compose-plugin perl-Time-Piece
# -------------------- Python --------------------
RUN PYTHON_ROOT=$(find /opt/python -name cp${PYTHON/./}-cp${PYTHON/./}) && \
diff --git a/ci/scripts/python_sdist_test.sh b/ci/scripts/python_sdist_test.sh
index b69180587..38e71e692 100755
--- a/ci/scripts/python_sdist_test.sh
+++ b/ci/scripts/python_sdist_test.sh
@@ -47,11 +47,7 @@ echo "=== Installing sdists ==="
for component in ${COMPONENTS}; do
pip install --no-deps --force-reinstall
${source_dir}/python/${component}/dist/*.tar.gz
done
-# N.B. for now, we still support manylinux2014 while PyArrow dropped support.
-# Explicitly install the last version of PyArrow supporting manylinux2014.
-# - https://github.com/apache/arrow-adbc/issues/3182
-# - https://github.com/apache/arrow/issues/46959
-pip install importlib-resources pytest pyarrow==20.0.0 pandas polars protobuf
+pip install importlib-resources pytest pyarrow pandas polars protobuf
echo "=== (${PYTHON_VERSION}) Testing sdists ==="
test_packages
diff --git a/ci/scripts/python_util.sh b/ci/scripts/python_util.sh
index 50f922966..f066bb106 100644
--- a/ci/scripts/python_util.sh
+++ b/ci/scripts/python_util.sh
@@ -135,10 +135,8 @@ function setup_build_vars {
fi
# No PyPy, no Python 3.8, no Python 3.9
export CIBW_SKIP="pp* cp38-* cp39-* ${CIBW_SKIP}"
- # Make sure our manylinux version doesn't creep up (this only matters for
- # the driver manager)
- export CIBW_MANYLINUX_X86_64_IMAGE="manylinux2014"
- export CIBW_MANYLINUX_AARCH64_IMAGE="manylinux2014"
+ export CIBW_MANYLINUX_X86_64_IMAGE="manylinux_2_28"
+ export CIBW_MANYLINUX_AARCH64_IMAGE="manylinux_2_28"
}
function test_packages {
diff --git a/ci/scripts/python_wheel_unix_build.sh
b/ci/scripts/python_wheel_unix_build.sh
index 029e2da26..ba3d4fde6 100755
--- a/ci/scripts/python_wheel_unix_build.sh
+++ b/ci/scripts/python_wheel_unix_build.sh
@@ -49,20 +49,21 @@ function check_visibility {
# Also check the max glibc/glibcxx version, to avoid accidentally bumping
# our manylinux requirement
- # See https://peps.python.org/pep-0599/#the-manylinux2014-policy
- local -r glibc_max=2.17
- local -r glibcxx_max=3.4.19
+ #
https://github.com/pypa/manylinux?tab=readme-ov-file#manylinux_2_28-almalinux-8-based
+ # https://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html
+ local -r glibc_max=2.28
+ local -r glibcxx_max=3.4.33
local -r glibc_requirement=$(grep -Eo 'GLIBC_\S+' nm_arrow.log | awk -F_
'{print $2}' | sort --version-sort -u | tail -n1)
local -r glibc_maxver=$(echo -e "${glibc_requirement}\n${glibc_max}" |
sort --version-sort | tail -n1)
local -r glibcxx_requirement=$(grep -Eo 'GLIBCXX_\S+' nm_arrow.log | awk
-F_ '{print $2}' | sort --version-sort -u | tail -n1)
local -r glibcxx_maxver=$(echo -e "${glibcxx_requirement}\n${glibcxx_max}"
| sort --version-sort | tail -n1)
- if [[ "${glibc_maxver}" != "2.17" ]]; then
+ if [[ "${glibc_maxver}" != "${glibc_max}" ]]; then
echo "== glibc check failed for $1 =="
- echo "Expected GLIBC_${glibc_max} but found GLIBC_${glibc_requirement}"
+ echo "Expected GLIBC_${glibc_maxver} but found
GLIBC_${glibc_requirement}"
exit 1
- elif [[ "${glibcxx_maxver}" != "3.4.19" ]]; then
+ elif [[ "${glibcxx_maxver}" != "${glibcxx_max}" ]]; then
echo "== glibc check failed for $1 =="
- echo "Expected GLIBCXX_${glibcxx_max} but found
GLIBCXX_${glibcxx_requirement}"
+ echo "Expected GLIBCXX_${glibcxx_maxver} but found
GLIBCXX_${glibcxx_requirement}"
exit 1
fi
}
diff --git a/ci/scripts/python_wheel_unix_relocate.sh
b/ci/scripts/python_wheel_unix_relocate.sh
index 08eaba927..4ba22cbe7 100755
--- a/ci/scripts/python_wheel_unix_relocate.sh
+++ b/ci/scripts/python_wheel_unix_relocate.sh
@@ -29,7 +29,7 @@ source "${script_dir}/python_util.sh"
function check_wheels {
if [[ $(uname) == "Linux" ]]; then
echo "=== Tag $component wheel with manylinux${MANYLINUX_VERSION} ==="
- auditwheel repair "$@" -L . -w repaired_wheels --plat
manylinux_2_17_${CIBW_ARCHS}
+ auditwheel repair "$@" -L . -w repaired_wheels --plat
manylinux_2_28_${CIBW_ARCHS}
else # macOS
echo "=== Tag $component wheel with macOS ==="
delocate-wheel -v -k -w repaired_wheels "$@"
@@ -82,9 +82,8 @@ for component in $COMPONENTS; do
for wheel in repaired_wheels/*.whl; do
if [[ "$(uname)" = "Linux" ]]; then
- # We only check 2_17, though in principle everything should
work on 2014
- if ! [[ $(basename "${wheel}") == *manylinux_2_17* ]]; then
- echo "Wheel does not support manylinux_2_17: ${wheel}"
+ if ! [[ $(basename "${wheel}") == *manylinux_2_28* ]]; then
+ echo "Wheel does not support manylinux_2_28: ${wheel}"
exit 1
fi
fi
diff --git a/docs/source/driver/sqlite.rst b/docs/source/driver/sqlite.rst
index 5b3c25b65..3bb8241e0 100644
--- a/docs/source/driver/sqlite.rst
+++ b/docs/source/driver/sqlite.rst
@@ -242,6 +242,6 @@ Driver-specific options:
Software Versions
=================
-For Python wheels, the shipped version of SQLite is 3.50.4. For conda-forge
+For Python wheels, the shipped version of SQLite is 3.51.2. For conda-forge
packages, the version of sqlite is the same as the version of sqlite in your
Conda environment.