@openchoreo/backstage-plugin-openchoreo-workflows 1.2.0-rc.2 → 1.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +206 -0
- package/package.json +5 -5
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,211 @@
|
|
|
1
1
|
# @openchoreo/backstage-plugin-openchoreo-workflows
|
|
2
2
|
|
|
3
|
+
## 1.2.0
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 591df85: Show a subtle background-refresh indicator on cached views instead of swapping
|
|
8
|
+
data in silently.
|
|
9
|
+
|
|
10
|
+
Adds a shared `RefreshOverlay` primitive to the design system — a small
|
|
11
|
+
top-right spinner (or thin top bar) that overlays a positioned container while a
|
|
12
|
+
background revalidation runs, without shifting or blanking the cached content.
|
|
13
|
+
`useOpenChoreoQuery`/`useOpenChoreoInfiniteQuery` already expose `isRefetching`;
|
|
14
|
+
the data hooks across the portal now thread it through, and the home dashboard,
|
|
15
|
+
plane cards, access-control, secrets, project, environment, workflow and
|
|
16
|
+
observability surfaces render the overlay from it. `SummaryWidgetWrapper` gained
|
|
17
|
+
a `refreshing` prop so the home summary widgets get it for free.
|
|
18
|
+
|
|
19
|
+
- 62608f5: chore: remove dead code left over from the OpenAPI-client and New Frontend
|
|
20
|
+
System migrations — commented-out blocks, orphaned files/components, and unused
|
|
21
|
+
deprecated exports (`LogEntry`/`RuntimeLogsResponse` aliases, `FILTER_PRESETS`,
|
|
22
|
+
`useOrgName`, `useRCAReportByAlert`, `UserTypeConfig`), plus consolidation of
|
|
23
|
+
duplicated backend response-type wrappers. No behavioural changes.
|
|
24
|
+
- e3986a9: Add an `/alpha` entry point that exposes each plugin as a `createFrontendPlugin` for use with Backstage's New Frontend System (NFS). The default entry continues to export the legacy `createPlugin` instance so existing host apps keep working unchanged; adopters on NFS can now import `from '@openchoreo/backstage-plugin-<name>/alpha'` and include the plugin directly in `createApp({ features: [...] })`.
|
|
25
|
+
|
|
26
|
+
The `/alpha` exports register each plugin's API factories (e.g. `openChoreoCiClientApiRef`, `genericWorkflowsClientApiRef`, the three observability backend clients, `openChoreoClientApiRef`) and one top-level page where applicable (`platform-engineer-core`'s dashboard view, `openchoreo-workflows`' generic workflows page, `openchoreo-ci`'s workflows entity tab).
|
|
27
|
+
|
|
28
|
+
Entity tabs and overview cards that previously lived in the host's `EntityPage.tsx` now ride through each plugin's `/alpha` export as `EntityContentBlueprint` and `EntityCardBlueprint` extensions, with the right kind filters. Adopters on `/alpha` get the full entity-page contributions automatically: the OpenChoreo CI plugin contributes the Build tab (scoped to `kind:component`); the observability plugin contributes the 10 component- and system-page tabs (Logs, Events, Metrics, Alerts, Wirelogs, Traces, Incidents, RCA Reports, Cost Analysis) plus a registry API for host-injected log-row action renderers; the OpenChoreo plugin contributes the Deploy tab, the system Cell Diagram tab, the shared Resource Definition tab, and 30+ overview cards spanning every OpenChoreo platform kind (Environment, DataPlane, WorkflowPlane, ObservabilityPlane, DeploymentPipeline, the ComponentType / ResourceType / TraitType families, and the Workflow family); the generic-workflows plugin contributes the Runs tab on `Workflow` and `ClusterWorkflow` entities of type `Generic`. The react plugin exposes a new `FeatureGatedContent` component so plugin authors can gate routable extensions on the OpenChoreo feature flags without rolling their own empty-state wrapper.
|
|
29
|
+
|
|
30
|
+
Custom catalog-graph relations, entity-presentation kind icons, and the scaffolder form-decorator override are now actually applied at runtime — the original migration registered them but they were silently overwritten by upstream defaults at startup. The form-decorator override also stops dropping decorators contributed by other plugins.
|
|
31
|
+
|
|
32
|
+
Adopters still on the default (legacy) export are unaffected. This addresses the body of [openchoreo/openchoreo#3568](https://github.com/openchoreo/openchoreo/issues/3568) — adopters can drop `--legacy` from the `@backstage/create-app` step when installing the plugin suite into an existing Backstage host.
|
|
33
|
+
|
|
34
|
+
- 591df85: Introduce a frontend response cache (TanStack Query) behind a swappable seam and
|
|
35
|
+
migrate the portal's data-fetching hooks onto it, so cached data paints
|
|
36
|
+
instantly on remount and a background refresh no longer blanks the view.
|
|
37
|
+
|
|
38
|
+
New hooks in `@openchoreo/backstage-plugin-react`, all wrapping TanStack Query so
|
|
39
|
+
plugins never import it directly:
|
|
40
|
+
|
|
41
|
+
- `useOpenChoreoQuery` — cached reads, returning the
|
|
42
|
+
`{ data, loading, isRefetching, error, refetch }` shape the loaders consume.
|
|
43
|
+
- `useOpenChoreoMutation` — writes that re-throw on error and invalidate cached
|
|
44
|
+
queries on success (replacing the hand-rolled "call verb then refetch").
|
|
45
|
+
- `useOpenChoreoInfiniteQuery` — cursor-paginated "load more + live poll" lists
|
|
46
|
+
(runtime logs/events).
|
|
47
|
+
- `useOpenChoreoCache` — imperative cache access for optimistic writes and the
|
|
48
|
+
lazy, dynamically-keyed hooks.
|
|
49
|
+
|
|
50
|
+
Migrated across the openchoreo, observability, CI and workflows plugins: simple
|
|
51
|
+
and parameterized reads, read+mutation hooks, `setInterval` pollers (now
|
|
52
|
+
`refetchInterval` with terminal stop conditions), lazy/conditional and
|
|
53
|
+
keyed-Map hooks, the log/event pagination trio, and the `react-use` `useAsync`
|
|
54
|
+
sites. `useAsyncOperation` is deprecated in favour of `useOpenChoreoMutation`.
|
|
55
|
+
The provider is mounted in the app root and the cache is cleared on sign-out.
|
|
56
|
+
|
|
57
|
+
The seam only forwards `staleTime`/`refetchInterval`/`enabled` when a caller
|
|
58
|
+
actually sets them — passing an explicit `undefined` overrides the QueryClient
|
|
59
|
+
default instead of inheriting it, which resolved `staleTime` to 0 and refetched
|
|
60
|
+
on every remount, silently defeating the shared 30s cache.
|
|
61
|
+
|
|
62
|
+
The cell-diagram and wirelogs environment hooks no longer fold `isRefetching`
|
|
63
|
+
into `loading`; a background refresh kept re-showing their full skeleton (the
|
|
64
|
+
"blank on refresh" the cache was meant to remove). They now report `loading`
|
|
65
|
+
for the first load only and expose `isRefetching` separately.
|
|
66
|
+
|
|
67
|
+
- 915e2e5: Self-contain the response cache for NFS-mounted OpenChoreo surfaces. Each
|
|
68
|
+
OpenChoreo plugin now wraps its own extensions in a TanStack Query
|
|
69
|
+
`QueryClientProvider` via `PluginWrapperBlueprint`, around a shared `queryClient`
|
|
70
|
+
singleton exported from `@openchoreo/backstage-plugin-react`. A host that mounts
|
|
71
|
+
the plugins' `/alpha` features (auto-mounted entity tabs/cards and the standalone
|
|
72
|
+
plugin pages) gets response caching with no provider wiring — previously those
|
|
73
|
+
surfaces would crash with "No QueryClient set" when a cached tab rendered.
|
|
74
|
+
|
|
75
|
+
Scope: this covers surfaces rendered through a plugin's own extension boundary
|
|
76
|
+
(NFS auto-mounted tabs/cards and standalone plugin pages). A host that instead
|
|
77
|
+
composes OpenChoreo tab components itself via legacy `EntityLayout.Route` JSX
|
|
78
|
+
renders them outside the plugin wrapper, so that host still mounts its own
|
|
79
|
+
provider — `OpenChoreoQueryProvider` (also exported here) bundles the
|
|
80
|
+
`QueryClientProvider` and the user-scoping context for that case.
|
|
81
|
+
|
|
82
|
+
Cross-user isolation is structural: every cache key is namespaced by the
|
|
83
|
+
signed-in user's entityRef inside the cache seam (`useOpenChoreoQuery`,
|
|
84
|
+
`useOpenChoreoInfiniteQuery`, `useOpenChoreoMutation`, `useOpenChoreoCache`), so
|
|
85
|
+
a different user occupies a disjoint key space and can never read the previous
|
|
86
|
+
user's permission-scoped responses from the cache — no cache-clearing needed.
|
|
87
|
+
Multiple OpenChoreo plugins share the same `queryClient`, so there is one cache.
|
|
88
|
+
|
|
89
|
+
- c572a46: Unify portal loading states behind a shared, token-driven system so every
|
|
90
|
+
loader looks and behaves consistently.
|
|
91
|
+
|
|
92
|
+
**New shared components**
|
|
93
|
+
|
|
94
|
+
- **design-system**: `Skeleton` (token-driven shimmer — `text`/`rect`/`circle`
|
|
95
|
+
with a `count` for stacked lines, backed by new `motion` timing tokens),
|
|
96
|
+
`Spinner` (theme-coloured circular loader with named sizes
|
|
97
|
+
`chip`/`button`/`inline`/`page`), and `PageLoader` (centered `Spinner` for
|
|
98
|
+
page/route/section loads).
|
|
99
|
+
- **backstage-plugin-react**: `ContentLoader` (loading/error/empty/content
|
|
100
|
+
wrapper that keeps content on screen and overlays a spinner during a
|
|
101
|
+
background refetch instead of blanking) and `SkeletonRows` (table-body
|
|
102
|
+
skeleton helper).
|
|
103
|
+
|
|
104
|
+
**Consistency changes**
|
|
105
|
+
|
|
106
|
+
- Tables now show skeleton rows instead of a circular overlay (catalog,
|
|
107
|
+
Project Contents, namespace cards, observability RCA/Cost Analysis, and the
|
|
108
|
+
raw-MUI alert/incident/log tables).
|
|
109
|
+
- Overview cards and widgets render skeleton placeholders via the shared
|
|
110
|
+
`Skeleton` (including the home-page platform-planes section).
|
|
111
|
+
- Page-level loaders use the centered `PageLoader` instead of the Backstage
|
|
112
|
+
progress bar — including Backstage's internal route/Suspense fallback and the
|
|
113
|
+
app-boot loader.
|
|
114
|
+
- Status chips use the themed `Spinner` (removing a hardcoded spinner colour).
|
|
115
|
+
- The shared `ErrorState` icon is sized down to read proportionately in
|
|
116
|
+
section-level errors.
|
|
117
|
+
|
|
118
|
+
Prefer `Skeleton`/`Spinner`/`PageLoader` and `ContentLoader` over raw MUI
|
|
119
|
+
`Skeleton`/`CircularProgress`/`Progress` for new loading states.
|
|
120
|
+
|
|
121
|
+
- 8d8bd80: Upgrade the OpenChoreo Backstage plugin suite to Backstage v1.51.0.
|
|
122
|
+
|
|
123
|
+
This bump aligns every `@backstage/*` peer dependency with the v1.51.0 line and adapts the plugins to the API shapes introduced across v1.44–v1.51. Adopters running the OpenChoreo plugins on a host Backstage app must be on Backstage v1.51.0 (or newer) after this release; older host versions will hit peer-dep mismatches.
|
|
124
|
+
|
|
125
|
+
Notable adapter-side changes:
|
|
126
|
+
|
|
127
|
+
- Scaffolder backend actions now use the v4.0 `schema.input: { field: z => z.type(...) }` field-per-arrow shape introduced after v1.43.3.
|
|
128
|
+
- Permission rules inline their `paramsSchema` at the `createPermissionRule` call site and import Zod via `zod/v3` to match what `@backstage/plugin-permission-node@0.11.0` was compiled against.
|
|
129
|
+
- The catalog backend module reads `catalogProcessingExtensionPoint` from the stable export (no `/alpha`) and registers permission rules through `coreServices.permissionsRegistry`.
|
|
130
|
+
- React 18 + Node 22 are required at runtime, in line with Backstage v1.50+.
|
|
131
|
+
|
|
132
|
+
- d19ffcf: Virtualize the log/event/trace/wirelog views with a new shared `VirtualizedLogList` primitive.
|
|
133
|
+
|
|
134
|
+
**New shared primitive (`@openchoreo/backstage-plugin-react`)**
|
|
135
|
+
|
|
136
|
+
`VirtualizedLogList` is a headless windowed list built on `@tanstack/react-virtual`. It handles row windowing, automatic variable/wrapped row-height measurement (via `measureElement`), follow-tail for live streams, scroll-driven load-more (`onReachEnd`), and exposes `header` / `footer` slots that render inside the scroll container so they share the rows' content width and stay aligned with the body cells.
|
|
137
|
+
|
|
138
|
+
Alongside the primitive, three small hooks/utilities the consumers compose with:
|
|
139
|
+
|
|
140
|
+
- `useRowExpansion()` — tracks expanded row keys in a Set lifted to the parent table, so per-row expansion survives the virtualizer unmounting off-screen rows.
|
|
141
|
+
- `useAutoLoadWhenEmpty({ count, hasMore, loading, onLoadMore })` — fires `onLoadMore` once when the list is empty but the server reports more pages, restoring the IntersectionObserver-equivalent "auto-fetch when the sentinel is visible" behaviour now that there is no DOM sentinel. Re-arms on count transitions, doesn't loop on repeated empty responses.
|
|
142
|
+
- `makeColumnStyle<K>(flexByKey)` — factory that builds the `getColumnStyle(key)` helper for the div-based tables. Memoizes style objects per key so cell renders return stable references.
|
|
143
|
+
|
|
144
|
+
**Surfaces virtualized**
|
|
145
|
+
|
|
146
|
+
- **Build Logs** (`openchoreo-ci` `LogsContent`) — per-step build log viewer with accordion sections. Single fetch per step plus periodic polling.
|
|
147
|
+
- **Workflow Run Step Logs** (`openchoreo-workflows`) — generic workflow run step logs. Follow-tail pinned to the bottom while a step is running.
|
|
148
|
+
- **Runtime Logs** (`openchoreo-observability` `LogsTable` / `LogEntry`) — multi-column observability runtime logs. Sticky multi-column header, severity chips, expand-on-click rows, copy/investigate actions, infinite scroll wired through `onReachEnd` + `useAutoLoadWhenEmpty` (replacing the previous IntersectionObserver sentinel). The Phase-1/2 a11y attributes (`scope="col"`, `role="status"`/`aria-busy`/`aria-hidden`) carry across to the new div-based markup as `role="table"`/`role="row"`/`role="columnheader"` and the load-more spinner.
|
|
149
|
+
- **Runtime Events** (`openchoreo-observability` `EventsTable` / `EventEntry`) — same shape as Runtime Logs (multi-column, expand-on-click, infinite scroll).
|
|
150
|
+
- **Wirelogs** (`openchoreo-observability` `WirelogsTable`) — Cilium flow stream viewer. The previous hand-rolled `stickToBottomRef` + `useLayoutEffect` is replaced by the primitive's `followTail`, which catches both append and same-length cap-shift / dedupe / replace-by-uuid updates via last-item-key tracking.
|
|
151
|
+
- **Traces** (`openchoreo-observability` `TracesTable`) — project-level traces with expand-on-click `WaterfallView`. Click events inside the waterfall are isolated from the row toggle.
|
|
152
|
+
|
|
153
|
+
**Shared workflow-status helpers (`@openchoreo/backstage-plugin-common`)**
|
|
154
|
+
|
|
155
|
+
`isTerminalStatus(status)` and `isStepLive(step, parentStatus)` replace four near-identical inline copies across `BuildLogs`, `BuildEvents`, `WorkflowRunStepLogs`, `WorkflowRunEvents`, and `RunMetadataContent`. One source of truth, case-insensitive matching, structurally-typed `isStepLive` so it accepts any `{ phase?: string }`-shaped step.
|
|
156
|
+
|
|
157
|
+
**Notable behavioural notes**
|
|
158
|
+
|
|
159
|
+
- Long runs paint faster and scroll smoothly — only the viewport's worth of rows is mounted regardless of payload size.
|
|
160
|
+
- Wrapped multi-line log entries no longer overlap (auto-measured by tanstack instead of the previous hand-rolled measurement on top of react-window v1).
|
|
161
|
+
- Per-row expanded state survives scrolling off-screen and back.
|
|
162
|
+
- Live streams (running step logs, wirelogs) stay pinned to the newest row while the user is at the bottom; the tail releases as soon as they scroll up.
|
|
163
|
+
- Load-more recovers from a server response of `hasMore: true` with no new rows: the user can scroll away and back to the bottom to re-trigger.
|
|
164
|
+
|
|
165
|
+
- Updated dependencies [5222138]
|
|
166
|
+
- Updated dependencies [591df85]
|
|
167
|
+
- Updated dependencies [c86de7f]
|
|
168
|
+
- Updated dependencies [591df85]
|
|
169
|
+
- Updated dependencies [436c144]
|
|
170
|
+
- Updated dependencies [86957df]
|
|
171
|
+
- Updated dependencies [62608f5]
|
|
172
|
+
- Updated dependencies [f126bca]
|
|
173
|
+
- Updated dependencies [529f13c]
|
|
174
|
+
- Updated dependencies [cf2203a]
|
|
175
|
+
- Updated dependencies [e809b2d]
|
|
176
|
+
- Updated dependencies [d5eff9e]
|
|
177
|
+
- Updated dependencies [f1163a9]
|
|
178
|
+
- Updated dependencies [c7c41b7]
|
|
179
|
+
- Updated dependencies [8381554]
|
|
180
|
+
- Updated dependencies [0d2433f]
|
|
181
|
+
- Updated dependencies [8381554]
|
|
182
|
+
- Updated dependencies [b52e578]
|
|
183
|
+
- Updated dependencies [e3986a9]
|
|
184
|
+
- Updated dependencies [0b1d374]
|
|
185
|
+
- Updated dependencies [383e7f6]
|
|
186
|
+
- Updated dependencies [d5eff9e]
|
|
187
|
+
- Updated dependencies [52396b0]
|
|
188
|
+
- Updated dependencies [4d7ebff]
|
|
189
|
+
- Updated dependencies [8416223]
|
|
190
|
+
- Updated dependencies [71f7b6c]
|
|
191
|
+
- Updated dependencies [2f45e83]
|
|
192
|
+
- Updated dependencies [14601f4]
|
|
193
|
+
- Updated dependencies [e384b25]
|
|
194
|
+
- Updated dependencies [1207eda]
|
|
195
|
+
- Updated dependencies [7c76d05]
|
|
196
|
+
- Updated dependencies [591df85]
|
|
197
|
+
- Updated dependencies [84cfaeb]
|
|
198
|
+
- Updated dependencies [915e2e5]
|
|
199
|
+
- Updated dependencies [c6f1de1]
|
|
200
|
+
- Updated dependencies [284fcd7]
|
|
201
|
+
- Updated dependencies [453b958]
|
|
202
|
+
- Updated dependencies [c572a46]
|
|
203
|
+
- Updated dependencies [8d8bd80]
|
|
204
|
+
- Updated dependencies [d19ffcf]
|
|
205
|
+
- @openchoreo/backstage-plugin@1.2.0
|
|
206
|
+
- @openchoreo/backstage-design-system@1.2.0
|
|
207
|
+
- @openchoreo/backstage-plugin-react@1.2.0
|
|
208
|
+
|
|
3
209
|
## 1.2.0-next.2
|
|
4
210
|
|
|
5
211
|
### Patch Changes
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openchoreo/backstage-plugin-openchoreo-workflows",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.1",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"main": "dist/index.esm.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -67,9 +67,9 @@
|
|
|
67
67
|
"@material-ui/core": "4.12.4",
|
|
68
68
|
"@material-ui/icons": "4.11.3",
|
|
69
69
|
"@material-ui/lab": "4.0.0-alpha.61",
|
|
70
|
-
"@openchoreo/backstage-design-system": "^1.2.
|
|
71
|
-
"@openchoreo/backstage-plugin": "^1.2.
|
|
72
|
-
"@openchoreo/backstage-plugin-react": "^1.2.
|
|
70
|
+
"@openchoreo/backstage-design-system": "^1.2.1",
|
|
71
|
+
"@openchoreo/backstage-plugin": "^1.2.1",
|
|
72
|
+
"@openchoreo/backstage-plugin-react": "^1.2.1",
|
|
73
73
|
"@rjsf/core": "5.24.13",
|
|
74
74
|
"@rjsf/material-ui": "5.24.13",
|
|
75
75
|
"@rjsf/utils": "5.24.13",
|
|
@@ -86,7 +86,7 @@
|
|
|
86
86
|
"@backstage/core-app-api": "^1.20.1",
|
|
87
87
|
"@backstage/dev-utils": "^1.1.23",
|
|
88
88
|
"@backstage/test-utils": "^1.7.18",
|
|
89
|
-
"@openchoreo/test-utils": "^1.2.
|
|
89
|
+
"@openchoreo/test-utils": "^1.2.1",
|
|
90
90
|
"@testing-library/jest-dom": "6.9.1",
|
|
91
91
|
"@testing-library/react": "14.3.1",
|
|
92
92
|
"@testing-library/user-event": "14.6.1",
|