Skip to content

CI Build Wheel

CI Build Wheel #58

name: CI Build Wheel
on:
release:
types:
- created
workflow_dispatch:
jobs:
build_wheels:
name: Build wheels on ${{ matrix.os }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
env:
CIBW_ARCHS_LINUX: auto # aarch64
CIBW_ARCHS_MACOS: x86_64 universal2
CIBW_ARCHS_WINDOWS: auto
CIBW_ENVIRONMENT_LINUX: 'PATH="$PATH:/usr/share/rust/.cargo/bin:$HOME/.cargo/bin"'
CIBW_ENVIRONMENT_MACOS: 'PATH="$PATH:/usr/share/rust/.cargo/bin:$HOME/.cargo/bin"'
CIBW_ENVIRONMENT_WINDOWS: 'RUSTFLAGS="-Ctarget-feature=+crt-static"'
CIBW_BUILD: "cp39-*"
CIBW_SKIP: "cp39-musl*"
CIBW_BEFORE_ALL_LINUX: >
yum install -y libffi-devel openssl-devel &&
curl https://sh.rustup.rs -sSf | sh -s -- --default-toolchain 1.63.0 --profile=minimal -y &&
rustup show &&
cargo install empty-library || true
CIBW_BUILD_VERBOSITY: 1
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Install Rust
if: runner.os != 'Linux'
uses: actions-rs/toolchain@v1
with:
toolchain: 1.63.0
profile: minimal
- name: Install Rust aarch64-apple-darwin target
if: runner.os == 'macOS'
run: rustup target add aarch64-apple-darwin
# - name: Set up QEMU
# if: runner.os == 'Linux'
# uses: docker/setup-qemu-action@v2
# with:
# platforms: arm64,arm
- uses: actions/setup-python@v4
name: Install Python
with:
python-version: 3.9
- name: Build wheels
uses: pypa/cibuildwheel@v2.11.2
- uses: actions/upload-artifact@v2
with:
name: wheels
path: ./wheelhouse/*.whl
linux-armv6:
name: Cross-build wheels for linux-armv6
runs-on: macos-latest
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
- uses: actions/setup-python@v4
with:
python-version: 3.9
- name: Install Rust toolchain
uses: actions-rs/toolchain@v1
with:
toolchain: 1.63.0
profile: minimal
target: arm-unknown-linux-gnueabihf
default: true
- name: Install cross toolchain and build
run: |
brew tap messense/macos-cross-toolchains
brew install arm-unknown-linux-gnueabihf
export CC_arm_unknown_linux_gnueabihf=arm-unknown-linux-gnueabihf-gcc
export CXX_arm_unknown_linux_gnueabihf=arm-unknown-linux-gnueabihf-g++
export AR_arm_unknown_linux_gnueabihf=arm-unknown-linux-gnueabihf-ar
export CARGO_TARGET_ARM_UNKNOWN_LINUX_GNUEABIHF_LINKER=arm-unknown-linux-gnueabihf-gcc
pip3 install maturin cffi
maturin build --release --target arm-unknown-linux-gnueabihf --out wheelhouse
- name: Upload wheels
uses: actions/upload-artifact@v2
with:
name: wheels
path: ./wheelhouse/*.whl
linux-armv7:
name: Cross-build wheels for linux-armv7
runs-on: macos-latest
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
- uses: actions/setup-python@v4
with:
python-version: 3.9
- name: Install Rust toolchain
uses: actions-rs/toolchain@v1
with:
toolchain: 1.63.0
profile: minimal
target: armv7-unknown-linux-gnueabihf
default: true
- name: Install cross toolchain and build
run: |
brew tap messense/macos-cross-toolchains
brew install armv7-unknown-linux-gnueabihf
export CC_armv7_unknown_linux_gnueabihf=armv7-unknown-linux-gnueabihf-gcc
export CXX_armv7_unknown_linux_gnueabihf=armv7-unknown-linux-gnueabihf-g++
export AR_armv7_unknown_linux_gnueabihf=armv7-unknown-linux-gnueabihf-ar
export CARGO_TARGET_ARMV7_UNKNOWN_LINUX_GNUEABIHF_LINKER=armv7-unknown-linux-gnueabihf-gcc
pip3 install maturin cffi
maturin build --release --target armv7-unknown-linux-gnueabihf --out wheelhouse
- name: Upload wheels
uses: actions/upload-artifact@v2
with:
name: wheels
path: ./wheelhouse/*.whl
linux-aarch64:
name: Cross-build wheels for linux-aarch64
runs-on: macos-latest
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
- uses: actions/setup-python@v4
with:
python-version: 3.9
- name: Install Rust toolchain
uses: actions-rs/toolchain@v1
with:
toolchain: 1.63.0
profile: minimal
target: aarch64-unknown-linux-gnu
default: true
- name: Install cross toolchain and build
run: |
brew tap messense/macos-cross-toolchains
brew install aarch64-unknown-linux-gnu
export CC_aarch64_unknown_linux_gnu=aarch64-unknown-linux-gnu-gcc
export CXX_aarch64_unknown_linux_gnu=aarch64-unknown-linux-gnu-g++
export AR_aarch64_unknown_linux_gnu=aarch64-unknown-linux-gnu-ar
export CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=aarch64-unknown-linux-gnu-gcc
pip3 install maturin cffi
maturin build --release --target aarch64-unknown-linux-gnu --out wheelhouse
- name: Upload wheels
uses: actions/upload-artifact@v2
with:
name: wheels
path: ./wheelhouse/*.whl
test-cross:
name: Test cross-built wheels (${{ matrix.platform.arch }})
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
platform:
- distro: ubuntu22.04
arch: aarch64
# - distro: bullseye
# arch: armv7
- distro: bullseye
arch: armv6
needs: [linux-armv6, linux-armv7, linux-aarch64]
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
- uses: actions/download-artifact@v3
with:
name: wheels
path: ./wheelhouse
- uses: uraimo/run-on-arch-action@v2.3.0
name: Install built wheel
with:
arch: ${{ matrix.platform.arch }}
distro: ${{ matrix.platform.distro }}
githubToken: ${{ github.token }}
install: |
apt-get update
apt-get install -y --no-install-recommends python3 python3-pip
pip3 install -U pip
run: |
pip3 install -U 'appdirs>=1.4,<2.0' cffi 'pyyaml>=6.0,<7.0' 'pytest>=6.0' hypothesis jinja2
pip3 install cmsis-pack-manager --no-index --find-links ./wheelhouse
rm -rf cmsis_pack_manager
python3 -c "import cmsis_pack_manager"
pytest --cache-clear