chore(cd): deploy pipeline per ADR-0110 round 29 (expand, deploy 100 %, smoke, auto-rollback)

Aberta
#49 0 comentários 0 reações 0 responsáveis Ver no GitHub

Mantenedores costumam responder em até 1 dia

Ninguém assumiu esta issue ainda.

Avaliação

Dificuldade
5/5
Tempo estimado
Mais de uma semana
Facilidade para iniciantes
25/100
Tipo de issue
Funcionalidade
Clareza
Razoavelmente clara
Status de atividade
Ativa
Stack de tecnologia
github-actions, rust
Domínio
ci-cd, devops

Direção de pesquisa

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.

Escrita pelo modelo de indexação a partir do texto da issue.

Descrição

area:infra prio:p0 review:fable-2026-10-19

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.

  1. Expand migration. Q-0110.2 says CI runs it, but nothing gives CI a route to thrust-pg today, 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.
  2. Deploy. Record the current version id, then wrangler deploy at 100 %.
  3. Smoke. Run a new pass against the live hostname that needs no test routes: /healthz first; then, once #44 exists, sign in with a dedicated smoke account and read a seeded project. Vacuity guard: /healthz reports the deployed version id (from the version metadata binding, or a var set at deploy), and the smoke checks it equals the new one.
  4. 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).
  5. 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.yml exists and runs the steps in order on push to main.
  • 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.md describes 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-39
  • research/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

Linguagem predominante
Rust
Estrelas
0
Forks
0
Merge médio
1h 35min
PRs com merge (30d)
67

Preparar o ambiente

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de aRustyDev/thrust

Todas as issues de aRustyDev/thrust

Issues semelhantes

Mais issues de Rust

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.