Skip to content

Rewrite hexhamming in Rust using PyO3/maturin #148

Rewrite hexhamming in Rust using PyO3/maturin

Rewrite hexhamming in Rust using PyO3/maturin #148

Workflow file for this run

name: build
on:
push:
branches: [ master ]
tags:
- '*'
pull_request:
branches: [ master ]
jobs:
build-and-test:
name: Testing on ${{ matrix.os }} with Python ${{ matrix.python-version }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"]
steps:
- uses: actions/checkout@v4.2.2
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
- name: Install maturin and test dependencies
run: |
python -m pip install --upgrade pip
pip install maturin pytest pytest-benchmark
- name: Build and install with maturin
shell: bash
run: |
maturin build --release
pip install target/wheels/*.whl
- name: Run tests
run: pytest -vls test/
sdist:
if: startsWith(github.ref, 'refs/tags')
needs: build-and-test
name: Source distribution
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4.2.2
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
- name: Build sdist
uses: PyO3/maturin-action@v1
with:
command: sdist
args: --out dist
- name: Upload sdist
uses: actions/upload-artifact@v4
with:
name: wheels-sdist
path: dist/*.tar.gz
wheels_linux:
if: startsWith(github.ref, 'refs/tags')
needs: build-and-test
name: Build Linux ${{ matrix.target }} wheels
runs-on: ubuntu-latest
strategy:
fail-fast: true
matrix:
target: [x86_64, aarch64]
steps:
- uses: actions/checkout@v4.2.2
- name: Set up QEMU
if: matrix.target == 'aarch64'
uses: docker/setup-qemu-action@v3
with:
platforms: arm64
- name: Build wheels
uses: PyO3/maturin-action@v1
with:
target: ${{ matrix.target }}
args: --release --out dist
manylinux: auto
before-script-linux: |
# Install Rust in manylinux container
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
source $HOME/.cargo/env
- name: Upload wheels
uses: actions/upload-artifact@v4
with:
name: wheels-linux-${{ matrix.target }}
path: dist/*.whl
if-no-files-found: error
wheels_macos:
if: startsWith(github.ref, 'refs/tags')
needs: build-and-test
name: Build macOS ${{ matrix.target }} wheels
runs-on: macos-latest
strategy:
fail-fast: true
matrix:
target: [x86_64, aarch64]
steps:
- uses: actions/checkout@v4.2.2
- name: Build wheels
uses: PyO3/maturin-action@v1
with:
target: ${{ matrix.target == 'aarch64' && 'aarch64-apple-darwin' || 'x86_64-apple-darwin' }}
args: --release --out dist
- name: Upload wheels
uses: actions/upload-artifact@v4
with:
name: wheels-macos-${{ matrix.target }}
path: dist/*.whl
if-no-files-found: error
wheels_windows:
if: startsWith(github.ref, 'refs/tags')
needs: build-and-test
name: Build Windows wheels
runs-on: windows-latest
steps:
- uses: actions/checkout@v4.2.2
- name: Build wheels
uses: PyO3/maturin-action@v1
with:
args: --release --out dist
- name: Upload wheels
uses: actions/upload-artifact@v4
with:
name: wheels-windows
path: dist/*.whl
if-no-files-found: error
publish-wheels:
if: startsWith(github.ref, 'refs/tags')
needs: [sdist, wheels_linux, wheels_macos, wheels_windows]
name: Publish wheels
runs-on: ubuntu-latest
environment: pypi
permissions:
id-token: write
steps:
- name: Download all artifacts
uses: actions/download-artifact@v4
with:
path: dist
pattern: wheels-*
merge-multiple: true
- name: Publish to PyPI
uses: PyO3/maturin-action@v1
with:
command: upload
args: --non-interactive dist/*