name: CI
permissions:
contents: read
on:
pull_request:
paths-ignore:
- README.md
push:
branches: main
paths-ignore:
- README.md
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
rust:
- stable
- beta
- nightly-2025-04-01
steps:
- uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab - uses: dtolnay/rust-toolchain@a3ac054b2e7d62f514aa1bd57e3508c522fe772d with:
toolchain: ${{ matrix.rust }}
components: rustfmt
- run: cargo +${{ matrix.rust }} build --release --workspace
- run: cargo +${{ matrix.rust }} build --release --workspace --features=std
test:
runs-on: ubuntu-latest
strategy:
matrix:
rust:
- stable
- beta
- nightly-2025-04-01
steps:
- uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab with:
submodules: true
- uses: dtolnay/rust-toolchain@a3ac054b2e7d62f514aa1bd57e3508c522fe772d with:
toolchain: ${{ matrix.rust }}
components: rustfmt
- run: cargo +${{ matrix.rust }} test --workspace -- --nocapture
- run: cargo +${{ matrix.rust }} test --workspace --features=std -- --nocapture
examples:
runs-on: ubuntu-latest
strategy:
matrix:
rust:
- stable
- beta
- nightly-2025-04-01
steps:
- uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab with:
submodules: true
- uses: dtolnay/rust-toolchain@a3ac054b2e7d62f514aa1bd57e3508c522fe772d with:
toolchain: ${{ matrix.rust }}
components: rustfmt
- run: |
for eg in `ls examples/*.rs | xargs basename --suffix=.rs`; do
cargo +${{ matrix.rust }} run --example ${eg};
cargo +${{ matrix.rust }} run --features=std --example ${eg};
done
no_std:
name: Build for a no_std target
runs-on: ubuntu-latest
strategy:
matrix:
rust:
- stable
- beta
- nightly-2025-04-01
steps:
- uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab - uses: dtolnay/rust-toolchain@a3ac054b2e7d62f514aa1bd57e3508c522fe772d with:
toolchain: ${{ matrix.rust }}
components: rustfmt
targets: thumbv6m-none-eabi
- run: cargo +${{ matrix.rust }} build --release --workspace --target thumbv6m-none-eabi
msrv:
name: Rust ${{matrix.rust}} MSRV
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
rust: [1.81.0, 1.82.0]
steps:
- uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab with:
submodules: true
- uses: dtolnay/rust-toolchain@a3ac054b2e7d62f514aa1bd57e3508c522fe772d with:
toolchain: ${{ matrix.rust }}
components: rustfmt
- run: rustc --version
- run: cargo +${{ matrix.rust }} build --release --workspace
- run: cargo +${{ matrix.rust }} build --release --workspace --all-features
formatting:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab - uses: actions/setup-go@6edd4406fa81c3da01a34fa6f6343087c207a568 - run: go install github.com/campoy/embedmd@97c13d6
- uses: ruby/setup-ruby@c04af2bb7258bb6a03df1d3c1865998ac9390972 with:
ruby-version: '2.7'
bundler-cache: true
- run: gem install mixlib-shellout -v 3.3.8
- run: gem install mdl -v 0.14.0
- uses: dtolnay/rust-toolchain@a3ac054b2e7d62f514aa1bd57e3508c522fe772d with:
toolchain: nightly-2025-04-01
components: rustfmt
- run: cargo +nightly-2025-04-01 fmt --all -- --check
- run: scripts/check-format.sh
clippy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab - uses: dtolnay/rust-toolchain@a3ac054b2e7d62f514aa1bd57e3508c522fe772d with:
toolchain: stable
components: rustfmt, clippy
- run: cargo +stable clippy --all-features --all-targets -- -Dwarnings
- run: git diff --exit-code
doc:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab - uses: dtolnay/rust-toolchain@a3ac054b2e7d62f514aa1bd57e3508c522fe772d with:
toolchain: stable
- run: RUSTDOCFLAGS="-Dwarnings" cargo doc --no-deps --document-private-items
udeps:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab - uses: dtolnay/rust-toolchain@a3ac054b2e7d62f514aa1bd57e3508c522fe772d with:
toolchain: nightly-2025-04-01
components: rustfmt
- run: cargo +nightly-2025-04-01 install --locked --version 0.1.59 cargo-udeps
- run: cargo +nightly-2025-04-01 udeps
deny:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab - uses: dtolnay/rust-toolchain@a3ac054b2e7d62f514aa1bd57e3508c522fe772d with:
toolchain: stable
components: rustfmt
- run: cargo install --locked --version 0.19.0 cargo-deny
- run: cargo deny check
coverage:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab with:
submodules: true
fetch-depth: 0
- uses: dtolnay/rust-toolchain@a3ac054b2e7d62f514aa1bd57e3508c522fe772d with:
toolchain: stable
components: rustfmt
- uses: actions-rs/install@69ec87709ffb5b19a7b5ddbf610cb221498bb1eb with:
crate: cargo-tarpaulin
version: 0.30.0
use-tool-cache: true
- run: cargo tarpaulin --verbose --ignore-tests --all-features --timeout=600 --out Xml
- name: Upload to codecov.io
run: |
bash <(curl -s https://codecov.io/bash)