name: trait-kit CI
on:
push:
branches: [main, master]
pull_request:
permissions:
contents: read
concurrency:
group: ci-${{ github.ref }}
cancel-in-progress: true
env:
CARGO_TERM_COLOR: always
RUSTFLAGS: "-D warnings"
jobs:
quality:
name: fmt + clippy
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt, clippy
- uses: swatinem/rust-cache@v2
- run: cargo fmt --all --check
- run: cargo clippy --all-targets --all-features
test:
name: test + coverage (≥80% lines)
runs-on: ubuntu-latest
env:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
steps:
- uses: actions/checkout@v7
- uses: dtolnay/rust-toolchain@stable
- uses: swatinem/rust-cache@v2
- uses: taiki-e/install-action@cargo-llvm-cov
- run: cargo test --all-features --no-fail-fast
- name: Coverage (fail under 80% lines)
run: cargo llvm-cov --all-features --fail-under-lines 80 --lcov --output-path lcov.info
- name: Upload to Codecov (可选)
if: ${{ env.CODECOV_TOKEN != '' }}
uses: codecov/codecov-action@v7
with:
token: ${{ env.CODECOV_TOKEN }}
files: ./lcov.info
fail_ci_if_error: false
msrv:
name: MSRV 1.91
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- uses: dtolnay/rust-toolchain@stable
with:
toolchain: "1.91.0"
- uses: swatinem/rust-cache@v2
- run: cargo test --all-features --no-fail-fast
nightly:
name: nightly (future-compat)
runs-on: ubuntu-latest
continue-on-error: true
steps:
- uses: actions/checkout@v7
- uses: dtolnay/rust-toolchain@nightly
- uses: swatinem/rust-cache@v2
- run: cargo test --all-features --no-fail-fast
security:
name: cargo-audit + cargo-deny
runs-on: ubuntu-latest
permissions:
contents: read
checks: write
steps:
- uses: actions/checkout@v7
- name: cargo-audit (RustSec 漏洞库)
uses: rustsec/audit-check@v2.0.0
with:
token: ${{ secrets.GITHUB_TOKEN }}
- name: cargo-deny (license / ban / advisory)
uses: EmbarkStudios/cargo-deny-action@v2
examples:
name: examples (${{ matrix.example }}, ${{ matrix.toolchain }})
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
include:
- { example: default_basic, toolchain: stable, features: "" }
- { example: default_basic, toolchain: "1.91.0", features: "" }
- { example: confers_loader, toolchain: stable, features: "confers" }
- { example: confers_loader, toolchain: "1.91.0", features: "confers" }
- { example: confers_macros, toolchain: stable, features: "confers-macros" }
- { example: confers_macros, toolchain: "1.91.0", features: "confers-macros" }
- { example: hot_reload, toolchain: stable, features: "hot-reload" }
- { example: hot_reload, toolchain: "1.91.0", features: "hot-reload" }
- { example: encryption, toolchain: stable, features: "encryption" }
- { example: encryption, toolchain: "1.91.0", features: "encryption" }
steps:
- uses: actions/checkout@v7
- uses: dtolnay/rust-toolchain@stable
with:
toolchain: ${{ matrix.toolchain }}
- uses: swatinem/rust-cache@v2
- name: Build example
run: cargo build -p trait-kit-example --example ${{ matrix.example }} ${{ matrix.features != '' && format('--features {0}', matrix.features) || '' }}
- name: Run example (exit 0)
run: cargo run -p trait-kit-example --example ${{ matrix.example }} ${{ matrix.features != '' && format('--features {0}', matrix.features) || '' }}