Skip to content

Resolve deployment compute config from routed version summaries - #3789

Merged
rossnelson merged 1 commit into
mainfrom
fix-deployment-compute-config-detection
Aug 5, 2026
Merged

Resolve deployment compute config from routed version summaries#3789
rossnelson merged 1 commit into
mainfrom
fix-deployment-compute-config-detection

Conversation

@rossnelson

@rossnelson rossnelson commented Aug 4, 2026

Copy link
Copy Markdown
Collaborator

Description & motivation 💭

Follow-up to #3779, which added hasComputeConfig wrappers to hide serverless-only actions on the deployment page. The value is always false in Cloud, so "Create new version" and "Ramp to unversioned" are hidden for every deployment, including ones that do have scaling groups.

deploymentHasComputeConfig checked three fields:

deployment.computeConfig
deployment.currentVersionSummary?.computeConfig
deployment.rampingVersionSummary?.computeConfig

None of them exist on the DescribeWorkerDeployment response. WorkerDeploymentInfo (message.proto:184-212) carries only name, version_summaries, create_time, routing_config, last_modifier_identity, manager_identity, routing_config_update_state.

current_version_summary / ramping_version_summary / latest_version_summary are fields on ListWorkerDeployments' WorkerDeploymentSummary (request_response.proto:2333-2343). They leak onto the describe type through WorkerDeploymentInfo extends WorkerDeploymentSummary (types/deployments.ts:84, in place since #2576), so they type-check against a payload the server never sends them in. The list page uses them correctly — deployment-table-row.svelte:81 is a real list row.

An actual Cloud describe response — compute config is present, just on versionSummaries, with no currentVersionSummary key anywhere:

{
  "workerDeploymentInfo": {
    "name": "test",
    "versionSummaries": [
      {
        "deploymentVersion": { "buildId": "62a8974f-…", "deploymentName": "test" },
        "status": "WORKER_DEPLOYMENT_VERSION_STATUS_CURRENT",
        "computeConfig": { "scalingGroups": { "default": { "providerType": "aws-lambda" } } }
      }
    ],
    "routingConfig": {
      "currentDeploymentVersion": { "buildId": "62a8974f-…", "deploymentName": "test" }
    }
  }
}

Fix

Resolve the current and ramping summaries out of versionSummaries via routingConfig, matching on deploymentName + buildId the same way version-table-row.svelte:91-97 already does. lock-compute-provider.ts:48 also walks versionSummaries — this brings the two helpers in line.

The three old summary fields stay in the check so list-shaped input keeps working, and #3779's "ignore inactive versions" intent is preserved: compute config on a version that isn't routed to still returns false.

Testing 🧪

How was this tested 👻

  • Unit tests added

The verbatim Cloud payload above is now a regression fixture. Verified it fails on the old helper (expected false to be true) and passes on the new one, so the test is doing real work.

  • deployment-has-compute-config.test.ts — 11 pass (4 new: real Cloud payload, routed current, routed ramping, non-routed ignored)
  • deployment.svelte.test.ts — 4 pass
  • Deployments/workers component suites — 60 pass
  • pnpm check — 38 errors, all pre-existing Cannot find module 'storybook/test' resolution failures, none in touched files

Steps for others to test: 🚶🏽‍♂️🚶🏽‍♀️

Open a Cloud worker deployment whose current version has a compute config. "Create new version" should appear next to More Actions, and "Ramp to unversioned" should be in the menu. On a self-hosted deployment with no scaling groups, both stay hidden.

Checklists

Merge Checklist

  • Needs a repack into cloud-ui to land there (.ui-sha is currently 96a06250)

Follow-up (not in this PR)

WorkerDeploymentInfo extends WorkerDeploymentSummary is what let this through — the describe type advertises three fields the endpoint never returns. Splitting them would prevent a repeat, but it ripples into lock-compute-provider.ts and deployment-table-row.svelte, so it felt wrong to bundle with a fix.

Also unverified: top-level deployment.computeConfig (types/deployments.ts:86) isn't on either OSS message. Left in place as harmless, but I found nothing that populates it.

Docs

Any docs updates needed?

No.

Blast radius 🔍

deploymentHasComputeConfig has two consumers, and both read a describe response, so both were broken:

  1. deployment.svelte:133 — the deployment page. The reported bug.
  2. no-workers-polling-alert.svelte:42 — also fixed as a side effect, and this one is user-visible on workflow pages. serverlessDeployment was always false in Cloud, so it always fell through to the {:else} generic "no workers polling" warning. Cloud deployments with routed compute config now correctly get the serverless info alert with the "View worker deployment" link. Intended behavior for that component, but worth a look since it's outside Fix worker deployment actions for self-hosted deployments #3779's stated scope. Note it has no test file.

The deployments list page is not affected. It never calls this helper — deployment-table-row.svelte:80-82 reads currentVersionSummary?.computeConfig?.scalingGroups directly off a WorkerDeploymentSummary from ListWorkerDeployments, where that field really does exist.

The change is additive-only: entries appended to the existing .some() array, three original checks untouched and evaluated first. It can only flip false → true, so nothing that previously rendered can stop rendering.

Full suite: 2573 pass, 13 fail — all 13 are pre-existing timezone-dependent date/time tests that fail identically on main (verified), none deployment-related.

deploymentHasComputeConfig read currentVersionSummary, rampingVersionSummary
and a top-level computeConfig. None of those exist on the
DescribeWorkerDeployment response — WorkerDeploymentInfo carries only
versionSummaries and routingConfig. Those three summary fields belong to
ListWorkerDeployments' WorkerDeploymentSummary, and leak onto the describe
type via `WorkerDeploymentInfo extends WorkerDeploymentSummary`, so they
type-check against a payload the server never sends them in.

The result was hasComputeConfig always false on the deployment page, hiding
"Create new version" and "Ramp to unversioned" for every deployment,
including cloud serverless ones that do have scaling groups.

Resolve the current and ramping summaries out of versionSummaries via
routingConfig, matching on deploymentName + buildId the same way
version-table-row does. The old summary fields stay in the check so
list-shaped input still works, and compute config on a non-routed version
is still ignored.
@rossnelson
rossnelson requested a review from a team as a code owner August 4, 2026 23:24
@vercel

vercel Bot commented Aug 4, 2026

Copy link
Copy Markdown

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

Project Deployment Actions Updated (UTC)
holocene Ready Ready Preview Aug 4, 2026 11:24pm

Request Review

matchesVersion(summary, routingConfig.rampingDeploymentVersion),
)
.map((summary) =>
isVersionSummaryNew(summary) ? summary.computeConfig : undefined,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

just to double check, we actually want undefined values in the returned array? or should this check isVersionSummaryNew(summary) be part of the filter?

@rossnelson
rossnelson merged commit ee4652a into main Aug 5, 2026
22 checks passed
@rossnelson
rossnelson deleted the fix-deployment-compute-config-detection branch August 5, 2026 00:18
laurakwhit added a commit that referenced this pull request Aug 5, 2026
Auto-generated version bump from 2.53.0 to 2.53.1

Specific version: 2.53.1

Changes included:
- [`e3f08379`](e3f0837) Update holocene accordion-light to runes syntax (#3714)
- [`2cfa9b43`](2cfa9b4) Update holocene toggle-switch to runes syntax (#3715) (#3719)
- [`e884c326`](e884c32) Update holocene textarea to runes syntax (#3724)
- [`bda6e133`](bda6e13) Update holocene checkbox to runes syntax (#3725)
- [`11fe6ff3`](11fe6ff) Remove unused collapsible-divider component (#3726)
- [`bdc0fa77`](bdc0fa7) Update holocene skeleton table to runes syntax (#3734)
- [`56a34a69`](56a34a6) Update holocene accordion to runes syntax (#3736)
- [`1a0b0422`](1a0b042) Remove unused banner component (#3712)
- [`11da928d`](11da928) Update holocene range-input to runes syntax (#3713)
- [`d73bbde9`](d73bbde) Remove deprecated api-pagination component (#3739)
- [`9cb5e28a`](9cb5e28) Update holocene number-input to runes syntax (#3735)
- [`e4cec29c`](e4cec29) Update holocene tabs and tab-button to runes syntax (#3737)
- [`6f6f7139`](6f6f713) Update holocene drawer-content to runes syntax (#3740)
- [`4f2cef58`](4f2cef5) Update holocene tooltip to runes syntax (#3743)
- [`6e01537e`](6e01537) Update holocene link to runes syntax (#3741)
- [`b6775092`](b677509) Update holocene orderable-list to runes syntax (#3742)
- [`447fad67`](447fad6) Update holocene pagination to runes syntax (#3738)
- [`359c80ba`](359c80b) fix(schedules): tolerate duplicate schedule IDs (#3751)
- [`8e81a4f0`](8e81a4f) fix(workers): use default Cloud Run runner identity (#3748)
- [`3b37bbe6`](3b37bbe) Enable server-scaled deployments by default (#3672)
- [`d9f9a99c`](d9f9a99) feat(workers): add release stage badges to compute provider picker (#3773)
- [`7e8f2830`](7e8f283) Update holocene time-picker to runes syntax (#3754)
- [`053f060a`](053f060) Update holocene drawer to runes syntax (#3755)
- [`9dff9c9f`](9dff9c9) fix(workers): gate deployment actions by compute config (#3779)
- [`bd9b3f60`](bd9b3f6) Update holocene copyable to runes syntax (#3756)
- [`46afcfff`](46afcff) Update holocene toast to runes syntax (#3753)
- [`17f64bcc`](17f64bc) Update holocene orderable-list-item to runes syntax (#3758)
- [`d9ab4aa7`](d9ab4aa) Migrate event-link and event-details-link to runes syntax (#3760)
- [`c09f94ac`](c09f94a) Migrate start-workflow-button and workflow-detail to runes syntax (#3761)
- [`7bce9c5d`](7bce9c5) Remove dead workflow-filters component (#3762)
- [`30255dba`](30255db) Sweep remaining on: directives to runes event syntax (#3771)
- [`ad696bcf`](ad696bc) Migrate batch-operations header to runes syntax (#3764)
- [`64f7302c`](64f7302) Migrate workflow-family-node-tree to runes syntax (#3765)
- [`dc56c890`](dc56c89) Migrate start-workflow and workflow-query pages to runes syntax (#3768)
- [`f989d43a`](f989d43) Migrate payload-input-with-encoding to runes syntax (#3763)
- [`b19c43a0`](b19c43a) Migrate paginated-table cluster to runes syntax (#3750)
- [`84414160`](8441416) Update holocene zoom-svg to runes syntax (#3757)
- [`8c245928`](8c24592) Migrate holocene modal to runes syntax (#3759)
- [`ef33b255`](ef33b25) Upgrade to Storybook 10 and migrate stories to defineMeta (#3772)
- [`d8af57d8`](d8af57d) Enable runes mode by default (#3770)
- [`1923c928`](1923c92) Use WorkflowTaskFailedCause enum (#3775)
- [`b4a272ee`](b4a272e) Track pointerDown and ignore subsequent click (#3776)
- [`96a06250`](96a0625) Pluralize batch operation execution type (#3784)
- [`ee4652ac`](ee4652a) Resolve deployment compute config from routed version summaries (#3789)
- [`7b614625`](7b61462) Standalone Activity fixes (#3788)

Co-authored-by: laurakwhit <15069288+laurakwhit@users.noreply.github.com>
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