---
name: Test
permissions:
contents: read
on:
pull_request:
branches:
- main
push:
branches:
- main
env:
RUST_BACKTRACE: '1'
FORCE_COLOR: '1'
NEXTEST_PROFILE: ci
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
jobs:
complete:
name: Test completion check
if: always()
needs:
- prek
- clippy
- format
- test
- benches
- examples
- miri
- coverage
runs-on: ubuntu-latest
steps:
- name: Failed
run: exit 1
if: |
contains(needs.*.result, 'failure') ||
contains(needs.*.result, 'cancelled') ||
contains(needs.*.result, 'timed_out') ||
contains(needs.*.result, 'skipped')
committed:
name: Committed
if: github.event_name == 'pull_request'
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd with:
fetch-depth: 0
- name: Check commit messages
uses: crate-ci/committed@faeed42f2e10c244533a01525f13c4d8b6ce383f with:
args: --no-merge-commit
prek:
name: Prek
runs-on: ubuntu-latest
steps:
- name: Install prek
uses: taiki-e/install-action@a37010ded18ff788be4440302bd6830b1ae50d8b with:
tool: prek
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
- name: Restore prek cache
uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 with:
path: ~/.cache/prek
key: prek-${{ runner.os }}-${{ hashFiles('prek.toml') }}
- name: Run prek
env:
SKIP: cargo-check,cargo-clippy,cargo-fmt
run: prek run --all-files
clippy:
name: Clippy
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
- name: Install Rust (stable)
uses: dtolnay/rust-toolchain@stable
with:
components: clippy
- name: Restore Rust cache
uses: Swatinem/rust-cache@779680da715d629ac1d338a641029a2f4372abb5
- name: Install cargo-hack
uses: taiki-e/install-action@a37010ded18ff788be4440302bd6830b1ae50d8b with:
tool: cargo-hack
- name: Run clippy
run: cargo hack --feature-powerset clippy --all-targets -- -D warnings
format:
name: Format
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
- name: Install Rust (nightly)
uses: dtolnay/rust-toolchain@nightly
with:
components: rustfmt
- name: Check formatting
run: cargo fmt --check
test:
name: Test (${{ matrix.os }}, ${{ matrix.toolchain }})
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-latest
toolchain: stable
- os: windows-latest
toolchain: stable
- os: macos-latest
toolchain: stable
- os: ubuntu-latest
toolchain: beta
runs-on: ${{ matrix.os }}
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
- name: Install Rust (${{ matrix.toolchain }})
uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ matrix.toolchain }}
- name: Restore Rust cache
uses: Swatinem/rust-cache@779680da715d629ac1d338a641029a2f4372abb5
- name: Install cargo-hack and cargo-nextest
uses: taiki-e/install-action@a37010ded18ff788be4440302bd6830b1ae50d8b with:
tool: cargo-hack,cargo-nextest
- name: Run tests
run: cargo hack --feature-powerset nextest run
benches:
name: Benchmarks
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
- name: Install Rust (stable)
uses: dtolnay/rust-toolchain@stable
- name: Restore Rust cache
uses: Swatinem/rust-cache@779680da715d629ac1d338a641029a2f4372abb5
- name: Test benchmarks
run: cargo test --benches '/'
examples:
name: Examples
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
- name: Install Rust (stable)
uses: dtolnay/rust-toolchain@stable
- name: Restore Rust cache
uses: Swatinem/rust-cache@779680da715d629ac1d338a641029a2f4372abb5
- name: Run getting_started
run: cargo run --example getting_started
- name: Run custom_ordering
run: cargo run --example custom_ordering
- name: Run float_keys
run: cargo run --example float_keys
- name: Run leaderboard
run: cargo run --example leaderboard
miri:
name: Miri
if: github.event.pull_request.draft == false || github.event_name != 'pull_request'
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
- name: Install Rust (nightly)
uses: dtolnay/rust-toolchain@nightly
with:
components: miri
- name: Restore Rust cache
uses: Swatinem/rust-cache@779680da715d629ac1d338a641029a2f4372abb5
- name: Run Miri
run: cargo miri test --all-features
coverage:
name: Coverage
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
- name: Install Rust (stable)
uses: dtolnay/rust-toolchain@stable
with:
components: llvm-tools-preview
- name: Restore Rust cache
uses: Swatinem/rust-cache@779680da715d629ac1d338a641029a2f4372abb5
- name: Install cargo-llvm-cov and cargo-nextest
uses: taiki-e/install-action@a37010ded18ff788be4440302bd6830b1ae50d8b with:
tool: cargo-llvm-cov,cargo-nextest
- name: Generate coverage
run: cargo llvm-cov nextest --all-features --lcov --output-path coverage.lcov
- name: Upload coverage
uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de with:
files: coverage.lcov
token: ${{ secrets.CODECOV_TOKEN || '' }}
- name: Upload test results to Codecov
if: ${{ !cancelled() }}
uses: codecov/test-results-action@0fa95f0e1eeaafde2c782583b36b28ad0d8c77d3 with:
token: ${{ secrets.CODECOV_TOKEN || '' }}