2f2a8095a97b35152af83c6cc3b4c2ce8f838993
AI Pull Request
Gitea Docker Action:使用 opencode 分析 git diff,自動產生 Pull Request 的標題與描述,並透過 Gitea token 建立 PR。
功能
- 抓取來源分支與目標分支,計算兩者的差異(commits / stat / diff)。
- 呼叫
opencode(指定base_url/model/provider)將 diff 總結成 PR 標題與描述(固定使用繁體中文)。- 若 opencode 不可用或解析失敗,會自動以 commit 訊息與檔案統計產生 fallback 標題/描述。
- 偵測來源分支合併進目標分支是否會衝突:
- 無衝突:直接建立
來源分支 → 目標分支的 PR。 - 有衝突:從目標分支建立解衝突分支,合併來源分支(保留衝突標記後 commit 並推送),再建立
解衝突分支 → 來源分支的 PR,讓開發者在 PR 中手動解衝突;解決後來源分支即可順利合併回目標分支。
- 無衝突:直接建立
輸入參數(inputs)
| 參數 | 必填 | 說明 |
|---|---|---|
source_branch |
✅ | 來源分支 |
target_branch |
✅ | 目標分支 |
opencode_base_url |
✅ | opencode 使用的模型服務 base URL(OpenAI 相容端點) |
opencode_model |
✅ | opencode 使用的模型名稱 |
opencode_provider |
✅ | opencode provider 名稱 |
使用範例
name: AI PR
on:
workflow_dispatch:
inputs:
source_branch:
description: '來源分支'
required: true
target_branch:
description: '目標分支'
required: true
jobs:
ai-pull-request:
runs-on: ubuntu
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: AI Pull Request
uses: https://gitea.jsc.idv.tw/docker-actions/ai-pull-request@v1
with:
source_branch: ${{ inputs.source_branch }}
target_branch: ${{ inputs.target_branch }}
opencode_base_url: ${{ vars.OPENCODE_BASE_URL }}
opencode_model: ${{ vars.OPENCODE_MODEL }}
opencode_provider: ${{ vars.OPENCODE_PROVIDER }}
開發
應用程式以 Node.js 開發,位於 app/,進入點為 entrypoint.sh → node /app/index.js。
app/
├── index.js # 主流程
└── lib/
├── inputs.js # 讀取/驗證環境變數
├── git.js # git 操作(fetch / diff / 衝突偵測 / 解衝突分支)
├── gitea.js # Gitea API(建立 PR)
├── opencode.js # 呼叫 opencode 產生標題與描述
└── util.js # 共用工具(執行指令、日誌、遮蔽敏感資訊)
語法檢查:
cd app && node --check index.js
Languages
Dockerfile
50.1%
Shell
49.9%