name: Continuous Integration
permissions:
contents: read
on:
push:
pull_request:
schedule:
- cron: '0 0 7/15 * *'
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
env:
CARGO_INCREMENTAL: 0
RUSTFLAGS: -D warnings
RUSTDOCFLAGS: -D warnings
MINIMAL_RUST: 1.86.0
jobs:
matrix_vars:
runs-on: ubuntu-latest
outputs:
MINIMAL_RUST: ${{ env.MINIMAL_RUST }}
steps:
- name: Forward env var to output
run: echo "MINIMAL_RUST=${{ env.MINIMAL_RUST }}" >> $GITHUB_OUTPUT
format-lints:
if: github.event_name == 'push' || github.event_name == 'schedule' || github.event.pull_request.head.repo.full_name != github.repository
runs-on: ubuntu-latest
strategy:
matrix:
features:
- '""'
- 'std'
env:
FEATURE_FLAGS: '--workspace --no-default-features --features=${{ matrix.features }}'
steps:
- name: Checkout sources
uses: actions/checkout@v6
- name: Install native dependencies
uses: Eeems-Org/apt-cache-action@v1
with:
packages: libhwloc-dev libudev-dev
- name: Set up stable toolchain
if: github.event_name != 'schedule'
uses: actions-rust-lang/setup-rust-toolchain@v1
with:
components: rustfmt,clippy
- name: Set up nightly toolchain
if: github.event_name == 'schedule'
uses: actions-rust-lang/setup-rust-toolchain@v1
with:
toolchain: nightly
components: rustfmt,clippy
- name: Check code formatting
run: cargo fmt --all --check
- name: Render the docs
run: cargo doc ${{ env.FEATURE_FLAGS }}
- name: Check clippy lints
run: cargo clippy ${{ env.FEATURE_FLAGS }} --all-targets -- -D warnings
- name: Set up cargo-binstall
run: curl -L --proto '=https' --tlsv1.2 -sSf https://raw.githubusercontent.com/cargo-bins/cargo-binstall/main/install-from-binstall-release.sh | bash
- name: Look for unused dependencies with cargo-machete
run: |
# FIXME: --force used as a workaround for https://github.com/Swatinem/rust-cache/issues/204
cargo binstall -y --force cargo-machete
cargo machete
- name: Check semver compliance (push/PR version)
if: github.event_name != 'schedule'
uses: obi1kenobi/cargo-semver-checks-action@v2
with:
feature-group: only-explicit-features
features: ${{ matrix.features }}
rust-toolchain: manual
scheduled-semver-checks:
if: github.event_name == 'schedule'
runs-on: ubuntu-latest
strategy:
matrix:
features:
- '""'
- 'std'
steps:
- name: Checkout sources
uses: actions/checkout@v6
- name: Install native dependencies
uses: Eeems-Org/apt-cache-action@v1
with:
packages: libhwloc-dev libudev-dev
- name: Set up stable toolchain
uses: actions-rust-lang/setup-rust-toolchain@v1
with:
components: rustfmt,clippy
- name: Check semver compliance (scheduled version)
uses: obi1kenobi/cargo-semver-checks-action@v2
with:
feature-group: only-explicit-features
features: ${{ matrix.features }}
rust-toolchain: manual
test-contrib:
if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository
runs-on: ubuntu-latest
needs: matrix_vars
strategy:
matrix:
features:
- ""
- "--no-default-features"
rust:
- stable
- ${{ needs.matrix_vars.outputs.MINIMAL_RUST }}
steps:
- name: Checkout sources
uses: actions/checkout@v6
- name: Install native dependencies
uses: Eeems-Org/apt-cache-action@v1
with:
packages: libhwloc-dev libudev-dev
- name: Set up toolchain
uses: actions-rust-lang/setup-rust-toolchain@v1
with:
toolchain: ${{ matrix.rust }}
- name: Run tests
run: cargo test ${{ matrix.features }}
- name: Check that benchmarks build
run: cargo build --benches ${{ matrix.features }}
test-scheduled:
if: github.event_name == 'schedule'
runs-on: ubuntu-latest
needs: matrix_vars
strategy:
matrix:
features:
- ""
- "--no-default-features"
rust:
- beta
- nightly
- ${{ needs.matrix_vars.outputs.MINIMAL_RUST }}
steps:
- name: Checkout sources
uses: actions/checkout@v6
- name: Install native dependencies
uses: Eeems-Org/apt-cache-action@v1
with:
packages: libhwloc-dev libudev-dev
- name: Set up toolchain
uses: actions-rust-lang/setup-rust-toolchain@v1
with:
toolchain: ${{ matrix.rust }}
- name: Run tests
run: cargo test ${{ matrix.features }}
- name: Check that benchmarks build
run: cargo build --benches ${{ matrix.features }}