name: CI
on:
push:
branches:
- main
pull_request:
workflow_dispatch:
permissions:
contents: read
jobs:
fmt:
name: Format
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v5
- name: Install stable toolchain
uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt
- name: Cache cargo artifacts
uses: Swatinem/rust-cache@v2
- name: Check formatting
run: cargo fmt --all --check
links:
name: Links
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v5
- name: Check documentation and workflow links
uses: lycheeverse/lychee-action@v2.7.0
with:
args: README.md docs/live-sandbox-ci.md .github/workflows/*.yml
lycheeVersion: v0.21.0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
docs:
name: Docs
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v5
- name: Install stable toolchain
uses: dtolnay/rust-toolchain@stable
- name: Cache cargo artifacts
uses: Swatinem/rust-cache@v2
- name: Build docs
env:
RUSTDOCFLAGS: -D warnings
run: cargo doc --no-deps --no-default-features --features rustls-ring-tls,checksums,indicatif --locked
msrv:
name: MSRV
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v5
- name: Install MSRV toolchain
uses: dtolnay/rust-toolchain@master
with:
toolchain: 1.86.0
- name: Cache cargo artifacts
uses: Swatinem/rust-cache@v2
- name: Check crate with MSRV
run: cargo +1.86.0 check --no-default-features --features rustls-ring-tls,checksums,indicatif --locked
clippy:
name: Clippy (${{ matrix.name }})
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
include:
- name: rustls-ring
command: cargo clippy --all-targets --no-default-features --features rustls-ring-tls,checksums,indicatif --locked
- name: rustls-aws-lc
command: cargo clippy --all-targets --no-default-features --features rustls-tls,checksums,indicatif --locked
- name: native-tls
command: cargo clippy --all-targets --no-default-features --features native-tls,checksums,indicatif --locked
steps:
- name: Checkout
uses: actions/checkout@v5
- name: Install stable toolchain
uses: dtolnay/rust-toolchain@stable
with:
components: clippy
- name: Cache cargo artifacts
uses: Swatinem/rust-cache@v2
- name: Run clippy
run: ${{ matrix.command }}
test:
name: Test (${{ matrix.name }})
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
include:
- name: default
command: cargo test --locked
- name: indicatif
command: cargo test --features indicatif --locked
- name: rustls-ring-checksums-indicatif
command: cargo test --no-default-features --features rustls-ring-tls,checksums,indicatif --locked
- name: rustls-aws-lc-checksums-indicatif
command: cargo test --no-default-features --features rustls-tls,checksums,indicatif --locked
- name: native-tls-checksums
command: cargo test --no-default-features --features native-tls,checksums --locked
- name: rustls-no-provider-checksums
command: cargo check --no-default-features --features rustls-no-provider,checksums --locked
steps:
- name: Checkout
uses: actions/checkout@v5
- name: Install stable toolchain
uses: dtolnay/rust-toolchain@stable
- name: Cache cargo artifacts
uses: Swatinem/rust-cache@v2
- name: Run tests
run: ${{ matrix.command }}
package:
name: Package
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v5
- name: Install stable toolchain
uses: dtolnay/rust-toolchain@stable
- name: Cache cargo artifacts
uses: Swatinem/rust-cache@v2
- name: Verify publish package
run: cargo publish --dry-run --locked
semver:
name: Semver
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v5
- name: Install stable toolchain
uses: dtolnay/rust-toolchain@stable
- name: Cache cargo artifacts
uses: Swatinem/rust-cache@v2
- name: Install cargo-semver-checks
uses: taiki-e/install-action@cargo-semver-checks
- name: Check semver compatibility
run: cargo semver-checks check-release --release-type patch --default-features --features checksums,indicatif
audit:
name: Audit
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v5
- name: Install stable toolchain
uses: dtolnay/rust-toolchain@stable
- name: Cache cargo artifacts
uses: Swatinem/rust-cache@v2
- name: Install cargo-audit
uses: taiki-e/install-action@cargo-audit
- name: Audit dependencies
run: cargo audit
coverage:
name: Coverage
runs-on: ubuntu-latest
permissions:
contents: read
id-token: write
steps:
- name: Checkout
uses: actions/checkout@v5
- name: Install stable toolchain
uses: dtolnay/rust-toolchain@stable
- name: Cache cargo artifacts
uses: Swatinem/rust-cache@v2
- name: Install cargo-tarpaulin
uses: taiki-e/install-action@cargo-tarpaulin
- name: Check coverage
run: cargo tarpaulin --no-default-features --features rustls-ring-tls,checksums,indicatif --skip-clean --locked --fail-under 95 --out Stdout --out Xml
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v5
with:
files: ./cobertura.xml
disable_search: true
fail_ci_if_error: true
flags: unittests
name: zenodo-rs
use_oidc: true
verbose: true