Merge pull request #55 from bamler-lab/dependabot/pip/certifi-2024.7.4 #356
This file contains 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: test | |
on: | |
push: | |
branches: | |
- main | |
pull_request: | |
branches: | |
- main | |
workflow_dispatch: | |
env: | |
CARGO_TERM_COLOR: always | |
jobs: | |
rust-test: | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [ubuntu-latest, macos-latest, windows-latest] | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v1 | |
- name: Install latest stable Rust | |
uses: dtolnay/rust-toolchain@stable | |
id: install-rust | |
with: | |
components: rustfmt, clippy | |
- name: Cache Rust dependencies | |
uses: actions/cache@v4 | |
with: | |
path: | | |
target | |
.cargo_home | |
.cargo | |
key: ${{ runner.os }}-no_pybindings-rust-${{ steps.install-rust.outputs.cachekey }}-${{ hashFiles('Cargo.lock') }} | |
restore-keys: | | |
${{ runner.os }}-no_pybindings-rust-${{ steps.install-rust.outputs.cachekey }}- | |
- name: Check rust formatting | |
run: cargo fmt -- --check | |
- name: Lint with clippy | |
env: | |
RUSTFLAGS: "-D warnings" | |
run: cargo clippy --all-targets --all-features | |
- name: Test in development mode | |
env: | |
RUSTFLAGS: "-D warnings" | |
run: cargo test | |
- name: Test in release mode | |
env: | |
RUSTFLAGS: "-D warnings" | |
run: cargo test --release | |
miri-test: | |
name: no_std and miri | |
runs-on: ${{ matrix.os }} | |
needs: rust-test | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [ubuntu-latest, macos-latest, windows-latest] | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v1 | |
- name: Find out latest rust nightly version that has miri | |
id: rust-version | |
shell: bash | |
run: | | |
case ${{ matrix.os }} in | |
ubuntu-latest) | |
arch="x86_64-unknown-linux-gnu" | |
;; | |
macos-latest) | |
arch="x86_64-apple-darwin" | |
;; | |
windows-latest) | |
arch="x86_64-pc-windows-msvc" | |
;; | |
esac | |
version="nightly-$(curl -s https://rust-lang.github.io/rustup-components-history/$arch/miri)" | |
echo "Found version: $version" | |
echo "rustc=$version" >> $GITHUB_OUTPUT | |
- name: Cache Rust dependencies | |
uses: actions/cache@v4 | |
with: | |
path: | | |
target | |
.cargo_home | |
.cargo | |
key: ${{ runner.os }}-no_pybindings-miri-${{ steps.install-rust.outputs.cachekey }}-${{ hashFiles('Cargo.lock') }} | |
restore-keys: | | |
${{ runner.os }}-no_pybindings-miri-${{ steps.install-rust.outputs.cachekey }}- | |
- name: Install rust ${{ steps.rust-version.outputs.rustc }} | |
uses: dtolnay/rust-toolchain@master | |
id: install-rust | |
with: | |
toolchain: ${{ steps.rust-version.outputs.rustc }} | |
components: miri, rust-src | |
- name: Test `no_std` compatibility | |
shell: bash | |
working-directory: ensure_no_std | |
run: cargo +${{ steps.rust-version.outputs.rustc }} build | |
- name: Run tests in miri | |
env: | |
RUSTFLAGS: "-Zrandomize-layout" | |
MIRIFLAGS: "-Zmiri-symbolic-alignment-check -Zmiri-disable-isolation" | |
run: cargo +${{ steps.rust-version.outputs.rustc }} miri test --no-fail-fast --all-targets | |
python-test: | |
runs-on: ${{ matrix.os }} | |
needs: rust-test | |
strategy: | |
fail-fast: false | |
matrix: | |
python-version: ["3.7", "3.8", "3.9", "3.10", "3.11", "3.12"] | |
os: [ubuntu-latest, macos-latest, windows-latest] | |
exclude: | |
- os: macos-latest | |
python-version: "3.7" | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v1 | |
- name: Set up Python ${{ matrix.python-version }} | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- name: Install Python dependencies | |
run: | | |
python -m pip install --upgrade pip | |
python -m pip install poetry | |
poetry install --no-root | |
- name: Install latest stable Rust | |
uses: dtolnay/rust-toolchain@stable | |
id: install-rust | |
- name: Cache Rust dependencies | |
uses: actions/cache@v4 | |
with: | |
path: | | |
target | |
.cargo_home | |
.cargo | |
key: ${{ runner.os }}-pybindings-rust-${{ steps.install-rust.outputs.cachekey }}-${{ hashFiles('Cargo.lock') }} | |
restore-keys: | | |
${{ runner.os }}-pybindings-rust-${{ steps.install-rust.outputs.cachekey }}- | |
- name: Build Python package | |
run: poetry run maturin develop --release --features pybindings | |
- name: pytest | |
shell: bash | |
run: | | |
poetry run pytest tests/python | tee pytest.out | |
exit ${PIPESTATUS[0]} | |
- name: Verify that pytest used correct python version | |
shell: bash | |
run: | | |
USED_PYTHON_VERSION=$(grep -A1 -iE '^=+ test session starts =+$' pytest.out | perl -ne 'if ($_ =~ / -- Python (\d+\.\d+)\.\d+/i) { print "$1"; }') | |
echo "Expected python version: ${{ matrix.python-version }}" | |
echo "Found python version: $USED_PYTHON_VERSION" | |
if [ "x${{ matrix.python-version }}y" == "x${USED_PYTHON_VERSION}y" ]; then | |
echo "Versions match." | |
else | |
echo "ERROR: versions don't match." | |
exit 1 | |
fi | |
testall: | |
runs-on: ubuntu-latest | |
name: Meta job for all tests | |
needs: [rust-test, miri-test, python-test] | |
steps: | |
- name: Done | |
run: echo "All tests successful." |