feat: 前置驗證納入 git push 認證檢查 #10

Merged
jiantw83 merged 11 commits from feat/preflight-auth-check into develop 2026-06-16 06:20:10 +00:00

11 Commits

Author SHA1 Message Date
AI Review Bot fce2cd3c45 chore: update ai-review findings [ai-review-bot][success]
AI / 計算版本號 (pull_request) Successful in 3s
AI / Code Review (pull_request) Successful in 4s
2026-06-16 06:19:36 +00:00
Jeffery 33f1291a0f chore: triage preflight TLS finding 為誤報並寫入 exclusions
AI / 計算版本號 (pull_request) Successful in 4s
AI / Code Review (pull_request) Successful in 4m16s
Maya critical(app/preflight.js:107):verifyLLM 的 axios.post 未帶
httpsAgent,認為 GITEA_SKIP_TLS_VERIFY 未套用到 LLM 請求。

判定為誤報並移入 exclusions:
- GITEA_SKIP_TLS_VERIFY 為 Gitea 端(內網自簽憑證)專用設定,外部 LLM
  服務(Gemini/OpenAI/Claude)應維持 TLS 驗證,套用此 flag 屬安全降級
- 與既有 app/llm.js 排除一致(已刻意移除 rejectUnauthorized:false 還原
  TLS 驗證)

findings.json 清空(已排除)。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 14:15:00 +08:00
AI Review Bot cedcb04424 chore: update ai-review findings [ai-review-bot][failure]
AI / 計算版本號 (pull_request) Successful in 3s
AI / Code Review (pull_request) Failing after 5s
2026-06-16 05:52:21 +00:00
Jeffery 9d780788e9 test: 補齊 runPreflight 測試並 triage preflight findings
AI / 計算版本號 (pull_request) Successful in 4s
AI / Code Review (pull_request) Failing after 1m42s
triage 6 筆 review findings:1 筆修正、5 筆移入 exclusions。

修正(Maya, warning):runPreflight 僅測過 env 缺失早退,缺成功路徑與
各失敗點覆蓋。將其驗證步驟改為可注入的 deps 參數(預設沿用原函式,
行為不變),並補上完整成功、comment 略過、各失敗點早停、workspace
傳遞共 8 個測試。

移入 exclusions(誤報,保留原文):
- Rex critical:GITEA_SKIP_TLS_VERIFY 為預設開啟驗證的 opt-in 設定,
  與既有 gitea.js 排除一致,非漏洞
- Leo warning:verifyLLM 內聚清楚,拆分屬主觀重構
- Zara warning:每把 key 30s timeout 為刻意的可靠性下限,僅失敗時累積
- Rex info:axios 錯誤訊息不含認證標頭/內容
- Aria info:預設參數引用 config 常數為刻意且利於測試的 pattern

findings.json 清空(全部已修正或排除)。app/ 測試 112 pass。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 13:49:30 +08:00
AI Review Bot 7ba9a4e223 chore: update ai-review findings [ai-review-bot][failure]
AI / 計算版本號 (pull_request) Successful in 4s
AI / Code Review (pull_request) Failing after 5s
2026-06-16 04:04:57 +00:00
Jeffery 7339145641 fix: withAskpass 等待非同步 callback 完成才清理 askpass 腳本
AI / 計算版本號 (pull_request) Successful in 2s
AI / Code Review (pull_request) Failing after 2m24s
commitAndPush 傳入 async callback,但 withAskpass 是同步 try/finally,
會在第一個 await(LLM 合併指令檔)時就刪除 .git-askpass.sh,導致後續
git push 因 GIT_ASKPASS 指向已刪除腳本而失敗(cannot exec .git-askpass.sh /
could not read Username)。前置驗證的 verifyRemoteAccess 用同步 callback
所以 ls-remote 通過,造成前置驗證過但 push 失敗的落差。

改為當 callback 回傳 thenable 時以 result.finally(cleanup) 延後清理,
同步 callback 維持立即清理與原樣回傳,不影響 verifyRemoteAccess / cloneRepo。

新增回歸測試斷言 git push 執行當下 askpass 腳本仍存在。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 11:40:58 +08:00
Jeffery 40ebfe99a8 feat: 前置驗證納入 git push 認證檢查
AI / 計算版本號 (pull_request) Successful in 2s
AI / Code Review (pull_request) Failing after 1m28s
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>
2026-06-15 13:39:04 +08:00
Jeffery 00f5bc7dae 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
2026-06-15 11:57:02 +08:00
Jeffery 69371eb993 feat: update GEMINI_API_KEY configuration for AI Code Review
AI / 計算版本號 (pull_request) Successful in 2s
AI / Code Review (pull_request) Failing after 2s
2026-06-15 10:44:19 +08:00
Jeffery 766f2ddf40 feat: 啟動時前置驗證所有驗證相關設定
AI / 計算版本號 (pull_request) Failing after 1s
AI / Code Review (pull_request) Has been skipped
新增 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>
2026-06-15 10:41:40 +08:00
Jeffery 1b34298d4b docs: 規劃 action 啟動前置驗證所有驗證相關設定
在 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>
2026-06-15 10:37:11 +08:00