在 GitHub Actions 中使用 Cursor CLI 自動更新文檔。提供兩種方式:完全 AI 代理自主執行,或確定性工作流程搭配 AI 代理僅負責文件修改。
name: Auto Update Docs

on:
  pull_request:
    types: [opened, synchronize, reopened, ready_for_review]

permissions:
  contents: write
  pull-requests: write

jobs:
  auto-docs:
    if: ${{ !startsWith(github.head_ref, 'docs/') }}
    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
        run: |
          git config user.name "Cursor Agent"
          git config user.email "cursoragent@cursor.com"

      - name: Update docs
        env:
          MODEL: gpt-5
          CURSOR_API_KEY: ${{ secrets.CURSOR_API_KEY }}
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          BRANCH_PREFIX: docs
        run: |
          cursor-agent -p "你正在 GitHub Actions runner 中運行。

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

          # 上下文:
          - 儲存庫:${{ github.repository }}
          - 擁有者:${{ github.repository_owner }}
          - PR 編號:${{ github.event.pull_request.number }}
          - 基礎分支:${{ github.base_ref }}
          - 頭部分支:${{ github.head_ref }}
          - 文件分支前綴:${{ env.BRANCH_PREFIX }}

          # 目標:
          - 實作一個由原始 PR 增量變更驅動的端到端文件更新流程。

          # 需求:
          1) 確定原始 PR 中的變更內容,如果有多次推送,計算自上次成功文件更新以來的增量差異。
          2) 僅根據這些增量變更更新相關文件。
          3) 使用上下文中的文件分支前綴維護此 PR 頭部的持久文件分支。如果不存在則建立,否則更新,並將變更推送到 origin。
          4) 你沒有建立 PR 的權限。相反,發布或更新一個自然語言 PR 評論(1-2 句話),簡要說明文件更新並包含內聯比較連結以快速建立 PR

          # 輸入和慣例:
          - 使用 `gh pr diff` 和 git 歷史記錄來檢測變更並推導自上次文件更新以來的增量範圍。
          - 不要嘗試直接建立或編輯 PR。使用上述比較連結格式。
          - 保持變更最小化並與儲存庫風格一致。如果不需要文件更新,不要進行變更也不要發布評論。

          # 發生更新時的交付成果:
          - 推送提交到此 PR 頭部的持久文件分支。
          - 在原始 PR 上發布一個自然語言 PR 評論,包含上述內聯比較連結。避免發布重複內容;如果存在先前的機器人評論,請更新它。
          " --force --model "$MODEL" --output-format=text