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

[nlpo3-python] Add builds for more platforms #86

Merged
merged 10 commits into from
Nov 11, 2024
113 changes: 28 additions & 85 deletions .github/workflows/build-python-wheels.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# Build wheels for many platforms
# Build wheels for many platforms, use cibuildwheel
# see: https://github.com/pypa/cibuildwheel

name: Build Python wheels
name: Build wheels

on:
push:
Expand All @@ -27,7 +27,7 @@ on:

jobs:
echo_github_env:
name: Echo GitHub environment variables
name: Echo env variables
runs-on: ubuntu-latest
steps:
- run: |
Expand Down Expand Up @@ -56,131 +56,74 @@ jobs:
# To trigger the build steps, add "[cd build]" to commit message

build_wheels:
name: Build ${{ matrix.python-version }}-${{ matrix.platform_id }}
name: Build ${{ matrix.os }}
runs-on: ${{ matrix.os }}
needs: check_build_trigger
if: needs.check_build_trigger.outputs.build
strategy:
# Ensure that a wheel builder finishes even if another fails
fail-fast: false
# For build identier, see:
# https://cibuildwheel.pypa.io/en/stable/options/#build-skip
matrix:
os: [macos-latest, ubuntu-latest, windows-latest]
python-version: ["3.13", "3.12", "3.11", "3.10", "3.9", "3.8", "3.7", "pypy3.10", "pypy3.9"]
bitness: [64, 32]
include:
- os: macos-latest
bitness: 64
platform_id: macosx_x86_64
- os: macos-latest
bitness: 64
platform_id: macosx_arm64
- os: ubuntu-latest
bitness: 64
platform_id: manylinux_x86_64
- os: ubuntu-latest
bitness: 32
platform_id: manylinux_i686
# - os: ubuntu-latest
# bitness: 64
# platform_id: musllinux_x86_64
# - os: ubuntu-latest
# bitness: 32
# platform_id: musllinux_i686
# - os: ubuntu-latest
# bitness: 64
# platform_id: manylinux_aarch64
# - os: ubuntu-latest
# bitness: 64
# platform_id: musllinux_aarch64
- os: windows-latest
bitness: 64
platform_id: win_amd64
- os: windows-latest
bitness: 32
platform_id: win32
exclude:
- os: macos-latest
bitness: 32
- os: macos-latest
python-version: "3.7"
- python-version: "pypy3.10"
bitness: 32
- python-version: "pypy3.9"
bitness: 32
python-version: ["3.13"]
env:
CP_VER: ""
CIBW_BUILD: "" # blank, let cibuildwheel build all supported platforms

steps:
# cibuildwheel needs a specific Python implementation ID
- name: Make Python implementation ID
id: convert-version-id
if: startsWith(matrix.os, 'windows-') == false
run: |
PYTHON_VERSION=${{ matrix.python-version }}
if [[ "$PYTHON_VERSION" == pypy* ]]; then
CP_VER="pp${PYTHON_VERSION:4}"
CP_VER="${CP_VER//./}"
else
CP_VER="cp${PYTHON_VERSION//./}"
fi
echo "Python version: $CP_VER"
echo "CP_VER=$CP_VER" >> $GITHUB_ENV
- name: Make Python implementation ID (Windows)
id: convert-version-id-win
if: startsWith(matrix.os, 'windows-')
shell: powershell
run: |
$PYTHON_VERSION = "${{ matrix.python-version }}"
if ($PYTHON_VERSION -like "pypy*") {
$CP_VER = "pp" + $PYTHON_VERSION.Substring(4).Replace(".", "")
} else {
$CP_VER = "cp" + $PYTHON_VERSION.Replace(".", "")
}
echo "Python version: $CP_VER"
echo "CP_VER=$CP_VER" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
- name: Checkout source code
uses: actions/checkout@v4

- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
cache: "pip"
- name: Install Python dependencies
run: python -m pip install --upgrade pip

- name: Setup Rust toolchain
if: startsWith(matrix.os, 'ubuntu-') == false
uses: actions-rust-lang/setup-rust-toolchain@v1
# For Linux, Rust will be installed inside a cibuildwheel container later
- name: Install Python dependencies
run: python -m pip install --upgrade pip

- name: Setup rustup target
if: startsWith(matrix.os, 'macos-')
run: rustup target add x86_64-apple-darwin
# For cross-compile x86 on GitHub arm64 runner

- name: Build Python wheels
uses: pypa/[email protected]
with:
package-dir: nlpo3-python
output-dir: wheelhouse
env:
CIBW_BUILD_VERBOSITY: 1
# See build selector name at:
# See CIBW_BUILD, CIBW_SKIP, CIBW_ARCHS and other build selectors at:
# https://cibuildwheel.readthedocs.io/en/stable/options/#build-skip
CIBW_BUILD: ${{ env.CP_VER }}-${{ matrix.platform_id }}
CIBW_SKIP: "*-musllinux_i686"
CIBW_ARCHS_MACOS: "x86_64 arm64"
CIBW_ENVIRONMENT_MACOS: |
MACOSX_DEPLOYMENT_TARGET=10.9
PATH="$HOME/.cargo/bin:$PATH"
CC=/usr/bin/clang
CXX=/usr/bin/clang++
CIBW_ARCHS_LINUX: "auto"
CIBW_ENVIRONMENT_LINUX: PATH="$HOME/.cargo/bin:$PATH"
CIBW_BEFORE_BUILD_LINUX: |
pip install --upgrade setuptools-rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
# It is needed to install Rust for Linux,
# because cibuildwheel on Linux runs inside a container
# and the container does not have Rust.
CIBW_ARCHS_WINDOWS: "AMD64 x86"

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

build_sdist:
name: Build Python source distribution
name: Build source distribution
runs-on: ubuntu-latest
needs: check_build_trigger
if: needs.check_build_trigger.outputs.build
Expand All @@ -202,13 +145,13 @@ jobs:
path: nlpo3-python/dist/*.tar.gz

publish_pypi:
name: Publish Python package to PyPI
name: Publish to PyPI
runs-on: ubuntu-latest
needs: [build_wheels, build_sdist]
# Upload to PyPI on every tag starting with 'v'
#if: github.event_name == 'push' && startsWith(github.event.ref, 'v')
# Alternatively, to publish when a GitHub Release is created, use the following rule:
# Publish when a GitHub Release is created:
if: github.event_name == 'release' && github.event.action == 'published'
# Alternatively, upload to PyPI on every tag starting with 'v':
#if: github.event_name == 'push' && startsWith(github.event.ref, 'v')
steps:
- name: Retrieve artifacts
uses: actions/download-artifact@v3
Expand Down
Loading