Build binary wheel #289
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Build binary wheel | |
on: | |
push: | |
branches: | |
- master | |
tags: | |
- core-* | |
pull_request: | |
branches: | |
- master | |
schedule: | |
- cron: "0 2 * * 1-5" | |
release: | |
types: [released, prereleased] | |
workflow_dispatch: # allows running workflow manually from the Actions tab | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref || github.run_id }} | |
cancel-in-progress: ${{ github.event_name == 'pull_request' }} | |
jobs: | |
build_wheels_matrix: | |
runs-on: ubuntu-22.04 | |
outputs: | |
include: ${{ steps.set-matrix.outputs.include }} | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
submodules: true | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: "3.x" | |
- run: pip install cibuildwheel==2.17.0 # sync version with pypa/cibuildwheel below | |
- id: set-matrix | |
env: | |
# skipping pypy for now | |
# cp38-win was segfaulting on CI -> skipping for now | |
# oldest-supported-numpy has no wheels for cp38-musllinux_aarch64 -> build numpy from source on QEMU -> CI timeouts -> skipping for now | |
CIBW_SKIP: > | |
pp* | |
cp38-win* | |
cp38-musllinux_aarch64 | |
run: | | |
MATRIX_INCLUDE=$( | |
{ | |
cibuildwheel --print-build-identifiers --platform linux --arch x86_64,aarch64 | jq -nRc '{"only": inputs, "os": "ubuntu-22.04"}' \ | |
&& cibuildwheel --print-build-identifiers --platform macos --arch x86_64 | jq -nRc '{"only": inputs, "os": "macos-13"}' \ | |
&& cibuildwheel --print-build-identifiers --platform macos --arch arm64 | jq -nRc '{"only": inputs, "os": "macos-14"}' \ | |
&& cibuildwheel --print-build-identifiers --platform windows --arch AMD64 | jq -nRc '{"only": inputs, "os": "windows-2022"}' | |
} | jq -sc | |
) | |
echo "include=$MATRIX_INCLUDE" >> $GITHUB_OUTPUT | |
cat $GITHUB_OUTPUT | |
working-directory: packages/vaex-core/ | |
build_wheels: | |
needs: build_wheels_matrix | |
runs-on: ${{ matrix.os }} | |
name: Build ${{ matrix.only }} | |
strategy: | |
fail-fast: false | |
matrix: | |
include: ${{ fromJson(needs.build_wheels_matrix.outputs.include) }} | |
permissions: | |
contents: write # softprops/action-gh-release | |
id-token: write # pypa/gh-action-pypi-publish | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
submodules: true | |
- name: Copy dll | |
if: startswith(matrix.os, 'windows') | |
uses: ./ci/actions/windll | |
- name: chores | |
if: ${{ !startswith(matrix.os, 'windows') }} | |
run: | | |
mkdir packages/vaex-core/bin | |
cp bin/install_pcre.sh packages/vaex-core/bin/ | |
- name: Set up QEMU | |
if: runner.os == 'Linux' | |
uses: docker/setup-qemu-action@v3 | |
# xcode 15.2 throws compilation errors ref https://github.com/vaexio/vaex/pull/2432 | |
# select older xcode from the available versions on the runner ref https://github.com/actions/runner-images/blob/ff9acc6/images/macos/macos-13-Readme.md#xcode | |
- name: Switch to older Xcode (Mac-only) | |
if: startswith(matrix.os, 'macos') | |
run: sudo xcode-select -s "/Applications/Xcode_15.0.1.app" | |
- uses: pypa/cibuildwheel@v2.17.0 # sync version with pip install cibuildwheel above | |
with: | |
only: ${{ matrix.only }} | |
package-dir: packages/vaex-core/ | |
output-dir: packages/vaex-core/dist/ | |
env: | |
CIBW_BEFORE_BUILD: ${{ startswith(matrix.os, 'ubuntu') && 'bash bin/install_pcre.sh' || startswith(matrix.os, 'macos') && 'sudo -E bash bin/install_pcre.sh' || '' }} | |
CIBW_BUILD_VERBOSITY: 2 | |
# temporary ref https://github.com/oconnor663/blake3-py/pull/45 | |
CIBW_BEFORE_TEST: pip install --force-reinstall blake3 --find-links https://github.com/ddelange/blake3-py/releases/expanded_assets/0.4.1 | |
# no test on musllinux due to missing pyarrow wheels ref https://github.com/apache/arrow/pull/40177 | |
CIBW_TEST_SKIP: '*musllinux*' | |
CIBW_TEST_COMMAND: python -c "import vaex; print(vaex.from_arrays(x=[1,2]))" | |
CIBW_MANYLINUX_X86_64_IMAGE: manylinux_2_28 | |
CIBW_MANYLINUX_AARCH64_IMAGE: manylinux_2_28 | |
CIBW_ENVIRONMENT_LINUX: 'CFLAGS="-Wl,-strip-all" CXXFLAGS="-Wl,-strip-all" PATH="$HOME/.cargo/bin:$PATH"' | |
CIBW_ENVIRONMENT_MACOS: 'CFLAGS="-I/usr/local/include -L/usr/local/lib" CXXFLAGS="-I/usr/local/include -L/usr/local/lib" LDFLAGS="-L/usr/local/lib"' | |
- name: Upload release assets | |
if: github.event_name == 'release' | |
uses: softprops/action-gh-release@v0.1.15 | |
with: | |
files: packages/vaex-core/dist/* | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: distribution-${{ matrix.only }} | |
path: packages/vaex-core/dist | |
# https://github.com/pypa/gh-action-pypi-publish#trusted-publishing | |
- name: Publish package distributions to PyPI | |
uses: pypa/gh-action-pypi-publish@v1.9.0 | |
if: startsWith(github.ref, 'refs/tags') | |
with: | |
skip-existing: true | |
packages-dir: packages/vaex-core/dist |