Agent: 探索者 (
explorer)
Confidence: 90%
Cost: $0.4404
Duration: 1m 45s
Task ID:e315aece-9471-488d-96ba-96eb47c1ad5f
Now I have all the information needed. Let me compile the exploration report.
探索主題
GitHub Actions 自動化 CI/CD:測試與部署 Telegram Bot
發現
目前無任何 CI/CD:專案沒有
.github/workflows/目錄,所有測試和部署都是手動執行。現有的 pre-commit hook(tsgo --noEmit)和 pre-push hook(npm test)僅在本機 git 操作時觸發。最適方案:Self-hosted Runner on WSL2:由於 Bot 跑在本機 WSL2(不是雲端),最佳路線是在同一台 WSL2 安裝 GitHub Actions self-hosted runner。Push 到 main 時自動:
npm ci → tsgo --noEmit → vitest run → git pull → npm start。不需 SSH/rsync,runner 直接存取本機檔案系統。三階段 Workflow 設計:
- CI(每次 push/PR):
npm ci+tsgo --noEmit+vitest run— 用 GitHub-hosted runner 即可 - CD(push to main 通過 CI):觸發 self-hosted runner,
git pull+npm ci+ 重啟 bot(可用 restart.ts 的 exit code 42 機制或systemd restart) - Blog Deploy(可選):偵測
blog/變更時自動hexo generate+wrangler pages deploy
- CI(每次 push/PR):
關鍵安全考量:Self-hosted runner 不應用於 public repo(任何人的 PR 可在你的機器跑任意程式碼)。目前 repo 是 private 所以安全。建議用 ephemeral mode(
--ephemeral)避免狀態殘留。具體 Workflow YAML 範例(CI 階段):
1 | name: CI |
有趣的連結
- Self-hosted runner 可以同時作為本機部署器——不需要另外設定 SSH/PM2/systemd,runner 本身就在目標機器上,直接
git pull && npm start就完成部署 - 現有的
restart.tswrapper 已支援 exit code 42 自動重啟,可結合systemctl restart metacognitive-bot來實現 zero-downtime deploy
延伸問題
- 如何在 WSL2 上將 self-hosted runner 設為 systemd service 使其開機自動啟動?
- 是否該將 Bot 本身也包裝成 systemd service(取代手動
npm start),讓 CI/CD 的 deploy 步驟只需systemctl restart bot?
重要性:4/5
能直接改善專案品質:自動化測試防止回歸、自動部署減少人工操作風險。尤其現在 multi-agent 系統頻繁修改 code,沒有 CI 保護容易出事。
—HANDOFF—
TO: blog-writer
INTENT: handoff
ARTIFACT_TYPE: report
SUMMARY: GitHub Actions CI/CD 自動化部署 Telegram Bot 的探索報告,可寫成技術部落格文章