name: Test
on:
push:
branches: ['dev']
pull_request:
branches: ['main']
jobs:
test:
name: ${{ matrix.name }}
runs-on: ${{ matrix.runner }}
defaults:
run:
shell: bash
strategy:
fail-fast: false
matrix:
include:
- name: linux-x86_64
runner: ubuntu-latest
target: x86_64-unknown-linux-gnu
mode: native
- name: linux-aarch64
runner: ubuntu-24.04-arm
target: aarch64-unknown-linux-gnu
mode: native
- name: macos-x86_64
runner: macos-15-intel
target: x86_64-apple-darwin
mode: native
- name: macos-aarch64
runner: macos-latest
target: aarch64-apple-darwin
mode: native
- name: windows-x86_64
runner: windows-latest
target: x86_64-pc-windows-msvc
mode: native
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
with:
targets: ${{ matrix.target }}
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: '3.11'
- name: Install Python deps
run: |
python -m venv .venv
PYTHON_BIN=".venv/bin/python"
if [ -f ".venv/Scripts/python.exe" ]; then
PYTHON_BIN=".venv/Scripts/python.exe"
fi
"$PYTHON_BIN" -m pip install --upgrade pip maturin pytest
- name: Test Rust
if: matrix.mode == 'native'
run: cargo test --target ${{ matrix.target }} --lib --tests --bins
- name: Test Python
if: matrix.mode == 'native'
run: |
PYTHON_BIN=".venv/bin/python"
if [ -f ".venv/Scripts/python.exe" ]; then
PYTHON_BIN=".venv/Scripts/python.exe"
fi
"$PYTHON_BIN" -m maturin develop --release --target ${{ matrix.target }}
"$PYTHON_BIN" -m pytest