name: Rust core

on:
  pull_request:
    paths:
      - "Cargo.toml"
      - "Cargo.lock"
      - "crates/vnidrop/**"
      - "version.properties"
      - "packaging/version/**"
      - "Makefile"
      - "config.mk"
      - "make/**"
      - ".github/workflows/rust-core.yml"
  push:
    # Only after merge (or direct master pushes). Feature-branch work is covered
    # by pull_request so we do not run the same job twice on every PR update.
    branches:
      - master
    paths:
      - "Cargo.toml"
      - "Cargo.lock"
      - "crates/vnidrop/**"
      - "version.properties"
      - "packaging/version/**"
      - "Makefile"
      - "config.mk"
      - "make/**"
      - ".github/workflows/rust-core.yml"

permissions:
  contents: read

concurrency:
  group: rust-core-${{ github.event.pull_request.number || github.ref }}
  cancel-in-progress: true

jobs:
  quality:
    runs-on: ubuntu-latest
    timeout-minutes: 30
    steps:
      - uses: actions/checkout@v4
      - name: Install Rust quality components
        run: rustup component add clippy rustfmt
      - name: Check Rust core
        run: make check-rust
      - name: Install cargo-audit
        run: cargo install cargo-audit --locked
      - name: Audit Rust dependencies
        # Ignores are listed in .cargo/audit.toml for known transitive issues.
        run: make audit-rust
