wheels: update the Linux wheels make target
This reuse the script extracted in the previous changeset and now build the
wheels with the same image and code as the CI.
--- a/contrib/packaging/Makefile Wed Nov 13 04:20:54 2024 +0100
+++ b/contrib/packaging/Makefile Tue Nov 12 02:22:40 2024 +0100
@@ -129,7 +129,7 @@
.PHONY: linux-wheels-x86_64
linux-wheels-x86_64:
- docker run -e "HGTEST_JOBS=$(shell nproc)" --rm -ti -v `pwd`/../..:/src quay.io/pypa/manylinux1_x86_64 /src/contrib/packaging/build-linux-wheels.sh
+ docker run --rm -ti -v `pwd`/../..:/src registry.heptapod.net/mercurial/ci-images/core-wheel-x86_64-c:v3.0 /src/contrib/packaging/build-linux-wheels.sh
.PHONY: linux-wheels-i686
linux-wheels-i686:
--- a/contrib/packaging/build-linux-wheels.sh Wed Nov 13 04:20:54 2024 +0100
+++ b/contrib/packaging/build-linux-wheels.sh Tue Nov 12 02:22:40 2024 +0100
@@ -1,34 +1,44 @@
#!/bin/bash
-# This file is directly inspired by
-# https://github.com/pypa/python-manylinux-demo/blob/master/travis/build-wheels.sh
+
+# Intended to run within docker using image:
+#
+# registry.heptapod.net/mercurial/ci-images/core-wheel-x86_64-c:v3.0
+#
+# we might want to factor most of this with the associated mercurial-core CI
+# definition. (i.e. move this script into a place where the CI can directly call it for its purpose)
+
set -e -x
-PYTHON_TARGETS=$(ls -d /opt/python/cp27*/bin)
+PYTHON_TARGETS="cp38-cp38 cp39-cp39 cp310-cp310 cp311-cp311 cp312-cp312 cp313-cp313"
+
+export MERCURIAL_SETUP_FORCE_TRANSLATIONS=1
-# Create an user for the tests
-useradd hgbuilder
+# We need to copy the repository to ensure:
+# (1) we don't wrongly write roots files in the repository (or any other wrong
+# users)
+# (2) we don't reuse pre-compiled extension built outside for manylinux and
+# therefor not compatible.
+cp -r /src/ /tmp/src/
+cd /tmp/src/
+hg purge --all --no-confirm
-# Bypass uid/gid problems
-cp -R /src /io && chown -R hgbuilder:hgbuilder /io
+export HGRCPATH=/tmp/build-config.rc
+cat << EOF > $HGRCPATH
+[trusted]
+users=*
+groups=*
+EOF
-# Compile wheels for Python 2.X
-for PYBIN in $PYTHON_TARGETS; do
- "${PYBIN}/pip" wheel /io/ -w wheelhouse/
+for py in $PYTHON_TARGETS; do
+ echo 'build wheel for' $py
+ # cleanup any previous wheel
+ tmp_wd="/tmp/wheels/$py/repaired"
+ rm -rf $tmp_wd
+ mkdir -p $tmp_wd
+ # build a new wheel
+ contrib/build-one-linux-wheel.sh $py $tmp_wd
+ # fix the owner back to the repository owner
+ chown `stat /src/ -c %u:%g` $tmp_wd/*.whl
+ mv $tmp_wd/*.whl /src/dist
done
-# Bundle external shared libraries into the wheels with
-# auditwheel (https://github.com/pypa/auditwheel) repair.
-# It also fix the ABI tag on the wheel making it pip installable.
-for whl in wheelhouse/*.whl; do
- auditwheel repair "$whl" -w /src/wheelhouse/
-done
-
-# Install packages and run the tests for all Python versions
-cd /io/tests/
-
-for PYBIN in $PYTHON_TARGETS; do
- # Install mercurial wheel as root
- "${PYBIN}/pip" install mercurial --no-index -f /src/wheelhouse
- # But run tests as hgbuilder user (non-root)
- su hgbuilder -c "\"${PYBIN}/python\" /io/tests/run-tests.py --with-hg=\"${PYBIN}/hg\" --blacklist=/io/contrib/packaging/linux-wheel-centos5-blacklist"
-done