Wheel build #102
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: Wheel build | |
on: | |
release: | |
types: [created] | |
schedule: | |
# ┌───────────── minute (0 - 59) | |
# │ ┌───────────── hour (0 - 23) | |
# │ │ ┌───────────── day of the month (1 - 31) | |
# │ │ │ ┌───────────── month (1 - 12 or JAN-DEC) | |
# │ │ │ │ ┌───────────── day of the week (0 - 6 or SUN-SAT) | |
# │ │ │ │ │ | |
- cron: "42 3 * * 4" | |
push: | |
paths: | |
- .github/workflows/wheels.yml | |
- requirements.txt | |
- pyproject.toml | |
- MANIFEST.in | |
- Makefile | |
- setup* | |
- build* | |
pull_request: | |
types: [opened, synchronize, reopened] | |
paths: | |
- .github/workflows/wheels.yml | |
- requirements.txt | |
- pyproject.toml | |
- MANIFEST.in | |
- Makefile | |
- setup* | |
- build* | |
workflow_dispatch: | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} | |
cancel-in-progress: true | |
permissions: {} | |
jobs: | |
sdist: | |
runs-on: ubuntu-20.04 | |
permissions: | |
contents: write # to create GitHub release (softprops/action-gh-release) | |
steps: | |
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 | |
- name: Check out recursively | |
run: git submodule update --init --recursive | |
- name: Set up Python | |
uses: actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c # v5.0.0 | |
with: | |
python-version: "3.x" | |
- name: Install Python dependencies | |
run: python -m pip install -r requirements.txt | |
- name: Build sdist | |
run: make sdist | |
- name: Upload sdist | |
uses: actions/upload-artifact@694cdabd8bdb0f10b2cea11669e1bf5453eed0a6 # v4.2.0 | |
with: | |
name: sdist | |
path: dist/*.tar.gz | |
generate-wheels-matrix: | |
# Create a matrix of all architectures & versions to build. | |
# This enables the next step to run cibuildwheel in parallel. | |
# From https://iscinumpy.dev/post/cibuildwheel-2-10-0/#only-210 | |
name: Generate wheels matrix | |
runs-on: ubuntu-latest | |
outputs: | |
include: ${{ steps.set-matrix.outputs.include }} | |
steps: | |
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 | |
- name: Install cibuildwheel | |
# Nb. keep cibuildwheel version pin consistent with job below | |
run: pipx install cibuildwheel==2.16.5 | |
- id: set-matrix | |
run: | | |
MATRIX=$( | |
{ | |
cibuildwheel --print-build-identifiers --platform linux \ | |
| jq -nRc '{"only": inputs, "os": "ubuntu-latest"}' \ | |
&& cibuildwheel --print-build-identifiers --platform macos \ | |
| jq -nRc '{"only": inputs, "os": "macos-latest"}' \ | |
&& cibuildwheel --print-build-identifiers --platform windows \ | |
| jq -nRc '{"only": inputs, "os": "windows-2019"}' | |
} | jq -sc | |
) | |
echo "include=$MATRIX" | |
echo "include=$MATRIX" >> $GITHUB_OUTPUT | |
build_wheels: | |
name: Build for ${{ matrix.only }} | |
needs: generate-wheels-matrix | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
include: ${{ fromJson(needs.generate-wheels-matrix.outputs.include) }} | |
env: | |
MACOSX_DEPLOYMENT_TARGET: '11.0' | |
LUPA_WITH_LUA_DLOPEN: ${{ startsWith(matrix.os, 'windows') && 'false' || 'true' }} | |
steps: | |
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 | |
- name: Check out recursively | |
run: git submodule update --init --recursive | |
- name: Set up QEMU | |
if: runner.os == 'Linux' | |
uses: docker/setup-qemu-action@v3 | |
with: | |
platforms: all | |
- name: Install MacOS dependencies | |
if: runner.os == 'macOS' | |
run: | | |
brew install automake libtool | |
ln -s /usr/local/bin/glibtoolize /usr/local/bin/libtoolize | |
- name: Build wheels | |
uses: pypa/cibuildwheel@v2.16.5 | |
with: | |
only: ${{ matrix.only }} | |
- uses: actions/upload-artifact@694cdabd8bdb0f10b2cea11669e1bf5453eed0a6 # v4.2.0 | |
with: | |
path: ./wheelhouse/*.whl | |
name: wheel-${{ matrix.only }} | |
upload_release_assets: | |
name: Upload Release Wheels | |
needs: [ build_wheels, Linux, non-Linux ] | |
runs-on: ubuntu-latest | |
if: startsWith(github.ref, 'refs/tags') | |
permissions: | |
contents: write # to create GitHub release (softprops/action-gh-release) | |
steps: | |
- name: Download bdist files | |
uses: actions/download-artifact@6b208ae046db98c579e8a3aa621ab581ff575935 # v4.1.1 | |
with: | |
path: ./bdist_downloads | |
merge-multiple: true | |
- name: List downloaded artifacts | |
run: ls -la ./bdist_downloads | |
- uses: actions/upload-artifact@694cdabd8bdb0f10b2cea11669e1bf5453eed0a6 # v4.2.0 | |
with: | |
path: ./bdist_downloads/*.whl | |
name: wheels | |
- name: Release | |
uses: softprops/action-gh-release@v2 | |
with: | |
files: | | |
./bdist_downloads/*.whl | |
./bdist_downloads/*.tar.gz | |
Linux: | |
runs-on: ubuntu-latest | |
strategy: | |
# Allows for matrix sub-jobs to fail without canceling the rest | |
fail-fast: false | |
matrix: | |
image: | |
- manylinux2014_x86_64 | |
- manylinux2014_i686 | |
pyversion: ["*"] | |
include: | |
- image: manylinux2014_aarch64 | |
pyversion: "cp36*" | |
steps: | |
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 | |
- name: Check out recursively | |
run: git submodule update --init --recursive | |
- name: Set up Python | |
uses: actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c # v5.0.0 | |
with: | |
python-version: "3.9" | |
- name: Install dependencies | |
run: python -m pip install -r requirements.txt | |
- name: Build Linux wheels | |
run: make USE_BUNDLE=true sdist wheel_${{ matrix.image }} | |
env: { PYTHON_BUILD_VERSION: "${{ matrix.pyversion }}" } | |
- name: Upload wheels | |
uses: actions/upload-artifact@694cdabd8bdb0f10b2cea11669e1bf5453eed0a6 # v4.2.0 | |
with: | |
name: wheels-${{ matrix.image }} | |
path: wheelhouse_*/*-m*linux*.whl # manylinux / musllinux | |
if-no-files-found: ignore | |
non-Linux: | |
strategy: | |
# Allows for matrix sub-jobs to fail without canceling the rest | |
fail-fast: false | |
matrix: | |
os: | |
- macos-13 | |
#- windows-2019 | |
pyversion: | |
- "2.7" | |
- "3.6" | |
#- "pypy-3.7-v7.3.7" | |
#- "pypy-3.8-v7.3.7" | |
#- "pypy-3.9-v7.3.11" | |
#- "pypy-3.10-v7.3.13" | |
exclude: | |
# outdated compilers and probably not worth supporting anymore | |
- os: windows-2019 | |
pyversion: "2.7" | |
runs-on: ${{ matrix.os }} | |
env: | |
USE_BUNDLE: "true" | |
MACOSX_DEPLOYMENT_TARGET: "11.0" | |
LUPA_WITH_LUA_DLOPEN: ${{ startsWith(matrix.os, 'windows') && 'false' || 'true' }} | |
PYTHON_BIN_DIR: ${{ startsWith(matrix.pyversion, '2.') && '/Library/Frameworks/Python.framework/Versions/2.7/bin' || '' }} | |
steps: | |
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 | |
- name: Check out recursively | |
run: git submodule update --init --recursive | |
- name: Set up Python | |
uses: actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c # v5.0.0 | |
# macOS has Py2.7 installed system wide | |
if: matrix.pyversion != '2.7' | |
with: | |
python-version: ${{ matrix.pyversion }} | |
- name: Install MacOS dependencies | |
if: startsWith(matrix.os, 'mac') | |
run: | | |
brew install automake libtool | |
ln -s /usr/local/bin/glibtoolize /usr/local/bin/libtoolize | |
- name: Install dependencies | |
run: | | |
export PATH=$PYTHON_BIN_DIR:$PATH | |
python -m pip install setuptools wheel -r requirements.txt | |
- name: Build wheels | |
run: | | |
export PATH=$PYTHON_BIN_DIR:$PATH | |
python setup.py --with-cython sdist ${{ contains(matrix.pyversion, '3.') && 'build_ext -j6' || '' }} bdist_wheel | |
- name: Upload wheels | |
uses: actions/upload-artifact@694cdabd8bdb0f10b2cea11669e1bf5453eed0a6 # v4.2.0 | |
with: | |
name: wheels-${{ matrix.pyversion }}-${{ matrix.os }} | |
path: dist/*.whl | |
if-no-files-found: ignore |