Skip to content

feat: support components with release lines - #866

Merged
chathuranga95 merged 19 commits into
openchoreo:mainfrom
chathuranga95:release-lines
Oct 28, 2026
Merged

chathuranga95 merged 19 commits into
openchoreo:mainfrom
chathuranga95:release-lines

Conversation

@chathuranga95

Copy link
Copy Markdown
Contributor

Purpose

OpenChoreo is adding release lines (openchoreo/openchoreo PR, following discussion #4702). A release line is another line of a component, such as a next or canary version built from another branch, released and deployed on its own next to the component. Backstage needs to show a component's lines, let developers create and manage them, and scope builds, deployments and observability to a line.

Goals

  • Show a component's release lines and let developers create, edit and delete them from the portal.
  • Give each release line its own page with the component's tabs, scoped to that line.
  • Scope logs, metrics, traces, events, alerts, incidents, costs, Delivery Insights and RCA reports to one line, the default line, or all lines.
  • Keep components without release lines exactly as they are.

Approach

  • Catalog: ReleaseLine resources sync into a new ReleaseLine catalog kind, part of their component and visible to whoever can view the component. They don't appear in the catalog list or search, and are reached from their component. Every component also has an implicit default line, built from its own Workload and bindings, which is never written as a resource. The OpenChoreo event forwarder now sends ReleaseLine events, so line changes reach the catalog right away.
  • Component pages: any OpenChoreo component's context menu offers Create Release Line. Once a component has lines, its Overview lists them, default first, with their environments, latest release and overrides. The component's own tabs work on the default line, which can't be edited, deleted or created. The name default is rejected for a new line.
  • Release line pages: each line has its own page with the component's tabs (build, deploy, logs, metrics and more), scoped to the line. Its Definition tab edits what the line overrides, next to what it inherits from the component, which is read-only there.
  • Dependencies: a dependency on a component with release lines picks the default line or one of its lines, the default line unless chosen otherwise. The default keyword is never written into a resource or request.
  • Cell diagram: the project cell diagram shows each line of a component as its own node, labelled with the component name and a pill with the line name, with a Release line filter. Dependency edges link to the line they name, and gateway metrics are scoped per line.
  • Observability: runtime logs, events, metrics, alerts, project logs, metrics, traces and incidents, cost insights and cost analysis reports get a Release line filter (All lines, default, or one line) for components with lines. On a line's page they are scoped to that line. Alert and incident details show the release line. Delivery Insights filters by line. RCA reports show the line the alert fired on. Cost analysis reports show and link their line, and Apply Recommendation refuses a binding of another line.
  • Clients and permissions: the OpenChoreo client is regenerated from the API spec with the release line endpoints, and the permission policy maps the new releaseline actions.

User stories

  • As a developer, I can create a release line of a component, for example to run the next version from another branch next to the current one.
  • As a developer, I can see a component's lines with their environments, latest releases and overrides, and open each line's page.
  • As a developer, I can build, deploy, promote and inspect one line without affecting the others.
  • As a developer or SRE, I can filter logs, metrics, traces, alerts, incidents, costs and delivery metrics by release line.

Release note

Backstage supports OpenChoreo release lines. Developers can create release lines from a component's context menu, see a component's lines on its Overview, and open a page per line with its own build, deploy and observability tabs. Observability, cost and delivery views can be filtered by release line. Components without release lines behave as before.

Documentation

N/A for this PR. Release line docs will go with the OpenChoreo docs for the feature.

Training

N/A

Certification

N/A. The feature isn't covered by certification yet.

Marketing

N/A

Automation tests

  • Unit tests

    Jest tests added or updated across the openchoreo, openchoreo-react, openchoreo-observability, openchoreo-common, openchoreo-ci and catalog-backend-module-openchoreo plugins (53 test files), covering release line catalog sync and event handling, the lines card and line pages, release line filters and hooks, dependency line selection and cost report line handling.

  • Integration tests

    N/A. Tested manually against an OpenChoreo control plane running the release lines branch on k3d.

Security checks

Samples

The OpenChoreo PR adds samples/release-lines, a component with a next line built from another branch, which shows the UI end to end.

Related PRs

  • openchoreo/openchoreo: release lines (link)
  • openchoreo/community-modules: release line aware observability and FinOps adapters (link)

Migrations (if applicable)

None. Existing components keep their current pages and behaviour, and get release line UI only once a ReleaseLine names them. Release line features need an OpenChoreo control plane with the ReleaseLine API from the related PR.

Test environment

macOS 27.0.1, Node.js 22.22.0, Chrome 156, local Backstage against OpenChoreo on k3d (release lines branch, including an upgrade from v1.3.2).

Learning

Follows the design in discussion #4702. Release lines are modelled as their own catalog kind owned by the component, so permissions and navigation follow the component.

Release lines are synced to the catalog as a new ReleaseLine kind, part
of their component, and get their own pages.

Catalog:
- Sync ReleaseLine CRs (full sync and events) as ReleaseLine entities,
  titled <component>:<line>, with partOf/hasPart relations to the
  component; remove a component's lines when it is deleted
- Mark components with release lines enabled, and carry the component
  type's releaseLines setting to its catalog entity
- Keep ReleaseLine entities out of the catalog viewer and search

Components with release lines:
- Show only the Overview and Definition tabs; the Overview lists the
  component's release lines (search, paging, row delete) with a
  Create ReleaseLine button, plus About and Relations
- Summarise them in the project listing as
  "N release lines · M deployments"
- Show each release line as its own node in the project cell diagram,
  linked to the line a dependency names, with gateway metrics scoped
  to the line; clicking a node opens the line's page

Release line pages:
- Reuse the component's tabs (build, deploy, logs, metrics, ...)
  scoped to the line, navigating within the line's page
- Edit the line's YAML (description, labels and overrides) on its
  Definition tab, next to the read-only properties it inherits
- Edit parameter, trait, build parameter and auto deploy overrides
  from Configure & Deploy and the Build configuration, showing the
  component's values with the line's overrides applied
- Keep the open tab when switching lines from the breadcrumb

Workload dependencies:
- Ask for a release line when the target component has release lines,
  and save it as the dependency's releaseLine

Creation:
- Add a Declare Release Line step to the component wizard for
  component types that allow release lines, creating the first line

Backend:
- Add release line get, create, update and delete routes, updating
  the catalog immediately

Signed-off-by: chathuranga95 <siriwardhanachathuranga@gmail.com>
Signed-off-by: chathuranga95 <siriwardhanachathuranga@gmail.com>
Signed-off-by: chathuranga95 <siriwardhanachathuranga@gmail.com>
Signed-off-by: chathuranga95 <siriwardhanachathuranga@gmail.com>
Signed-off-by: chathuranga95 <siriwardhanachathuranga@gmail.com>
- Cover the cell diagram pills, release line scoped alerts, incidents,
  DORA metrics and costs, and the Delivery Insights release line filter
- Add @openchoreo/cell-diagram, @openchoreo/backstage-portal-app and
  @openchoreo/backstage-plugin-openchoreo-workflows-backend

Signed-off-by: chathuranga95 <siriwardhanachathuranga@gmail.com>
- Sync the RCA agent spec: release_line on the analyze request and the
  report alert context, and the missing 403 responses
- Show the alert's release line in the report's Incident Overview

Signed-off-by: chathuranga95 <siriwardhanachathuranga@gmail.com>
- Show the report's release line in its overview and in the reports list
- Link View release line and View metrics to the line's page, since a
  component with release lines has no metrics tab of its own
- Name the release binding Apply Recommendation updates, and refuse a
  binding owned by another component or release line

Signed-off-by: chathuranga95 <siriwardhanachathuranga@gmail.com>
- Remove the new component when its first release line cannot be
  created, and explain a release line name already used in the
  namespace, instead of leaving a component that cannot deploy
- Keep Configure & deploy and Create release enabled for an
  image-based component without a workload, since they open the
  editor that creates it, e.g. for a line added after the component
- Name a new workload on a release line page
  <component>-<line>-workload and own it by the component and line,
  rather than by the line entity's name

Signed-off-by: chathuranga95 <siriwardhanachathuranga@gmail.com>
Every component now has an implicit default line, which is not a
ReleaseLine resource, replacing the opt-in releaseLinesEnabled model.

- Drop releaseLinesEnabled; the catalog marks a component that has
  release lines with openchoreo.io/has-release-lines, and whether it
  can have them comes from its component type
- Create components as before; offer Create Release Line from the
  component menu when the type allows release lines, and show the
  release lines view once one exists
- List the default line first, read-only, with the component's own
  tabs working on it; reject a new line named default
- Never write default into a resource or request: an empty line means
  the default line in releases, deploys, workloads, dependencies and
  builds, and in the binding, workload, release and run filters
- Add a release line filter (all lines, default, one line) to logs,
  events, metrics, alerts, traces, incidents, costs and the cell diagram
- Sync the OpenAPI specs with core and regenerate the clients

Signed-off-by: chathuranga95 <siriwardhanachathuranga@gmail.com>
The control plane no longer has a per type release line policy.
Remove the releaseLines type field, the useReleaseLinesAllowed hook
and the component type card's Release Lines chip.

Signed-off-by: chathuranga95 <siriwardhanachathuranga@gmail.com>
The changeset still described the removed per type release line
policy. Also remove openchoreo-api.yaml.orig, a patch backup that was
committed by mistake.

Signed-off-by: chathuranga95 <siriwardhanachathuranga@gmail.com>
@coderabbitai

coderabbitai Bot commented Oct 24, 2026 •

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 244 files, which is 144 over the limit of 100.

To get a review, reduce the PR to 100 files or fewer by splitting it into smaller PRs or changing its base branch.

Upgrade to a paid plan to raise the limit.

This review couldn't start because sufficient usage credits or metered capacity aren't available. Add credits or update usage-based reviews in the billing tab, then retry.

Run configuration
  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 1f5b8068-e963-4f60-b7fe-20520de170ad
Commits

Reviewing files that changed from the base of the PR and between 73990e0 and e5f582a.

Files ignored due to path filters: 3
  • packages/openchoreo-client-node/src/generated/ai-rca-agent/types.ts is excluded by !**/generated/**
  • packages/openchoreo-client-node/src/generated/observability/types.ts is excluded by !**/generated/**
  • packages/openchoreo-client-node/src/generated/openchoreo/types.ts is excluded by !**/generated/**
Files selected for processing: 244
  • .changeset/release-lines-ui.md
  • packages/cell-diagram/src/components/Component/ComponentNode/ComponentWidget.tsx
  • packages/cell-diagram/src/components/Component/ComponentNode/styles.ts
  • packages/cell-diagram/src/types.ts
  • packages/design-system/src/theme/tokens.ts
  • packages/openchoreo-client-node/openapi/openchoreo-ai-rca-agent.yaml
  • packages/openchoreo-client-node/openapi/openchoreo-api.yaml
  • packages/openchoreo-client-node/openapi/openchoreo-observability-api.yaml
  • packages/portal-app/src/components/Home/RecentDeploymentsCard.test.tsx
  • packages/portal-app/src/components/Home/RecentDeploymentsCard.tsx
  • packages/portal-app/src/components/search/CustomSearchModal.tsx
  • packages/portal-app/src/components/search/SearchPage.tsx
  • packages/portal-app/src/kindIcons.ts
  • packages/portal-app/src/utils/kindUtils.ts
  • plugins/catalog-backend-module-openchoreo/src/converters/CtdToTemplateConverter.test.ts
  • plugins/catalog-backend-module-openchoreo/src/index.ts
  • plugins/catalog-backend-module-openchoreo/src/kinds/ReleaseLineEntityV1alpha1.ts
  • plugins/catalog-backend-module-openchoreo/src/kinds/index.ts
  • plugins/catalog-backend-module-openchoreo/src/module.ts
  • plugins/catalog-backend-module-openchoreo/src/processors/ReleaseLineEntityProcessor.ts
  • plugins/catalog-backend-module-openchoreo/src/processors/index.ts
  • plugins/catalog-backend-module-openchoreo/src/processors/processors.test.ts
  • plugins/catalog-backend-module-openchoreo/src/provider/EventDeltaApplier.test.ts
  • plugins/catalog-backend-module-openchoreo/src/provider/EventDeltaApplier.ts
  • plugins/catalog-backend-module-openchoreo/src/provider/OpenChoreoEntityProvider.ts
  • plugins/catalog-backend-module-openchoreo/src/utils/entityTranslation.test.ts
  • plugins/catalog-backend-module-openchoreo/src/utils/entityTranslation.ts
  • plugins/catalog-backend-module-openchoreo/src/utils/helpers.ts
  • plugins/openchoreo-backend/src/ExecSessionStore.ts
  • plugins/openchoreo-backend/src/execWebSocketProxy.ts
  • plugins/openchoreo-backend/src/plugin.test.ts
  • plugins/openchoreo-backend/src/plugin.ts
  • plugins/openchoreo-backend/src/router.test.ts
  • plugins/openchoreo-backend/src/router.ts
  • plugins/openchoreo-backend/src/services/BuildService/BuildInfoService.test.ts
  • plugins/openchoreo-backend/src/services/BuildService/BuildInfoService.ts
  • plugins/openchoreo-backend/src/services/CellDiagramService/CellDiagramInfoService.test.ts
  • plugins/openchoreo-backend/src/services/CellDiagramService/CellDiagramInfoService.ts
  • plugins/openchoreo-backend/src/services/ComponentService/ComponentInfoService.ts
  • plugins/openchoreo-backend/src/services/EnvironmentService/EnvironmentInfoService.test.ts
  • plugins/openchoreo-backend/src/services/EnvironmentService/EnvironmentInfoService.ts
  • plugins/openchoreo-backend/src/services/WorkloadService/WorkloadInfoService.ts
  • plugins/openchoreo-backend/src/services/releaseLineNames.test.ts
  • plugins/openchoreo-backend/src/services/releaseLineNames.ts
  • plugins/openchoreo-backend/src/services/transformers/release-binding.test.ts
  • plugins/openchoreo-backend/src/services/transformers/release-binding.ts
  • plugins/openchoreo-backend/src/types.ts
  • plugins/openchoreo-ci/src/components/WorkflowConfigPage/WorkflowConfigPage.tsx
  • plugins/openchoreo-ci/src/components/Workflows/Workflows.test.tsx
  • plugins/openchoreo-ci/src/components/Workflows/Workflows.tsx
  • plugins/openchoreo-ci/src/hooks/index.ts
  • plugins/openchoreo-ci/src/hooks/useReleaseLineWorkflowParameters.ts
  • plugins/openchoreo-ci/src/hooks/useWorkflowData.ts
  • plugins/openchoreo-ci/src/hooks/useWorkflowRouting.ts
  • plugins/openchoreo-common/src/constants.ts
  • plugins/openchoreo-common/src/entityFilters.ts
  • plugins/openchoreo-common/src/index.ts
  • plugins/openchoreo-common/src/mainReleaseLine.test.ts
  • plugins/openchoreo-common/src/mainReleaseLine.ts
  • plugins/openchoreo-common/src/permissions.test.ts
  • plugins/openchoreo-common/src/permissions.ts
  • plugins/openchoreo-common/src/releaseLineNode.ts
  • plugins/openchoreo-common/src/releaseLineOverrides.test.ts
  • plugins/openchoreo-common/src/releaseLineOverrides.ts
  • plugins/openchoreo-common/src/types/bff-types.ts
  • plugins/openchoreo-observability/src/api/ObservabilityApi.costs.test.ts
  • plugins/openchoreo-observability/src/api/ObservabilityApi.test.ts
  • plugins/openchoreo-observability/src/api/ObservabilityApi.ts
  • plugins/openchoreo-observability/src/components/Alerts/AlertRow.test.tsx
  • plugins/openchoreo-observability/src/components/Alerts/AlertRow.tsx
  • plugins/openchoreo-observability/src/components/Alerts/ObservabilityAlertsPage.test.tsx
  • plugins/openchoreo-observability/src/components/Alerts/ObservabilityAlertsPage.tsx
  • plugins/openchoreo-observability/src/components/AuditLogs/AuditEventDrawer.test.tsx
  • plugins/openchoreo-observability/src/components/AuditLogs/AuditEventDrawer.tsx
  • plugins/openchoreo-observability/src/components/AuditLogs/format.ts
  • plugins/openchoreo-observability/src/components/AuditLogs/query.test.ts
  • plugins/openchoreo-observability/src/components/AuditLogs/query.ts
  • plugins/openchoreo-observability/src/components/AuditLogs/types.ts
  • plugins/openchoreo-observability/src/components/CostAnalysis/CostAnalysisPage.test.tsx
  • plugins/openchoreo-observability/src/components/CostAnalysis/CostAnalysisPage.tsx
  • plugins/openchoreo-observability/src/components/CostAnalysis/CostAnalysisReport.tsx
  • plugins/openchoreo-observability/src/components/CostAnalysis/CostAnalysisReportView.test.tsx
  • plugins/openchoreo-observability/src/components/CostAnalysis/CostAnalysisReportView.tsx
  • plugins/openchoreo-observability/src/components/CostAnalysis/CostAnalysisTable.tsx
  • plugins/openchoreo-observability/src/components/CostAnalysis/FinOpsApplyButton.test.tsx
  • plugins/openchoreo-observability/src/components/CostAnalysis/FinOpsApplyButton.tsx
  • plugins/openchoreo-observability/src/components/CostInsights/CostInsightsPage.test.tsx
  • plugins/openchoreo-observability/src/components/CostInsights/CostInsightsPage.tsx
  • plugins/openchoreo-observability/src/components/CostInsights/CostOptimizeButton.test.tsx
  • plugins/openchoreo-observability/src/components/CostInsights/CostOptimizeButton.tsx
  • plugins/openchoreo-observability/src/components/CostInsights/optimizeChange.test.ts
  • plugins/openchoreo-observability/src/components/CostInsights/optimizeChange.ts
  • plugins/openchoreo-observability/src/components/CostInsights/useCostInsights.test.ts
  • plugins/openchoreo-observability/src/components/CostInsights/useCostInsights.ts
  • plugins/openchoreo-observability/src/components/DeliveryInsights/DeliveryInsightsContent.test.tsx
  • plugins/openchoreo-observability/src/components/DeliveryInsights/DeliveryInsightsContent.tsx
  • plugins/openchoreo-observability/src/components/DeliveryInsights/DeliveryInsightsPage.tsx
  • plugins/openchoreo-observability/src/components/DeliveryInsights/useDoraBreakdown.ts
  • plugins/openchoreo-observability/src/components/DeliveryInsights/useDoraInsights.ts
  • plugins/openchoreo-observability/src/components/Incidents/IncidentRow.test.tsx
  • plugins/openchoreo-observability/src/components/Incidents/IncidentRow.tsx
  • plugins/openchoreo-observability/src/components/Incidents/ObservabilityProjectIncidentsPage.test.tsx
  • plugins/openchoreo-observability/src/components/Incidents/ObservabilityProjectIncidentsPage.tsx
  • plugins/openchoreo-observability/src/components/Metrics/ObservabilityMetricsPage.test.tsx
  • plugins/openchoreo-observability/src/components/Metrics/ObservabilityMetricsPage.tsx
  • plugins/openchoreo-observability/src/components/Metrics/ObservabilityProjectMetricsPage.test.tsx
  • plugins/openchoreo-observability/src/components/Metrics/ObservabilityProjectMetricsPage.tsx
  • plugins/openchoreo-observability/src/components/RCA/RCAReport/sections/IncidentOverviewSection.test.tsx
  • plugins/openchoreo-observability/src/components/RCA/RCAReport/sections/IncidentOverviewSection.tsx
  • plugins/openchoreo-observability/src/components/RuntimeEvents/ObservabilityRuntimeEventsPage.test.tsx
  • plugins/openchoreo-observability/src/components/RuntimeEvents/ObservabilityRuntimeEventsPage.tsx
  • plugins/openchoreo-observability/src/components/RuntimeLogs/ObservabilityProjectRuntimeLogsPage.test.tsx
  • plugins/openchoreo-observability/src/components/RuntimeLogs/ObservabilityProjectRuntimeLogsPage.tsx
  • plugins/openchoreo-observability/src/components/RuntimeLogs/ObservabilityRuntimeLogsPage.test.tsx
  • plugins/openchoreo-observability/src/components/RuntimeLogs/ObservabilityRuntimeLogsPage.tsx
  • plugins/openchoreo-observability/src/components/Traces/ObservabilityTracesPage.test.tsx
  • plugins/openchoreo-observability/src/components/Traces/ObservabilityTracesPage.tsx
  • plugins/openchoreo-observability/src/components/common/ReleaseLineFilter.test.tsx
  • plugins/openchoreo-observability/src/components/common/ReleaseLineFilter.tsx
  • plugins/openchoreo-observability/src/components/common/index.ts
  • plugins/openchoreo-observability/src/components/common/styles.ts
  • plugins/openchoreo-observability/src/hooks/useComponentAlerts.test.ts
  • plugins/openchoreo-observability/src/hooks/useComponentAlerts.ts
  • plugins/openchoreo-observability/src/hooks/useComponentReleaseLines.ts
  • plugins/openchoreo-observability/src/hooks/useMetrics.ts
  • plugins/openchoreo-observability/src/hooks/useProjectIncidents.ts
  • plugins/openchoreo-observability/src/hooks/useProjectMetrics.ts
  • plugins/openchoreo-observability/src/hooks/useProjectRuntimeLogs.ts
  • plugins/openchoreo-observability/src/hooks/useRuntimeEvents.ts
  • plugins/openchoreo-observability/src/hooks/useRuntimeLogs.ts
  • plugins/openchoreo-observability/src/hooks/useSelectedReleaseLine.ts
  • plugins/openchoreo-observability/src/hooks/useTraces.ts
  • plugins/openchoreo-observability/src/types.ts
  • plugins/openchoreo-observability/src/utils/applyResourceChange.test.ts
  • plugins/openchoreo-observability/src/utils/applyResourceChange.ts
  • plugins/openchoreo-react/src/components/DependencyEditor/DependencyEditor.test.tsx
  • plugins/openchoreo-react/src/components/DependencyEditor/DependencyEditor.tsx
  • plugins/openchoreo-react/src/components/DependencyEditor/ReleaseLineSelect.tsx
  • plugins/openchoreo-react/src/components/DependencyEditor/index.ts
  • plugins/openchoreo-react/src/components/DependencyList/DependencyList.tsx
  • plugins/openchoreo-react/src/components/OpenChoreoEntityLayout/CompactEntityHeader.test.tsx
  • plugins/openchoreo-react/src/components/OpenChoreoEntityLayout/CompactEntityHeader.tsx
  • plugins/openchoreo-react/src/components/OpenChoreoEntityLayout/OpenChoreoEntityLayout.tsx
  • plugins/openchoreo-react/src/components/ReleaseLine/ReleaseLineProvider.tsx
  • plugins/openchoreo-react/src/components/ReleaseLine/index.ts
  • plugins/openchoreo-react/src/components/ReleaseLine/releaseLineResource.ts
  • plugins/openchoreo-react/src/components/ReleaseLine/releaseLineState.ts
  • plugins/openchoreo-react/src/components/ReleaseLine/triggerReleaseLineBuild.ts
  • plugins/openchoreo-react/src/components/ReleaseLine/useReleaseLineComponentEntity.ts
  • plugins/openchoreo-react/src/hooks/useDependencyEditBuffer.test.ts
  • plugins/openchoreo-react/src/hooks/useDependencyEditBuffer.ts
  • plugins/openchoreo-react/src/hooks/useResourceDefinitionPermission.ts
  • plugins/openchoreo-react/src/index.ts
  • plugins/openchoreo-react/src/utils/graphUtils.ts
  • plugins/openchoreo-workflows-backend/src/services/GenericWorkflowService.ts
  • plugins/openchoreo-workflows-backend/src/types.ts
  • plugins/openchoreo/src/alpha.test.tsx
  • plugins/openchoreo/src/alpha.tsx
  • plugins/openchoreo/src/api/OpenChoreoClient.ts
  • plugins/openchoreo/src/api/OpenChoreoClientApi.ts
  • plugins/openchoreo/src/components/CellDiagram/CellDiagram.test.tsx
  • plugins/openchoreo/src/components/CellDiagram/CellDiagram.tsx
  • plugins/openchoreo/src/components/CellDiagram/ReleaseLineSelect.tsx
  • plugins/openchoreo/src/components/CellDiagram/releaseLineFilter.test.ts
  • plugins/openchoreo/src/components/CellDiagram/releaseLineFilter.ts
  • plugins/openchoreo/src/components/CellDiagram/styles.ts
  • plugins/openchoreo/src/components/DeleteEntity/hooks/deleteEntityDispatch.tsx
  • plugins/openchoreo/src/components/DeleteEntity/hooks/useDeleteEntityContextMenuItemProps.tsx
  • plugins/openchoreo/src/components/DeleteEntity/hooks/useDeleteEntityMenuItems.tsx
  • plugins/openchoreo/src/components/DeleteEntity/hooks/useEntityExistsCheck.ts
  • plugins/openchoreo/src/components/EnvironmentOverview/EnvironmentDeployedComponentsCard.tsx
  • plugins/openchoreo/src/components/EnvironmentOverview/hooks/useEnvironmentDeployedComponents.test.ts
  • plugins/openchoreo/src/components/EnvironmentOverview/hooks/useEnvironmentDeployedComponents.ts
  • plugins/openchoreo/src/components/EnvironmentOverview/styles.ts
  • plugins/openchoreo/src/components/Environments/EnvironmentOverridesPage.tsx
  • plugins/openchoreo/src/components/Environments/OverviewCard/useDeploymentStatus.ts
  • plugins/openchoreo/src/components/Environments/ReleaseDataRenderer/ResourceTreeView/ResourcePodTerminalViewer.tsx
  • plugins/openchoreo/src/components/Environments/ReleaseDataRenderer/ResourceTreeView/treeTypes.ts
  • plugins/openchoreo/src/components/Environments/ReleaseDetailsPage.tsx
  • plugins/openchoreo/src/components/Environments/Workload/WorkloadConfigPage.tsx
  • plugins/openchoreo/src/components/Environments/Workload/WorkloadEditor/DependencyContent.test.tsx
  • plugins/openchoreo/src/components/Environments/Workload/WorkloadEditor/DependencyContent.tsx
  • plugins/openchoreo/src/components/Environments/components/CreateReleaseDialog.tsx
  • plugins/openchoreo/src/components/Environments/components/SetupDetailPane.test.tsx
  • plugins/openchoreo/src/components/Environments/components/SetupDetailPane.tsx
  • plugins/openchoreo/src/components/Environments/hooks/useAutoDeploy.test.ts
  • plugins/openchoreo/src/components/Environments/hooks/useAutoDeploy.ts
  • plugins/openchoreo/src/components/Environments/hooks/useAutoDeployUpdate.test.ts
  • plugins/openchoreo/src/components/Environments/hooks/useAutoDeployUpdate.ts
  • plugins/openchoreo/src/components/Environments/hooks/useEnvironmentActions.test.ts
  • plugins/openchoreo/src/components/Environments/hooks/useEnvironmentActions.ts
  • plugins/openchoreo/src/components/Environments/hooks/useEnvironmentData.ts
  • plugins/openchoreo/src/components/Environments/hooks/useEnvironmentRouting.ts
  • plugins/openchoreo/src/components/Environments/hooks/useIncidentsSummary.test.ts
  • plugins/openchoreo/src/components/Environments/hooks/useIncidentsSummary.ts
  • plugins/openchoreo/src/components/Environments/hooks/useOverridesData.ts
  • plugins/openchoreo/src/components/Environments/hooks/useReleaseReadiness.test.ts
  • plugins/openchoreo/src/components/Environments/hooks/useReleaseReadiness.ts
  • plugins/openchoreo/src/components/Environments/hooks/useReleases.ts
  • plugins/openchoreo/src/components/Environments/hooks/useRequiredOverridesCheck.ts
  • plugins/openchoreo/src/components/OpenChoreoAboutCard/OpenChoreoAboutCard.tsx
  • plugins/openchoreo/src/components/Projects/ProjectContentsCard/ReleaseLinesSummaryCell.test.tsx
  • plugins/openchoreo/src/components/Projects/ProjectContentsCard/ReleaseLinesSummaryCell.tsx
  • plugins/openchoreo/src/components/Projects/ProjectContentsCard/columns.tsx
  • plugins/openchoreo/src/components/Projects/ProjectContentsCard/styles.ts
  • plugins/openchoreo/src/components/Projects/hooks/index.ts
  • plugins/openchoreo/src/components/Projects/hooks/useProjectContentsPage.test.tsx
  • plugins/openchoreo/src/components/Projects/hooks/useProjectContentsPage.ts
  • plugins/openchoreo/src/components/ReleaseLines/CreateReleaseLineButton.tsx
  • plugins/openchoreo/src/components/ReleaseLines/CreateReleaseLineDialog.test.tsx
  • plugins/openchoreo/src/components/ReleaseLines/CreateReleaseLineDialog.tsx
  • plugins/openchoreo/src/components/ReleaseLines/InheritedPropertiesPanel.tsx
  • plugins/openchoreo/src/components/ReleaseLines/ReleaseLineDefinitionTab.tsx
  • plugins/openchoreo/src/components/ReleaseLines/ReleaseLineEnvironmentsCell.tsx
  • plugins/openchoreo/src/components/ReleaseLines/ReleaseLineNameCell.tsx
  • plugins/openchoreo/src/components/ReleaseLines/ReleaseLineSearchField.tsx
  • plugins/openchoreo/src/components/ReleaseLines/ReleaseLineYamlPanel.tsx
  • plugins/openchoreo/src/components/ReleaseLines/ReleaseLinesCard.test.tsx
  • plugins/openchoreo/src/components/ReleaseLines/ReleaseLinesCard.tsx
  • plugins/openchoreo/src/components/ReleaseLines/ReleaseLinesTable.test.tsx
  • plugins/openchoreo/src/components/ReleaseLines/ReleaseLinesTable.tsx
  • plugins/openchoreo/src/components/ReleaseLines/index.ts
  • plugins/openchoreo/src/components/ReleaseLines/releaseLineUtils.test.ts
  • plugins/openchoreo/src/components/ReleaseLines/releaseLineUtils.ts
  • plugins/openchoreo/src/components/ReleaseLines/styles.ts
  • plugins/openchoreo/src/components/ReleaseLines/useCreateReleaseLineMenuItems.test.tsx
  • plugins/openchoreo/src/components/ReleaseLines/useCreateReleaseLineMenuItems.tsx
  • plugins/openchoreo/src/components/ReleaseLines/useHasReleaseLines.ts
  • plugins/openchoreo/src/components/ReleaseLines/useReleaseLineDefinition.ts
  • plugins/openchoreo/src/components/ReleaseLines/useReleaseLines.ts
  • plugins/openchoreo/src/components/RuntimeLogs/OverviewCard/useLogsSummary.ts
  • plugins/openchoreo/src/components/Terminal/ExecTerminalWindowPage.tsx
  • plugins/openchoreo/src/components/Terminal/useExecSession.ts
  • plugins/openchoreo/src/components/Traits/EditTraitDialog.tsx
  • plugins/openchoreo/src/components/Traits/traitDefaults.test.ts
  • plugins/openchoreo/src/components/Traits/traitDefaults.ts
  • plugins/openchoreo/src/components/Workflows/OverviewCard/useWorkflowsSummary.ts
  • plugins/openchoreo/src/extensions/OpenChoreoCatalogEntityPageContent.tsx
  • plugins/openchoreo/src/extensions/entityLayouts/ComponentOverviewLayout.tsx
  • plugins/openchoreo/src/extensions/entityLayouts/ReleaseLineOverviewLayout.tsx
  • plugins/openchoreo/src/extensions/openChoreoEntityPageOverride.tsx
  • plugins/openchoreo/src/extensions/selectEntityRoutes.test.tsx
  • plugins/openchoreo/src/extensions/selectEntityRoutes.tsx
  • plugins/permission-backend-module-openchoreo-policy/src/rules/matchesCatalogEntityCapability.ts

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Signed-off-by: chathuranga95 <siriwardhanachathuranga@gmail.com>
The observer now covers only the default line of a component scope
without a line. Send allReleaseLines whenever a component is set
without a line, so the All lines filter and the overview cards keep
showing every line.

Signed-off-by: chathuranga95 <siriwardhanachathuranga@gmail.com>
Show an overridden trait deep-merged onto the inherited one, as the
controller renders it, and save only the parameters that differ, so
later component changes to the trait's other parameters still reach
the line.

Signed-off-by: chathuranga95 <siriwardhanachathuranga@gmail.com>
@chathuranga95
chathuranga95 marked this pull request as ready for review October 25, 2026 12:48
Drop the values the trait form filled in from schema defaults that the
trait did not have before, so a release line no longer saves them as
overrides that pin the defaults. Values inside oneOf or anyOf branches
are kept, since the platform does not apply defaults there.

Signed-off-by: chathuranga95 <siriwardhanachathuranga@gmail.com>

@kaviththiranga kaviththiranga left a comment

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.

Review pass over the non-test, non-generated diff. Eight inline notes below; the three I'd treat as blocking are the ones where a release line is silently crossed rather than erroring:

  1. Promote is never scoped to the release line — promoting from a line page promotes the default line (OpenChoreoClient.promoteToEnvironment + the promote POST body).
  2. useReleaseReadiness is only half line-aware — the workload query is scoped, the builds query isn't, so a line with no build of its own reports ready off another line's image.
  3. fetchReleaseBindings without a line now means "default line" — the unchanged all-lines callers (environment overview, recent deployments) lose line-only deployments.

The rest are a URL-filter reset, a dialog remount, an unpaginated fetch, and one behaviour change that reaches beyond release lines.

🤖 Review pass done with Claude Code

Comment thread plugins/openchoreo/src/api/OpenChoreoClient.ts
Comment thread plugins/openchoreo-observability/src/components/common/ReleaseLineFilter.tsx Outdated
Comment thread plugins/openchoreo/src/components/ReleaseLines/useCreateReleaseLineMenuItems.tsx Outdated
Comment thread plugins/openchoreo-backend/src/services/ComponentService/ComponentInfoService.ts Outdated
Comment thread plugins/openchoreo/src/components/Traits/EditTraitDialog.tsx Outdated
- Remove the dead promote path, scope readiness builds to the line
- Add an allReleaseLines mode for the environment overview and Recent Deployments
- Find release bindings by owner for deploy, promote, overrides and remove
- Page release lines, bindings, releases and workloads
- Keep a URL line until Cost Analysis reports load
- Scope Cost Insights Apply to the selected line
- Keep the create line dialog state, limit trait default dropping to lines

Signed-off-by: chathuranga95 <siriwardhanachathuranga@gmail.com>
@chathuranga95

Copy link
Copy Markdown
Contributor Author

Thanks @kaviththiranga, all eight are addressed. The promote path was dead (the API endpoint was removed in openchoreo/openchoreo#2569), so I removed it instead of scoping it to the line, and the all-lines callers now use an explicit allReleaseLines mode instead of a changed default. While testing I also fixed two more line crossings: Cost Insights Apply now targets the selected line's binding, and deploy, promote, overrides and remove now find a line's binding by its owner, because {component}-{line}-{env} names can clash across components.

kaviththiranga
kaviththiranga previously approved these changes Oct 27, 2026
Give a new release line's Workload and ReleaseBindings the hashed
{component}-{line}-{hash} name OpenChoreo gives a line's objects, so
they no longer take a name another component's objects may need. The
default line keeps {component}-workload and {component}-{env}. The
Workload page leaves a new line workload's name to the backend.

Signed-off-by: chathuranga95 <siriwardhanachathuranga@gmail.com>
The portal calls every component's implicit release line main, as
OpenChoreo does, and lists it first. The create dialog and the
backend reject a line named main or default, since default is
reserved, and a link with releaseLine=default falls back to all
lines. ReleaseLineSummary.isDefault becomes isMain.

Signed-off-by: chathuranga95 <siriwardhanachathuranga@gmail.com>
@chathuranga95
chathuranga95 merged commit cdc4c6e into openchoreo:main Oct 28, 2026
9 checks passed
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