name: Rust
on:
push:
branches: ["main"]
pull_request:
branches: ["main"]
env:
CARGO_TERM_COLOR: always
RUSTFLAGS: -D warnings
jobs:
test:
name: Test (${{ matrix.os }}, ${{ matrix.features }})
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest]
features:
- "--no-default-features"
- "--features alloc"
- "--features serde"
- "--all-features"
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- name: Test
run: cargo test ${{ matrix.features }} --verbose
lint:
name: Clippy and rustfmt
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
components: clippy, rustfmt
- name: Clippy
run: cargo clippy --all-features --all-targets -- -D warnings
- name: Format
run: cargo fmt --check
msrv:
name: MSRV (1.85)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@1.85
- name: Check
run: cargo check --all-features
no-std:
name: no_std (thumbv7em-none-eabi)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
targets: thumbv7em-none-eabi
- name: Build core
run: cargo build --target thumbv7em-none-eabi --no-default-features
- name: Build with all features
run: cargo build --target thumbv7em-none-eabi --features full
docs:
name: Docs (docs.rs configuration)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@nightly
- name: Build docs
run: cargo doc --all-features --no-deps
env:
RUSTDOCFLAGS: --cfg docsrs -D warnings
wasm:
name: wasm32-wasip1 (node WASI)
runs-on: ubuntu-latest
env:
CARGO_TARGET_WASM32_WASIP1_RUNNER: node --no-warnings ${{ github.workspace }}/ci/wasi-runner.mjs
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
targets: wasm32-wasip1
- name: Test (portable paths)
run: cargo test --target wasm32-wasip1 --test contract_tests --test property_tests --test tests
- name: Test (simd128 kernels)
run: cargo test --target wasm32-wasip1 --features simd --test contract_tests --test property_tests --test tests
env:
RUSTFLAGS: -C target-feature=+simd128
big-endian:
name: Big-endian (s390x)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- uses: taiki-e/install-action@v2
with:
tool: cross@0.2.5
fallback: none
- name: Test portable paths
run: cross test --target s390x-unknown-linux-gnu --no-default-features --test contract_tests --test property_tests --test tests
- name: Test serde
run: cross test --target s390x-unknown-linux-gnu --features serde --test serde_tests
fuzz:
name: Fuzz smoke tests
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@nightly
- name: Install cargo-fuzz
run: cargo install cargo-fuzz --version 0.13.2 --locked
- name: Fuzz checked decoders
run: cargo fuzz run decode_arbitrary -- -max_total_time=10
- name: Fuzz serde visitors
run: cargo fuzz run serde_arbitrary -- -max_total_time=10
semver:
name: Semver compatibility
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: obi1kenobi/cargo-semver-checks-action@v2