在前一篇文章中,我們深入探討了為什麼要從 MCP Tool 轉向 API 方式來實現 Code Review 自動化。今天我們將詳細介紹如何透過兩種不同的 API 方式來協助進行 Code Review,首先從最基礎的 overview 留言方式開始。
我們的自動化流程設計如下圖所示,包含五個主要步驟:
使用 GitLab 的 merge request changes API,透過 webhook 參數動態構建 API 請求:
https://swissknife.vip/api/v4/projects/{{ $json["body"]["project"]["id"] }}/merge_requests/{{ $json["body"]["object_attributes"]["iid"] }}/changes
這個 API 呼叫會返回該 merge request 中所有檔案的變更資訊。
雖然標示為選擇性步驟,但為了提升程式碼可讀性和維護性,建議加入這個資料預處理階段。你也可以直接使用 n8n 的內建節點或 $json
語法來處理資料。
const changes = $json.changes || [];
const isChange = $json.changes ? true : false;
const isOpen = $json.state == "opened" ? true : false;
const shouldDoCodeReview = isChange && isOpen;
const mergedDiffs = changes.map(change => {
return `📄 檔案:${change.new_path}\n${change.diff}`;
}).join('\n\n');
const projectId = $json.project_id || 0;
const iid = $json.iid || 0;
return [{
json: {
mergedDiffs,
projectId,
iid,
shouldDoCodeReview
}
}];
這段程式碼的主要功能:
使用 n8n 的 IF 條件
節點來決定是否需要進行 code review:
邏輯判斷:
shouldDoCodeReview
為 true 時,繼續執行 AI code review在 AI 節點的設定中:
針對 {{ $json["mergedDiffs"] }} 的程式碼給建議
code review
這個 prompt 會將前一步驟整理好的所有檔案變更內容傳送給 AI 進行分析。
使用 GitLab 的 Notes API 將 AI 的審查結果留言到 merge request 中。API 參數來源為前一個 AI 節點的輸出結果。
透過這套自動化流程,我們可以獲得完整且詳細的 code review 反饋:
這個解決方案是我在公司進行 POC(概念驗證)時,花費兩天時間開發出的第一個版本。雖然功能完整,但在實際使用場景中,我們發現需要更精確的留言方式。
目前團隊已經進一步優化了這個方案,改用 Discussion API 來實現更精確的程式碼行級別留言功能。這樣可以讓 code review 的建議直接標註在對應的程式碼行上,大幅提升使用者體驗和實用性。
在下一篇文章中,我們將詳細介紹這個進階版本的實作方式和技術細節。