@openchoreo/backstage-plugin-openchoreo-workflows 1.1.6 → 1.2.0-m.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 +27 -0
- package/dist/api/GenericWorkflowsClient.esm.js +2 -0
- package/dist/api/GenericWorkflowsClient.esm.js.map +1 -1
- package/dist/components/GenericWorkflowsPage/index.esm.js +5 -1
- package/dist/components/GenericWorkflowsPage/index.esm.js.map +1 -1
- package/dist/components/WorkflowRunEvents/WorkflowRunEvents.esm.js +32 -4
- package/dist/components/WorkflowRunEvents/WorkflowRunEvents.esm.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/package.json +12 -12
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,32 @@
|
|
|
1
1
|
# @openchoreo/backstage-plugin-openchoreo-workflows
|
|
2
2
|
|
|
3
|
+
## 1.2.0-next.0
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 8d8bd80: Upgrade the OpenChoreo Backstage plugin suite to Backstage v1.51.0.
|
|
8
|
+
|
|
9
|
+
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.
|
|
10
|
+
|
|
11
|
+
Notable adapter-side changes:
|
|
12
|
+
|
|
13
|
+
- Scaffolder backend actions now use the v4.0 `schema.input: { field: z => z.type(...) }` field-per-arrow shape introduced after v1.43.3.
|
|
14
|
+
- 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.
|
|
15
|
+
- The catalog backend module reads `catalogProcessingExtensionPoint` from the stable export (no `/alpha`) and registers permission rules through `coreServices.permissionsRegistry`.
|
|
16
|
+
- React 18 + Node 22 are required at runtime, in line with Backstage v1.50+.
|
|
17
|
+
|
|
18
|
+
- Updated dependencies [529f13c]
|
|
19
|
+
- Updated dependencies [e809b2d]
|
|
20
|
+
- Updated dependencies [c7c41b7]
|
|
21
|
+
- Updated dependencies [1207eda]
|
|
22
|
+
- Updated dependencies [7c76d05]
|
|
23
|
+
- Updated dependencies [84cfaeb]
|
|
24
|
+
- Updated dependencies [c6f1de1]
|
|
25
|
+
- Updated dependencies [8d8bd80]
|
|
26
|
+
- @openchoreo/backstage-plugin-react@1.2.0-next.0
|
|
27
|
+
- @openchoreo/backstage-plugin@1.2.0-next.0
|
|
28
|
+
- @openchoreo/backstage-design-system@1.2.0-next.0
|
|
29
|
+
|
|
3
30
|
## 1.1.1
|
|
4
31
|
|
|
5
32
|
- Compatible release for OpenChoreo 1.1.1.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GenericWorkflowsClient.esm.js","sources":["../../src/api/GenericWorkflowsClient.ts"],"sourcesContent":["import { DiscoveryApi, FetchApi } from '@backstage/core-plugin-api';\nimport type { GenericWorkflowsClientApi } from './GenericWorkflowsClientApi';\nimport type {\n Workflow,\n WorkflowRun,\n PaginatedResponse,\n LogsResponse,\n WorkflowRunStatusResponse,\n WorkflowRunEventEntry,\n} from '../types';\n\ntype HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';\n\nexport class GenericWorkflowsClient implements GenericWorkflowsClientApi {\n constructor(\n private readonly discovery: DiscoveryApi,\n private readonly fetchApi: FetchApi,\n ) {}\n\n private async apiFetch<T = unknown>(\n endpoint: string,\n options?: {\n method?: HttpMethod;\n body?: unknown;\n params?: Record<string, string>;\n },\n ): Promise<T> {\n const baseUrl = await this.discovery.getBaseUrl(\n 'openchoreo-workflows-backend',\n );\n const url = new URL(`${baseUrl}${endpoint}`);\n\n if (options?.params) {\n url.search = new URLSearchParams(options.params).toString();\n }\n\n const headers: HeadersInit = {};\n\n if (options?.body !== undefined) {\n headers['Content-Type'] = 'application/json';\n }\n\n const response = await this.fetchApi.fetch(url.toString(), {\n method: options?.method || 'GET',\n headers: Object.keys(headers).length > 0 ? headers : undefined,\n body:\n options?.body !== undefined ? JSON.stringify(options.body) : undefined,\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(`API request failed (${response.status}): ${errorText}`);\n }\n\n return response.json();\n }\n\n async listNamespaces(): Promise<string[]> {\n return this.apiFetch<string[]>('/namespaces');\n }\n\n async listWorkflows(\n namespaceName: string,\n ): Promise<PaginatedResponse<Workflow>> {\n return this.apiFetch<PaginatedResponse<Workflow>>('/workflows', {\n params: { namespaceName },\n });\n }\n\n async getWorkflowSchema(\n namespaceName: string,\n workflowName: string,\n ): Promise<unknown> {\n return this.apiFetch<unknown>(\n `/workflows/${encodeURIComponent(workflowName)}/schema`,\n {\n params: { namespaceName },\n },\n );\n }\n\n async getClusterWorkflowSchema(\n clusterWorkflowName: string,\n ): Promise<unknown> {\n return this.apiFetch<unknown>(\n `/cluster-workflows/${encodeURIComponent(clusterWorkflowName)}/schema`,\n );\n }\n\n async listWorkflowRuns(\n namespaceName: string,\n workflowName?: string,\n ): Promise<PaginatedResponse<WorkflowRun>> {\n const params: Record<string, string> = { namespaceName };\n if (workflowName) {\n params.workflowName = workflowName;\n }\n return this.apiFetch<PaginatedResponse<WorkflowRun>>('/workflow-runs', {\n params,\n });\n }\n\n async getWorkflowRun(\n namespaceName: string,\n runName: string,\n ): Promise<WorkflowRun> {\n return this.apiFetch<WorkflowRun>(\n `/workflow-runs/${encodeURIComponent(runName)}`,\n {\n params: { namespaceName },\n },\n );\n }\n\n async createWorkflowRun(\n namespaceName: string,\n workflowName: string,\n parameters?: Record<string, unknown>,\n workflowKind?: 'Workflow' | 'ClusterWorkflow',\n ): Promise<WorkflowRun> {\n return this.apiFetch<WorkflowRun>('/workflow-runs', {\n method: 'POST',\n params: { namespaceName },\n body: { workflowName, parameters, workflowKind },\n });\n }\n\n async getWorkflowRunLogs(\n namespaceName: string,\n runName: string,\n task?: string,\n ): Promise<LogsResponse> {\n const params: Record<string, string> = { namespaceName };\n if (task) {\n params.task = task;\n }\n return this.apiFetch<LogsResponse>(\n `/workflow-runs/${encodeURIComponent(runName)}/logs`,\n { params },\n );\n }\n\n async getWorkflowRunStatus(\n namespaceName: string,\n runName: string,\n ): Promise<WorkflowRunStatusResponse> {\n return this.apiFetch<WorkflowRunStatusResponse>(\n `/workflow-runs/${encodeURIComponent(runName)}/status`,\n {\n params: { namespaceName },\n },\n );\n }\n\n async getWorkflowRunEvents(\n namespaceName: string,\n runName: string,\n task?: string,\n ): Promise<WorkflowRunEventEntry[]> {\n const params: Record<string, string> = { namespaceName };\n if (task) {\n params.task = task;\n }\n return this.apiFetch<WorkflowRunEventEntry[]>(\n `/workflow-runs/${encodeURIComponent(runName)}/events`,\n { params },\n );\n }\n}\n"],"names":[],"mappings":"AAaO,MAAM,sBAAA,CAA4D;AAAA,EACvE,WAAA,CACmB,WACA,QAAA,EACjB;AAFiB,IAAA,IAAA,CAAA,SAAA,GAAA,SAAA;AACA,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AAAA,EAChB;AAAA,
|
|
1
|
+
{"version":3,"file":"GenericWorkflowsClient.esm.js","sources":["../../src/api/GenericWorkflowsClient.ts"],"sourcesContent":["import { DiscoveryApi, FetchApi } from '@backstage/core-plugin-api';\nimport type { GenericWorkflowsClientApi } from './GenericWorkflowsClientApi';\nimport type {\n Workflow,\n WorkflowRun,\n PaginatedResponse,\n LogsResponse,\n WorkflowRunStatusResponse,\n WorkflowRunEventEntry,\n} from '../types';\n\ntype HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';\n\nexport class GenericWorkflowsClient implements GenericWorkflowsClientApi {\n constructor(\n private readonly discovery: DiscoveryApi,\n private readonly fetchApi: FetchApi,\n ) {}\n\n private async apiFetch<T = unknown>(\n endpoint: string,\n options?: {\n method?: HttpMethod;\n body?: unknown;\n params?: Record<string, string>;\n },\n ): Promise<T> {\n const baseUrl = await this.discovery.getBaseUrl(\n 'openchoreo-workflows-backend',\n );\n const url = new URL(`${baseUrl}${endpoint}`);\n\n if (options?.params) {\n url.search = new URLSearchParams(options.params).toString();\n }\n\n const headers: HeadersInit = {};\n\n if (options?.body !== undefined) {\n headers['Content-Type'] = 'application/json';\n }\n\n const response = await this.fetchApi.fetch(url.toString(), {\n method: options?.method || 'GET',\n headers: Object.keys(headers).length > 0 ? headers : undefined,\n body:\n options?.body !== undefined ? JSON.stringify(options.body) : undefined,\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(`API request failed (${response.status}): ${errorText}`);\n }\n\n return response.json();\n }\n\n async listNamespaces(): Promise<string[]> {\n return this.apiFetch<string[]>('/namespaces');\n }\n\n async listWorkflows(\n namespaceName: string,\n ): Promise<PaginatedResponse<Workflow>> {\n return this.apiFetch<PaginatedResponse<Workflow>>('/workflows', {\n params: { namespaceName },\n });\n }\n\n async getWorkflowSchema(\n namespaceName: string,\n workflowName: string,\n ): Promise<unknown> {\n return this.apiFetch<unknown>(\n `/workflows/${encodeURIComponent(workflowName)}/schema`,\n {\n params: { namespaceName },\n },\n );\n }\n\n async getClusterWorkflowSchema(\n clusterWorkflowName: string,\n ): Promise<unknown> {\n return this.apiFetch<unknown>(\n `/cluster-workflows/${encodeURIComponent(clusterWorkflowName)}/schema`,\n );\n }\n\n async listWorkflowRuns(\n namespaceName: string,\n workflowName?: string,\n ): Promise<PaginatedResponse<WorkflowRun>> {\n const params: Record<string, string> = { namespaceName };\n if (workflowName) {\n params.workflowName = workflowName;\n }\n return this.apiFetch<PaginatedResponse<WorkflowRun>>('/workflow-runs', {\n params,\n });\n }\n\n async getWorkflowRun(\n namespaceName: string,\n runName: string,\n ): Promise<WorkflowRun> {\n return this.apiFetch<WorkflowRun>(\n `/workflow-runs/${encodeURIComponent(runName)}`,\n {\n params: { namespaceName },\n },\n );\n }\n\n async createWorkflowRun(\n namespaceName: string,\n workflowName: string,\n parameters?: Record<string, unknown>,\n workflowKind?: 'Workflow' | 'ClusterWorkflow',\n ): Promise<WorkflowRun> {\n return this.apiFetch<WorkflowRun>('/workflow-runs', {\n method: 'POST',\n params: { namespaceName },\n body: { workflowName, parameters, workflowKind },\n });\n }\n\n async getWorkflowRunLogs(\n namespaceName: string,\n runName: string,\n task?: string,\n ): Promise<LogsResponse> {\n const params: Record<string, string> = { namespaceName };\n if (task) {\n params.task = task;\n }\n return this.apiFetch<LogsResponse>(\n `/workflow-runs/${encodeURIComponent(runName)}/logs`,\n { params },\n );\n }\n\n async getWorkflowRunStatus(\n namespaceName: string,\n runName: string,\n ): Promise<WorkflowRunStatusResponse> {\n return this.apiFetch<WorkflowRunStatusResponse>(\n `/workflow-runs/${encodeURIComponent(runName)}/status`,\n {\n params: { namespaceName },\n },\n );\n }\n\n async getWorkflowRunEvents(\n namespaceName: string,\n runName: string,\n task?: string,\n ): Promise<WorkflowRunEventEntry[]> {\n const params: Record<string, string> = { namespaceName };\n if (task) {\n params.task = task;\n }\n return this.apiFetch<WorkflowRunEventEntry[]>(\n `/workflow-runs/${encodeURIComponent(runName)}/events`,\n { params },\n );\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|
|
@@ -245,10 +245,38 @@ const WorkflowRunEvents = ({
|
|
|
245
245
|
),
|
|
246
246
|
activeEvents.length > 0 && /* @__PURE__ */ jsxs(Table, { size: "small", children: [
|
|
247
247
|
/* @__PURE__ */ jsx(TableHead, { children: /* @__PURE__ */ jsxs(TableRow, { children: [
|
|
248
|
-
/* @__PURE__ */ jsx(
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
248
|
+
/* @__PURE__ */ jsx(
|
|
249
|
+
TableCell,
|
|
250
|
+
{
|
|
251
|
+
scope: "col",
|
|
252
|
+
className: classes.tableHeaderCell,
|
|
253
|
+
children: "Type"
|
|
254
|
+
}
|
|
255
|
+
),
|
|
256
|
+
/* @__PURE__ */ jsx(
|
|
257
|
+
TableCell,
|
|
258
|
+
{
|
|
259
|
+
scope: "col",
|
|
260
|
+
className: classes.tableHeaderCell,
|
|
261
|
+
children: "Reason"
|
|
262
|
+
}
|
|
263
|
+
),
|
|
264
|
+
/* @__PURE__ */ jsx(
|
|
265
|
+
TableCell,
|
|
266
|
+
{
|
|
267
|
+
scope: "col",
|
|
268
|
+
className: classes.tableHeaderCell,
|
|
269
|
+
children: "Message"
|
|
270
|
+
}
|
|
271
|
+
),
|
|
272
|
+
/* @__PURE__ */ jsx(
|
|
273
|
+
TableCell,
|
|
274
|
+
{
|
|
275
|
+
scope: "col",
|
|
276
|
+
className: classes.tableHeaderCell,
|
|
277
|
+
children: "Last Seen"
|
|
278
|
+
}
|
|
279
|
+
)
|
|
252
280
|
] }) }),
|
|
253
281
|
/* @__PURE__ */ jsx(TableBody, { children: activeEvents.map((event, index) => /* @__PURE__ */ jsxs(TableRow, { children: [
|
|
254
282
|
/* @__PURE__ */ jsx(TableCell, { className: classes.tableCell, children: event.type }),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkflowRunEvents.esm.js","sources":["../../../src/components/WorkflowRunEvents/WorkflowRunEvents.tsx"],"sourcesContent":["import { useEffect, useMemo, useState } from 'react';\nimport {\n Accordion,\n AccordionDetails,\n AccordionSummary,\n Box,\n CircularProgress,\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableRow,\n Typography,\n} from '@material-ui/core';\nimport { makeStyles } from '@material-ui/core/styles';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport { Alert } from '@material-ui/lab';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { genericWorkflowsClientApiRef } from '../../api';\nimport { useSelectedNamespace } from '../../context';\nimport { WorkflowRunStatusChip } from '../WorkflowRunStatusChip';\nimport type {\n WorkflowRunStatusResponse,\n WorkflowStepStatus,\n WorkflowRunEventEntry,\n} from '../../types';\n\nconst useStyles = makeStyles(theme => ({\n stepsContainer: {\n display: 'flex',\n flexDirection: 'column',\n gap: theme.spacing(1.5),\n },\n stepAccordion: {\n borderRadius: theme.shape.borderRadius,\n border: `1px solid ${theme.palette.divider}`,\n '&:before': {\n display: 'none',\n },\n },\n stepHeader: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n width: '100%',\n },\n stepTitle: {\n fontWeight: 500,\n },\n stepStatusChip: {\n marginLeft: theme.spacing(1),\n },\n eventsContainer: {\n flex: 'auto',\n backgroundColor: theme.palette.type === 'dark' ? '#1e1e1e' : '#f5f5f5',\n minHeight: '200px',\n overflow: 'auto',\n border: `1px solid ${theme.palette.divider}`,\n borderRadius: theme.shape.borderRadius,\n padding: theme.spacing(2),\n },\n noEventsText: {\n fontSize: '12px',\n color: theme.palette.text.secondary,\n },\n loadingContainer: {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n height: '200px',\n gap: theme.spacing(1),\n },\n inlineLoadingContainer: {\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(1),\n padding: theme.spacing(1, 0),\n },\n tableHeaderCell: {\n fontWeight: 500,\n whiteSpace: 'nowrap' as const,\n fontSize: '12px',\n },\n tableCell: {\n fontSize: '12px',\n fontFamily:\n 'ui-monospace, SFMono-Regular, \"SF Mono\", Menlo, Consolas, \"Liberation Mono\", monospace',\n lineHeight: '1.6',\n },\n messageCell: {\n maxWidth: 480,\n whiteSpace: 'normal' as const,\n wordBreak: 'break-word' as const,\n fontSize: '12px',\n fontFamily:\n 'ui-monospace, SFMono-Regular, \"SF Mono\", Menlo, Consolas, \"Liberation Mono\", monospace',\n lineHeight: '1.6',\n },\n}));\n\ninterface WorkflowRunEventsProps {\n runName: string;\n /** Explicit namespace override; falls back to the NamespaceContext value. */\n namespaceName?: string;\n}\n\nexport const WorkflowRunEvents = ({\n runName,\n namespaceName: namespaceNameProp,\n}: WorkflowRunEventsProps) => {\n const classes = useStyles();\n const client = useApi(genericWorkflowsClientApiRef);\n const contextNamespace = useSelectedNamespace();\n const namespaceName = namespaceNameProp ?? contextNamespace;\n\n const [statusState, setStatusState] =\n useState<WorkflowRunStatusResponse | null>(null);\n const [statusLoading, setStatusLoading] = useState(false);\n const [statusError, setStatusError] = useState<string | null>(null);\n\n const [activeStepName, setActiveStepName] = useState<string | null>(null);\n const [eventsByStep, setEventsByStep] = useState<\n Record<string, WorkflowRunEventEntry[]>\n >({});\n const [eventsLoading, setEventsLoading] = useState(false);\n const [eventsError, setEventsError] = useState<string | null>(null);\n\n const terminalStatuses = useMemo(\n () => ['completed', 'failed', 'succeeded', 'error'],\n [],\n );\n\n const isTerminalStatus = (status?: string) =>\n status ? terminalStatuses.includes(status.toLowerCase()) : false;\n\n // Fetch workflow run status with polling\n useEffect(() => {\n let cancelled = false;\n let intervalId: number | undefined;\n\n const fetchStatus = async () => {\n try {\n if (!cancelled) {\n setStatusLoading(true);\n setStatusError(null);\n }\n\n const data = await client.getWorkflowRunStatus(namespaceName, runName);\n\n if (cancelled) return;\n\n setStatusState(data);\n\n // Auto-select initial step if none selected yet\n if (data.steps && data.steps.length > 0) {\n setActiveStepName(prev => {\n if (prev) return prev;\n const runningStep = data.steps!.find(\n s => s.phase?.toLowerCase() === 'running',\n );\n const defaultStep =\n isTerminalStatus(data.status) || !runningStep\n ? data.steps![data.steps!.length - 1]\n : runningStep;\n return defaultStep?.name ?? null;\n });\n }\n\n if (isTerminalStatus(data.status) && intervalId !== undefined) {\n window.clearInterval(intervalId);\n intervalId = undefined;\n }\n } catch (err) {\n if (cancelled) return;\n setStatusError(\n err instanceof Error ? err.message : 'Failed to fetch run status',\n );\n } finally {\n if (!cancelled) setStatusLoading(false);\n }\n };\n\n fetchStatus();\n intervalId = window.setInterval(fetchStatus, 10_000);\n\n return () => {\n cancelled = true;\n if (intervalId !== undefined) window.clearInterval(intervalId);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [client, namespaceName, runName]);\n\n // Fetch events for the active step\n useEffect(() => {\n if (!statusState?.steps || !activeStepName) return;\n\n let cancelled = false;\n let intervalId: number | undefined;\n\n const activeStep: WorkflowStepStatus | undefined = statusState.steps.find(\n step => step.name === activeStepName,\n );\n const isRunningStep =\n activeStep?.phase?.toLowerCase() === 'running' &&\n !isTerminalStatus(statusState.status);\n\n const fetchEvents = async () => {\n try {\n if (!cancelled) {\n setEventsLoading(true);\n setEventsError(null);\n }\n\n const entries = await client.getWorkflowRunEvents(\n namespaceName,\n runName,\n activeStepName ?? undefined,\n );\n\n if (cancelled) return;\n\n setEventsByStep(prev => ({ ...prev, [activeStepName]: entries }));\n } catch (err) {\n if (cancelled) return;\n setEventsError(\n err instanceof Error ? err.message : 'Failed to fetch events',\n );\n } finally {\n if (!cancelled) setEventsLoading(false);\n }\n };\n\n fetchEvents();\n\n if (isRunningStep) {\n intervalId = window.setInterval(fetchEvents, 10_000);\n }\n\n // eslint-disable-next-line consistent-return\n return () => {\n cancelled = true;\n if (intervalId !== undefined) window.clearInterval(intervalId);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n client,\n namespaceName,\n runName,\n activeStepName,\n statusState?.status,\n statusState?.steps,\n ]);\n\n const handleStepChange = (stepName: string) => {\n setActiveStepName(prev => (prev === stepName ? null : stepName));\n };\n\n if (statusLoading && !statusState) {\n return (\n <Box className={classes.loadingContainer}>\n <CircularProgress size={24} />\n <Typography variant=\"body2\" color=\"textSecondary\">\n Loading workflow run status...\n </Typography>\n </Box>\n );\n }\n\n if (statusError) {\n return <Alert severity=\"error\">{statusError}</Alert>;\n }\n\n if (!statusState || !statusState.steps || statusState.steps.length === 0) {\n return (\n <Typography variant=\"body2\" color=\"textSecondary\">\n No steps available for this workflow run\n </Typography>\n );\n }\n\n const activeEvents: WorkflowRunEventEntry[] =\n (activeStepName && eventsByStep[activeStepName]) || [];\n\n const formatTimestamp = (timestamp: string) => {\n try {\n return new Date(timestamp).toLocaleString();\n } catch {\n return timestamp;\n }\n };\n\n return (\n <Box>\n <Box className={classes.stepsContainer}>\n {statusState.steps.map(step => (\n <Accordion\n key={step.name}\n expanded={activeStepName === step.name}\n onChange={() => handleStepChange(step.name)}\n className={classes.stepAccordion}\n >\n <AccordionSummary expandIcon={<ExpandMoreIcon />}>\n <Box className={classes.stepHeader}>\n <Typography\n variant=\"body2\"\n className={classes.stepTitle}\n color=\"textPrimary\"\n >\n {step.name}\n </Typography>\n <Box className={classes.stepStatusChip}>\n <WorkflowRunStatusChip status={step.phase} />\n </Box>\n </Box>\n </AccordionSummary>\n <AccordionDetails>\n {activeStepName === step.name ? (\n <Box className={classes.eventsContainer}>\n {eventsLoading && activeEvents.length === 0 && (\n <Box className={classes.inlineLoadingContainer}>\n <CircularProgress size={18} />\n <Typography variant=\"body2\" color=\"textSecondary\">\n Loading events...\n </Typography>\n </Box>\n )}\n\n {eventsError && <Alert severity=\"error\">{eventsError}</Alert>}\n\n {!eventsLoading &&\n !eventsError &&\n activeEvents.length === 0 && (\n <Typography\n variant=\"body2\"\n className={classes.noEventsText}\n >\n No events available for this step\n </Typography>\n )}\n\n {activeEvents.length > 0 && (\n <Table size=\"small\">\n <TableHead>\n <TableRow>\n <TableCell className={classes.tableHeaderCell}>\n Type\n </TableCell>\n <TableCell className={classes.tableHeaderCell}>\n Reason\n </TableCell>\n <TableCell className={classes.tableHeaderCell}>\n Message\n </TableCell>\n <TableCell className={classes.tableHeaderCell}>\n Last Seen\n </TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {activeEvents.map((event, index) => (\n <TableRow key={`${event.timestamp}-${index}`}>\n <TableCell className={classes.tableCell}>\n {event.type}\n </TableCell>\n <TableCell className={classes.tableCell}>\n {event.reason}\n </TableCell>\n <TableCell className={classes.messageCell}>\n {event.message}\n </TableCell>\n <TableCell className={classes.tableCell}>\n {formatTimestamp(event.timestamp)}\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n )}\n </Box>\n ) : (\n <Typography variant=\"body2\" className={classes.noEventsText}>\n Expand this step to view events.\n </Typography>\n )}\n </AccordionDetails>\n </Accordion>\n ))}\n </Box>\n </Box>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"WorkflowRunEvents.esm.js","sources":["../../../src/components/WorkflowRunEvents/WorkflowRunEvents.tsx"],"sourcesContent":["import { useEffect, useMemo, useState } from 'react';\nimport {\n Accordion,\n AccordionDetails,\n AccordionSummary,\n Box,\n CircularProgress,\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableRow,\n Typography,\n} from '@material-ui/core';\nimport { makeStyles } from '@material-ui/core/styles';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport { Alert } from '@material-ui/lab';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { genericWorkflowsClientApiRef } from '../../api';\nimport { useSelectedNamespace } from '../../context';\nimport { WorkflowRunStatusChip } from '../WorkflowRunStatusChip';\nimport type {\n WorkflowRunStatusResponse,\n WorkflowStepStatus,\n WorkflowRunEventEntry,\n} from '../../types';\n\nconst useStyles = makeStyles(theme => ({\n stepsContainer: {\n display: 'flex',\n flexDirection: 'column',\n gap: theme.spacing(1.5),\n },\n stepAccordion: {\n borderRadius: theme.shape.borderRadius,\n border: `1px solid ${theme.palette.divider}`,\n '&:before': {\n display: 'none',\n },\n },\n stepHeader: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n width: '100%',\n },\n stepTitle: {\n fontWeight: 500,\n },\n stepStatusChip: {\n marginLeft: theme.spacing(1),\n },\n eventsContainer: {\n flex: 'auto',\n backgroundColor: theme.palette.type === 'dark' ? '#1e1e1e' : '#f5f5f5',\n minHeight: '200px',\n overflow: 'auto',\n border: `1px solid ${theme.palette.divider}`,\n borderRadius: theme.shape.borderRadius,\n padding: theme.spacing(2),\n },\n noEventsText: {\n fontSize: '12px',\n color: theme.palette.text.secondary,\n },\n loadingContainer: {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n height: '200px',\n gap: theme.spacing(1),\n },\n inlineLoadingContainer: {\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(1),\n padding: theme.spacing(1, 0),\n },\n tableHeaderCell: {\n fontWeight: 500,\n whiteSpace: 'nowrap' as const,\n fontSize: '12px',\n },\n tableCell: {\n fontSize: '12px',\n fontFamily:\n 'ui-monospace, SFMono-Regular, \"SF Mono\", Menlo, Consolas, \"Liberation Mono\", monospace',\n lineHeight: '1.6',\n },\n messageCell: {\n maxWidth: 480,\n whiteSpace: 'normal' as const,\n wordBreak: 'break-word' as const,\n fontSize: '12px',\n fontFamily:\n 'ui-monospace, SFMono-Regular, \"SF Mono\", Menlo, Consolas, \"Liberation Mono\", monospace',\n lineHeight: '1.6',\n },\n}));\n\ninterface WorkflowRunEventsProps {\n runName: string;\n /** Explicit namespace override; falls back to the NamespaceContext value. */\n namespaceName?: string;\n}\n\nexport const WorkflowRunEvents = ({\n runName,\n namespaceName: namespaceNameProp,\n}: WorkflowRunEventsProps) => {\n const classes = useStyles();\n const client = useApi(genericWorkflowsClientApiRef);\n const contextNamespace = useSelectedNamespace();\n const namespaceName = namespaceNameProp ?? contextNamespace;\n\n const [statusState, setStatusState] =\n useState<WorkflowRunStatusResponse | null>(null);\n const [statusLoading, setStatusLoading] = useState(false);\n const [statusError, setStatusError] = useState<string | null>(null);\n\n const [activeStepName, setActiveStepName] = useState<string | null>(null);\n const [eventsByStep, setEventsByStep] = useState<\n Record<string, WorkflowRunEventEntry[]>\n >({});\n const [eventsLoading, setEventsLoading] = useState(false);\n const [eventsError, setEventsError] = useState<string | null>(null);\n\n const terminalStatuses = useMemo(\n () => ['completed', 'failed', 'succeeded', 'error'],\n [],\n );\n\n const isTerminalStatus = (status?: string) =>\n status ? terminalStatuses.includes(status.toLowerCase()) : false;\n\n // Fetch workflow run status with polling\n useEffect(() => {\n let cancelled = false;\n let intervalId: number | undefined;\n\n const fetchStatus = async () => {\n try {\n if (!cancelled) {\n setStatusLoading(true);\n setStatusError(null);\n }\n\n const data = await client.getWorkflowRunStatus(namespaceName, runName);\n\n if (cancelled) return;\n\n setStatusState(data);\n\n // Auto-select initial step if none selected yet\n if (data.steps && data.steps.length > 0) {\n setActiveStepName(prev => {\n if (prev) return prev;\n const runningStep = data.steps!.find(\n s => s.phase?.toLowerCase() === 'running',\n );\n const defaultStep =\n isTerminalStatus(data.status) || !runningStep\n ? data.steps![data.steps!.length - 1]\n : runningStep;\n return defaultStep?.name ?? null;\n });\n }\n\n if (isTerminalStatus(data.status) && intervalId !== undefined) {\n window.clearInterval(intervalId);\n intervalId = undefined;\n }\n } catch (err) {\n if (cancelled) return;\n setStatusError(\n err instanceof Error ? err.message : 'Failed to fetch run status',\n );\n } finally {\n if (!cancelled) setStatusLoading(false);\n }\n };\n\n fetchStatus();\n intervalId = window.setInterval(fetchStatus, 10_000);\n\n return () => {\n cancelled = true;\n if (intervalId !== undefined) window.clearInterval(intervalId);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [client, namespaceName, runName]);\n\n // Fetch events for the active step\n useEffect(() => {\n if (!statusState?.steps || !activeStepName) return;\n\n let cancelled = false;\n let intervalId: number | undefined;\n\n const activeStep: WorkflowStepStatus | undefined = statusState.steps.find(\n step => step.name === activeStepName,\n );\n const isRunningStep =\n activeStep?.phase?.toLowerCase() === 'running' &&\n !isTerminalStatus(statusState.status);\n\n const fetchEvents = async () => {\n try {\n if (!cancelled) {\n setEventsLoading(true);\n setEventsError(null);\n }\n\n const entries = await client.getWorkflowRunEvents(\n namespaceName,\n runName,\n activeStepName ?? undefined,\n );\n\n if (cancelled) return;\n\n setEventsByStep(prev => ({ ...prev, [activeStepName]: entries }));\n } catch (err) {\n if (cancelled) return;\n setEventsError(\n err instanceof Error ? err.message : 'Failed to fetch events',\n );\n } finally {\n if (!cancelled) setEventsLoading(false);\n }\n };\n\n fetchEvents();\n\n if (isRunningStep) {\n intervalId = window.setInterval(fetchEvents, 10_000);\n }\n\n // eslint-disable-next-line consistent-return\n return () => {\n cancelled = true;\n if (intervalId !== undefined) window.clearInterval(intervalId);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n client,\n namespaceName,\n runName,\n activeStepName,\n statusState?.status,\n statusState?.steps,\n ]);\n\n const handleStepChange = (stepName: string) => {\n setActiveStepName(prev => (prev === stepName ? null : stepName));\n };\n\n if (statusLoading && !statusState) {\n return (\n <Box className={classes.loadingContainer}>\n <CircularProgress size={24} />\n <Typography variant=\"body2\" color=\"textSecondary\">\n Loading workflow run status...\n </Typography>\n </Box>\n );\n }\n\n if (statusError) {\n return <Alert severity=\"error\">{statusError}</Alert>;\n }\n\n if (!statusState || !statusState.steps || statusState.steps.length === 0) {\n return (\n <Typography variant=\"body2\" color=\"textSecondary\">\n No steps available for this workflow run\n </Typography>\n );\n }\n\n const activeEvents: WorkflowRunEventEntry[] =\n (activeStepName && eventsByStep[activeStepName]) || [];\n\n const formatTimestamp = (timestamp: string) => {\n try {\n return new Date(timestamp).toLocaleString();\n } catch {\n return timestamp;\n }\n };\n\n return (\n <Box>\n <Box className={classes.stepsContainer}>\n {statusState.steps.map(step => (\n <Accordion\n key={step.name}\n expanded={activeStepName === step.name}\n onChange={() => handleStepChange(step.name)}\n className={classes.stepAccordion}\n >\n <AccordionSummary expandIcon={<ExpandMoreIcon />}>\n <Box className={classes.stepHeader}>\n <Typography\n variant=\"body2\"\n className={classes.stepTitle}\n color=\"textPrimary\"\n >\n {step.name}\n </Typography>\n <Box className={classes.stepStatusChip}>\n <WorkflowRunStatusChip status={step.phase} />\n </Box>\n </Box>\n </AccordionSummary>\n <AccordionDetails>\n {activeStepName === step.name ? (\n <Box className={classes.eventsContainer}>\n {eventsLoading && activeEvents.length === 0 && (\n <Box className={classes.inlineLoadingContainer}>\n <CircularProgress size={18} />\n <Typography variant=\"body2\" color=\"textSecondary\">\n Loading events...\n </Typography>\n </Box>\n )}\n\n {eventsError && <Alert severity=\"error\">{eventsError}</Alert>}\n\n {!eventsLoading &&\n !eventsError &&\n activeEvents.length === 0 && (\n <Typography\n variant=\"body2\"\n className={classes.noEventsText}\n >\n No events available for this step\n </Typography>\n )}\n\n {activeEvents.length > 0 && (\n <Table size=\"small\">\n <TableHead>\n <TableRow>\n <TableCell\n scope=\"col\"\n className={classes.tableHeaderCell}\n >\n Type\n </TableCell>\n <TableCell\n scope=\"col\"\n className={classes.tableHeaderCell}\n >\n Reason\n </TableCell>\n <TableCell\n scope=\"col\"\n className={classes.tableHeaderCell}\n >\n Message\n </TableCell>\n <TableCell\n scope=\"col\"\n className={classes.tableHeaderCell}\n >\n Last Seen\n </TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {activeEvents.map((event, index) => (\n <TableRow key={`${event.timestamp}-${index}`}>\n <TableCell className={classes.tableCell}>\n {event.type}\n </TableCell>\n <TableCell className={classes.tableCell}>\n {event.reason}\n </TableCell>\n <TableCell className={classes.messageCell}>\n {event.message}\n </TableCell>\n <TableCell className={classes.tableCell}>\n {formatTimestamp(event.timestamp)}\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n )}\n </Box>\n ) : (\n <Typography variant=\"body2\" className={classes.noEventsText}>\n Expand this step to view events.\n </Typography>\n )}\n </AccordionDetails>\n </Accordion>\n ))}\n </Box>\n </Box>\n );\n};\n"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
2
|
import * as _backstage_core_plugin_api from '@backstage/core-plugin-api';
|
|
3
3
|
import { DiscoveryApi, FetchApi } from '@backstage/core-plugin-api';
|
|
4
|
+
import * as _backstage_frontend_plugin_api from '@backstage/frontend-plugin-api';
|
|
4
5
|
import { ReactNode } from 'react';
|
|
5
6
|
|
|
6
7
|
/**
|
|
@@ -152,7 +153,7 @@ interface GenericWorkflowsClientApi {
|
|
|
152
153
|
* const client = useApi(genericWorkflowsClientApiRef);
|
|
153
154
|
* ```
|
|
154
155
|
*/
|
|
155
|
-
declare const genericWorkflowsClientApiRef:
|
|
156
|
+
declare const genericWorkflowsClientApiRef: _backstage_frontend_plugin_api.ApiRef<GenericWorkflowsClientApi>;
|
|
156
157
|
|
|
157
158
|
declare class GenericWorkflowsClient implements GenericWorkflowsClientApi {
|
|
158
159
|
private readonly discovery;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openchoreo/backstage-plugin-openchoreo-workflows",
|
|
3
|
-
"version": "1.1
|
|
3
|
+
"version": "1.2.0-m.1",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"main": "dist/index.esm.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -31,16 +31,16 @@
|
|
|
31
31
|
"postpack": "backstage-cli package postpack"
|
|
32
32
|
},
|
|
33
33
|
"dependencies": {
|
|
34
|
-
"@backstage/core-components": "^0.18.
|
|
35
|
-
"@backstage/core-plugin-api": "^1.
|
|
36
|
-
"@backstage/plugin-catalog-react": "^
|
|
37
|
-
"@backstage/theme": "^0.
|
|
34
|
+
"@backstage/core-components": "^0.18.10",
|
|
35
|
+
"@backstage/core-plugin-api": "^1.12.6",
|
|
36
|
+
"@backstage/plugin-catalog-react": "^3.0.0",
|
|
37
|
+
"@backstage/theme": "^0.7.3",
|
|
38
38
|
"@material-ui/core": "4.12.4",
|
|
39
39
|
"@material-ui/icons": "4.11.3",
|
|
40
40
|
"@material-ui/lab": "4.0.0-alpha.61",
|
|
41
|
-
"@openchoreo/backstage-design-system": "^1.1
|
|
42
|
-
"@openchoreo/backstage-plugin": "^1.1
|
|
43
|
-
"@openchoreo/backstage-plugin-react": "^1.1
|
|
41
|
+
"@openchoreo/backstage-design-system": "^1.2.0-m.1",
|
|
42
|
+
"@openchoreo/backstage-plugin": "^1.2.0-m.1",
|
|
43
|
+
"@openchoreo/backstage-plugin-react": "^1.2.0-m.1",
|
|
44
44
|
"@rjsf/core": "5.24.13",
|
|
45
45
|
"@rjsf/material-ui": "5.24.13",
|
|
46
46
|
"@rjsf/utils": "5.24.13",
|
|
@@ -53,10 +53,10 @@
|
|
|
53
53
|
"react-router-dom": "^6.0.0"
|
|
54
54
|
},
|
|
55
55
|
"devDependencies": {
|
|
56
|
-
"@backstage/cli": "^0.
|
|
57
|
-
"@backstage/core-app-api": "^1.
|
|
58
|
-
"@backstage/dev-utils": "^1.1.
|
|
59
|
-
"@backstage/test-utils": "^1.7.
|
|
56
|
+
"@backstage/cli": "^0.36.2",
|
|
57
|
+
"@backstage/core-app-api": "^1.20.1",
|
|
58
|
+
"@backstage/dev-utils": "^1.1.23",
|
|
59
|
+
"@backstage/test-utils": "^1.7.18",
|
|
60
60
|
"@testing-library/jest-dom": "6.9.1",
|
|
61
61
|
"@testing-library/react": "14.3.1",
|
|
62
62
|
"@testing-library/user-event": "14.6.1",
|