Skip to content

ci: staged-release pipeline with deployed-URL E2E gate, prod smoke, and rollback (ADR-0001)#791

Merged
MrCoder merged 2 commits into
masterfrom
feat/release-pipeline
Jun 4, 2026
Merged

ci: staged-release pipeline with deployed-URL E2E gate, prod smoke, and rollback (ADR-0001)#791
MrCoder merged 2 commits into
masterfrom
feat/release-pipeline

Conversation

@MrCoder
Copy link
Copy Markdown
Contributor

@MrCoder MrCoder commented Jun 4, 2026

Imitates conf-app's transferable release practices on the Firebase stack (not its Cloudflare/Forge mechanics). Motivated by the recent risky prod deploy that spawned rollback-prod. Full rationale + rejected alternatives in docs/adr/0001-release-pipeline-imitating-conf-app.md.

New flow

merge master → deploy staging → E2E gate (staging.zenuml.com, full suite)
            → gate green → auto-create draft release-<ts> + extension.zip
            → human clicks Publish → deploy-prod → @smoke check (app.zenuml.com)

Changes

  • playwright.config.jsPW_BASE_URL env + conditional webServer; one spec serves local / staging-gate / prod-smoke.
  • e2e/tests/smoke.spec.js — tag a fast read-only @smoke subset (load + render + core-bundle).
  • deploy-staging.yml — restrict to master+PRs, never-cancel-master concurrency, staging E2E gate, auto-draft release.
  • deploy-prod.yml — post-deploy @smoke job against production.
  • rollback-prod.yml (new) — workflow_dispatch re-deploys a chosen prior release-* across all surfaces (hosting + functions + Firestore rules), with post-rollback smoke.
  • ADR-0001 (new) + README/CLAUDE.md deployment sections + release-app skill rewritten to draft-publish.

Key decision: deployed-URL gate is chromium-only

Verified against live staging: the full 3-browser suite has webkit hard-fail + firefox flakiness on network-timed localStorage/render tests (a remote-target artifact — the 3-browser suite is green locally on PRs). Scoping the deployed gate to chromium keeps "did the deploy work?" reliable without blocking every release on cross-browser flake. Cross-browser correctness stays covered by the local PR run.

Verification (local)

  • ✅ All 3 workflows parse; jobs/triggers as expected.
  • @smoke selects 9 (3×3), full suite 96; env toggle confirmed (local→localhost+webServer, remote→URL+no webServer).
  • @smoke green against live prod (chromium, 3 passed, 5.6s).
  • ✅ Full suite green against live staging (chromium, 31 passed, 1 flaky retried).

Not verifiable without a real Actions run: deploy steps, gh release create, artifact pass-through, concurrency behavior — these first exercise on merge to master. actionlint not installed locally.

🤖 Generated with Claude Code

@MrCoder MrCoder merged commit f992428 into master Jun 4, 2026
3 checks passed
@MrCoder MrCoder deleted the feat/release-pipeline branch June 4, 2026 03:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant