探索主題

Agent: 探索者 (explorer)
Confidence: 71%
Cost: $0.5192
Duration: 1m 21s
Task ID: f4edeb1e-5ebd-4ea4-8ecc-b6667865783e


I now have enough information to write the report. Let me compile everything.

探索主題

探索 — GitHub Actions 自動化 Telegram Bot 的 CI/CD 流程

發現

  1. 我們專案已有完整的部落格文章分析blog/source/_posts/ci-cd-self-hosted-runner-wsl2-2026-03-01.md 已深入探討三層架構(雲端 CI → self-hosted CD → blog deploy),但尚未實作——/.github/workflows/ 目錄不存在。

  2. grammy-test 測試框架已成熟BONKERS-agency/grammy-test 支援 Vitest + grammY,可模擬 commands、callbacks、inline queries,且有 TypeScript 型別安全。這解決了「Bot 怎麼在 CI 環境測試」的問題——不需要真實 Telegram API。

  3. Cloudflare 官方 Wrangler Action 可直接用cloudflare/wrangler-action@v3 搭配 CLOUDFLARE_API_TOKEN secret 即可在 GitHub Actions 中部署 Pages/Workers,完全適用於我們的 blog 和 report site deploy。

  4. Self-hosted Runner 是本機部署的最佳路徑:因為 Bot 跑在 WSL2 上,self-hosted runner 直接在目標機器上執行 git pull + npm ci + restart,無需 SSH/Docker/K8s。但 private repo only(public repo 有 RCE 風險)。

  5. 具體 workflow 架構已可套用

    • CI workflowon: [push, pull_request]ubuntu-latestnpm citsgo --noEmitvitest run
    • CD workflowon: workflow_run 觸發 → self-hosted runner → git pull + systemctl restart
    • Blog deployon: push paths: ['blog/**']hexo generate + wrangler pages deploy

有趣的連結

  • grammy-test 與現有 vitest 測試的整合:目前專案已用 vitest + vi.mock 做單元測試,grammy-test 可以補上端對端的 Bot 行為測試,讓 CI 不只測 TypeScript 型別,還能測 Bot 回覆邏輯。
  • GitHub Actions 免費額度與 multi-agent 頻率的交叉:Private repo 每月 2,000 分鐘 + self-hosted runner 不計額度。以目前每週 ~371 次 agent 任務、其中大量 commit/push 來估算,需要監控額度使用。

延伸問題

  1. grammy-test 的 conversation 測試能力如何? 我們的 Bot 有多步驟互動(model router、command 系統),需確認 grammy-test 能否模擬完整對話流程。
  2. WSL2 systemd 穩定性足夠支撐 self-hosted runner 長跑嗎? Runner 需要 24/7 運行,WSL2 的 systemd 在 2022 年才加入,是否有已知的 daemon 意外中斷問題?

重要性:4/5

理由:不是面向外部使用者的功能,但能顯著改善專案品質和開發效率。現在每次 push 是「裸奔」,只靠本地 git hook。加上 CI/CD 後:(1) agent 自動 push 有雲端守門員,(2) blog deploy 可完全自動化取代 blog-publisher 手動流程,(3) 重構信心大增。已有完整架構文章可直接作為實作規格。

—HANDOFF—
TO: pm
INTENT: handoff
ARTIFACT_TYPE: report
SUMMARY: CI/CD 探索完成——已有部落格文章和三層架構設計,建議排入實作計畫(建 .github/workflows/ + 安裝 self-hosted runner)