Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

More Prebuilt Wheels #554

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
240 changes: 188 additions & 52 deletions .github/workflows/python-publish.yml
Original file line number Diff line number Diff line change
@@ -1,66 +1,202 @@
name: PyPI 📦 Distribution

on: [push]
on:
workflow_dispatch:
pull_request: # Ensures PRs don't break the build process
push:

jobs:
build:
build_sdist:
name: "sdist"
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [macos-latest, ubuntu-latest, windows-latest]
platform: [x32, x64]
os: [ubuntu-latest]
steps:
- uses: actions/checkout@v2

- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: '3.x'

- name: Set up MSVC x86
if: matrix.os == 'windows-latest' && matrix.platform == 'x32'
uses: ilammy/msvc-dev-cmd@v1
with:
arch: x86

- name: Set up MSVC x64
if: matrix.os == 'windows-latest' && matrix.platform == 'x64'
uses: ilammy/msvc-dev-cmd@v1

- name: Install dependencies
run: |
pip install setuptools wheel

- name: Build distribution 📦
shell: bash
run: |
if [ ${{ matrix.platform }} == 'x32' ] && [ ${{ matrix.os }} == 'windows-latest' ]; then
cd bindings/python && python setup.py build -p win32 bdist_wheel -p win32
elif [ ${{ matrix.platform }} == 'x32' ] && [ ${{ matrix.os }} == 'ubuntu-latest' ]; then
docker run --rm -v `pwd`/:/work dockcross/manylinux1-x86 > ./dockcross
chmod +x ./dockcross
./dockcross bindings/python/build_wheel.sh
elif [ ${{ matrix.platform }} == 'x64' ] && [ ${{ matrix.os }} == 'ubuntu-latest' ]; then
docker run --rm -v `pwd`/:/work dockcross/manylinux1-x64 > ./dockcross
chmod +x ./dockcross
./dockcross bindings/python/build_wheel.sh
elif [ ${{ matrix.platform }} == 'x32' ] && [ ${{ matrix.os }} == 'macos-latest' ]; then
cd bindings/python && python setup.py sdist
else
cd bindings/python && python setup.py bdist_wheel
fi

- uses: actions/upload-artifact@v2
with:
path: ${{ github.workspace }}/bindings/python/dist/*

publish:
needs: [build]
- name: Check out repository
uses: actions/checkout@v3

- name: Set up python 3.11
uses: actions/setup-python@v4
with:
python-version: "3.11"

- name: Build sdist
run: |
cd bindings/python && python setup.py sdist

- uses: actions/upload-artifact@v3
with:
path: bindings/python/dist/*

build_wheels_windows:
name: "${{ matrix.os }} ${{ matrix.cibw_archs }} ${{ matrix.cibw_build }}"
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [windows-latest]
cibw_build: ["cp38-*", "cp39-*", "cp310-*", "cp311-*"]
cibw_archs: ["AMD64", "x86", "ARM64"]
exclude:
- os: windows-latest
cibw_build: "cp38-*"
cibw_archs: "ARM64"

steps:
- name: "Set environment variables (Windows)"
shell: pwsh
run: |
(Get-ItemProperty "HKLM:System\CurrentControlSet\Control\FileSystem").LongPathsEnabled

- name: Set up MSVC x64
uses: ilammy/msvc-dev-cmd@v1

- name: Check out repository
uses: actions/checkout@v3

- name: Build wheels
uses: pypa/[email protected]
with:
package-dir: "bindings/python"
env:
CIBW_ARCHS: ${{ matrix.cibw_archs }}
CIBW_BUILD: ${{ matrix.cibw_build }}
CIBW_TEST_SKIP: "*"

- uses: actions/upload-artifact@v3
with:
path: wheelhouse/*.whl

build_wheels_linux:
name: "${{ matrix.os }} ${{ matrix.cibw_archs }} ${{ matrix.cibw_build }}"
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest]
cibw_build: ["cp38-*", "cp39-*", "cp310-*", "cp311-*"]
cibw_archs: ["x86_64", "i686", "aarch64", "ppc64le"]

steps:
- name: Check out repository
uses: actions/checkout@v3

- name: Set up QEMU
if: matrix.cibw_archs != 'x86_64'
uses: docker/setup-qemu-action@v2
with:
platforms: all

- name: Build wheels
uses: pypa/[email protected]
with:
package-dir: "bindings/python"
env:
CIBW_ARCHS: ${{ matrix.cibw_archs }}
CIBW_BUILD: ${{ matrix.cibw_build }}
CIBW_TEST_SKIP: "*"

- uses: actions/upload-artifact@v3
with:
path: wheelhouse/*.whl

build_wheels_macos:
name: "${{ matrix.os }} ${{ matrix.cibw_archs }} ${{ matrix.cibw_build }}"
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [macos-latest]
cibw_build: ["cp38-*", "cp39-*", "cp310-*", "cp311-*"]
cibw_archs: ["x86_64"]
env:
SYSTEM_VERSION_COMPAT: 0 # https://github.com/actions/setup-python/issues/469#issuecomment-1192522949
steps:
- name: Check out repository
uses: actions/checkout@v3

- name: Build wheels
uses: pypa/[email protected]
with:
package-dir: "bindings/python"
env:
CIBW_ARCHS: ${{ matrix.cibw_archs }}
CIBW_BUILD: ${{ matrix.cibw_build }}
CIBW_TEST_SKIP: "*"

- uses: actions/upload-artifact@v3
with:
path: wheelhouse/*.whl

build_wheels_macos_arm64:
name: "${{ matrix.os }} ${{ matrix.cibw_archs }} ${{ matrix.cibw_build }}"
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [macos-latest]
cibw_build: ["cp38-*", "cp39-*", "cp310-*", "cp311-*"]
cibw_archs: ["arm64"]

steps:
- name: Check out repository
uses: actions/checkout@v3

- uses: actions/setup-python@v4
with:
python-version: "3.11"

- name: Build wheels
uses: pypa/[email protected]
with:
package-dir: "bindings/python"
env:
CIBW_BUILD: ${{ matrix.cibw_build }}
CIBW_ARCHS: ${{ matrix.cibw_archs }}
CIBW_TEST_SKIP: "*"
CIBW_REPAIR_WHEEL_COMMAND: |
echo "Target delocate archs: {delocate_archs}"

ORIGINAL_WHEEL={wheel}

echo "Running delocate-listdeps to list linked original wheel dependencies"
delocate-listdeps --all $ORIGINAL_WHEEL

echo "Renaming .whl file when architecture is 'macosx_arm64'"
RENAMED_WHEEL=${ORIGINAL_WHEEL//x86_64/arm64}

echo "Wheel will be renamed to $RENAMED_WHEEL"
mv $ORIGINAL_WHEEL $RENAMED_WHEEL

echo "Running delocate-wheel command on $RENAMED_WHEEL"
delocate-wheel --require-archs {delocate_archs} -w {dest_dir} -v $RENAMED_WHEEL

echo "Running delocate-listdeps to list linked wheel dependencies"
WHEEL_SIMPLE_FILENAME="${RENAMED_WHEEL##*/}"
delocate-listdeps --all {dest_dir}/$WHEEL_SIMPLE_FILENAME

echo "DONE."

- uses: actions/upload-artifact@v3
with:
path: wheelhouse/*.whl

upload_to_pypi:
if: |
(github.event_name == 'push' && startsWith(github.event.ref, 'refs/tags/'))
|| github.event_name == 'workflow_dispatch'
needs:
[
"build_sdist",
"build_wheels_windows",
"build_wheels_linux",
"build_wheels_macos",
"build_wheels_macos_arm64",
]
runs-on: ubuntu-latest
if: startsWith(github.ref, 'refs/tags')
steps:
- uses: actions/download-artifact@v2
- uses: actions/download-artifact@v3
with:
name: artifact
path: dist
Expand Down