Skip to content

Test

Test #289

Workflow file for this run

name: Test
on:
push:
branches:
- master
pull_request:
schedule:
- cron: '0 12 * * *'
concurrency:
group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.ref_name }}
cancel-in-progress: true
jobs:
test:
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os:
- ubuntu-latest
toolchain:
- msrv
- stable
- beta
- nightly
include:
- os: macos-latest
toolchain: stable
- os: windows-latest
toolchain: stable
steps:
- name: Check out repository
uses: actions/checkout@v4
- name: Install Rust
if: matrix.toolchain != 'msrv'
uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ matrix.toolchain }}
- name: Determine minimum supported Rust version
if: matrix.toolchain == 'msrv'
id: msrv
run: |
rust_version="$(cargo metadata --no-deps --format-version=1 | jq -r '.packages[0].rust_version')"
echo "msrv=$rust_version" >> "$GITHUB_OUTPUT"
- name: Install minimum supported Rust version
if: matrix.toolchain == 'msrv'
uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ steps.msrv.outputs.msrv }}
- name: Activate cache
if: "!startsWith(github.head_ref, 'renovate/')"
uses: Swatinem/rust-cache@v2
- name: Install cargo-hack
uses: taiki-e/install-action@cargo-hack
- name: Build crate
run: cargo hack --each-feature --exclude-features examples build --all-targets --verbose
- name: Test crate
run: cargo hack --each-feature --exclude-features examples test --verbose
minimal-versions:
runs-on: ubuntu-latest
steps:
- name: Check out repository
uses: actions/checkout@v4
- name: Install Rust
uses: dtolnay/rust-toolchain@master
with:
toolchain: stable
- name: Install nightly Rust
# Needed by cargo-minimal-versions
run: rustup update nightly
- name: Activate cache
if: "!startsWith(github.head_ref, 'renovate/')"
uses: Swatinem/rust-cache@v2
- name: Install cargo-hack and cargo-minimal-versions
uses: taiki-e/install-action@v2
with:
tool: cargo-hack,cargo-minimal-versions
- name: Build crate
run: cargo minimal-versions --direct --each-feature --exclude-features=examples build --all-targets --verbose
- name: Test crate
run: cargo minimal-versions --direct --each-feature --exclude-features=examples test --verbose
coverage:
# This is separate from the main tests because cargo-llvm-cov doesn't run
# doctests.
runs-on: ubuntu-latest
steps:
- name: Check out repository
uses: actions/checkout@v4
- name: Install Rust
uses: dtolnay/rust-toolchain@master
with:
toolchain: stable
components: llvm-tools
- name: Activate cache
if: "!startsWith(github.head_ref, 'renovate/')"
uses: Swatinem/rust-cache@v2
- name: Install cargo-llvm-cov
uses: taiki-e/install-action@v2
with:
tool: cargo-llvm-cov
- name: Test with coverage
run: cargo llvm-cov --all-features --lcov --output-path lcov.info
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v4
with:
files: lcov.info
fail_ci_if_error: false
token: ${{ secrets.CODECOV_TOKEN }}
lint:
runs-on: ubuntu-latest
steps:
- name: Check out repository
uses: actions/checkout@v4
- name: Install Rust
uses: dtolnay/rust-toolchain@master
with:
toolchain: stable
components: clippy, rustfmt
- name: Activate cache
if: "!startsWith(github.head_ref, 'renovate/')"
uses: Swatinem/rust-cache@v2
- name: Install cargo-hack
uses: taiki-e/install-action@cargo-hack
- name: Check code
run: cargo hack --each-feature clippy --all-targets -- -Dwarnings
- name: Check formatting
run: cargo fmt --check
docs:
runs-on: ubuntu-latest
steps:
- name: Check out repository
uses: actions/checkout@v4
- name: Install nightly Rust
uses: dtolnay/rust-toolchain@master
with:
toolchain: nightly
- name: Activate cache
if: "!startsWith(github.head_ref, 'renovate/')"
uses: Swatinem/rust-cache@v2
- name: Check docs
run: cargo doc --no-deps --all-features
env:
RUSTDOCFLAGS: -Dwarnings
# vim:set et sts=2: