chore(cd): deploy pipeline per ADR-0110 round 29 (expand, deploy 100 %, smoke, auto-rollback)
維護者通常 1 天內回覆
還沒有人認領這個 Issue。
評估
- 難度
- 5/5
- 預估耗時
- 一週以上
- 新手友好度
- 25/100
研究方向
Start with docs/src/architecture/cicd.md, ADR-0110, and the existing .github/workflows/ci.yml; inspect scripts/stage2-contract.sh for the deployed Worker checks and docs/src/architecture/infra.md for the migration access path. Then implement and document the ordered deploy, smoke, rollback, and asset-retention steps, including the staging failure controls and approval gate for Durable Object migrations.
由索引模型根據 Issue 內容生成。
描述
Context
Nothing deploys today. docs/src/architecture/cicd.md:80 reads "Any deploy. There is no workflow for it.", and :96-97 says nothing implements ADR-0110. The repository's workflows are ci.yml, contract-cell.yml and flake-hunt.yml. ADR-0110 (accepted in round 24) prescribes this sequence:
- expand migration;
- upload at 0 %;
- smoke and an oracle subset through the version-override header;
- 10 % for 10 minutes;
- 100 %, with absolute-count gates and an automatic
wrangler rollback(adrs/cd/0110-deploy-pipeline.md:38,:79; Q-0110.1,QUESTIONS.md:234).
The only script that tests a deployed Worker is scripts/stage2-contract.sh, which needs the test routes and the admin token (:36-39). Migrations are the migrate binary (docs/src/architecture/infra.md:128-129). Today the only way into the CNPG clusters is kubectl exec on the primary (research/0010 §2, lines 107-112).
Problem
- FR-12: traffic is about 5 M requests a month (
research/0004§9, line 317), so 10 % for 10 minutes is roughly 100 requests, most of them the owner's. The ADR itself says percentage slices are meaningless at ≤50 users (0110-deploy-pipeline.md:79). The 10 % stage observes nothing the smoke suite does not, and the version-override plumbing costs build and maintenance. - Two constraints remain. A rollback does not revert connected resources, so migrations stay expand/contract (
:15-17,:25). A deploy cannot be rolled back across a Durable Object lifecycle change (:18-19). - A third comes from ADR-0011 (round 26). The SPA fallback answers a missing hashed asset with
200 text/html, so deploys must keep old hashes until clients age out (adrs/ui/0011-static-asset-hosting.md:76). A 100 % deploy drops the previous version's assets.
Proposal
Add .github/workflows/deploy.yml, triggered on push to main and by hand for each environment (dev, staging and prod, per Q-0092.2), with credentials per ADR-0101.
- Expand migration. Q-0110.2 says CI runs it, but nothing gives CI a route to
thrust-pgtoday, so this issue chooses one: a runner with cluster access, or a tunnel route with an Access service token. If #37 picks the Durable Object cell, this step becomes the object's own migration. - Deploy. Record the current version id, then
wrangler deployat 100 %. - Smoke. Run a new pass against the live hostname that needs no test routes:
/healthzfirst; then, once #44 exists, sign in with a dedicated smoke account and read a seeded project. Vacuity guard:/healthzreports the deployed version id (from the version metadata binding, or a var set at deploy), and the smoke checks it equals the new one. - Roll back. If the smoke fails, run
wrangler rollback <previous id>and fail the job. If the release adds a[[migrations]]tag, skip the automatic rollback and require manual approval (the DO-lifecycle rule). - Assets. Once #44 adds static assets, include the previous release's hashed files in each upload, or answer 404 for a missing
/assets/*file.
Acceptance criteria
-
deploy.ymlexists and runs the steps in order on push tomain. - Control: on staging, a release with a smoke check that fails on purpose ends with the previous version active again (
wrangler deployments list) and the job red. - Control: the smoke pass fails when pointed at a Worker that still serves the previous version id.
- A release that adds a DO migration stops for approval and does not roll back automatically.
- After a deploy, an asset URL from the previous release still returns its JavaScript, not HTML.
-
docs/src/architecture/cicd.mddescribes the pipeline, and ADR-0110 (round-29 note) and Q-0110.1 match it.
References
- Review: .agents/plans/contrail/reviews/2026-10-19-fable-architecture-review.md (FR-12)
- ADR-0110 (
:13-20,:25,:38,:79; round-29 note), ADR-0101, ADR-0011 (:76), ADR-0090, ADR-0093, ADR-0130 - Q-0110.1, Q-0110.2, Q-0092.2
docs/src/architecture/cicd.md:73-80,:94-97;docs/src/architecture/infra.md:128-129;scripts/stage2-contract.sh:36-39research/0004-rust-on-workers-binding-matrix.md§9 (traffic model);research/0010-thrust-postgres-infra-plan.md§2 (database access path)
Blocked by: #43
Finding: FR-12
- 主要語言
- Rust
- 星號
- 0
- 分支
- 0
- 平均合併
- 1 小時 35 分鐘
- 30 天內合併 PR
- 67
環境準備
- 沒有 Dockerfile 或 Docker Compose 檔案
- 沒有 Pull Request 範本
- 閱讀貢獻指南
從這裡開始
- 先讀完整個 Issue,再讀專案的貢獻指南。
- 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
- Fork 儲存庫,在一個分支上完成修改。
- 送出 Pull Request,並在描述裡引用這個 Issue 編號。
aRustyDev/thrust 的其他 Issue
-
area:process prio:p1 type:security
難度 4/5 3-5 天 新手友好度 48/100
維護者通常 1 天內回覆
-
area:process bug prio:p1
難度 4/5 3-5 天 新手友好度 38/100
維護者通常 1 天內回覆
-
area:process prio:p1
難度 4/5 3-5 天 新手友好度 55/100
維護者通常 1 天內回覆
-
area:process prio:p1
難度 4/5 1-2 天 新手友好度 55/100
維護者通常 1 天內回覆
-
area:process prio:p1
難度 4/5 3-5 天 新手友好度 56/100
維護者通常 1 天內回覆
相似的 Issue
-
Unit tests use deprecated constant (part 2)可能已有人在做 @servo-highfive 今天認領。 未關閉E-less-complex
難度 1/5 1 小時以內 新手友好度 84/100
維護者通常 1 天內回覆
-
bug good first issue help wanted linux macos testing
難度 2/5 1-3 小時 新手友好度 85/100
維護者通常 1 天內回覆
-
area: app type: test
難度 2/5 1-3 小時 新手友好度 82/100
維護者通常 1 天內回覆
-
bug priority: medium
難度 2/5 1-3 小時 新手友好度 78/100
storytold/photocraft#12706 · 1 則留言 ·
維護者通常 1 天內回覆
-
bug priority-low to-agent
難度 2/5 1-3 小時 新手友好度 68/100
維護者通常 1 天內回覆