name: ci
on:
pull_request:
push:
branches:
- main
schedule:
- cron: '00 01 * * *'
concurrency:
group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.head_ref || github.ref }}
cancel-in-progress: true
jobs:
rustfmt:
name: rustfmt
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: dtolnay/rust-toolchain@stable
with:
toolchain: stable
components: rustfmt
- run: cargo fmt --all -- --check
typos:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: crate-ci/typos@master
clippy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: dtolnay/rust-toolchain@stable
with:
toolchain: stable
components: clippy
- run: cargo clippy --all-targets --workspace -- -D warnings
cargo-deny:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: EmbarkStudios/cargo-deny-action@v2
build_and_test:
name: ${{ matrix.tuple.build }}
needs: [rustfmt, clippy, typos]
runs-on: ${{ matrix.tuple.os }}
env:
CARGO: cargo
strategy:
fail-fast: false
matrix:
tuple:
- { build: 'linux-x86_64-pinned', os: 'ubuntu-22.04', target: 'x86_64-unknown-linux-gnu', cross: false, rust: 1.92.0 }
- { build: 'windows-x86_64-pinned', os: 'windows-2019', target: 'x86_64-pc-windows-msvc', cross: false, rust: 1.92.0 }
- { build: 'macos-x86_64-pinned', os: 'macos-latest', target: 'x86_64-apple-darwin', cross: false, rust: 1.92.0 }
- { build: 'linux-x86_64', os: 'ubuntu-latest', target: 'x86_64-unknown-linux-gnu', cross: false, rust: stable }
- { build: 'linux-i686', os: 'ubuntu-latest', target: 'i686-unknown-linux-gnu', cross: true, rust: stable }
- { build: 'linux-arm-gnu', os: 'ubuntu-latest', target: 'aarch64-unknown-linux-gnu', cross: true, rust: stable } - { build: 'linux-arm-musl', os: 'ubuntu-latest', target: 'aarch64-unknown-linux-musl', cross: true, rust: stable } - { build: 'macos-x86_64', os: 'macos-latest', target: 'x86_64-apple-darwin', cross: false, rust: stable }
- { build: 'windows-x86_64-msvc', os: 'windows-latest', target: 'x86_64-pc-windows-msvc', cross: false, rust: stable }
- { build: 'windows-i686-msvc', os: 'windows-latest', target: 'i686-pc-windows-msvc', cross: false, rust: stable }
- { build: 'windows-x86_64-mingw', os: 'windows-latest', target: 'x86_64-pc-windows-gnu', cross: false, rust: stable }
steps:
- uses: actions/checkout@v6
- name: Disable rustup self-update
shell: bash
run: rustup set auto-self-update disable
- name: Install toolchain
uses: dtolnay/rust-toolchain@stable
with:
toolchain: ${{ matrix.tuple.rust }}
target: ${{ matrix.tuple.target }}
- name: Install cross
if: matrix.tuple.cross != false
run: |
cargo install cross
echo "CARGO=cross" >> $GITHUB_ENV
- name: Check
run: |
echo "cargo command is: ${{ env.CARGO }}"
# this runs check for the target to use for (cross) compilation (must exist in rustup)
${{ env.CARGO }} check --verbose --target=${{ matrix.tuple.target }}
- name: Test
run: ${{ env.CARGO }} test --verbose --target=${{ matrix.tuple.target }} --no-fail-fast
docs:
name: Docs
runs-on: ubuntu-latest
needs: [build_and_test]
steps:
- uses: actions/checkout@v6
- uses: dtolnay/rust-toolchain@stable
with:
toolchain: stable
components: rustfmt
env:
RUSTDOCFLAGS: -D warnings
- run: cargo doc --no-deps --document-private-items --workspace