feat: 啟動時前置驗證所有驗證相關設定 #9

Open
jiantw83 wants to merge 5 commits from feat/preflight-auth-check into develop
Member
No description provided.
jiantw83 added 3 commits 2026-06-15 03:49:58 +00:00
在 README 流程新增第 0 點與設計第 11 點,並在 TODO 新增階段十二,
說明 action 啟動時集中驗證 Gitea token、comment token 與 LLM API Key
是否可用,任一失敗即 exit 1。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
feat: 啟動時前置驗證所有驗證相關設定
AI / 計算版本號 (pull_request) Failing after 1s
AI / Code Review (pull_request) Has been skipped
766f2ddf40
新增 app/preflight.js,在 action 啟動(Step1 之後、其餘步驟之前)集中
檢查必要環境變數、GITEA_TOKEN 讀 repo、GITEA_COMMENT_TOKEN、以及 LLM
provider/API Key(多把只要一把通過即可,Ollama 改檢查 base URL 連線)。
任一項失敗即印出原因並 exit 1,避免分析到一半或發 comment 時才失敗。

main.js 在 Step1 後呼叫 runPreflight();新增 preflight.test.js 覆蓋
成功、缺環境變數、token 無效、所有 LLM key 失敗、Ollama 等情境。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
feat: update GEMINI_API_KEY configuration for AI Code Review
AI / 計算版本號 (pull_request) Successful in 2s
AI / Code Review (pull_request) Failing after 2s
69371eb993
jiantw83 added 1 commit 2026-06-15 03:57:11 +00:00
fix: update GITEA_COMMENT_TOKEN to use RUNNER_TOKEN for code review action
AI / 計算版本號 (pull_request) Successful in 3s
AI / Code Review (pull_request) Failing after 1m6s
00f5bc7dae
Owner

🤖 AI Code Review 團隊

👤 名稱 🎯 職責 🧠 個性
Leo 可維護性審查員 有遠見、重視長期維護成本,常常思考「六個月後的自己能看懂嗎?」
Zara 效能優化專家 追求極致效能,對任何不必要的資源消耗都感到不舒服,喜歡用數據說話
Rex 資安審查員 謹慎、多疑、對任何潛在風險都保持高度警覺,寧可誤報也不放過漏洞
Aria 程式碼風格審查員 嚴謹、注重細節、對程式碼整潔度有高度要求,說話直接但不失禮貌
Maya 測試品質審查員 對測試覆蓋率有執念,相信沒有測試的程式碼等於沒有完成,溫和但堅持

🔍 服務:gemini 模型:gemini-2.5-flash

## 🤖 AI Code Review 團隊 | 👤 名稱 | 🎯 職責 | 🧠 個性 | |--------|--------|--------| | **Leo** | 可維護性審查員 | 有遠見、重視長期維護成本,常常思考「六個月後的自己能看懂嗎?」 | | **Zara** | 效能優化專家 | 追求極致效能,對任何不必要的資源消耗都感到不舒服,喜歡用數據說話 | | **Rex** | 資安審查員 | 謹慎、多疑、對任何潛在風險都保持高度警覺,寧可誤報也不放過漏洞 | | **Aria** | 程式碼風格審查員 | 嚴謹、注重細節、對程式碼整潔度有高度要求,說話直接但不失禮貌 | | **Maya** | 測試品質審查員 | 對測試覆蓋率有執念,相信沒有測試的程式碼等於沒有完成,溫和但堅持 | > 🔍 服務:gemini 模型:gemini-2.5-flash
Owner

🤖 AI Code Review 團隊

👤 名稱 🎯 職責 🧠 個性
Leo 可維護性審查員 有遠見、重視長期維護成本,常常思考「六個月後的自己能看懂嗎?」
Zara 效能優化專家 追求極致效能,對任何不必要的資源消耗都感到不舒服,喜歡用數據說話
Rex 資安審查員 謹慎、多疑、對任何潛在風險都保持高度警覺,寧可誤報也不放過漏洞
Aria 程式碼風格審查員 嚴謹、注重細節、對程式碼整潔度有高度要求,說話直接但不失禮貌
Maya 測試品質審查員 對測試覆蓋率有執念,相信沒有測試的程式碼等於沒有完成,溫和但堅持

🔍 服務:gemini 模型:gemini-2.5-flash

## 🤖 AI Code Review 團隊 | 👤 名稱 | 🎯 職責 | 🧠 個性 | |--------|--------|--------| | **Leo** | 可維護性審查員 | 有遠見、重視長期維護成本,常常思考「六個月後的自己能看懂嗎?」 | | **Zara** | 效能優化專家 | 追求極致效能,對任何不必要的資源消耗都感到不舒服,喜歡用數據說話 | | **Rex** | 資安審查員 | 謹慎、多疑、對任何潛在風險都保持高度警覺,寧可誤報也不放過漏洞 | | **Aria** | 程式碼風格審查員 | 嚴謹、注重細節、對程式碼整潔度有高度要求,說話直接但不失禮貌 | | **Maya** | 測試品質審查員 | 對測試覆蓋率有執念,相信沒有測試的程式碼等於沒有完成,溫和但堅持 | > 🔍 服務:gemini 模型:gemini-2.5-flash
Owner

🔍 新發現問題(7 筆)

等級 審查員 位置 建議
🟡 警告 Zara app/preflight.js:90 verifyLLM 函數中,當驗證 LLM API Key 時,程式碼會迭代所有提供的 apiKeys 並嘗試發送請求。在最壞情況下(例如,所有 Key 都無效或 LLM 服務響應緩慢),每個 Key 都可能等待其 30 秒的超時時間。如果配置了大量的 API Key,這可能導致前置驗證階段花費很長的時間(N * 30 秒),進而延長整個 CI/CD 流程的啟動時間。建議評估實際會配置的 API Key 數量,並考慮是否需要限制 Key 的數量,或在未來探索更高效的 Key 驗證策略(例如,如果服務支援,可以批量驗證或使用更短的超時時間進行快速失敗檢查)。
🟡 警告 Aria app/preflight.js:30 此行程式碼過長,建議將 axios.get 的選項物件拆分成多行,以提高可讀性。
🟡 警告 Aria app/preflight.js:30 數字 30000 作為請求逾時時間,建議定義為具名常數,以提高程式碼的可讀性與維護性。
🔵 建議 Leo app/preflight.js 函式 giteaErr、常數 apigiteaHeaders 專門用於處理 Gitea API 相關邏輯。如果未來有更多模組需要與 Gitea API 互動,建議將這些共用工具移至一個獨立的 gitea-utils.js 或類似的模組中,以提高程式碼的重用性和模組化程度。
🔵 建議 Leo app/preflight.js:70 verifyLLM 函式中,LLM provider 的名稱(例如 'ollama', 'claude')是以字串形式直接使用。考慮將這些字串定義為常數,例如 LLM_PROVIDER_OLLAMA = 'ollama',以減少魔法字串 (magic strings) 的使用,提高程式碼的可讀性和避免潛在的拼寫錯誤。
🔵 建議 Aria app/preflight.js:66 字串 '2023-06-01' 作為 Anthropic API 版本,建議定義為具名常數,以提高程式碼的可讀性與維護性。
🔵 建議 Aria app/preflight.js:83 字串 'Step1.5' 作為步驟名稱,若此為固定值且可能在多處使用,建議定義為具名常數,以提高程式碼的可讀性與維護性。
## 🔍 新發現問題(7 筆) | 等級 | 審查員 | 位置 | 建議 | |------|--------|------|------| | 🟡 警告 | Zara | app/preflight.js:90 | 在 `verifyLLM` 函數中,當驗證 LLM API Key 時,程式碼會迭代所有提供的 `apiKeys` 並嘗試發送請求。在最壞情況下(例如,所有 Key 都無效或 LLM 服務響應緩慢),每個 Key 都可能等待其 30 秒的超時時間。如果配置了大量的 API Key,這可能導致前置驗證階段花費很長的時間(N * 30 秒),進而延長整個 CI/CD 流程的啟動時間。建議評估實際會配置的 API Key 數量,並考慮是否需要限制 Key 的數量,或在未來探索更高效的 Key 驗證策略(例如,如果服務支援,可以批量驗證或使用更短的超時時間進行快速失敗檢查)。 | | 🟡 警告 | Aria | app/preflight.js:30 | 此行程式碼過長,建議將 `axios.get` 的選項物件拆分成多行,以提高可讀性。 | | 🟡 警告 | Aria | app/preflight.js:30 | 數字 `30000` 作為請求逾時時間,建議定義為具名常數,以提高程式碼的可讀性與維護性。 | | 🔵 建議 | Leo | app/preflight.js | 函式 `giteaErr`、常數 `api` 和 `giteaHeaders` 專門用於處理 Gitea API 相關邏輯。如果未來有更多模組需要與 Gitea API 互動,建議將這些共用工具移至一個獨立的 `gitea-utils.js` 或類似的模組中,以提高程式碼的重用性和模組化程度。 | | 🔵 建議 | Leo | app/preflight.js:70 | 在 `verifyLLM` 函式中,LLM provider 的名稱(例如 `'ollama'`, `'claude'`)是以字串形式直接使用。考慮將這些字串定義為常數,例如 `LLM_PROVIDER_OLLAMA = 'ollama'`,以減少魔法字串 (magic strings) 的使用,提高程式碼的可讀性和避免潛在的拼寫錯誤。 | | 🔵 建議 | Aria | app/preflight.js:66 | 字串 `'2023-06-01'` 作為 Anthropic API 版本,建議定義為具名常數,以提高程式碼的可讀性與維護性。 | | 🔵 建議 | Aria | app/preflight.js:83 | 字串 `'Step1.5'` 作為步驟名稱,若此為固定值且可能在多處使用,建議定義為具名常數,以提高程式碼的可讀性與維護性。 |
Owner

🚨 嚴重問題

等級 審查員 位置 建議
🔴 嚴重 Rex app/preflight.js:15 應避免在生產環境中設定 GITEA_SKIP_TLS_VERIFYtrue。跳過 TLS 憑證驗證會使應用程式容易受到中間人攻擊 (Man-in-the-Middle attacks)。請確保 Gitea 伺服器使用有效的 TLS 憑證,並移除此選項或將其預設為 false。如果確實需要此選項用於特定測試或內部環境,請確保其使用受到嚴格控制,並有明確的安全風險評估。
## 🚨 嚴重問題 | 等級 | 審查員 | 位置 | 建議 | |------|--------|------|------| | 🔴 嚴重 | Rex | app/preflight.js:15 | 應避免在生產環境中設定 `GITEA_SKIP_TLS_VERIFY` 為 `true`。跳過 TLS 憑證驗證會使應用程式容易受到中間人攻擊 (Man-in-the-Middle attacks)。請確保 Gitea 伺服器使用有效的 TLS 憑證,並移除此選項或將其預設為 `false`。如果確實需要此選項用於特定測試或內部環境,請確保其使用受到嚴格控制,並有明確的安全風險評估。 |
Owner

🚨 嚴重問題

等級 審查員 位置 建議
🔴 嚴重 Maya app/preflight.test.js:192 runPreflight 函數是所有前置驗證的整合點,目前僅測試了當必要環境變數缺失時的早期終止情況。請新增測試案例以確保:
  1. 所有子驗證(checkRequiredEnv, verifyGiteaToken, verifyCommentToken, verifyLLM)都成功時,runPreflight 能正確回傳 true
  2. 當其中任何一個子驗證失敗時(例如 verifyGiteaToken 失敗,而 checkRequiredEnv 成功),runPreflight 能正確地短路並回傳 false。這需要模擬每個子函數的成功與失敗情境,以驗證 runPreflight 的整體邏輯流程。 |
## 🚨 嚴重問題 | 等級 | 審查員 | 位置 | 建議 | |------|--------|------|------| | 🔴 嚴重 | Maya | app/preflight.test.js:192 | `runPreflight` 函數是所有前置驗證的整合點,目前僅測試了當必要環境變數缺失時的早期終止情況。請新增測試案例以確保: 1. 所有子驗證(`checkRequiredEnv`, `verifyGiteaToken`, `verifyCommentToken`, `verifyLLM`)都成功時,`runPreflight` 能正確回傳 `true`。 2. 當其中任何一個子驗證失敗時(例如 `verifyGiteaToken` 失敗,而 `checkRequiredEnv` 成功),`runPreflight` 能正確地短路並回傳 `false`。這需要模擬每個子函數的成功與失敗情境,以驗證 `runPreflight` 的整體邏輯流程。 |
jiantw83 added 1 commit 2026-06-15 05:46:44 +00:00
feat: 前置驗證納入 git push 認證檢查
AI / Code Review (pull_request) Failing after 2m48s
AI / 計算版本號 (pull_request) Successful in 2s
40ebfe99a8
git push 走 askpass + HTTP 認證,與 Gitea REST API 是兩套機制,API token
有效不代表 push 能用(曾出現 askpass 無法執行、could not read Username 而
push 失敗)。新增 git.js verifyRemoteAccess() 以相同 askpass + remote URL
跑唯讀 git ls-remote,preflight 呼叫並在失敗時 exit 1,提前攔下設定問題。

新增 git.test.js 對 verifyRemoteAccess 的測試(成功、失敗不丟例外、token
不外洩、askpass 清理)。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Owner

🤖 AI Code Review 團隊

👤 名稱 🎯 職責 🧠 個性
Leo 可維護性審查員 有遠見、重視長期維護成本,常常思考「六個月後的自己能看懂嗎?」
Zara 效能優化專家 追求極致效能,對任何不必要的資源消耗都感到不舒服,喜歡用數據說話
Rex 資安審查員 謹慎、多疑、對任何潛在風險都保持高度警覺,寧可誤報也不放過漏洞
Aria 程式碼風格審查員 嚴謹、注重細節、對程式碼整潔度有高度要求,說話直接但不失禮貌
Maya 測試品質審查員 對測試覆蓋率有執念,相信沒有測試的程式碼等於沒有完成,溫和但堅持

🔍 服務:gemini 模型:gemini-2.5-flash

## 🤖 AI Code Review 團隊 | 👤 名稱 | 🎯 職責 | 🧠 個性 | |--------|--------|--------| | **Leo** | 可維護性審查員 | 有遠見、重視長期維護成本,常常思考「六個月後的自己能看懂嗎?」 | | **Zara** | 效能優化專家 | 追求極致效能,對任何不必要的資源消耗都感到不舒服,喜歡用數據說話 | | **Rex** | 資安審查員 | 謹慎、多疑、對任何潛在風險都保持高度警覺,寧可誤報也不放過漏洞 | | **Aria** | 程式碼風格審查員 | 嚴謹、注重細節、對程式碼整潔度有高度要求,說話直接但不失禮貌 | | **Maya** | 測試品質審查員 | 對測試覆蓋率有執念,相信沒有測試的程式碼等於沒有完成,溫和但堅持 | > 🔍 服務:gemini 模型:gemini-2.5-flash
Some required checks failed
AI / Code Review (pull_request) Failing after 2m48s
Required
Details
AI / 計算版本號 (pull_request) Successful in 2s
Some required checks were not successful.
You are not authorized to merge this pull request.
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin feat/preflight-auth-check:feat/preflight-auth-check
git checkout feat/preflight-auth-check
Sign in to join this conversation.
No Reviewers
No Label
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: actions/code-review#9