codenexus 0.3.4

A queryable code knowledge graph tool built on LadybugDB and tree-sitter
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 # v7.0.0
      - name: Install Rust 1.95 with clippy
        uses: dtolnay/rust-toolchain@4be7066ada62dd38de10e7b70166bc74ed198c30 # stable
        with:
          toolchain: "1.95"
          components: clippy
      - name: Install nightly toolchain with rustfmt
        uses: dtolnay/rust-toolchain@efcb852328a9f50117170cc43094fb6f09eaf1ae # nightly
        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 # v4
        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 # v7.0.0
      - name: Install Rust 1.95
        uses: dtolnay/rust-toolchain@4be7066ada62dd38de10e7b70166bc74ed198c30 # stable
        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 # v4
        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 # v7.0.0
      - name: Install Rust 1.95
        uses: dtolnay/rust-toolchain@4be7066ada62dd38de10e7b70166bc74ed198c30 # stable
        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 # v4
        with:
          path: |
            ~/.cargo/registry
            ~/.cargo/git
            target
          key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
      - uses: taiki-e/install-action@9458fed45835344deb5e69e06e831be047c96abf # cargo-llvm-cov
      - 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 # v4
        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 # v7.0.0
      - name: cargo-audit (RustSec 漏洞库)
        uses: rustsec/audit-check@69366f33c96575abad1ee0dba8212993eecbe998 # v2.0.0
        with:
          token: ${{ secrets.GITHUB_TOKEN }}
      - name: cargo-deny (license / ban / advisory)
        uses: EmbarkStudios/cargo-deny-action@b66acf5e9fe20f8aba065be86778a8a4c846f902 # v2