Files
Arcrun/RELEASE-CHECKLIST.md
uncle6me-web 3d3de8b917 chore(release): deploy-from-committed 防呆流程(git 閘 + 清單)
壓測階段 6 抓到漂移新形態:cypher 改了但沒推 main → acr init 從 origin/main
codeload 抓到舊 worker → 薄殼打不存在的 /init/seed → 404。根因是「deploy 前沒先 push」。

防呆(沒 GH Actions,deploy 分開推,靠清單+閘不漏):
- scripts/check-release.sh 加「0. Git 同步」段:工作目錄髒 / 領先 origin/main 未 push → exit 1
- scripts/local-deploy.sh 實際 deploy 前強制跑 git 閘(未過拒絕 deploy;SKIP_GIT_CHECK=true 可強推)
- RELEASE-CHECKLIST.md:正確順序(先 commit+push main → 再 deploy → 線上打新端點驗證)

核心鐵則:self-hosted acr init 從 origin/main 抓 worker 源,故 git push 必須在 deploy 之前。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-06 15:51:51 +08:00

3.8 KiB
Raw Permalink Blame History

RELEASE-CHECKLIST — 出貨清單(沒有 GitHub Actions,每個 target 分開推,照順序不漏)

為什麼要這份:沒有 CI,deploy 是「一個個分開」的動作(git / CF workers / npm CLI)。 漏任一步就會「有些新有些舊」——壓測踩過兩次:

  • 第一次:CLI 改了但 npm 沒發 → 用戶 npm 裝到舊 CLI。
  • 第二次(階段 6):cypher 改了但沒推 mainacr init 從 origin/main codeload 抓到舊 worker → 薄殼打不存在的 API(seed 404)。

核心鐵則:self-hosted acr initorigin/main 抓 worker 源。所以「git push main」必須在「部署」之前。 順序錯了 = deploy 出去的 prod 是新的,但 self-hosted 用戶裝到的是舊的。


正確順序(照做不會忘)

0. 改完 code,先驗證

  • 三端 typecheck 綠:cd cli && npx tsc --noEmitcd cypher-executor && npx tsc --noEmitcd mcp && npx tsc --noEmit
  • 動到的 .shbash -n scripts/<檔>.sh

1. ⬆️ 先 git commit + push必須在 deploy 之前

  • git add -A(確認 .env / secret 沒被加:git diff --cached --name-only | grep -iE '\.env|secret|token' 應空)
  • git commit -m "..."
  • git push origin main
  • 理由:self-hosted 從 origin/main codeload 抓 worker。沒先 push → 用戶抓到舊碼。

2. 跑出貨前檢查(會擋住「git 沒同步」)

  • bash scripts/check-release.sh → 必須全綠(含「0. Git 同步」段)。
    • 紅燈「領先 origin/main N commit 未 push」= 回步驟 1。
    • 此腳本 git 未同步會 exit 1,是 deploy 的前置閘。

3. 🚀 deployworker + CLI npm

  • Node ≥ 20(本機若預設舊版:export PATH="$HOME/.nvm/versions/node/v22.21.0/bin:$PATH"
  • bash scripts/local-deploy.sh --all(或不帶 --all 只 deploy diff
    • 此腳本會先自動跑步驟 2 的 git 閘;未過直接拒絕 deploy(要強推設 SKIP_GIT_CHECK=true,自負風險)。
    • worker 走 wrangler deployCLI 走 npm publish(版本未 bump 會自動 patch +1 + 寫 CHANGELOG)。
    • npm publish 需 npm login.envNPM_API_TOKENauthToken)。

4. 🔁 deploy 後線上驗證(確認新碼真的上去了)

  • curl https://cypher.arcrun.dev/health → 200
  • 改了 cypher 路由時,實際打那條新路由確認存在(例:curl -X POST https://cypher.arcrun.dev/init/seedcurl https://cypher.arcrun.dev/recipes 應非空)。 ← 這步就是階段 6 的教訓:別只看「部署成功」,要打新端點確認。
  • 改了 CLInpm view arcrun version == cli/package.json version。
  • landing 有改:確認 arcrun.dev 更新。

5. 📣 通知 / 收尾

  • 若是回應壓測:到壓測報告加「開發者回覆」+ 請壓測者重跑。

一眼對照表:每個 target 怎麼推、誰依賴它

Target 推法 誰依賴「它在 origin/main」
git origin/main git push origin main self-hosted acr init codeload 抓這裡的 worker 源 → 必須最先
CF workers26 個含 mcp local-deploy.shwrangler deploy 平台 prodself-hosted 自己 deploy
CLInpm arcrun local-deploy.sh 第 6 段 / cd cli && npm publish 用戶 npm i -g arcrun
landingarcrun.dev cd landing && wrangler pages deploy 訪客

常見漏失(自我檢查)

  • 「我 deploy 了 prod cypher 但忘了 push main」→ self-hosted 用戶 init 抓舊碼。先 push 再 deploy。
  • 「改了 CLI 但版本沒 bump」→ npm publish 跳過(同版)。local-deploy.sh 會自動 bump,但手動 publish 時要記得。
  • 「改了 cypher 路由只看到『部署成功』就收工」→ 要實際 curl 新路由確認(步驟 4)。