feat(cf): restore the full set of CF bulk operations with guard tests - #5664
Merged
norman-abramovitz merged 2 commits intoJul 21, 2026
Merged
Conversation
…ites
Adds the backend for the full CF bulk-operations set, reusing the shared
fan-out infra in native_bulk.go where CF has no batch endpoint and single
relationship-array passthroughs where it does:
- apps bulk delete: POST /cf/apps/:cnsi/bulk/delete — fan-out N Apps().Delete
via bulkFanout (mirrors bulkDeleteNativeRoutes), per-item BulkResult.
- isolation segment entitle orgs, service instance share spaces, security
group bind running/staging spaces, private domain share orgs — single
passthrough calls (CF accepts the target GUID array natively), body decoded
by the shared decodeBulkGUIDs {"guids":[...]}.
Org/space quota apply and service-plan visibility already had endpoints.
Each handler has table tests (success, CF-error propagation, body validation).
CGO=0 build, go vet, and gofmt all clean.
Restores the frontend bulk-operation affordances across the CF surfaces, each wired to its backend endpoint and each shipping a guard test so the affordance can't be silently dropped again: - Space Apps tab: checkbox column + bulk Delete (bulkDeleteApps) mirroring the routes bulk pattern. - Org/Space Quota detail: "Apply to organizations/spaces" multi-select dialogs. - Service Instance detail: "Share to spaces" (managed-only) dialog. - Security Groups tab: per-row "Bind to spaces" (running/staging) dialog. - Service plan visibility editor: multi-org apply (new self-contained editor). - Isolation segment / private domain: service method + multi-select dialog (built and unit-guarded; both entities lack a management host page, so the dialogs ship ready but unmounted — a host surface wires them in later). 60 guard/dialog unit tests pass; Angular AOT build clean.
norman-abramovitz
approved these changes
Jul 21, 2026
norman-abramovitz
left a comment
Contributor
There was a problem hiding this comment.
LGTM - Still needs live and e2e tests
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
The CF console's multi-select bulk operations had been eroded over successive
migrations — several were lost entirely and kept being re-classified as
"greenfield" and deferred. This restores the full set and, critically, adds a
guard test to each so a future rewrite or force-push can't silently drop them
again (the tripwire that was missing every prior time).
Routes (Unmap/Delete) and Users (Manage Roles) bulk already existed and are
untouched. This PR covers the remaining eight surfaces.
What
Backend (
src/jetstream/plugins/cloudfoundry/)POST /cf/apps/:cnsi/bulk/delete— fan-out NApps().Deletevia the sharedbulkFanout(mirrors routes bulk), per-itemBulkResult.natively): isolation segment entitle orgs, service instance share spaces,
security group bind running/staging spaces, private domain share orgs. Body
is the shared
{"guids":[...]}shape viadecodeBulkGUIDs.Frontend (
src/frontend/packages/cloud-foundry/)built and unit-guarded but not yet mounted (those entities have no
management page) — tracked in CF bulk operations: host pages for isolation segments, private domains, and plan visibility #5663.
Every surface ships a guard unit test that fails if the affordance is removed.
Verification
CGO_ENABLED=0 go build ./...,go vet,gofmtall clean; all newhandler tests pass.
Follow-up
visibility so their (already-built) dialogs become reachable.