274 lines
7.2 KiB
Markdown
274 lines
7.2 KiB
Markdown
# 簡介
|
||
|
||
這是一個 AI Code Review Action。Gitea Workflow 可以使用此 Action 讓 AI 助理根據不同面向分析 Push Request 中變更的內容後,將問題分級 Commnet 到 Push Request 中。
|
||
|
||
# 流程(新 Push Request、新 Commit (排除 AI 助理的 Commit) 觸發)
|
||
|
||
1. 服務名稱、模型名稱、角色資訊(個性、符合個性的英文名稱、工作內容),Comment 到 Push Request
|
||
2. 每個角色個別分析 Git Diff 的內容產生新問題表格(問題等級、角色名稱、問題位置或行數、修改建議)
|
||
3. 讀取所有未解決的舊問題(問題檔案存在於使用此 Action 的專案固定位置)加上新問題後,去除重複產生本次 Push Request 的問題表格(PR問題表格)覆蓋問題檔案
|
||
4. 從PR問題表格中取出所有舊問題,依照等級排序後 Comment 到 Push Request
|
||
5. 從PR問題表格中取出所有新問題,排除嚴重等級的問題後 Comment 到 Push Request
|
||
6. 從PR問題表格中取出所有新問題,將每個嚴重等級的問題 Comment 到 Push Request
|
||
7. Commit 問題檔案
|
||
8. 如果PR問題表格中有嚴重問題,則不要讓 workflow 執行成功(exit 1)
|
||
|
||
# 設計
|
||
|
||
1. Gitea 的相關參數如果 inputs 沒有定義,則從 ${{ gitea.* }} 取得
|
||
2. BASE_URL 如果 inputs 沒有定義,則使用預設值
|
||
3. Comment 加上些許 emoji 讓資訊有點活力
|
||
4. 盡量將應用程式放在 ./app,修改 entrypoint.sh 與 Dockerfile 讓程式可以正常運行
|
||
5. 將提示詞放到 ./app/prompts 內供程式讀取
|
||
|
||
# 使用說明
|
||
|
||
1. 在 Gitea 專案中建立 `.gitea/workflows` 資料夾
|
||
2. 在 `.gitea/workflows` 資料夾中建立 `ai-review.yaml'
|
||
3. 在 `ai-review.yaml` 中填入以下內容(選擇一個使用):
|
||
|
||
### 1. OpenAI(OpenRouter)
|
||
```yaml
|
||
name: AI
|
||
on:
|
||
pull_request:
|
||
types: [opened, synchronize]
|
||
jobs:
|
||
code-review:
|
||
name: 'Code Review'
|
||
runs-on: ubuntu
|
||
steps:
|
||
- name: AI Code Review
|
||
uses: https://gitea.jsc.idv.tw/jiantw83/code-review@${{ vars.ACTION_CODE_REVIEW_VERSION }}
|
||
with:
|
||
# Github (h3285@evertrust.com.tw)
|
||
# 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
|
||
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
|
||
OPENAI_BASE_URL: https://api.openai.com/v1
|
||
permissions:
|
||
contents: write
|
||
pull-requests: write
|
||
issues: write
|
||
```
|
||
|
||
### 2. Anthropic Claude
|
||
```yaml
|
||
name: AI
|
||
on:
|
||
pull_request:
|
||
types: [opened, synchronize]
|
||
jobs:
|
||
code-review:
|
||
name: 'Code Review'
|
||
runs-on: ubuntu
|
||
steps:
|
||
- name: AI Code Review
|
||
uses: https://gitea.jsc.idv.tw/jiantw83/code-review@${{ vars.ACTION_CODE_REVIEW_VERSION }}
|
||
with:
|
||
CLAUDE_API_KEY: ${{ secrets.CLAUDE_API_KEY }}
|
||
CLAUDE_BASE_URL: https://api.anthropic.com/v1
|
||
permissions:
|
||
contents: write
|
||
pull-requests: write
|
||
issues: write
|
||
```
|
||
|
||
### 3. Google Gemini
|
||
```yaml
|
||
name: AI
|
||
on:
|
||
pull_request:
|
||
types: [opened, synchronize]
|
||
jobs:
|
||
code-review:
|
||
name: 'Code Review'
|
||
runs-on: ubuntu
|
||
steps:
|
||
- name: AI Code Review
|
||
uses: https://gitea.jsc.idv.tw/jiantw83/code-review@${{ vars.ACTION_CODE_REVIEW_VERSION }}
|
||
with:
|
||
GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }}
|
||
GEMINI_BASE_URL: https://generativelanguage.googleapis.com/v1beta
|
||
permissions:
|
||
contents: write
|
||
pull-requests: write
|
||
issues: write
|
||
```
|
||
|
||
### 4. Amazon Q
|
||
```yaml
|
||
name: AI
|
||
on:
|
||
pull_request:
|
||
types: [opened, synchronize]
|
||
jobs:
|
||
code-review:
|
||
name: 'Code Review'
|
||
runs-on: ubuntu
|
||
steps:
|
||
- name: AI Code Review
|
||
uses: https://gitea.jsc.idv.tw/jiantw83/code-review@${{ vars.ACTION_CODE_REVIEW_VERSION }}
|
||
with:
|
||
AMAZONQ_API_KEY: ${{ secrets.AMAZONQ_API_KEY }}
|
||
AMAZONQ_BASE_URL: https://q.api.aws
|
||
permissions:
|
||
contents: write
|
||
pull-requests: write
|
||
issues: write
|
||
```
|
||
|
||
### 5. SonarQube
|
||
```yaml
|
||
name: AI
|
||
on:
|
||
pull_request:
|
||
types: [opened, synchronize]
|
||
jobs:
|
||
code-review:
|
||
name: 'Code Review'
|
||
runs-on: ubuntu
|
||
steps:
|
||
- name: AI Code Review
|
||
uses: https://gitea.jsc.idv.tw/jiantw83/code-review@${{ vars.ACTION_CODE_REVIEW_VERSION }}
|
||
with:
|
||
SONARQUBE_TOKEN: ${{ secrets.SONARQUBE_TOKEN }}
|
||
SONARQUBE_URL: https://sonarqube.example.com
|
||
permissions:
|
||
contents: write
|
||
pull-requests: write
|
||
issues: write
|
||
```
|
||
|
||
### 6. Kilo Code
|
||
```yaml
|
||
name: AI
|
||
on:
|
||
pull_request:
|
||
types: [opened, synchronize]
|
||
jobs:
|
||
code-review:
|
||
name: 'Code Review'
|
||
runs-on: ubuntu
|
||
steps:
|
||
- name: AI Code Review
|
||
uses: https://gitea.jsc.idv.tw/jiantw83/code-review@${{ vars.ACTION_CODE_REVIEW_VERSION }}
|
||
with:
|
||
KILO_API_KEY: ${{ secrets.KILO_API_KEY }}
|
||
KILO_BASE_URL: https://api.kilocode.com/v1
|
||
permissions:
|
||
contents: write
|
||
pull-requests: write
|
||
issues: write
|
||
```
|
||
|
||
### 7. Roo Code
|
||
```yaml
|
||
name: AI
|
||
on:
|
||
pull_request:
|
||
types: [opened, synchronize]
|
||
jobs:
|
||
code-review:
|
||
name: 'Code Review'
|
||
runs-on: ubuntu
|
||
steps:
|
||
- name: AI Code Review
|
||
uses: https://gitea.jsc.idv.tw/jiantw83/code-review@${{ vars.ACTION_CODE_REVIEW_VERSION }}
|
||
with:
|
||
ROO_API_KEY: ${{ secrets.ROO_API_KEY }}
|
||
ROO_BASE_URL: https://api.roocode.com/v1
|
||
permissions:
|
||
contents: write
|
||
pull-requests: write
|
||
issues: write
|
||
```
|
||
|
||
### 8. Cline
|
||
```yaml
|
||
name: AI
|
||
on:
|
||
pull_request:
|
||
types: [opened, synchronize]
|
||
jobs:
|
||
code-review:
|
||
name: 'Code Review'
|
||
runs-on: ubuntu
|
||
steps:
|
||
- name: AI Code Review
|
||
uses: https://gitea.jsc.idv.tw/jiantw83/code-review@${{ vars.ACTION_CODE_REVIEW_VERSION }}
|
||
with:
|
||
CLINE_API_KEY: ${{ secrets.CLINE_API_KEY }}
|
||
CLINE_BASE_URL: https://api.cline.dev/v1
|
||
permissions:
|
||
contents: write
|
||
pull-requests: write
|
||
issues: write
|
||
```
|
||
|
||
### 9. Continue
|
||
```yaml
|
||
name: AI
|
||
on:
|
||
pull_request:
|
||
types: [opened, synchronize]
|
||
jobs:
|
||
code-review:
|
||
name: 'Code Review'
|
||
runs-on: ubuntu
|
||
steps:
|
||
- name: AI Code Review
|
||
uses: https://gitea.jsc.idv.tw/jiantw83/code-review@${{ vars.ACTION_CODE_REVIEW_VERSION }}
|
||
with:
|
||
CONTINUE_API_KEY: ${{ secrets.CONTINUE_API_KEY }}
|
||
CONTINUE_BASE_URL: https://api.continue.dev/v1
|
||
permissions:
|
||
contents: write
|
||
pull-requests: write
|
||
issues: write
|
||
```
|
||
|
||
### 10. Kade
|
||
```yaml
|
||
name: AI
|
||
on:
|
||
pull_request:
|
||
types: [opened, synchronize]
|
||
jobs:
|
||
code-review:
|
||
name: 'Code Review'
|
||
runs-on: ubuntu
|
||
steps:
|
||
- name: AI Code Review
|
||
uses: https://gitea.jsc.idv.tw/jiantw83/code-review@${{ vars.ACTION_CODE_REVIEW_VERSION }}
|
||
with:
|
||
KADE_API_KEY: ${{ secrets.KADE_API_KEY }}
|
||
KADE_BASE_URL: https://api.kade.dev/v1
|
||
permissions:
|
||
contents: write
|
||
pull-requests: write
|
||
issues: write
|
||
```
|
||
|
||
### - Ollama
|
||
|
||
```yaml
|
||
name: AI
|
||
on:
|
||
pull_request:
|
||
types: [opened, synchronize]
|
||
jobs:
|
||
code-review:
|
||
name: 'Code Review'
|
||
runs-on: ubuntu
|
||
steps:
|
||
- name: AI Code Review
|
||
uses: https://gitea.jsc.idv.tw/jiantw83/code-review@${{ vars.ACTION_CODE_REVIEW_VERSION }}
|
||
with:
|
||
OLLAMA_BASE_URL: ${{ vars.OLLAMA_BASE_URL }}
|
||
OLLAMA_MODEL: ${{ vars.OLLAMA_MODEL }}
|
||
permissions:
|
||
contents: write
|
||
pull-requests: write
|
||
|
||
issues: write
|
||
``` |