325 lines
16 KiB
Markdown
325 lines
16 KiB
Markdown
# Code Review 接 Codex 與 Gitea 推版優化藍圖
|
||
|
||
| 項目 | 內容 |
|
||
|------|------|
|
||
| 狀態 | 規劃完成,尚未開始實作 |
|
||
| 日期 | 2026-05-06 |
|
||
| 範圍 | Code Review、Codex coding 接力、Gitea/GitHub CI/CD 邊界、AI Agent 資安分工 |
|
||
| 原則 | 長期以 GitHub 作為雲端主控面,Gitea 保留本地 mirror / fallback,先盤點與同步,再逐步切換 |
|
||
| AwoooP 同步 | `docs/security/AWOOOP-SECURITY-SUPPLYCHAIN-INTEGRATION-HANDOFF.md` |
|
||
|
||
## 背景
|
||
|
||
過去使用 GitHub 作為主要 CI/CD 與 Claude Code 工作入口時,曾發生兩類問題:
|
||
|
||
1. Code Review 後需要 coding 的工作沒有穩定接力,導致修補、推版、部署流程變得耗時且複雜。
|
||
2. Claude Code 或 GitHub Actions 工作流使用 GitHub-hosted runner 時,容易消耗 GitHub 免費額度。
|
||
|
||
本專案已依 ADR-039 遷移為:
|
||
|
||
```text
|
||
Gitea 作為主倉與 CI/CD 執行面
|
||
GitHub 作為只讀備份
|
||
```
|
||
|
||
但從長期可用性角度看,Gitea 部署在本地端,會受到 110 重開機、Docker/Gitea runner、內網服務與儲存狀態影響。若 Git repository、PR、Code Review 與 Codex 接力全部依賴本地 Gitea,開發控制面會跟著本地機房狀態一起中斷。
|
||
|
||
因此本輪修訂長期方向為:
|
||
|
||
```text
|
||
GitHub 作為雲端主控面:主 repo、PR、Code Review、Codex / Codex Security 接力
|
||
本地 runner / deployment plane:build、Harbor push、K8s deploy、內網驗證
|
||
Gitea 作為本地 mirror / fallback:保留完整版本與緊急離線備援
|
||
```
|
||
|
||
這不是回到舊的「GitHub-hosted runner 全包 CI/CD」模式,而是把穩定的協作與審查控制面放回 GitHub,同時把高耗時、內網依賴、production deploy 的工作留在 self-hosted runner 與本地部署面。
|
||
|
||
## 官方事實基線
|
||
|
||
### GitHub Actions 額度
|
||
|
||
依 GitHub 官方文件:
|
||
|
||
- self-hosted runner 使用 GitHub Actions 不消耗 GitHub-hosted runner minutes。
|
||
- public repository 使用標準 GitHub-hosted runner 通常免費。
|
||
- private repository 使用 GitHub-hosted runner 會消耗帳號方案內的免費 minutes、artifact storage、cache storage,超額後可能被阻擋或計費。
|
||
- larger runner 另計,不應視為免費額度。
|
||
|
||
官方來源:[GitHub Actions billing](https://docs.github.com/en/billing/managing-billing-for-your-products/about-billing-for-github-actions)。
|
||
|
||
因此統帥的理解是正確的:GitHub 可以正常使用,但要避免把私有 repo 的日常 CI/CD 跑在 GitHub-hosted runner 上。若必須在 GitHub 跑 workflow,優先使用 self-hosted runner 或只保留極短、手動、低頻的檢查。
|
||
|
||
### Codex 費用與接法
|
||
|
||
依 OpenAI 官方文件:
|
||
|
||
- Codex 是可讀取、修改、執行程式碼的 coding agent,可在雲端、CLI、IDE、SDK 等不同介面使用。
|
||
- Codex 可用於 code review、bug fix、測試補齊、資安弱點修補等工作。
|
||
- Codex app / CLI / cloud 會受到使用者方案、credits、rate limits 與工作環境設定影響。
|
||
- 若使用 OpenAI API / Responses API / Codex coding model 自建流程,則走 API token 費用與 API rate limit。
|
||
|
||
官方來源:[Codex cloud docs](https://platform.openai.com/docs/codex/overview)、[Using Codex with your ChatGPT plan](https://help.openai.com/en/articles/11369540-using-codex-with-your-chatgpt-plan%252525252525252525252525252525252525252525252525252525252528.pdf)、[OpenAI API Pricing](https://openai.com/api/pricing/)。
|
||
|
||
因此結論是:可以把 Code Review 後的 coding 工作串接到 Codex,但要分成「使用 Codex 產品額度」與「自建 API 工作流費用」兩種路線管理。
|
||
|
||
## 決策
|
||
|
||
1. 長期目標改為 GitHub primary:GitHub 作為 AWOOOI 的雲端主 repo、PR、Code Review、Codex / Codex Security 接力入口。
|
||
2. Gitea 降級為本地 mirror / fallback / 離線保險,不再長期承擔唯一主控面。
|
||
3. Code Review 後的 coding 工作可以串接 Codex,但第一階段採半自動、人工批准,不直接自動合併或部署。
|
||
4. Claude Code 不作為推版主控;可保留為開發輔助或審查席位,但不得讓它觸發高頻 GitHub-hosted workflow。
|
||
5. Codex 若透過 API 深度整合,需在實作前另外確認費用、token 上限、資料外送與權限邊界。
|
||
6. NemoTron 值得作為資安深度分析與工具調用候選升級,但不取代 OpenClaw 主控。
|
||
7. 所有目前只存在於 Gitea 的專案、分支、tag、release、workflow 版本與部署相關 commit,都必須完整盤點並轉移或同步到 GitHub;完成前不得切換主控面。
|
||
|
||
## 目標流程
|
||
|
||
```text
|
||
GitHub push / PR
|
||
-> GitHub Code Review / Codex Security / deterministic review
|
||
-> deterministic review report
|
||
-> coding_task envelope
|
||
-> OpenClaw 分派與風險分級
|
||
-> Codex 產生修補分支或 patch
|
||
-> 測試與 diff 證據
|
||
-> ElephantAlpha / vuln-verifier 複核
|
||
-> 人工批准
|
||
-> GitHub merge
|
||
-> self-hosted runner / 本地 deployment plane
|
||
-> Harbor / K8s / Prometheus 驗證
|
||
-> Gitea mirror 同步
|
||
-> LOGBOOK / AI Governance Event / Memory 摘要
|
||
```
|
||
|
||
第一階段只允許 `suggest-only` 與 `patch-only`,不允許自動 merge、force push、production deploy、secret rotation、RBAC/NetworkPolicy/firewall 修改。
|
||
|
||
## Code Review 到 Coding Task 的資料契約
|
||
|
||
建議新增 `coding_task` envelope,承接目前 `.gitea/workflows/code-review.yaml` 與 `scripts/ci_code_review.py` 的 review report。
|
||
|
||
```json
|
||
{
|
||
"schema_version": "coding_task_v1",
|
||
"source": "github_code_review",
|
||
"repo": "awoooi",
|
||
"branch": "main",
|
||
"base_sha": "string",
|
||
"head_sha": "string",
|
||
"risk": "LOW|MEDIUM|HIGH|CRITICAL",
|
||
"summary": "繁體中文摘要",
|
||
"findings": [
|
||
{
|
||
"id": "string",
|
||
"severity": "LOW|MEDIUM|HIGH|CRITICAL",
|
||
"file": "string",
|
||
"reason": "繁體中文原因",
|
||
"recommended_action": "繁體中文建議"
|
||
}
|
||
],
|
||
"allowed_actions": [
|
||
"create_patch",
|
||
"add_tests",
|
||
"open_draft_pr"
|
||
],
|
||
"blocked_actions": [
|
||
"auto_merge",
|
||
"production_deploy",
|
||
"force_push",
|
||
"secret_rotation",
|
||
"network_policy_change"
|
||
],
|
||
"required_reviewers": [
|
||
"critic",
|
||
"vuln-verifier"
|
||
]
|
||
}
|
||
```
|
||
|
||
## Codex 串接策略
|
||
|
||
### 第一階段:Codex 半自動接力
|
||
|
||
適用情境:
|
||
|
||
- Code Review 發現格式、測試、低中風險程式問題。
|
||
- 需要補測試、修小 bug、整理型別或錯誤處理。
|
||
- 不涉及 production secret、K8s 權限、資料庫破壞性 migration。
|
||
|
||
建議做法:
|
||
|
||
1. GitHub / Gitea Code Review 產生 `coding_task_v1`。
|
||
2. 由 OpenClaw 或人工把 task 交給 Codex CLI / Codex app。
|
||
3. Codex 在隔離 worktree 產生 patch。
|
||
4. 本機或 Gitea runner 跑測試。
|
||
5. 人工確認後再進 GitHub merge,並由 self-hosted runner / 本地 deployment plane 接續驗證。
|
||
|
||
優點:最快落地,費用與權限較容易控管。
|
||
|
||
限制:仍需要人工觸發或人工接力,不是全自動。
|
||
|
||
### 第二階段:Codex SDK / API 工作流
|
||
|
||
適用情境:
|
||
|
||
- 需要把 Code Review finding 自動轉成修補分支。
|
||
- 需要整合 AWOOOI approval、AOL、AI governance event、Telegram。
|
||
- 需要精準記錄 token、費用、工具呼叫與安全審批。
|
||
|
||
建議做法:
|
||
|
||
1. 新增 `code_review_to_coding_task` job。
|
||
2. 新增 `codex_patch_runner`,僅允許寫入臨時 worktree。
|
||
3. 產生 patch、測試報告與 rollback note。
|
||
4. 只建立 draft PR 或 Gitea branch,不自動合併。
|
||
5. `HIGH/CRITICAL` 一律需要 `vuln-verifier` 與人工批准。
|
||
|
||
優點:可追蹤、可治理、可接進 AWOOOI 飛輪。
|
||
|
||
限制:可能產生額外 API token 費用;需先設 budget、rate limit、資料遮罩與權限範圍。
|
||
|
||
## GitHub / Gitea 長期優化原則
|
||
|
||
### GitHub 長期主控用途
|
||
|
||
- 主 repo 與分支保護。
|
||
- PR、Code Review、Codex / Codex Security 接力入口。
|
||
- GitHub Issues / Pull Requests 作為可被 Codex cloud 與第三方工具穩定消費的協作面。
|
||
- 低頻、短時、非部署型 workflow。
|
||
- self-hosted runner 入口,讓 workflow 控制面在 GitHub,但實際執行可回到本地或專用 runner。
|
||
|
||
### GitHub 避免用途
|
||
|
||
- 私有 repo 高頻 `ubuntu-latest` workflow。
|
||
- push 到 main 後自動跑完整 CI/CD。
|
||
- 長時間 LLM / Claude Code / e2e workflow。
|
||
- artifact/cache 大量保存。
|
||
- 與 Gitea 同時觸發部署,造成雙主控。
|
||
|
||
### Gitea 長期保留用途
|
||
|
||
- 本地 mirror,保留 GitHub 不可用時的離線保險。
|
||
- 內網備援與災難復原。
|
||
- 必要時保留本地只讀查閱與 emergency branch fallback。
|
||
- 轉移完成前,暫時保留現有 Gitea CI/CD,避免一次切換造成 release 中斷。
|
||
|
||
## Gitea 全量轉移到 GitHub 清單
|
||
|
||
這是長期切換的前置工作,必須納入本次資安網工作項目,並以「完整性」作為驗收標準。
|
||
|
||
| 範圍 | 轉移要求 | 驗收證據 |
|
||
|------|----------|----------|
|
||
| Repositories | 所有 Gitea repositories 都要在 GitHub 建立對應 repo 或明確標記封存 | repo 對照表、GitHub URL、owner |
|
||
| Branches | 所有仍有用途的 branches 完整同步 | branch count diff、最新 commit SHA 比對 |
|
||
| Tags | release tag、deploy tag、rollback tag 完整同步 | tag count diff、tag SHA 比對 |
|
||
| Commit history | 不得只複製 main snapshot;需要完整 Git history | `git fsck`、遠端 SHA 比對 |
|
||
| Releases / artifacts | 若 Gitea release 有檔案或說明,需要搬遷或標記替代來源 | release inventory |
|
||
| Issues / PR | 若仍有未結事項,需要匯出或轉成 GitHub issue | open item mapping |
|
||
| Secrets | 不直接搬 secret value;只建立 secret inventory 與 GitHub Actions secret 名稱 | secret 名稱清單、owner、rotation plan |
|
||
| Workflows | `.gitea/workflows` 需盤點並決定改寫、停用或保留本地 fallback | workflow migration matrix |
|
||
| Webhooks | Gitea webhook 轉 GitHub webhook 或 AwoooP event adapter | webhook endpoint mapping |
|
||
| Deploy markers | deploy-marker commits 與 GitOps revision 要能在 GitHub 追溯 | GitHub commit / tag trace |
|
||
| Permissions | GitHub teams、branch protection、required checks、CODEOWNERS | permission review 記錄 |
|
||
|
||
轉移過程中,Gitea 不應被直接刪除或停用;至少保留一段並行 mirror 期,直到 GitHub primary、self-hosted runner、Harbor/K8s deploy、rollback 都被驗證。
|
||
|
||
此遷移屬於 supply chain security,必須 mirror 到 AwoooP governance。AwoooP 初期只接收 `source_control_migration_event_v1` 作為 evidence,不直接觸發主控切換或部署。
|
||
|
||
## 建議遷移階段
|
||
|
||
| 階段 | 目標 | 狀態 |
|
||
|------|------|------|
|
||
| Phase G0 | 盤點所有 Gitea repos、branches、tags、workflows、webhooks、secrets 名稱 | 未開始 |
|
||
| Phase G1 | 建立 GitHub repo / team / branch protection / CODEOWNERS | 未開始 |
|
||
| Phase G2 | 全量 mirror Git history、branches、tags,不搬 secret value | 未開始 |
|
||
| Phase G3 | 將 Code Review / Codex 接力接到 GitHub PR,但 deploy 仍走本地 runner | 未開始 |
|
||
| Phase G4 | self-hosted runner 與本地 deployment plane 驗證 Harbor/K8s/Prometheus 全鏈路 | 未開始 |
|
||
| Phase G5 | Gitea 改為 mirror / fallback,主開發入口切到 GitHub | 未開始 |
|
||
| Phase G6 | 30 天觀察與 rollback drill 後,再移除多餘 Gitea 主控 workflow | 未開始 |
|
||
|
||
## AI Agent 分工
|
||
|
||
| 角色 | 建議定位 |
|
||
|------|----------|
|
||
| OpenClaw | 主控與分派,負責任務路由、權限邊界、approval gate |
|
||
| Codex | coding worker,負責修補、測試、refactor、資安 patch 草稿 |
|
||
| Codex Security | 程式碼弱點 identification / validation / remediation 候選 |
|
||
| NemoTron | 資安深度分析、工具調用、finding triage、風險摘要 |
|
||
| Hermes | 知識沉澱、SOP、LOGBOOK、長期脈絡 |
|
||
| ElephantAlpha | 反駁、誤判挑戰、修補風險審查 |
|
||
| vuln-verifier | secrets、RBAC、NetworkPolicy、K8s、資安邊界複核 |
|
||
| migration-engineer | Gitea、Webhook、CI/CD、GitOps、回滾路徑 |
|
||
| critic | 架構審查、規範稽核、回歸風險 |
|
||
|
||
本專案不建議由單一 Agent 全包。建議採「OpenClaw 主控 + Codex coding + NemoTron 資安分析 + ElephantAlpha 挑戰 + Hermes 記錄」。
|
||
|
||
## NemoTron 更新評估
|
||
|
||
2026-05-12 官方來源校準後,NVIDIA Nemotron / NeMo 的方向確實值得列入 AWOOOI 資安網候選:
|
||
|
||
- NVIDIA 已推出 Nemotron 3 family,主打 Nano / Super / Ultra 尺寸與 agentic AI 應用效率。
|
||
- Nemotron 3 Super 是面向 agentic AI 的 MoE / hybrid Mamba-Transformer 模型,官方定位在多步推理與 agent workflow。
|
||
- NVIDIA NeMo 產品線已把 agent toolkit、資料治理、模型最佳化與監控納入 enterprise agent 建置方向。
|
||
|
||
官方來源:[NVIDIA Nemotron 3 family](https://nvidianews.nvidia.com/news/nvidia-debuts-nemotron-3-family-of-open-models)、[Nemotron 3 Super](https://blogs.nvidia.com/blog/nemotron-3-super-agentic-ai/)、[NVIDIA NeMo](https://www.nvidia.com/en-us/ai-data-science/products/nemo/)。
|
||
|
||
但更新策略應為:
|
||
|
||
1. 先做官方模型清單與授權確認。
|
||
2. 新增候選模型設定,不直接改 production 預設。
|
||
3. 對歷史 incident / code review / security finding 做 shadow benchmark。
|
||
4. 比較 tool call schema 正確率、誤判率、延遲、費用、繁中品質、secret redaction。
|
||
5. 只在 `suggest-only` 風險分析席位 canary。
|
||
6. 7-14 天指標穩定後再決定是否升級預設模型。
|
||
|
||
## 風險與防護
|
||
|
||
| 風險 | 防護 |
|
||
|------|------|
|
||
| Codex 自動修出不安全 patch | 第一階段只允許 patch-only,必須人工批准 |
|
||
| GitHub 免費額度再次耗盡 | GitHub workflows 避免私有 repo 高頻 GitHub-hosted runner;長任務改 self-hosted |
|
||
| Gitea / GitHub 雙主控部署 | 切換前明確指定唯一 deploy controller;GitHub primary 期由 self-hosted runner / 本地 deployment plane 觸發,Gitea 只 mirror |
|
||
| Gitea 專案版本漏轉 | 先做 repo/branch/tag/release/workflow/webhook inventory;SHA 比對通過前不切主控 |
|
||
| 本地 deployment plane 仍會因重開中斷 | GitHub 只解決控制面可用性;Harbor/K8s/DB/內網 runner 必須另有 cold-start gate |
|
||
| LLM 洩漏 secrets | review report 不輸出原始敏感行;送模型前做 redaction |
|
||
| Agent 權限過大 | coding task 明列 allowed/blocked actions |
|
||
| API 成本失控 | API 化前先設 budget、rate limit、usage metrics、AOL |
|
||
| 高風險修補被自動合併 | `HIGH/CRITICAL` 強制 `vuln-verifier` + 人工批准 |
|
||
|
||
## 第一波實作清單
|
||
|
||
尚未開始實作。未來若統帥批准,建議順序如下:
|
||
|
||
1. 文件與契約:新增 `coding_task_v1` schema。
|
||
2. Gitea/GitHub 版本盤點:列出所有 Gitea repos、branches、tags、workflows、webhooks、secrets 名稱與 GitHub 對應目標。
|
||
3. Gitea Code Review:把 `scripts/ci_code_review.py` 報告轉成 `coding_task_v1`。
|
||
4. 儲存層:將 coding task 寫入既有 AI governance / AOL / artifact 位置。
|
||
5. Codex 半自動:產出可交給 Codex CLI / app 的 task prompt。
|
||
6. 權限閘門:`HIGH/CRITICAL` 必須人工批准,不得自動修補。
|
||
7. 測試證據:Codex patch 必須附測試指令、結果、diff summary。
|
||
8. Draft branch:只建立修補分支或 draft PR,不自動 merge。
|
||
9. 指標:記錄 task 數、成功率、重試率、token/credit、平均修補時間。
|
||
10. GitHub primary ADR:新增或修訂 ADR,明確取代 ADR-039 的長期方向與 rollback plan。
|
||
|
||
## 不在第一波做的事
|
||
|
||
- 不直接串 production deploy。
|
||
- 不自動合併 Codex patch。
|
||
- 不啟用 Codex API 自動長任務。
|
||
- 不讓 Claude Code 觸發 GitHub-hosted 高頻 workflow。
|
||
- 不自動修改 secrets、RBAC、NetworkPolicy、firewall、資料庫破壞性 migration。
|
||
- 不在完成 Gitea 全量版本轉移與 self-hosted runner 驗證前,把 GitHub 切成唯一主控。
|
||
|
||
## 參考來源
|
||
|
||
- [ADR-039: GitHub → Gitea CI/CD 遷移](/Users/ogt/awoooi/docs/adr/ADR-039-gitea-cicd-migration.md)
|
||
- [12-Agent 新遊戲規則](/Users/ogt/awoooi/docs/12-agent-game-rules.md)
|
||
- [Kali 資訊安全網藍圖](/Users/ogt/awoooi/docs/security/KALI-SECURITY-MESH-BLUEPRINT.md)
|
||
- [GitHub Actions billing](https://docs.github.com/en/billing/managing-billing-for-your-products/about-billing-for-github-actions)
|
||
- [OpenAI Codex cloud](https://platform.openai.com/docs/codex/overview)
|
||
- [Using Codex with your ChatGPT plan](https://help.openai.com/en/articles/11369540-using-codex-with-your-chatgpt-plan%252525252525252525252525252525252525252525252525252525252528.pdf)
|
||
- [OpenAI API Pricing](https://openai.com/api/pricing/)
|
||
- [OpenAI Code generation / Codex models](https://platform.openai.com/docs/guides/code-generation)
|
||
- [NVIDIA Nemotron 3 family](https://nvidianews.nvidia.com/news/nvidia-debuts-nemotron-3-family-of-open-models)
|
||
- [NVIDIA Nemotron 3 Super](https://blogs.nvidia.com/blog/nemotron-3-super-agentic-ai/)
|
||
- [NVIDIA NeMo](https://www.nvidia.com/en-us/ai-data-science/products/nemo/)
|