Skip to content

ci(web): release sdp-web production with each prod API deploy - #2164

Merged
multipletwigs merged 16 commits into
mainfrom
bashtwigs/web-deploy-every-main-merge
Oct 6, 2026
Merged

multipletwigs merged 16 commits into
mainfrom
bashtwigs/web-deploy-every-main-merge

Conversation

@multipletwigs

@multipletwigs multipletwigs commented Sep 30, 2026 •

Copy link
Copy Markdown
Collaborator

sdp-web production ships from the same commit as the production API, seconds after that API serves traffic, with no Vercel token.

flowchart LR
  M["push X"] --> W["Vercel: web X built, held"]
  M --> S["stage API X + smoke"] --> G{"pending migrations?"}
  G -- yes --> A["approval run"] --> P
  G -- no --> P["prod API X live"]
  P --> R["release-web: gate status = success"] --> V["Vercel promotes web X"]
  W -.-> V
Loading

Goal: sdp-api stays backwards compatible with production web, because the API always goes live first.

  • Delete apps/sdp-web/vercel.json; Vercel holds each build on the sdp-web production gate Deployment Check
  • release-web in deploy-sdp-api-gcp-prod.yml posts it with GITHUB_TOKEN after a merge or approved-migration deploy, only while /health/ready still reports that run's revision; otherwise Slack says web held
  • Every push deploys, release commits included; release-please only publishes tags and releases, and the prod workflow's release path is removed
  • Failed, held, or rolled-back deploys post nothing: web lags, never leads
  • Accepted risk: repo write access can post the status

Before merge (Vercel Owner/project admin): add the Deployment Check, then confirm a build held past 10 minutes still promotes.

Verification: workflow contract tests 35/35; actionlint clean. Not run: a live Vercel hold.

@vercel

vercel Bot commented Sep 30, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
sdp-docs Ready Ready Preview Oct 6, 2026 10:44am UTC
sdp-web Ready Ready Preview Oct 6, 2026 10:44am UTC

Request Review

@greptile-apps

greptile-apps Bot commented Sep 30, 2026 •

Copy link
Copy Markdown
Contributor

RetriggerConfidence Score: 5/5

[Critical risk] Removes release-gated production deploys; every push now triggers production.

The PR appears safe to merge, though operators can receive a success notification while web remains held.

Findings

  1. P1 Release image wait is shorter ▶
  2. P2 Held web reports success ▶

Summary

The PR moves production web promotion behind a commit-status gate posted after the corresponding API deploy, and routes release commits through the per-push deployment pipeline.

  • It removes the release-specific production deploy path and extends the SHA-image wait.
  • It adds a serving-revision check before releasing web; a revision mismatch currently produces a misleading success notification.

Reviews (14) · Last reviewed commit: "ci(api): release web only while prod ser..."

Comment thread docs/ops/release-operations.md Outdated
Comment thread docs/ops/release-operations.md Outdated
Comment thread .github/workflows/deploy.yml Outdated
Comment thread .github/workflows/deploy.yml Outdated
Comment thread .github/workflows/deploy.yml Outdated
@multipletwigs
multipletwigs marked this pull request as draft September 30, 2026 16:23
Release commits, web-only merges behind a held API merge, and a disabled
continuous prod deploy all passed the gate before the API was live. The shared
step now releases only main's head, and only when it has no API changes past
the commit production just deployed; web-only merges inherit their parent's
gate, and the release flow releases after its API deploy.
@github-actions

github-actions Bot commented Oct 5, 2026 •

Copy link
Copy Markdown
Contributor

React Doctor found 3 new issues in 2 files · 3 warnings · score 75 / 100 (Needs work) · 25 fixed · vs main

3 warnings

src/app/dashboard/custody/actions.ts

  • ⚠️ L386 Blocking side effect before response server-after-nonblocking

src/app/dashboard/custody/wallet-balances.data.ts

  • ⚠️ L41 fetch Response consumed without status check no-fetch-response-used-without-status-check
  • ⚠️ L66 fetch Response consumed without status check no-fetch-response-used-without-status-check

Reviewed by React Doctor for commit aa1f34f. See inline comments for fixes.

Comment thread .github/workflows/deploy.yml Outdated
Comment thread .github/workflows/deploy.yml Outdated
Migrations ship as standalone pull requests, so an API merge is never held
on them; the remaining lead of web over the API deploy is minutes. Drop the
production gate workflow, its callers, and its tests.
Comment thread docs/ops/release-operations.md Outdated
Comment thread docs/ops/release-operations.md Outdated
Vercel holds every main commit's production web build on the sdp-web
production gate Deployment Check. The prod API deploy posts that status
for its commit with GITHUB_TOKEN once traffic is on it, so web and API go
live from the same commit, API first, with no Vercel token. Web-only
changes now run the same pipeline.
@multipletwigs multipletwigs changed the title ci(web): deploy sdp-web to production on every main merge ci(web): release sdp-web production with each prod API deploy Oct 6, 2026
Comment thread .github/workflows/deploy-sdp-api-gcp-prod.yml Outdated
…one prod path

release-web inherited success() over the skipped smoke job, so it never
ran; it now checks deploy directly, posts only on a run's first attempt,
and retries the post. Release commits and docs-only merges deploy through
deploy.yml like any push, and release-please no longer deploys prod. The
runbook pauses web before an API rollback and documents held builds.
Comment thread .github/workflows/release-please.yml
…ploy

Release commits now deploy through the merge path, whose 30-minute wait was
shorter than release-images.yml's 60-minute publish timeout. Match the
release path's 65-minute wait.
…op the release path

release-web now compares the revision /health/ready reports against the one
this run promoted instead of refusing reruns, so a rerun after a flaky smoke
still releases web and a superseded commit never does. The deploy result in
Slack reports web-held when the API is live but web was not released. With
release-please no longer deploying, the release_sha path, its smoke job, and
the release-identity script are removed.
Comment thread .github/workflows/deploy-sdp-api-gcp-prod.yml
@multipletwigs
multipletwigs merged commit af335e8 into main Oct 6, 2026
65 checks passed
@multipletwigs
multipletwigs deleted the bashtwigs/web-deploy-every-main-merge branch October 6, 2026 17:49

This branch was successfully deployed

2 active deployments
Preview – sdp-web — aa1f34f7 Deployed Oct 6, 2026 by vercel[bot]
Preview – sdp-docs — aa1f34f7 Deployed Oct 6, 2026 by vercel[bot]
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.

2 participants