name: CI
on:
push:
branches: [main]
pull_request:
workflow_dispatch:
concurrency:
group: ci-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
permissions:
contents: read
env:
CARGO_TERM_COLOR: always
CARGO_INCREMENTAL: 0
jobs:
checks:
name: fmt / clippy / msrv / audit
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt, clippy
- uses: Swatinem/rust-cache@v2
with:
prefix-key: v1-rust
- uses: taiki-e/install-action@v2
with:
tool: cargo-audit
- name: rustfmt
run: cargo fmt --all --check
- name: cargo-audit
run: cargo audit
- name: clippy (default features)
run: cargo clippy --locked --all-targets
- name: clippy (all features)
run: cargo clippy --locked --all-targets --all-features
- name: clippy (no default features, reqwest off)
run: cargo clippy --locked --all-targets --no-default-features
- uses: dtolnay/rust-toolchain@1.88
- name: msrv (1.88)
run: cargo +1.88 check --locked --all-features
test:
name: "test (${{ matrix.name }})"
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
include:
- name: default
- name: all features
flags: --all-features
- name: no default features (reqwest off)
flags: --no-default-features
steps:
- uses: actions/checkout@v5
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
with:
prefix-key: v1-rust
key: ${{ matrix.name }}
- name: test (lib, hermetic)
run: cargo test --locked --lib ${{ matrix.flags }}
live-network:
name: live-network integration tests
runs-on: ubuntu-latest
continue-on-error: true
steps:
- uses: actions/checkout@v5
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
with:
prefix-key: v1-rust
- name: test (integration, live network)
run: cargo test --locked --all-features --test integration_tests
docs:
name: rustdoc
runs-on: ubuntu-latest
env:
RUSTDOCFLAGS: -D warnings
steps:
- uses: actions/checkout@v5
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
with:
prefix-key: v1-rust
- run: cargo doc --locked --all-features --no-deps