name: CI
on:
push:
branches: [main]
pull_request:
branches: [main]
env:
CARGO_TERM_COLOR: always
jobs:
lint:
name: fmt + clippy
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 - name: Install Rust 1.95 with clippy
uses: dtolnay/rust-toolchain@4be7066ada62dd38de10e7b70166bc74ed198c30 with:
toolchain: "1.95"
components: clippy
- name: Install nightly toolchain with rustfmt
uses: dtolnay/rust-toolchain@efcb852328a9f50117170cc43094fb6f09eaf1ae with:
components: rustfmt
- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y libssl-dev pkg-config protobuf-compiler
- uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 with:
path: |
~/.cargo/registry
~/.cargo/git
target
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
- name: Check formatting
run: cargo +nightly fmt --all -- --check
- name: Clippy (full)
run: cargo +1.95 clippy -- -D warnings
- name: Clippy (minimal)
run: cargo +1.95 clippy --lib --no-default-features --features minimal -- -D warnings
test:
name: test (${{ matrix.features }})
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
include:
- features: "minimal"
cache-key: "minimal"
- features: "core"
cache-key: "core"
- features: "full"
cache-key: "full"
- features: "core,daemon,analysis,complexity"
cache-key: "core-daemon-analysis-complexity"
- features: "core,lsp,cache"
cache-key: "core-lsp-cache"
- features: "full,embed"
cache-key: "full-embed"
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 - name: Install Rust 1.95
uses: dtolnay/rust-toolchain@4be7066ada62dd38de10e7b70166bc74ed198c30 with:
toolchain: "1.95"
- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y libssl-dev pkg-config protobuf-compiler
- uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 with:
path: |
~/.cargo/registry
~/.cargo/git
target
key: ${{ runner.os }}-cargo-${{ matrix.cache-key }}-${{ hashFiles('**/Cargo.lock') }}
- name: Tests
run: |
if [ "${{ matrix.features }}" = "full" ]; then
cargo test --lib --verbose
else
cargo test --lib --no-default-features --features "${{ matrix.features }}" --verbose
fi
coverage:
name: coverage (≥95%)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 - name: Install Rust 1.95
uses: dtolnay/rust-toolchain@4be7066ada62dd38de10e7b70166bc74ed198c30 with:
toolchain: "1.95"
- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y libssl-dev pkg-config protobuf-compiler
- uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 with:
path: |
~/.cargo/registry
~/.cargo/git
target
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
- uses: taiki-e/install-action@9458fed45835344deb5e69e06e831be047c96abf - name: Coverage (fail under 95% lines, default features)
run: cargo llvm-cov --lib --fail-under-lines 95 --lcov --output-path lcov.info
- name: Upload coverage
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 with:
name: coverage
path: lcov.info
security:
name: cargo-audit + cargo-deny
runs-on: ubuntu-latest
permissions:
contents: read
security-events: write
checks: write
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 - name: cargo-audit (RustSec 漏洞库)
uses: rustsec/audit-check@69366f33c96575abad1ee0dba8212993eecbe998 with:
token: ${{ secrets.GITHUB_TOKEN }}
- name: cargo-deny (license / ban / advisory)
uses: EmbarkStudios/cargo-deny-action@b66acf5e9fe20f8aba065be86778a8a4c846f902