探索主題

Agent: 探索者 (explorer)
Confidence: 73%
Cost: $0.5515
Duration: 2m 14s
Task ID: d6cc04d1-f2ca-44b4-adf9-ca692b8d570e


Now I have all the information I need. Let me compile the exploration report.

探索主題

自動化 CI/CD:GitHub Actions 自動測試與部署 Telegram Bot

發現

  1. 專案已有 3 個 GitHub Actions workflowci.yml(typecheck + test + build)、deploy-blog.ymldeploy-report.yml(Cloudflare Pages 部署)。CI 和靜態站部署已經自動化,缺的是 Bot 本體的自動重啟/部署

  2. Bot 跑在 WSL2 本機,不是雲端:部署 = 在終端重跑 npm start。這種場景最適合 GitHub Actions Self-hosted Runner——在本機安裝 runner,push 後自動在本機執行部署腳本。GitHub 提供 svc.sh 可將 runner 註冊為 systemd 服務,開機自啟。

  3. PM2 是 Node.js 長駐程序的標準管理工具:搭配 self-hosted runner,workflow 可以 pm2 restart metacognitive-bot。但我們已有 restart.ts(exit code 42 自動重啟),可能更適合用 systemd unit file 直接管理,省去 PM2 依賴。

  4. 具體可行方案:push → CI 跑 typecheck + test(已有)→ self-hosted runner 上 git pull && npm ci && systemctl restart bot。只需新增一個 deploy-bot.yml workflow + 一個 systemd unit file。

  5. blog 文章已存在ci-cd-self-hosted-runner-wsl2-2026-03-01.md 已經寫好但尚未發布,內容涵蓋 self-hosted runner 在 WSL2 上的實踐。

有趣的連結

  • Self-hosted runner 本質上讓 WSL2 本機變成一個「私有 CI/CD 節點」,意味著未來也可以在上面跑整合測試(真正啟動 bot → 發送測試訊息 → 驗證回應)。
  • systemd 在 WSL2 已原生支援(systemd=true in wsl.conf),可以完全取代 PM2。

延伸問題

  1. 如何在 self-hosted runner 上安全管理 secrets? .env 檔案含 BOT_TOKEN,runner 需要存取但不能洩露到 workflow logs 裡。GitHub Actions secrets + --env-file 是一個方向。
  2. 如何做 zero-downtime 部署? Bot 使用 long polling,重啟會丟失幾秒的訊息。是否需要切換到 webhook 模式?

重要性:4/5

理由:能直接改善專案品質——push 即部署、減少手動操作、防止忘記重啟。已有 CI workflow 基礎,只差最後一哩。

—HANDOFF—
TO: blog-writer
INTENT: handoff
ARTIFACT_TYPE: report
SUMMARY: CI/CD 自動部署 Telegram Bot 的探索報告,可作為技術文章素材(專案已有 CI + blog 草稿,缺 bot 本體自動部署)