Build and Publish #19
This file contains hidden or 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: Build and Publish | |
| on: | |
| release: | |
| types: [published] | |
| jobs: | |
| # Build wheels on Linux using manylinux container | |
| build-linux: | |
| name: Build Linux wheels | |
| runs-on: ubuntu-latest | |
| container: quay.io/pypa/manylinux_2_28_x86_64 | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Install dependencies | |
| run: | | |
| dnf install -y openblas-devel openssl-devel perl-IPC-Cmd | |
| curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --no-modify-path | |
| /opt/python/cp312-cp312/bin/pip install maturin | |
| - name: Build wheels | |
| run: | | |
| export PATH="$HOME/.cargo/bin:$PATH" | |
| for pyver in 39 310 311 312; do | |
| pybin="/opt/python/cp${pyver}-cp${pyver}/bin/python" | |
| if [ -f "$pybin" ]; then | |
| /opt/python/cp312-cp312/bin/maturin build --release --out dist -i "$pybin" --features extension-module | |
| fi | |
| done | |
| - name: Upload wheels | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: wheels-linux-x86_64 | |
| path: dist/*.whl | |
| # Build wheels on macOS x86_64 (native build) | |
| build-macos-x86: | |
| name: Build macOS x86_64 wheels | |
| runs-on: macos-13 | |
| strategy: | |
| matrix: | |
| python-version: ['3.9', '3.10', '3.11', '3.12'] | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Set up Python | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: ${{ matrix.python-version }} | |
| - name: Install Rust | |
| uses: dtolnay/rust-toolchain@stable | |
| - name: Install OpenBLAS | |
| run: brew install openblas | |
| - name: Install maturin | |
| run: pip install maturin | |
| - name: Build wheel | |
| run: | | |
| export OPENBLAS_DIR=$(brew --prefix openblas) | |
| export PKG_CONFIG_PATH=$(brew --prefix openblas)/lib/pkgconfig | |
| maturin build --release --out dist --features extension-module | |
| - name: Upload wheels | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: wheels-macos-x86_64-py${{ matrix.python-version }} | |
| path: dist/*.whl | |
| # Build wheels on macOS ARM64 (native build) | |
| build-macos-arm: | |
| name: Build macOS ARM64 wheels | |
| runs-on: macos-14 | |
| strategy: | |
| matrix: | |
| python-version: ['3.9', '3.10', '3.11', '3.12'] | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Set up Python | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: ${{ matrix.python-version }} | |
| - name: Install Rust | |
| uses: dtolnay/rust-toolchain@stable | |
| - name: Install OpenBLAS | |
| run: brew install openblas | |
| - name: Install maturin | |
| run: pip install maturin | |
| - name: Build wheel | |
| run: | | |
| export OPENBLAS_DIR=$(brew --prefix openblas) | |
| export PKG_CONFIG_PATH=$(brew --prefix openblas)/lib/pkgconfig | |
| maturin build --release --out dist --features extension-module | |
| - name: Upload wheels | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: wheels-macos-arm64-py${{ matrix.python-version }} | |
| path: dist/*.whl | |
| # Build source distribution | |
| build-sdist: | |
| name: Build source distribution | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Set up Python | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: '3.11' | |
| - name: Install maturin | |
| run: pip install maturin | |
| - name: Build sdist | |
| run: maturin sdist --out dist | |
| - name: Upload sdist | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: sdist | |
| path: dist/*.tar.gz | |
| # Publish to PyPI | |
| # Windows users install from sdist and get pure Python fallback | |
| publish: | |
| name: Publish to PyPI | |
| needs: [build-linux, build-macos-x86, build-macos-arm, build-sdist] | |
| runs-on: ubuntu-latest | |
| environment: pypi | |
| permissions: | |
| id-token: write | |
| steps: | |
| - name: Download all artifacts | |
| uses: actions/download-artifact@v4 | |
| with: | |
| path: dist | |
| merge-multiple: true | |
| - name: Publish to PyPI | |
| uses: pypa/gh-action-pypi-publish@release/v1 |