82 lines
2.1 KiB
Bash
Executable File
82 lines
2.1 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null && pwd)"
|
|
cd "$ROOT_DIR"
|
|
|
|
if [[ $# -gt 0 ]]; then
|
|
echo "usage: MANYLINUX=1 ./build.sh" >&2
|
|
exit 2
|
|
fi
|
|
|
|
USE_MANYLINUX="${MANYLINUX:-0}"
|
|
|
|
if [[ -z "${BUILD_SH_IN_MANYLINUX:-}" ]] && ! command -v uv >/dev/null 2>&1; then
|
|
./setup.sh
|
|
fi
|
|
|
|
if [[ "$USE_MANYLINUX" == "1" && -z "${BUILD_SH_IN_MANYLINUX:-}" ]]; then
|
|
UV_BIN="$(command -v uv)"
|
|
docker run --rm \
|
|
-e BUILD_SH_IN_MANYLINUX=1 \
|
|
-e BUILD_SH_REUSE_MANYLINUX_ARTIFACTS="${BUILD_SH_REUSE_MANYLINUX_ARTIFACTS:-}" \
|
|
-e HOME=/tmp \
|
|
-e UV_CACHE_DIR=/work/.uv-cache \
|
|
-e UV_PYTHON=/opt/python/cp312-cp312/bin/python3 \
|
|
-v "$ROOT_DIR:/work" \
|
|
-v "$UV_BIN:/usr/local/bin/uv:ro" \
|
|
-w /work \
|
|
"quay.io/pypa/manylinux_2_28_$(uname -m)" \
|
|
bash build.sh
|
|
exit 0
|
|
fi
|
|
|
|
if [[ -n "${BUILD_SH_IN_MANYLINUX:-}" ]]; then
|
|
export PATH="/opt/python/cp312-cp312/bin:$PATH"
|
|
|
|
# cached *-src repos may be owned by the host runner user; tell git to trust them
|
|
git config --global --add safe.directory '*'
|
|
|
|
./setup.sh
|
|
|
|
if [[ -z "${BUILD_SH_REUSE_MANYLINUX_ARTIFACTS:-}" ]]; then
|
|
for toml in */pyproject.toml; do
|
|
pkg="${toml%/pyproject.toml}"
|
|
module="${pkg//-/_}"
|
|
rm -rf "$pkg/$module/install" "$pkg/$module/toolchain" "$pkg/$module/bin"
|
|
done
|
|
fi
|
|
fi
|
|
|
|
export CMAKE_C_COMPILER_LAUNCHER=ccache
|
|
export CMAKE_CXX_COMPILER_LAUNCHER=ccache
|
|
|
|
echo "Building workspace packages into dist"
|
|
START_SECS=$SECONDS
|
|
|
|
mkdir -p dist/
|
|
rm -rf dist/*
|
|
uv build --all-packages --wheel --out-dir dist --no-create-gitignore --no-build-logs
|
|
|
|
if [[ -n "${BUILD_SH_IN_MANYLINUX:-}" ]]; then
|
|
VENV_DIR="$ROOT_DIR/.venv-manylinux"
|
|
else
|
|
VENV_DIR="$ROOT_DIR/.venv"
|
|
fi
|
|
|
|
echo
|
|
echo "Running smoketests"
|
|
|
|
uv venv --allow-existing --quiet "$VENV_DIR"
|
|
uv pip install --python "$VENV_DIR/bin/python" --reinstall --no-deps --quiet dist/*.whl >/dev/null
|
|
|
|
for toml in */pyproject.toml; do
|
|
module="$(basename "$(dirname "$toml")" | tr '-' '_')"
|
|
"$VENV_DIR/bin/python" -c "import $module; $module.smoketest()" >/dev/null
|
|
done
|
|
|
|
du -hs dist/* | sort -hr
|
|
|
|
echo
|
|
echo "Done in $((SECONDS - START_SECS))s"
|