# Copyright 2024 RustFS Team # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. name: Security Audit on: push: branches: [ main ] paths: - '**/Cargo.toml' - '**/Cargo.lock' - 'deny.toml' - '.github/actions/**' - '.github/workflows/**' - 'scripts/security/check_workflow_pins.sh' pull_request: types: [ opened, synchronize, reopened, closed ] branches: [ main ] paths: - '**/Cargo.toml' - '**/Cargo.lock' - 'deny.toml' - '.github/actions/**' - '.github/workflows/**' - 'scripts/security/check_workflow_pins.sh' schedule: - cron: '0 3 * * 0' # Weekly on Sunday 03:00 UTC (staggered after the midnight ci/build crons) workflow_dispatch: permissions: contents: read # Event-scoped groups: merges to main must not cancel the weekly scheduled # run (same rationale as ci.yml). concurrency: group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.event.pull_request.number || github.ref }} cancel-in-progress: ${{ github.event_name != 'schedule' }} env: CARGO_TERM_COLOR: always jobs: cancel-closed-pr-runs: name: Cancel Closed PR Runs if: github.event_name == 'pull_request' && github.event.action == 'closed' runs-on: ubuntu-latest steps: - name: Explain cancellation run run: echo "PR closed; this run only cancels older runs in the same concurrency group." # RustSec advisory scanning is covered by the `advisories` check of # cargo-deny below; a separate cargo-audit job would duplicate the same # database lookup with a second ignore list to maintain. cargo-deny: name: Cargo Deny if: github.event_name != 'pull_request' || github.event.action != 'closed' runs-on: ubuntu-latest timeout-minutes: 20 steps: - name: Checkout repository uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7 - name: Setup Rust environment uses: ./.github/actions/setup with: cache-shared-key: rustfs-cargo-deny - name: Install cargo-deny uses: taiki-e/install-action@bffeee26d4db9be238a4ea78d8826604ebcb594d # v2 with: tool: cargo-deny - name: Run cargo-deny run: cargo deny check --hide-inclusion-graph advisories sources bans licenses workflow-pin-report: name: Workflow Pin Report if: github.event_name != 'pull_request' || github.event.action != 'closed' runs-on: ubuntu-latest timeout-minutes: 5 steps: - name: Checkout repository uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7 - name: Report unpinned GitHub Actions run: ./scripts/security/check_workflow_pins.sh --enforce dependency-review: name: Dependency Review runs-on: ubuntu-latest if: github.event_name == 'pull_request' && github.event.action != 'closed' permissions: contents: read pull-requests: write steps: - name: Checkout repository uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7 - name: Dependency Review uses: actions/dependency-review-action@a1d282b36b6f3519aa1f3fc636f609c47dddb294 # v5 with: fail-on-severity: moderate allow-ghsas: GHSA-2f9f-gq7v-9h6m # rustfs-uring is a first-party Apache-2.0 crate, now published on # crates.io (backlog#1104) rather than pulled as a git dependency. # Scope the allow to the exact pinned version so a version bump forces a # conscious re-review of the license/provenance claim (backlog#1181). allow-dependencies-licenses: pkg:cargo/rustfs-uring@0.1.0 comment-summary-in-pr: always