Topology page: right-click "Deploy all" on a site/area node (that layer and below) #40

Closed
opened 2026-10-22 13:46:42 -04:00 by dohertj2 · 1 comment
Owner

Request

On the Central UI Topology page, add a context-menu (right-click) action Deploy all on a site or area node. It deploys every instance in that node and its descendants: sub-areas recursively, plus instances directly in the node.

Example (QA): right-click Aisle001 → Deploy all → deploys every instance under Aisle001.

Considerations

  • Role: Deployer-gated, and limited to the operator's site scope, like the existing per-instance deploy actions.
  • Reuse existing behaviour: build on the bulk site deploy path (DeploymentService.DeploySiteAsync) and keep its semantics:
    • it skips Disabled and up-to-date instances unless forced;
    • it uses bounded parallel Send;
    • it is not all-or-nothing;
    • it reports a summary including SkippedInstances.
      This likely needs an area-scoped variant (or an instance-id filter) on that path.
  • Before running: confirm in a dialog showing the instance count. Optionally offer a "force" option to redeploy up-to-date instances, mirroring deploy site --force.
  • After running: show the outcome as a toast/summary (deployed / skipped / failed). Rows update live on the Deployments page.
  • CLI parity: worth adding, e.g. deploy area --id <areaId> [--force].
## Request On the Central UI **Topology** page, add a context-menu (right-click) action **Deploy all** on a site or area node. It deploys every instance in that node and its descendants: sub-areas recursively, plus instances directly in the node. Example (QA): right-click `Aisle001` → Deploy all → deploys every instance under Aisle001. ## Considerations - **Role:** Deployer-gated, and limited to the operator's site scope, like the existing per-instance deploy actions. - **Reuse existing behaviour:** build on the bulk site deploy path (`DeploymentService.DeploySiteAsync`) and keep its semantics: - it skips Disabled and up-to-date instances unless forced; - it uses bounded parallel Send; - it is not all-or-nothing; - it reports a summary including `SkippedInstances`. This likely needs an area-scoped variant (or an instance-id filter) on that path. - **Before running:** confirm in a dialog showing the instance count. Optionally offer a "force" option to redeploy up-to-date instances, mirroring `deploy site --force`. - **After running:** show the outcome as a toast/summary (deployed / skipped / failed). Rows update live on the Deployments page. - **CLI parity:** worth adding, e.g. `deploy area --id <areaId> [--force]`.
Author
Owner

Implemented on main (b9751473..e029dc1c, local — not yet pushed). Right-click a site or area on Topology → "Deploy all…" → dialog with in-scope / disabled counts and a Force checkbox → summary toast (deployed / skipped / failed). Backend: DeploymentService.DeployAreaAsync runs the same DeploySiteAsync core narrowed to the area + all descendant areas (Disabled always skipped, up-to-date skipped unless forced, bounded-parallel send, not all-or-nothing, SkippedInstances in the summary). MgmtDeployArea is Deployer-only and authorised by the area's owning site; CLI: scadabridge deploy area --id [--force] (exit 1 on any failure). Instances with no area are only reachable via a site deploy. Live-gated on the docker rig: a parent-area deploy picked up the child area's instance, a second run skipped it as up-to-date, --force redeployed it, an unknown id exits 1; Playwright DeployAll_OnArea_ShowsSummaryToast passes. Not deployed to QA/prod.

Implemented on main (b9751473..e029dc1c, local — not yet pushed). Right-click a site or area on Topology → "Deploy all…" → dialog with in-scope / disabled counts and a Force checkbox → summary toast (deployed / skipped / failed). Backend: DeploymentService.DeployAreaAsync runs the same DeploySiteAsync core narrowed to the area + all descendant areas (Disabled always skipped, up-to-date skipped unless forced, bounded-parallel send, not all-or-nothing, SkippedInstances in the summary). MgmtDeployArea is Deployer-only and authorised by the area's owning site; CLI: scadabridge deploy area --id <areaId> [--force] (exit 1 on any failure). Instances with no area are only reachable via a site deploy. Live-gated on the docker rig: a parent-area deploy picked up the child area's instance, a second run skipped it as up-to-date, --force redeployed it, an unknown id exits 1; Playwright DeployAll_OnArea_ShowsSummaryToast passes. Not deployed to QA/prod.
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: dohertj2/ScadaBridge#40