@openchoreo/backstage-plugin-openchoreo-workflows-backend 1.1.6 → 1.2.0-rc.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 CHANGED
@@ -1,5 +1,27 @@
1
1
  # @openchoreo/backstage-plugin-openchoreo-workflows-backend
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
+ - 0b71ed9: fetch all pages when listing workflows
19
+ - 7e84bb5: fetch all pages when listing workflow runs
20
+ - Updated dependencies [529f13c]
21
+ - Updated dependencies [8d8bd80]
22
+ - @openchoreo/openchoreo-client-node@1.2.0-next.0
23
+ - @openchoreo/openchoreo-auth@1.2.0-next.0
24
+
3
25
  ## 1.1.1
4
26
 
5
27
  - Compatible release for OpenChoreo 1.1.1.
@@ -57,16 +57,18 @@ class GenericWorkflowService {
57
57
  token,
58
58
  logger: this.logger
59
59
  });
60
- const { data, error, response } = await client.GET(
61
- "/api/v1/namespaces/{namespaceName}/workflows",
62
- {
60
+ const rawItems = await openchoreoClientNode.fetchAllPages(
61
+ (cursor) => client.GET("/api/v1/namespaces/{namespaceName}/workflows", {
63
62
  params: {
64
- path: { namespaceName }
63
+ path: { namespaceName },
64
+ query: { limit: 100, cursor }
65
65
  }
66
- }
66
+ }).then((res) => {
67
+ openchoreoClientNode.assertApiResponse(res, "fetch workflows");
68
+ return res.data;
69
+ })
67
70
  );
68
- openchoreoClientNode.assertApiResponse({ data, error, response }, "fetch workflows");
69
- const items = (data?.items || []).map((wf) => {
71
+ const items = rawItems.map((wf) => {
70
72
  const name = wf.metadata?.name ?? "";
71
73
  const isCI = wf.metadata?.labels?.[backstagePluginCommon.CHOREO_LABELS.WORKFLOW_TYPE] === "component";
72
74
  return {
@@ -81,8 +83,7 @@ class GenericWorkflowService {
81
83
  `Successfully fetched ${items.length} generic workflows for namespace: ${namespaceName}`
82
84
  );
83
85
  return {
84
- items,
85
- pagination: data?.pagination
86
+ items
86
87
  };
87
88
  } catch (error) {
88
89
  this.logger.error(
@@ -173,19 +174,18 @@ class GenericWorkflowService {
173
174
  token,
174
175
  logger: this.logger
175
176
  });
176
- const { data, error, response } = await client.GET(
177
- "/api/v1/namespaces/{namespaceName}/workflowruns",
178
- {
177
+ const rawItems = await openchoreoClientNode.fetchAllPages(
178
+ (cursor) => client.GET("/api/v1/namespaces/{namespaceName}/workflowruns", {
179
179
  params: {
180
- path: { namespaceName }
180
+ path: { namespaceName },
181
+ query: { limit: 100, cursor }
181
182
  }
182
- }
183
+ }).then((res) => {
184
+ openchoreoClientNode.assertApiResponse(res, "fetch workflow runs");
185
+ return res.data;
186
+ })
183
187
  );
184
- openchoreoClientNode.assertApiResponse({ data, error, response }, "fetch workflow runs");
185
- const rawItems = data?.items || [];
186
- let filtered = workflowName ? rawItems.filter(
187
- (run) => run.spec?.workflow?.name === workflowName || run.workflowName === workflowName
188
- ) : rawItems;
188
+ let filtered = workflowName ? rawItems.filter((run) => run.spec?.workflow?.name === workflowName) : rawItems;
189
189
  if (projectName) {
190
190
  filtered = filtered.filter(
191
191
  (run) => run.metadata?.labels?.[backstagePluginCommon.CHOREO_LABELS.WORKFLOW_PROJECT] === projectName
@@ -200,10 +200,7 @@ class GenericWorkflowService {
200
200
  this.logger.debug(
201
201
  `Successfully fetched ${items.length} workflow runs for namespace: ${namespaceName}${workflowName ? `, workflow: ${workflowName}` : ""}`
202
202
  );
203
- return {
204
- items,
205
- pagination: data?.pagination
206
- };
203
+ return { items };
207
204
  } catch (error) {
208
205
  this.logger.error(
209
206
  `Failed to fetch workflow runs for namespace ${namespaceName}: ${error}`
@@ -1 +1 @@
1
- {"version":3,"file":"GenericWorkflowService.cjs.js","sources":["../../src/services/GenericWorkflowService.ts"],"sourcesContent":["import { LoggerService } from '@backstage/backend-plugin-api';\nimport {\n createOpenChoreoApiClient,\n createObservabilityClientWithUrl,\n assertApiResponse,\n ObservabilityUrlResolver,\n} from '@openchoreo/openchoreo-client-node';\nimport { CHOREO_LABELS } from '@openchoreo/backstage-plugin-common';\nimport {\n Workflow,\n WorkflowRun,\n CreateWorkflowRunRequest,\n PaginatedResponse,\n LogsResponse,\n WorkflowRunStatusResponse,\n WorkflowRunEventEntry,\n} from '../types';\n\n/**\n * Derive a display status from a raw K8s-style WorkflowRun object.\n *\n * Checks conditions in priority order, matching the Go-side\n * getComponentWorkflowStatus logic:\n * 1. WorkloadUpdated + True → Completed\n * 2. WorkflowFailed + True → Failed\n * 3. WorkflowSucceeded + True → Succeeded\n * 4. WorkflowRunning + True → Running\n * 5. Default → Pending\n */\nfunction deriveWorkflowRunStatus(run: any): string {\n const conditions = (run.status?.conditions ?? []) as any[];\n\n if (conditions.length === 0) {\n return 'Pending';\n }\n\n if (\n conditions.some(c => c.type === 'WorkloadUpdated' && c.status === 'True')\n ) {\n return 'Completed';\n }\n\n if (\n conditions.some(c => c.type === 'WorkflowFailed' && c.status === 'True')\n ) {\n return 'Failed';\n }\n\n if (\n conditions.some(c => c.type === 'WorkflowSucceeded' && c.status === 'True')\n ) {\n return 'Succeeded';\n }\n\n if (\n conditions.some(c => c.type === 'WorkflowRunning' && c.status === 'True')\n ) {\n return 'Running';\n }\n\n return 'Pending';\n}\n\n/**\n * Transform a raw K8s WorkflowRun object into the local flat WorkflowRun shape.\n */\nfunction transformWorkflowRun(run: any): import('../types').WorkflowRun {\n return {\n name: run.metadata?.name ?? '',\n uuid: run.metadata?.uid,\n workflowName: run.spec?.workflow?.name ?? '',\n namespaceName: run.metadata?.namespace ?? '',\n status: deriveWorkflowRunStatus(run),\n parameters: run.spec?.workflow?.parameters,\n createdAt: run.metadata?.creationTimestamp,\n finishedAt: run.status?.completedAt,\n };\n}\n\n/**\n * Service for managing namespace-level generic workflows\n * Handles workflow templates, runs, and schemas\n *\n * After the Organization CRD removal, the hierarchy is now:\n * Namespace → Project → Component\n */\nconst TERMINAL_STATUSES = new Set(['Completed', 'Failed', 'Succeeded']);\n\nexport class GenericWorkflowService {\n private logger: LoggerService;\n private baseUrl: string;\n private readonly resolver: ObservabilityUrlResolver;\n\n constructor(logger: LoggerService, baseUrl: string) {\n this.logger = logger;\n this.baseUrl = baseUrl;\n this.resolver = new ObservabilityUrlResolver({ baseUrl, logger });\n }\n\n /**\n * List all generic workflow templates for a namespace\n */\n async listWorkflows(\n namespaceName: string,\n token?: string,\n ): Promise<PaginatedResponse<Workflow>> {\n this.logger.debug(\n `Fetching generic workflows for namespace: ${namespaceName}`,\n );\n\n try {\n const client = createOpenChoreoApiClient({\n baseUrl: this.baseUrl,\n token,\n logger: this.logger,\n });\n\n const { data, error, response } = await client.GET(\n '/api/v1/namespaces/{namespaceName}/workflows',\n {\n params: {\n path: { namespaceName },\n },\n },\n );\n\n assertApiResponse({ data, error, response }, 'fetch workflows');\n\n // Map K8s-style Workflow to the local flat Workflow interface\n const items: Workflow[] = ((data as any)?.items || []).map((wf: any) => {\n const name: string = wf.metadata?.name ?? '';\n const isCI =\n wf.metadata?.labels?.[CHOREO_LABELS.WORKFLOW_TYPE] === 'component';\n return {\n name,\n displayName:\n wf.metadata?.annotations?.['openchoreo.dev/display-name'] ?? name,\n description: wf.metadata?.annotations?.['openchoreo.dev/description'],\n createdAt: wf.metadata?.creationTimestamp,\n type: isCI ? 'CI' : 'Generic',\n };\n });\n\n this.logger.debug(\n `Successfully fetched ${items.length} generic workflows for namespace: ${namespaceName}`,\n );\n\n return {\n items,\n pagination: (data as any)?.pagination as\n | { nextCursor?: string }\n | undefined,\n };\n } catch (error) {\n this.logger.error(\n `Failed to fetch generic workflows for namespace ${namespaceName}: ${error}`,\n );\n throw error;\n }\n }\n\n /**\n * Get the JSONSchema for a workflow's parameters\n */\n async getWorkflowSchema(\n namespaceName: string,\n workflowName: string,\n token?: string,\n ): Promise<unknown> {\n this.logger.debug(\n `Fetching schema for workflow: ${workflowName} in namespace: ${namespaceName}`,\n );\n\n try {\n const client = createOpenChoreoApiClient({\n baseUrl: this.baseUrl,\n token,\n logger: this.logger,\n });\n\n const { data, error, response } = await client.GET(\n '/api/v1/namespaces/{namespaceName}/workflows/{workflowName}/schema',\n {\n params: {\n path: { namespaceName, workflowName },\n },\n },\n );\n\n assertApiResponse({ data, error, response }, 'fetch workflow schema');\n\n this.logger.debug(\n `Successfully fetched schema for workflow: ${workflowName}`,\n );\n\n return data;\n } catch (error) {\n this.logger.error(\n `Failed to fetch schema for workflow ${workflowName} in namespace ${namespaceName}: ${error}`,\n );\n throw error;\n }\n }\n\n /**\n * Get the JSONSchema for a cluster-scoped workflow's parameters\n */\n async getClusterWorkflowSchema(\n clusterWorkflowName: string,\n token?: string,\n ): Promise<unknown> {\n this.logger.debug(\n `Fetching schema for cluster workflow: ${clusterWorkflowName}`,\n );\n\n try {\n const client = createOpenChoreoApiClient({\n baseUrl: this.baseUrl,\n token,\n logger: this.logger,\n });\n\n const { data, error, response } = await client.GET(\n '/api/v1/clusterworkflows/{clusterWorkflowName}/schema' as any,\n {\n params: {\n path: { clusterWorkflowName },\n },\n } as any,\n );\n\n assertApiResponse(\n { data, error, response },\n 'fetch cluster workflow schema',\n );\n\n this.logger.debug(\n `Successfully fetched schema for cluster workflow: ${clusterWorkflowName}`,\n );\n\n return data;\n } catch (error) {\n this.logger.error(\n `Failed to fetch schema for cluster workflow ${clusterWorkflowName}: ${error}`,\n );\n throw error;\n }\n }\n\n /**\n * List workflow runs for a namespace, optionally filtered by workflow name\n */\n async listWorkflowRuns(\n namespaceName: string,\n workflowName?: string,\n token?: string,\n projectName?: string,\n componentName?: string,\n ): Promise<PaginatedResponse<WorkflowRun>> {\n this.logger.debug(\n `Fetching workflow runs for namespace: ${namespaceName}${\n workflowName ? `, workflow: ${workflowName}` : ''\n }`,\n );\n\n try {\n const client = createOpenChoreoApiClient({\n baseUrl: this.baseUrl,\n token,\n logger: this.logger,\n });\n\n const { data, error, response } = await client.GET(\n '/api/v1/namespaces/{namespaceName}/workflowruns',\n {\n params: {\n path: { namespaceName },\n },\n },\n );\n\n assertApiResponse({ data, error, response }, 'fetch workflow runs');\n\n const rawItems = ((data as any)?.items || []) as any[];\n\n // Filter by workflowName before transforming (check both flat and K8s fields)\n // TODO: If upstream API supports filtering, pass workflowName as query param instead\n let filtered = workflowName\n ? rawItems.filter(\n run =>\n run.spec?.workflow?.name === workflowName ||\n run.workflowName === workflowName,\n )\n : rawItems;\n\n // Filter by project and component labels if provided\n if (projectName) {\n filtered = filtered.filter(\n run =>\n run.metadata?.labels?.[CHOREO_LABELS.WORKFLOW_PROJECT] ===\n projectName,\n );\n }\n if (componentName) {\n filtered = filtered.filter(\n run =>\n run.metadata?.labels?.[CHOREO_LABELS.WORKFLOW_COMPONENT] ===\n componentName,\n );\n }\n\n const items: WorkflowRun[] = filtered.map(transformWorkflowRun);\n\n this.logger.debug(\n `Successfully fetched ${\n items.length\n } workflow runs for namespace: ${namespaceName}${\n workflowName ? `, workflow: ${workflowName}` : ''\n }`,\n );\n\n return {\n items,\n pagination: (data as any)?.pagination as\n | { nextCursor?: string }\n | undefined,\n };\n } catch (error) {\n this.logger.error(\n `Failed to fetch workflow runs for namespace ${namespaceName}: ${error}`,\n );\n throw error;\n }\n }\n\n /**\n * List OpenChoreo namespaces (those labeled openchoreo.dev/control-plane=true).\n * Used to populate the namespace selector on the ClusterWorkflow runs page.\n */\n async listNamespaces(token?: string): Promise<string[]> {\n this.logger.debug('Fetching OpenChoreo namespaces');\n\n try {\n const client = createOpenChoreoApiClient({\n baseUrl: this.baseUrl,\n token,\n logger: this.logger,\n });\n\n const { data, error, response } = await client.GET('/api/v1/namespaces');\n\n assertApiResponse({ data, error, response }, 'fetch namespaces');\n\n const names: string[] = ((data as any)?.items || [])\n .map((ns: any) => ns.metadata?.name ?? '')\n .filter(Boolean);\n\n this.logger.debug(`Successfully fetched ${names.length} namespaces`);\n\n return names;\n } catch (error) {\n this.logger.error(`Failed to fetch namespaces: ${error}`);\n throw error;\n }\n }\n\n /**\n * Get details of a specific workflow run\n */\n async getWorkflowRun(\n namespaceName: string,\n runName: string,\n token?: string,\n ): Promise<WorkflowRun> {\n this.logger.debug(\n `Fetching workflow run: ${runName} in namespace: ${namespaceName}`,\n );\n\n try {\n const client = createOpenChoreoApiClient({\n baseUrl: this.baseUrl,\n token,\n logger: this.logger,\n });\n\n const { data, error, response } = await client.GET(\n '/api/v1/namespaces/{namespaceName}/workflowruns/{runName}',\n {\n params: {\n path: { namespaceName, runName },\n },\n },\n );\n\n assertApiResponse({ data, error, response }, 'fetch workflow run');\n\n this.logger.debug(`Successfully fetched workflow run: ${runName}`);\n\n return transformWorkflowRun(data);\n } catch (error) {\n this.logger.error(\n `Failed to fetch workflow run ${runName} in namespace ${namespaceName}: ${error}`,\n );\n throw error;\n }\n }\n\n /**\n * Create (trigger) a new workflow run\n */\n async createWorkflowRun(\n namespaceName: string,\n request: CreateWorkflowRunRequest,\n token?: string,\n ): Promise<WorkflowRun> {\n this.logger.info(\n `Creating workflow run for ${\n request.workflowKind === 'ClusterWorkflow'\n ? 'cluster workflow'\n : 'workflow'\n }: ${request.workflowName} in namespace: ${namespaceName}`,\n );\n\n try {\n const client = createOpenChoreoApiClient({\n baseUrl: this.baseUrl,\n token,\n logger: this.logger,\n });\n\n // The WorkflowRunConfig.kind field tells the server whether to look up a\n // namespace-scoped Workflow or a cluster-scoped ClusterWorkflow.\n // Default (omitted / 'Workflow') resolves a namespace-scoped Workflow;\n // 'ClusterWorkflow' resolves a cluster-scoped ClusterWorkflow.\n const { data, error, response } = await client.POST(\n '/api/v1/namespaces/{namespaceName}/workflowruns',\n {\n params: {\n path: { namespaceName },\n },\n body: {\n metadata: {\n name:\n request.workflowRunName?.trim() ||\n `${request.workflowName}-${Date.now()}`,\n ...(request.labels && { labels: request.labels }),\n ...(request.annotations && { annotations: request.annotations }),\n },\n spec: {\n workflow: {\n kind: request.workflowKind,\n name: request.workflowName,\n parameters: request.parameters,\n },\n },\n } as any,\n },\n );\n\n assertApiResponse({ data, error, response }, 'create workflow run');\n\n this.logger.debug(\n `Successfully created workflow run: ${(data as any).metadata?.name}`,\n );\n\n return transformWorkflowRun(data);\n } catch (error) {\n this.logger.error(\n `Failed to create workflow run for ${\n request.workflowKind === 'ClusterWorkflow'\n ? 'cluster workflow'\n : 'workflow'\n } ${request.workflowName} in namespace ${namespaceName}: ${error}`,\n );\n throw error;\n }\n }\n\n /**\n * Get logs for a specific workflow run.\n */\n async getWorkflowRunLogs(\n namespaceName: string,\n runName: string,\n task?: string,\n token?: string,\n ): Promise<LogsResponse> {\n this.logger.debug(\n `Fetching logs for workflow run: ${runName} in namespace: ${namespaceName}${\n task ? `, task: ${task}` : ''\n }`,\n );\n\n try {\n const client = createOpenChoreoApiClient({\n baseUrl: this.baseUrl,\n token,\n logger: this.logger,\n });\n\n const { data, error, response } = await client.GET(\n '/api/v1/namespaces/{namespaceName}/workflowruns/{runName}/logs',\n {\n params: {\n path: { namespaceName, runName },\n query: { ...(task ? { task } : {}) },\n },\n },\n );\n\n if (!error && response.ok && Array.isArray(data) && data.length > 0) {\n const logs = data.map((entry: any) => ({\n timestamp: entry.timestamp ?? '',\n log: entry.log,\n }));\n this.logger.debug(\n `Fetched ${logs.length} live log entries for run: ${runName}`,\n );\n return { logs, totalCount: logs.length };\n }\n\n const {\n data: runData,\n error: runError,\n response: runResponse,\n } = await client.GET(\n '/api/v1/namespaces/{namespaceName}/workflowruns/{runName}',\n { params: { path: { namespaceName, runName } } },\n );\n\n if (runError || !runResponse.ok || !runData) {\n return { logs: [], totalCount: 0 };\n }\n\n const runStatus = deriveWorkflowRunStatus(runData);\n if (!TERMINAL_STATUSES.has(runStatus)) {\n return { logs: [], totalCount: 0 };\n }\n\n let observerUrl: string | undefined;\n const projectName = (runData as any).metadata?.labels?.[\n CHOREO_LABELS.WORKFLOW_PROJECT\n ];\n try {\n if (projectName) {\n ({ observerUrl } = await this.resolver.resolveForBuild(\n namespaceName,\n projectName,\n token,\n ));\n } else {\n ({ observerUrl } = await this.resolver.resolveForEnvironment(\n namespaceName,\n 'development',\n token,\n ));\n }\n } catch (resolveErr) {\n this.logger.debug(\n `Could not resolve observer URL for run ${runName}: ${resolveErr}`,\n );\n return { logs: [], totalCount: 0 };\n }\n\n if (!observerUrl) {\n return { logs: [], totalCount: 0 };\n }\n\n const obsClient = createObservabilityClientWithUrl(\n observerUrl,\n token,\n this.logger,\n );\n const startTime = new Date(\n Date.now() - 30 * 24 * 60 * 60 * 1000,\n ).toISOString();\n const endTime = new Date().toISOString();\n\n this.logger.debug(\n `Querying observer logs for run ${runName}, namespace: ${namespaceName}`,\n );\n\n const {\n data: obsData,\n error: obsError,\n response: obsResponse,\n } = await obsClient.POST('/api/v1/logs/query', {\n body: {\n startTime,\n endTime,\n limit: 1000,\n sortOrder: 'asc',\n searchScope: {\n namespace: namespaceName,\n workflowRunName: runName,\n ...(task ? { taskName: task } : {}),\n },\n },\n });\n\n if (obsError || !obsResponse.ok) {\n this.logger.error(\n `Failed to fetch observer logs for run ${runName}: ${obsResponse.status} ${obsResponse.statusText}`,\n );\n return { logs: [], totalCount: 0 };\n }\n\n const obsLogs = ((obsData?.logs || []) as any[]).map((entry: any) => ({\n timestamp: entry.timestamp ?? '',\n log: entry.log,\n }));\n\n this.logger.debug(\n `Observer fetched ${obsLogs.length} log entries for run: ${runName}`,\n );\n\n return {\n logs: obsLogs,\n totalCount: obsData?.total ?? obsLogs.length,\n tookMs: obsData?.tookMs,\n };\n } catch (error: unknown) {\n this.logger.error(\n `Error fetching logs for workflow run ${runName} in namespace ${namespaceName}:`,\n error as Error,\n );\n throw error;\n }\n }\n\n /**\n * Get status (including steps) for a specific workflow run\n */\n async getWorkflowRunStatus(\n namespaceName: string,\n runName: string,\n token?: string,\n ): Promise<WorkflowRunStatusResponse> {\n this.logger.debug(\n `Fetching status for workflow run: ${runName} in namespace: ${namespaceName}`,\n );\n\n try {\n const client = createOpenChoreoApiClient({\n baseUrl: this.baseUrl,\n token,\n logger: this.logger,\n });\n\n const { data, error, response } = await client.GET(\n '/api/v1/namespaces/{namespaceName}/workflowruns/{runName}/status',\n {\n params: {\n path: { namespaceName, runName },\n },\n },\n );\n\n assertApiResponse({ data, error, response }, 'fetch workflow run status');\n\n this.logger.debug(\n `Successfully fetched status for workflow run: ${runName}`,\n );\n\n return data as WorkflowRunStatusResponse;\n } catch (error) {\n this.logger.error(\n `Failed to fetch status for workflow run ${runName} in namespace ${namespaceName}: ${error}`,\n );\n throw error;\n }\n }\n\n /**\n * Get Kubernetes events for a specific workflow run (optionally filtered by task)\n */\n async getWorkflowRunEvents(\n namespaceName: string,\n runName: string,\n task?: string,\n token?: string,\n ): Promise<WorkflowRunEventEntry[]> {\n this.logger.debug(\n `Fetching events for workflow run: ${runName} in namespace: ${namespaceName}${\n task ? `, task: ${task}` : ''\n }`,\n );\n\n try {\n const client = createOpenChoreoApiClient({\n baseUrl: this.baseUrl,\n token,\n logger: this.logger,\n });\n\n const { data, error, response } = await client.GET(\n '/api/v1/namespaces/{namespaceName}/workflowruns/{runName}/events',\n {\n params: {\n path: { namespaceName, runName },\n query: {\n ...(task ? { task } : {}),\n },\n },\n },\n );\n\n assertApiResponse({ data, error, response }, 'fetch workflow run events');\n\n if (!Array.isArray(data)) {\n return [];\n }\n\n const entries: WorkflowRunEventEntry[] = data.map((entry: any) => ({\n timestamp: entry.timestamp,\n type: entry.type,\n reason: entry.reason,\n message: entry.message,\n }));\n\n this.logger.debug(\n `Successfully fetched ${entries.length} events for workflow run: ${runName}`,\n );\n\n return entries;\n } catch (error) {\n this.logger.error(\n `Failed to fetch events for workflow run ${runName} in namespace ${namespaceName}: ${error}`,\n );\n throw error;\n }\n }\n}\n"],"names":["ObservabilityUrlResolver","createOpenChoreoApiClient","assertApiResponse","CHOREO_LABELS","createObservabilityClientWithUrl"],"mappings":"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"}
1
+ {"version":3,"file":"GenericWorkflowService.cjs.js","sources":["../../src/services/GenericWorkflowService.ts"],"sourcesContent":["import { LoggerService } from '@backstage/backend-plugin-api';\nimport {\n createOpenChoreoApiClient,\n createObservabilityClientWithUrl,\n assertApiResponse,\n fetchAllPages,\n ObservabilityUrlResolver,\n} from '@openchoreo/openchoreo-client-node';\nimport { CHOREO_LABELS } from '@openchoreo/backstage-plugin-common';\nimport {\n Workflow,\n WorkflowRun,\n CreateWorkflowRunRequest,\n PaginatedResponse,\n LogsResponse,\n WorkflowRunStatusResponse,\n WorkflowRunEventEntry,\n} from '../types';\n\n/**\n * Derive a display status from a raw K8s-style WorkflowRun object.\n *\n * Checks conditions in priority order, matching the Go-side\n * getComponentWorkflowStatus logic:\n * 1. WorkloadUpdated + True → Completed\n * 2. WorkflowFailed + True → Failed\n * 3. WorkflowSucceeded + True → Succeeded\n * 4. WorkflowRunning + True → Running\n * 5. Default → Pending\n */\nfunction deriveWorkflowRunStatus(run: any): string {\n const conditions = (run.status?.conditions ?? []) as any[];\n\n if (conditions.length === 0) {\n return 'Pending';\n }\n\n if (\n conditions.some(c => c.type === 'WorkloadUpdated' && c.status === 'True')\n ) {\n return 'Completed';\n }\n\n if (\n conditions.some(c => c.type === 'WorkflowFailed' && c.status === 'True')\n ) {\n return 'Failed';\n }\n\n if (\n conditions.some(c => c.type === 'WorkflowSucceeded' && c.status === 'True')\n ) {\n return 'Succeeded';\n }\n\n if (\n conditions.some(c => c.type === 'WorkflowRunning' && c.status === 'True')\n ) {\n return 'Running';\n }\n\n return 'Pending';\n}\n\n/**\n * Transform a raw K8s WorkflowRun object into the local flat WorkflowRun shape.\n */\nfunction transformWorkflowRun(run: any): import('../types').WorkflowRun {\n return {\n name: run.metadata?.name ?? '',\n uuid: run.metadata?.uid,\n workflowName: run.spec?.workflow?.name ?? '',\n namespaceName: run.metadata?.namespace ?? '',\n status: deriveWorkflowRunStatus(run),\n parameters: run.spec?.workflow?.parameters,\n createdAt: run.metadata?.creationTimestamp,\n finishedAt: run.status?.completedAt,\n };\n}\n\n/**\n * Service for managing namespace-level generic workflows\n * Handles workflow templates, runs, and schemas\n *\n * After the Organization CRD removal, the hierarchy is now:\n * Namespace → Project → Component\n */\nconst TERMINAL_STATUSES = new Set(['Completed', 'Failed', 'Succeeded']);\n\nexport class GenericWorkflowService {\n private logger: LoggerService;\n private baseUrl: string;\n private readonly resolver: ObservabilityUrlResolver;\n\n constructor(logger: LoggerService, baseUrl: string) {\n this.logger = logger;\n this.baseUrl = baseUrl;\n this.resolver = new ObservabilityUrlResolver({ baseUrl, logger });\n }\n\n /**\n * List all generic workflow templates for a namespace\n */\n async listWorkflows(\n namespaceName: string,\n token?: string,\n ): Promise<PaginatedResponse<Workflow>> {\n this.logger.debug(\n `Fetching generic workflows for namespace: ${namespaceName}`,\n );\n\n try {\n const client = createOpenChoreoApiClient({\n baseUrl: this.baseUrl,\n token,\n logger: this.logger,\n });\n\n const rawItems = await fetchAllPages(cursor =>\n client\n .GET('/api/v1/namespaces/{namespaceName}/workflows', {\n params: {\n path: { namespaceName },\n query: { limit: 100, cursor },\n },\n })\n .then(res => {\n assertApiResponse(res, 'fetch workflows');\n return res.data;\n }),\n );\n\n // Map K8s-style Workflow to the local flat Workflow interface\n const items: Workflow[] = rawItems.map((wf: any) => {\n const name: string = wf.metadata?.name ?? '';\n const isCI =\n wf.metadata?.labels?.[CHOREO_LABELS.WORKFLOW_TYPE] === 'component';\n return {\n name,\n displayName:\n wf.metadata?.annotations?.['openchoreo.dev/display-name'] ?? name,\n description: wf.metadata?.annotations?.['openchoreo.dev/description'],\n createdAt: wf.metadata?.creationTimestamp,\n type: isCI ? 'CI' : 'Generic',\n };\n });\n\n this.logger.debug(\n `Successfully fetched ${items.length} generic workflows for namespace: ${namespaceName}`,\n );\n\n return {\n items,\n };\n } catch (error) {\n this.logger.error(\n `Failed to fetch generic workflows for namespace ${namespaceName}: ${error}`,\n );\n throw error;\n }\n }\n\n /**\n * Get the JSONSchema for a workflow's parameters\n */\n async getWorkflowSchema(\n namespaceName: string,\n workflowName: string,\n token?: string,\n ): Promise<unknown> {\n this.logger.debug(\n `Fetching schema for workflow: ${workflowName} in namespace: ${namespaceName}`,\n );\n\n try {\n const client = createOpenChoreoApiClient({\n baseUrl: this.baseUrl,\n token,\n logger: this.logger,\n });\n\n const { data, error, response } = await client.GET(\n '/api/v1/namespaces/{namespaceName}/workflows/{workflowName}/schema',\n {\n params: {\n path: { namespaceName, workflowName },\n },\n },\n );\n\n assertApiResponse({ data, error, response }, 'fetch workflow schema');\n\n this.logger.debug(\n `Successfully fetched schema for workflow: ${workflowName}`,\n );\n\n return data;\n } catch (error) {\n this.logger.error(\n `Failed to fetch schema for workflow ${workflowName} in namespace ${namespaceName}: ${error}`,\n );\n throw error;\n }\n }\n\n /**\n * Get the JSONSchema for a cluster-scoped workflow's parameters\n */\n async getClusterWorkflowSchema(\n clusterWorkflowName: string,\n token?: string,\n ): Promise<unknown> {\n this.logger.debug(\n `Fetching schema for cluster workflow: ${clusterWorkflowName}`,\n );\n\n try {\n const client = createOpenChoreoApiClient({\n baseUrl: this.baseUrl,\n token,\n logger: this.logger,\n });\n\n const { data, error, response } = await client.GET(\n '/api/v1/clusterworkflows/{clusterWorkflowName}/schema' as any,\n {\n params: {\n path: { clusterWorkflowName },\n },\n } as any,\n );\n\n assertApiResponse(\n { data, error, response },\n 'fetch cluster workflow schema',\n );\n\n this.logger.debug(\n `Successfully fetched schema for cluster workflow: ${clusterWorkflowName}`,\n );\n\n return data;\n } catch (error) {\n this.logger.error(\n `Failed to fetch schema for cluster workflow ${clusterWorkflowName}: ${error}`,\n );\n throw error;\n }\n }\n\n /**\n * List workflow runs for a namespace, optionally filtered by workflow name\n */\n async listWorkflowRuns(\n namespaceName: string,\n workflowName?: string,\n token?: string,\n projectName?: string,\n componentName?: string,\n ): Promise<PaginatedResponse<WorkflowRun>> {\n this.logger.debug(\n `Fetching workflow runs for namespace: ${namespaceName}${\n workflowName ? `, workflow: ${workflowName}` : ''\n }`,\n );\n\n try {\n const client = createOpenChoreoApiClient({\n baseUrl: this.baseUrl,\n token,\n logger: this.logger,\n });\n\n const rawItems = await fetchAllPages(cursor =>\n client\n .GET('/api/v1/namespaces/{namespaceName}/workflowruns', {\n params: {\n path: { namespaceName },\n query: { limit: 100, cursor },\n },\n })\n .then(res => {\n assertApiResponse(res, 'fetch workflow runs');\n return res.data;\n }),\n );\n\n // TODO: If upstream API supports filtering, pass workflowName as query param instead\n let filtered = workflowName\n ? rawItems.filter(run => run.spec?.workflow?.name === workflowName)\n : rawItems;\n\n // Filter by project and component labels if provided\n if (projectName) {\n filtered = filtered.filter(\n run =>\n run.metadata?.labels?.[CHOREO_LABELS.WORKFLOW_PROJECT] ===\n projectName,\n );\n }\n if (componentName) {\n filtered = filtered.filter(\n run =>\n run.metadata?.labels?.[CHOREO_LABELS.WORKFLOW_COMPONENT] ===\n componentName,\n );\n }\n\n const items: WorkflowRun[] = filtered.map(transformWorkflowRun);\n\n this.logger.debug(\n `Successfully fetched ${\n items.length\n } workflow runs for namespace: ${namespaceName}${\n workflowName ? `, workflow: ${workflowName}` : ''\n }`,\n );\n\n return { items };\n } catch (error) {\n this.logger.error(\n `Failed to fetch workflow runs for namespace ${namespaceName}: ${error}`,\n );\n throw error;\n }\n }\n\n /**\n * List OpenChoreo namespaces (those labeled openchoreo.dev/control-plane=true).\n * Used to populate the namespace selector on the ClusterWorkflow runs page.\n */\n async listNamespaces(token?: string): Promise<string[]> {\n this.logger.debug('Fetching OpenChoreo namespaces');\n\n try {\n const client = createOpenChoreoApiClient({\n baseUrl: this.baseUrl,\n token,\n logger: this.logger,\n });\n\n const { data, error, response } = await client.GET('/api/v1/namespaces');\n\n assertApiResponse({ data, error, response }, 'fetch namespaces');\n\n const names: string[] = ((data as any)?.items || [])\n .map((ns: any) => ns.metadata?.name ?? '')\n .filter(Boolean);\n\n this.logger.debug(`Successfully fetched ${names.length} namespaces`);\n\n return names;\n } catch (error) {\n this.logger.error(`Failed to fetch namespaces: ${error}`);\n throw error;\n }\n }\n\n /**\n * Get details of a specific workflow run\n */\n async getWorkflowRun(\n namespaceName: string,\n runName: string,\n token?: string,\n ): Promise<WorkflowRun> {\n this.logger.debug(\n `Fetching workflow run: ${runName} in namespace: ${namespaceName}`,\n );\n\n try {\n const client = createOpenChoreoApiClient({\n baseUrl: this.baseUrl,\n token,\n logger: this.logger,\n });\n\n const { data, error, response } = await client.GET(\n '/api/v1/namespaces/{namespaceName}/workflowruns/{runName}',\n {\n params: {\n path: { namespaceName, runName },\n },\n },\n );\n\n assertApiResponse({ data, error, response }, 'fetch workflow run');\n\n this.logger.debug(`Successfully fetched workflow run: ${runName}`);\n\n return transformWorkflowRun(data);\n } catch (error) {\n this.logger.error(\n `Failed to fetch workflow run ${runName} in namespace ${namespaceName}: ${error}`,\n );\n throw error;\n }\n }\n\n /**\n * Create (trigger) a new workflow run\n */\n async createWorkflowRun(\n namespaceName: string,\n request: CreateWorkflowRunRequest,\n token?: string,\n ): Promise<WorkflowRun> {\n this.logger.info(\n `Creating workflow run for ${\n request.workflowKind === 'ClusterWorkflow'\n ? 'cluster workflow'\n : 'workflow'\n }: ${request.workflowName} in namespace: ${namespaceName}`,\n );\n\n try {\n const client = createOpenChoreoApiClient({\n baseUrl: this.baseUrl,\n token,\n logger: this.logger,\n });\n\n // The WorkflowRunConfig.kind field tells the server whether to look up a\n // namespace-scoped Workflow or a cluster-scoped ClusterWorkflow.\n // Default (omitted / 'Workflow') resolves a namespace-scoped Workflow;\n // 'ClusterWorkflow' resolves a cluster-scoped ClusterWorkflow.\n const { data, error, response } = await client.POST(\n '/api/v1/namespaces/{namespaceName}/workflowruns',\n {\n params: {\n path: { namespaceName },\n },\n body: {\n metadata: {\n name:\n request.workflowRunName?.trim() ||\n `${request.workflowName}-${Date.now()}`,\n ...(request.labels && { labels: request.labels }),\n ...(request.annotations && { annotations: request.annotations }),\n },\n spec: {\n workflow: {\n kind: request.workflowKind,\n name: request.workflowName,\n parameters: request.parameters,\n },\n },\n } as any,\n },\n );\n\n assertApiResponse({ data, error, response }, 'create workflow run');\n\n this.logger.debug(\n `Successfully created workflow run: ${(data as any).metadata?.name}`,\n );\n\n return transformWorkflowRun(data);\n } catch (error) {\n this.logger.error(\n `Failed to create workflow run for ${\n request.workflowKind === 'ClusterWorkflow'\n ? 'cluster workflow'\n : 'workflow'\n } ${request.workflowName} in namespace ${namespaceName}: ${error}`,\n );\n throw error;\n }\n }\n\n /**\n * Get logs for a specific workflow run.\n */\n async getWorkflowRunLogs(\n namespaceName: string,\n runName: string,\n task?: string,\n token?: string,\n ): Promise<LogsResponse> {\n this.logger.debug(\n `Fetching logs for workflow run: ${runName} in namespace: ${namespaceName}${\n task ? `, task: ${task}` : ''\n }`,\n );\n\n try {\n const client = createOpenChoreoApiClient({\n baseUrl: this.baseUrl,\n token,\n logger: this.logger,\n });\n\n const { data, error, response } = await client.GET(\n '/api/v1/namespaces/{namespaceName}/workflowruns/{runName}/logs',\n {\n params: {\n path: { namespaceName, runName },\n query: { ...(task ? { task } : {}) },\n },\n },\n );\n\n if (!error && response.ok && Array.isArray(data) && data.length > 0) {\n const logs = data.map((entry: any) => ({\n timestamp: entry.timestamp ?? '',\n log: entry.log,\n }));\n this.logger.debug(\n `Fetched ${logs.length} live log entries for run: ${runName}`,\n );\n return { logs, totalCount: logs.length };\n }\n\n const {\n data: runData,\n error: runError,\n response: runResponse,\n } = await client.GET(\n '/api/v1/namespaces/{namespaceName}/workflowruns/{runName}',\n { params: { path: { namespaceName, runName } } },\n );\n\n if (runError || !runResponse.ok || !runData) {\n return { logs: [], totalCount: 0 };\n }\n\n const runStatus = deriveWorkflowRunStatus(runData);\n if (!TERMINAL_STATUSES.has(runStatus)) {\n return { logs: [], totalCount: 0 };\n }\n\n let observerUrl: string | undefined;\n const projectName = (runData as any).metadata?.labels?.[\n CHOREO_LABELS.WORKFLOW_PROJECT\n ];\n try {\n if (projectName) {\n ({ observerUrl } = await this.resolver.resolveForBuild(\n namespaceName,\n projectName,\n token,\n ));\n } else {\n ({ observerUrl } = await this.resolver.resolveForEnvironment(\n namespaceName,\n 'development',\n token,\n ));\n }\n } catch (resolveErr) {\n this.logger.debug(\n `Could not resolve observer URL for run ${runName}: ${resolveErr}`,\n );\n return { logs: [], totalCount: 0 };\n }\n\n if (!observerUrl) {\n return { logs: [], totalCount: 0 };\n }\n\n const obsClient = createObservabilityClientWithUrl(\n observerUrl,\n token,\n this.logger,\n );\n const startTime = new Date(\n Date.now() - 30 * 24 * 60 * 60 * 1000,\n ).toISOString();\n const endTime = new Date().toISOString();\n\n this.logger.debug(\n `Querying observer logs for run ${runName}, namespace: ${namespaceName}`,\n );\n\n const {\n data: obsData,\n error: obsError,\n response: obsResponse,\n } = await obsClient.POST('/api/v1/logs/query', {\n body: {\n startTime,\n endTime,\n limit: 1000,\n sortOrder: 'asc',\n searchScope: {\n namespace: namespaceName,\n workflowRunName: runName,\n ...(task ? { taskName: task } : {}),\n },\n },\n });\n\n if (obsError || !obsResponse.ok) {\n this.logger.error(\n `Failed to fetch observer logs for run ${runName}: ${obsResponse.status} ${obsResponse.statusText}`,\n );\n return { logs: [], totalCount: 0 };\n }\n\n const obsLogs = ((obsData?.logs || []) as any[]).map((entry: any) => ({\n timestamp: entry.timestamp ?? '',\n log: entry.log,\n }));\n\n this.logger.debug(\n `Observer fetched ${obsLogs.length} log entries for run: ${runName}`,\n );\n\n return {\n logs: obsLogs,\n totalCount: obsData?.total ?? obsLogs.length,\n tookMs: obsData?.tookMs,\n };\n } catch (error: unknown) {\n this.logger.error(\n `Error fetching logs for workflow run ${runName} in namespace ${namespaceName}:`,\n error as Error,\n );\n throw error;\n }\n }\n\n /**\n * Get status (including steps) for a specific workflow run\n */\n async getWorkflowRunStatus(\n namespaceName: string,\n runName: string,\n token?: string,\n ): Promise<WorkflowRunStatusResponse> {\n this.logger.debug(\n `Fetching status for workflow run: ${runName} in namespace: ${namespaceName}`,\n );\n\n try {\n const client = createOpenChoreoApiClient({\n baseUrl: this.baseUrl,\n token,\n logger: this.logger,\n });\n\n const { data, error, response } = await client.GET(\n '/api/v1/namespaces/{namespaceName}/workflowruns/{runName}/status',\n {\n params: {\n path: { namespaceName, runName },\n },\n },\n );\n\n assertApiResponse({ data, error, response }, 'fetch workflow run status');\n\n this.logger.debug(\n `Successfully fetched status for workflow run: ${runName}`,\n );\n\n return data as WorkflowRunStatusResponse;\n } catch (error) {\n this.logger.error(\n `Failed to fetch status for workflow run ${runName} in namespace ${namespaceName}: ${error}`,\n );\n throw error;\n }\n }\n\n /**\n * Get Kubernetes events for a specific workflow run (optionally filtered by task)\n */\n async getWorkflowRunEvents(\n namespaceName: string,\n runName: string,\n task?: string,\n token?: string,\n ): Promise<WorkflowRunEventEntry[]> {\n this.logger.debug(\n `Fetching events for workflow run: ${runName} in namespace: ${namespaceName}${\n task ? `, task: ${task}` : ''\n }`,\n );\n\n try {\n const client = createOpenChoreoApiClient({\n baseUrl: this.baseUrl,\n token,\n logger: this.logger,\n });\n\n const { data, error, response } = await client.GET(\n '/api/v1/namespaces/{namespaceName}/workflowruns/{runName}/events',\n {\n params: {\n path: { namespaceName, runName },\n query: {\n ...(task ? { task } : {}),\n },\n },\n },\n );\n\n assertApiResponse({ data, error, response }, 'fetch workflow run events');\n\n if (!Array.isArray(data)) {\n return [];\n }\n\n const entries: WorkflowRunEventEntry[] = data.map((entry: any) => ({\n timestamp: entry.timestamp,\n type: entry.type,\n reason: entry.reason,\n message: entry.message,\n }));\n\n this.logger.debug(\n `Successfully fetched ${entries.length} events for workflow run: ${runName}`,\n );\n\n return entries;\n } catch (error) {\n this.logger.error(\n `Failed to fetch events for workflow run ${runName} in namespace ${namespaceName}: ${error}`,\n );\n throw error;\n }\n }\n}\n"],"names":["ObservabilityUrlResolver","createOpenChoreoApiClient","fetchAllPages","assertApiResponse","CHOREO_LABELS","createObservabilityClientWithUrl"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openchoreo/backstage-plugin-openchoreo-workflows-backend",
3
- "version": "1.1.6",
3
+ "version": "1.2.0-rc.1",
4
4
  "license": "Apache-2.0",
5
5
  "main": "dist/index.cjs.js",
6
6
  "types": "dist/index.d.ts",
@@ -33,17 +33,17 @@
33
33
  "postpack": "backstage-cli package postpack"
34
34
  },
35
35
  "dependencies": {
36
- "@backstage/backend-defaults": "^0.12.1",
37
- "@backstage/backend-plugin-api": "^1.4.3",
38
- "@backstage/errors": "^1.2.7",
39
- "@openchoreo/openchoreo-auth": "^1.1.6",
40
- "@openchoreo/openchoreo-client-node": "^1.1.6",
36
+ "@backstage/backend-defaults": "^0.17.1",
37
+ "@backstage/backend-plugin-api": "^1.9.1",
38
+ "@backstage/errors": "^1.3.1",
39
+ "@openchoreo/openchoreo-auth": "^1.2.0-rc.1",
40
+ "@openchoreo/openchoreo-client-node": "^1.2.0-rc.1",
41
41
  "express": "4.21.1",
42
42
  "express-promise-router": "4.1.1"
43
43
  },
44
44
  "devDependencies": {
45
- "@backstage/backend-test-utils": "^1.9.0",
46
- "@backstage/cli": "^0.34.3",
45
+ "@backstage/backend-test-utils": "^1.11.3",
46
+ "@backstage/cli": "^0.36.2",
47
47
  "@types/express": "4.17.21"
48
48
  },
49
49
  "files": [