diff --git a/contrib/build-one-linux-wheel.sh b/contrib/build-one-linux-wheel.sh
new file mode 100755
index 0000000000000000000000000000000000000000..4d825ad10840062340b203522041e96c8bec8afb_Y29udHJpYi9idWlsZC1vbmUtbGludXgtd2hlZWwuc2g=
--- /dev/null
+++ b/contrib/build-one-linux-wheel.sh
@@ -0,0 +1,28 @@
+#!/bin/bash
+# build a single linux wheel within a prepared imaged based on manylinux images
+#
+#
+#
+set -eu
+
+# enforce that the translation are built
+export MERCURIAL_SETUP_FORCE_TRANSLATIONS=1
+
+if [ $# -lt 2 ]; then
+    echo "usage $0 PYTHONTAG DEST_DIR" >&2
+    echo "" >&2
+    echo 'PYTHONTAG should be of the form "cp310-cp310"' >&2
+    exit 64
+fi
+py_tag=$1
+destination_directory=$2
+
+
+tmp_wheel_dir=./tmp-wheelhouse
+
+if [ -e $tmp_wheel_dir ]; then
+    rm -rf $tmp_wheel_dir
+fi
+/opt/python/$py_tag/bin/python setup.py bdist_wheel --dist-dir $tmp_wheel_dir
+# adjust it to make it universal
+auditwheel repair $tmp_wheel_dir/*.whl -w $destination_directory
diff --git a/contrib/heptapod-ci.yml b/contrib/heptapod-ci.yml
index b8efa9013d3fd920db0a7bb8270d983eeca7a584_Y29udHJpYi9oZXB0YXBvZC1jaS55bWw=..4d825ad10840062340b203522041e96c8bec8afb_Y29udHJpYi9oZXB0YXBvZC1jaS55bWw= 100644
--- a/contrib/heptapod-ci.yml
+++ b/contrib/heptapod-ci.yml
@@ -63,8 +63,7 @@
     - test -n "$WHEEL_TYPE"
     - echo $FLAVOR
     - mkdir -p wheels/$PLATFORM/$WHEEL_TYPE/$BUILD_PY_ID
-    - /opt/python/$BUILD_PY_ID/bin/python setup.py bdist_wheel --dist-dir tmp-wheelhouse
-    - auditwheel repair tmp-wheelhouse/*.whl -w wheels/$PLATFORM/$WHEEL_TYPE/$BUILD_PY_ID
+    - contrib/build-one-linux-wheel.sh $BUILD_PY_ID wheels/$PLATFORM/$WHEEL_TYPE/$BUILD_PY_ID
   artifacts:
     paths:
       - wheels/