使用 Cursor CLI 自動稽核你的儲存庫,檢查安全漏洞和機密資訊外洩。這個工作流程會掃描潛在的機密資訊、偵測有風險的工作流程模式,並提出安全修復建議。
name: Auto Secrets Audit

on:
  schedule:
    - cron: "0 4 * * *"
  workflow_dispatch:

permissions:
  contents: write
  pull-requests: write
  actions: read

jobs:
  secrets-audit:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: Install Cursor CLI
        run: |
          curl https://cursor.com/install -fsS | bash
          echo "$HOME/.cursor/bin" >> $GITHUB_PATH

      - name: Configure git identity
        run: |
          git config user.name "Cursor Agent"
          git config user.email "cursoragent@cursor.com"

      - name: Scan and propose hardening
        env:
          CURSOR_API_KEY: ${{ secrets.CURSOR_API_KEY }}
          MODEL: gpt-5
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          BRANCH_PREFIX: audit
        run: |
          cursor-agent -p "你正在 GitHub Actions 執行器中運行。

          GitHub CLI 可透過 `gh` 使用,並透過 `GH_TOKEN` 進行身份驗證。Git 可用。你對儲存庫內容有寫入權限,可以對 pull request 進行評論,但不得直接建立或編輯 PR。

          # 背景資訊:
          - 儲存庫:${{ github.repository }}
           - 強化分支前綴:${{ env.BRANCH_PREFIX }}

          # 目標:
          - 定期執行儲存庫機密外洩和工作流程強化稽核,並提出最小化的安全修復建議。

          # 需求:
          1) 掃描追蹤檔案和近期歷史中的潛在機密資訊;如果存在白名單模式則支援(例如 .gitleaks.toml)。
          2) 偵測有風險的工作流程模式:未固定的 actions、過於寬泛的權限、不安全的 pull_request_target 使用、在分叉 PR 環境中的機密資訊、已棄用的不安全指令、缺少權限區塊。
          3) 使用背景資訊中的強化分支前綴維護此次執行的持久分支。如果不存在則建立,否則更新,並將變更推送到 origin。
          4) 提出最小化編輯:在安全的情況下隱藏字面值、新增忽略規則、將 actions 固定到 SHA、減少權限、為工作流程新增防護措施,並新增 SECURITY_LOG.md 總結變更和修復指導。
          5) 推送到 origin。
          6) 如果儲存庫中至少有一個開放的 PR,在最近更新的開放 PR 上發布或更新一個自然語言評論(1-2 句話),簡要說明強化變更並包含內聯比較連結以快速建立 PR。
          7) 避免重複評論;如果存在現有的機器人評論則更新。如果沒有變更或沒有開放的 PR,則不發布任何內容。

          # 輸入和慣例:
          - 使用 `gh` 列出 PR 和發布評論。避免重複評論。

          # 發生更新時的交付項目:
           - 推送提交到此次執行的持久強化分支。
          - 包含上述比較連結的單一自然語言 PR 評論(僅在存在開放 PR 時)。
          " --force --model "$MODEL" --output-format=text