name: CI (full matrix)
on:
push:
branches: [main]
schedule:
- cron: "0 7 * * 1" workflow_dispatch:
permissions:
contents: read
env:
RUST_MIN_STACK: 16777216
concurrency:
group: ci-full-${{ github.ref }}
cancel-in-progress: true
jobs:
rust:
strategy:
fail-fast: false
matrix:
rust: ["1.90", "stable", "beta"]
os:
- ubuntu-latest
- windows-latest
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v6
- uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ matrix.rust }}
- run: cargo test --workspace --locked
python:
strategy:
fail-fast: false
matrix:
python-version: ["3.10", "3.13"]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: dtolnay/rust-toolchain@stable
- uses: astral-sh/setup-uv@v8.1.0
- name: Build and install Python binding
working-directory: bindings/python
run: |
uv venv --python ${{ matrix.python-version }}
uv pip install maturin pytest
uv run maturin develop --release
- name: Run conformance suite
working-directory: bindings/python
run: uv run pytest tests/conformance/ -v
go:
strategy:
fail-fast: false
matrix:
go-version: ["1.23", "1.26"]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: dtolnay/rust-toolchain@stable
- uses: actions/setup-go@v6
with:
go-version: ${{ matrix.go-version }}
cache: false - run: make -C bindings/go test
node:
strategy:
fail-fast: false
matrix:
node-version: ["20", "22"]
runs-on: ubuntu-latest
defaults:
run:
working-directory: bindings/node
steps:
- uses: actions/checkout@v6
- uses: dtolnay/rust-toolchain@stable
- uses: actions/setup-node@v6
with:
node-version: ${{ matrix.node-version }}
- run: npm install
- run: npx napi build --platform --release
- run: npm test
c:
strategy:
fail-fast: false
matrix:
compiler: [gcc, clang]
runs-on: ubuntu-latest
env:
CC: ${{ matrix.compiler }}
steps:
- uses: actions/checkout@v6
- uses: dtolnay/rust-toolchain@stable
- run: make -C bindings/ffi conformance
tck:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: dtolnay/rust-toolchain@stable
- run: cargo test --test tck --features tck-support --locked