name: Python Binding
on: [push, pull_request]
jobs:
build: name: >
build ${{ matrix.python-version }} on ${{ matrix.platform || matrix.os }}
(${{ matrix.alt_arch_name || matrix.arch }})
strategy:
fail-fast: false
matrix:
os: [ubuntu, macos, windows]
python-version: ['cp310', 'pp37', 'pp38', 'pp39']
arch: [main, alt]
include:
- os: ubuntu
platform: linux
- os: windows
ls: dir
- os: macos
arch: alt
alt_arch_name: 'arm64 universal2'
exclude:
- os: windows
arch: alt
- os: macos
python-version: 'pp37'
arch: alt
- os: macos
python-version: 'pp38'
arch: alt
- os: macos
python-version: 'pp39'
arch: alt
- os: ubuntu
arch: alt
runs-on: ${{ format('{0}-latest', matrix.os) }}
steps:
- uses: actions/checkout@v3
- name: set up python
uses: actions/setup-python@v3
with:
python-version: '3.9'
- name: set up rust
uses: actions-rs/toolchain@v1
with:
profile: minimal
toolchain: stable
override: true
- name: Setup Rust cache
uses: Swatinem/rust-cache@v2
with:
key: ${{ matrix.alt_arch_name }}
- run: rustup target add aarch64-apple-darwin
if: matrix.os == 'macos'
- run: rustup toolchain install stable-i686-pc-windows-msvc
if: matrix.os == 'windows'
- run: rustup target add i686-pc-windows-msvc
if: matrix.os == 'windows'
- name: Get pip cache dir
id: pip-cache
run: |
echo "::set-output name=dir::$(pip cache dir)"
- name: Cache python dependencies
uses: actions/cache@v3
with:
path: ${{ steps.pip-cache.outputs.dir }}
key: ${{ runner.os }}-pip-${{ matrix.python-version }}
- name: install python dependencies
run: pip install -U setuptools wheel twine cibuildwheel platformdirs
- name: Display cibuildwheel cache dir
id: cibuildwheel-cache
run: |
from platformdirs import user_cache_path
print('::set-output name=dir::' + str(user_cache_path(appname='cibuildwheel', appauthor='pypa')))
shell: python
- name: Cache cibuildwheel tools
uses: actions/cache@v3
with:
path: ${{ steps.cibuildwheel-cache.outputs.dir }}
key: ${{ runner.os }}-cibuildwheel-${{ matrix.python-version }}
- name: build sdist
if: matrix.os == 'ubuntu' && matrix.python-version == 'cp310'
run: |
pip install maturin build
python -m build --sdist -o wheelhouse
- name: build ${{ matrix.platform || matrix.os }} binaries
run: cibuildwheel --output-dir wheelhouse
env:
CIBW_BUILD: '${{ matrix.python-version }}-*'
CIBW_SKIP: '*-musllinux_*'
CIBW_ARCHS: ${{ matrix.alt_arch_name || 'auto' }}
CIBW_ENVIRONMENT: 'PATH="$HOME/.cargo/bin:$PATH"'
CIBW_ENVIRONMENT_WINDOWS: 'PATH="$UserProfile\.cargo\bin;$PATH"'
CIBW_BEFORE_BUILD: rustup show
CIBW_BEFORE_BUILD_LINUX: >
curl https://sh.rustup.rs -sSf | sh -s -- --default-toolchain=stable --profile=minimal -y &&
rustup show
CIBW_BEFORE_ALL_LINUX: 'yum install -y openssl-devel || apt-get openssl -y'
CIBW_BUILD_VERBOSITY: 1
- run: ${{ matrix.ls || 'ls -lh' }} wheelhouse/
- run: twine check wheelhouse/*
- uses: actions/upload-artifact@v2
with:
name: wheels
path: wheelhouse
release:
needs: [build]
if: "success() && startsWith(github.ref, 'refs/tags/')"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: set up python
uses: actions/setup-python@v3
with:
python-version: '3.10'
- run: pip install -U twine
- name: get wheelhouse artifacts
uses: actions/download-artifact@v2
with:
name: wheels
path: wheelhouse
- run: twine check wheelhouse/*
- name: upload to pypi
run: twine upload wheelhouse/*
env:
TWINE_USERNAME: __token__
TWINE_PASSWORD: ${{ secrets.pypi_token }}
- name: Upload artifacts to release
uses: softprops/action-gh-release@v1
with:
files: wheelhouse/*