name: CI
on:
push:
branches: [main]
pull_request:
branches: [main]
env:
CARGO_TERM_COLOR: always
RUSTFLAGS: -Dwarnings
jobs:
audit:
name: Security audit
runs-on: ubuntu-latest
permissions:
contents: read
checks: write
steps:
- uses: actions/checkout@v7
- uses: rustsec/audit-check@v2
with:
token: ${{ secrets.GITHUB_TOKEN }}
fmt:
name: Format
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt
- run: cargo fmt --all -- --check
clippy:
name: Clippy
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- uses: dtolnay/rust-toolchain@stable
with:
components: clippy
- uses: Swatinem/rust-cache@v2
- run: cargo clippy --all-targets --all-features -- -D warnings
test:
name: Test (${{ matrix.features }})
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
include:
- features: all
flags: --all-features
- features: default
flags: ""
- features: none
flags: --no-default-features
steps:
- uses: actions/checkout@v7
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
with:
key: ${{ matrix.features }}
- name: Prepare required Redis integration runtime
if: matrix.features == 'all'
run: |
docker info
docker pull redis:7-alpine
- run: cargo test ${{ matrix.flags }}
msrv:
name: MSRV (1.90, ${{ matrix.features }})
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
include:
- features: all
flags: --all-features
- features: default
flags: ""
- features: none
flags: --no-default-features
steps:
- uses: actions/checkout@v7
- uses: dtolnay/rust-toolchain@master
with:
toolchain: "1.90"
- uses: Swatinem/rust-cache@v2
with:
key: msrv-${{ matrix.features }}
- run: cargo check --locked --all-targets ${{ matrix.flags }}
doc:
name: Documentation
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
- run: cargo doc --no-deps --all-features
env:
RUSTDOCFLAGS: -Dwarnings
helm:
name: Helm chart
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- uses: azure/setup-helm@v4.3.1
with:
version: v3.19.0
- run: ./scripts/check-chart.sh
coverage:
name: Coverage
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- uses: dtolnay/rust-toolchain@stable
with:
components: llvm-tools-preview
- uses: Swatinem/rust-cache@v2
with:
key: coverage
- uses: taiki-e/install-action@v2
with:
tool: cargo-llvm-cov@0.9.1
- name: Prepare required Redis integration runtime
run: |
docker info
docker pull redis:7-alpine
- name: Measure all-feature unit and integration coverage
run: |
mkdir -p target/coverage
cargo llvm-cov --locked --all-features --lib --tests --lcov --output-path target/coverage/lcov.info
cargo llvm-cov report --html --output-dir target/coverage
cargo llvm-cov report > target/coverage/summary.txt
echo '```text' >> "$GITHUB_STEP_SUMMARY"
cat target/coverage/summary.txt >> "$GITHUB_STEP_SUMMARY"
echo '```' >> "$GITHUB_STEP_SUMMARY"
- uses: actions/upload-artifact@v7
with:
name: coverage-report
path: target/coverage/
if-no-files-found: error