@backstage-community/plugin-tekton 3.16.0

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.
Files changed (151) hide show
  1. package/CHANGELOG.md +801 -0
  2. package/README.md +369 -0
  3. package/app-config.dynamic.yaml +12 -0
  4. package/dist/components/Charts/PipelineBars.esm.js +49 -0
  5. package/dist/components/Charts/PipelineBars.esm.js.map +1 -0
  6. package/dist/components/Icons/CriticalRiskIcon.esm.js +22 -0
  7. package/dist/components/Icons/CriticalRiskIcon.esm.js.map +1 -0
  8. package/dist/components/Icons/EqualsIcon.esm.js +22 -0
  9. package/dist/components/Icons/EqualsIcon.esm.js.map +1 -0
  10. package/dist/components/Icons/LinkToSbomIcon.esm.js +37 -0
  11. package/dist/components/Icons/LinkToSbomIcon.esm.js.map +1 -0
  12. package/dist/components/Icons/OutputIcon.esm.js +36 -0
  13. package/dist/components/Icons/OutputIcon.esm.js.map +1 -0
  14. package/dist/components/Icons/SignedBadge.esm.js +16 -0
  15. package/dist/components/Icons/SignedBadge.esm.js.map +1 -0
  16. package/dist/components/Icons/ViewLogsIcon.esm.js +35 -0
  17. package/dist/components/Icons/ViewLogsIcon.esm.js.map +1 -0
  18. package/dist/components/PipelineRunList/PipelineRunColumnHeader.esm.js +43 -0
  19. package/dist/components/PipelineRunList/PipelineRunColumnHeader.esm.js.map +1 -0
  20. package/dist/components/PipelineRunList/PipelineRunList.esm.js +185 -0
  21. package/dist/components/PipelineRunList/PipelineRunList.esm.js.map +1 -0
  22. package/dist/components/PipelineRunList/PipelineRunListSearchBar.esm.js +42 -0
  23. package/dist/components/PipelineRunList/PipelineRunListSearchBar.esm.js.map +1 -0
  24. package/dist/components/PipelineRunList/PipelineRunOutput.esm.js +70 -0
  25. package/dist/components/PipelineRunList/PipelineRunOutput.esm.js.map +1 -0
  26. package/dist/components/PipelineRunList/PipelineRunRow.css.esm.js +7 -0
  27. package/dist/components/PipelineRunList/PipelineRunRow.css.esm.js.map +1 -0
  28. package/dist/components/PipelineRunList/PipelineRunRow.esm.js +110 -0
  29. package/dist/components/PipelineRunList/PipelineRunRow.esm.js.map +1 -0
  30. package/dist/components/PipelineRunList/PipelineRunRowActions.esm.js +137 -0
  31. package/dist/components/PipelineRunList/PipelineRunRowActions.esm.js.map +1 -0
  32. package/dist/components/PipelineRunList/PipelineRunSBOMLink.esm.js +25 -0
  33. package/dist/components/PipelineRunList/PipelineRunSBOMLink.esm.js.map +1 -0
  34. package/dist/components/PipelineRunList/PipelineRunTableBody.esm.js +32 -0
  35. package/dist/components/PipelineRunList/PipelineRunTableBody.esm.js.map +1 -0
  36. package/dist/components/PipelineRunList/PipelineRunTaskStatus.esm.js +11 -0
  37. package/dist/components/PipelineRunList/PipelineRunTaskStatus.esm.js.map +1 -0
  38. package/dist/components/PipelineRunList/PipelineRunVulnerabilities.esm.js +81 -0
  39. package/dist/components/PipelineRunList/PipelineRunVulnerabilities.esm.js.map +1 -0
  40. package/dist/components/PipelineRunList/PipelineTableHeader.esm.js +53 -0
  41. package/dist/components/PipelineRunList/PipelineTableHeader.esm.js.map +1 -0
  42. package/dist/components/PipelineRunList/PlrStatus.css.esm.js +7 -0
  43. package/dist/components/PipelineRunList/PlrStatus.css.esm.js.map +1 -0
  44. package/dist/components/PipelineRunList/PlrStatus.esm.js +11 -0
  45. package/dist/components/PipelineRunList/PlrStatus.esm.js.map +1 -0
  46. package/dist/components/PipelineRunList/ResourceBadge.css.esm.js +7 -0
  47. package/dist/components/PipelineRunList/ResourceBadge.css.esm.js.map +1 -0
  48. package/dist/components/PipelineRunList/ResourceBadge.esm.js +15 -0
  49. package/dist/components/PipelineRunList/ResourceBadge.esm.js.map +1 -0
  50. package/dist/components/PipelineRunLogs/PipelineRunLogDialog.esm.js +82 -0
  51. package/dist/components/PipelineRunLogs/PipelineRunLogDialog.esm.js.map +1 -0
  52. package/dist/components/PipelineRunLogs/PipelineRunLogDownloader.esm.js +47 -0
  53. package/dist/components/PipelineRunLogs/PipelineRunLogDownloader.esm.js.map +1 -0
  54. package/dist/components/PipelineRunLogs/PipelineRunLogViewer.esm.js +53 -0
  55. package/dist/components/PipelineRunLogs/PipelineRunLogViewer.esm.js.map +1 -0
  56. package/dist/components/PipelineRunLogs/PipelineRunLogs.esm.js +69 -0
  57. package/dist/components/PipelineRunLogs/PipelineRunLogs.esm.js.map +1 -0
  58. package/dist/components/PipelineRunLogs/PodLogsDownloadLink.esm.js +69 -0
  59. package/dist/components/PipelineRunLogs/PodLogsDownloadLink.esm.js.map +1 -0
  60. package/dist/components/PipelineRunLogs/TaskStatusStepper.esm.js +128 -0
  61. package/dist/components/PipelineRunLogs/TaskStatusStepper.esm.js.map +1 -0
  62. package/dist/components/PipelineRunOutput/PipelineRunOutputDialog.esm.js +62 -0
  63. package/dist/components/PipelineRunOutput/PipelineRunOutputDialog.esm.js.map +1 -0
  64. package/dist/components/Router.esm.js +16 -0
  65. package/dist/components/Router.esm.js.map +1 -0
  66. package/dist/components/Tekton/TektonCIComponent.esm.js +53 -0
  67. package/dist/components/Tekton/TektonCIComponent.esm.js.map +1 -0
  68. package/dist/components/common/ClusterSelector.css.esm.js +7 -0
  69. package/dist/components/common/ClusterSelector.css.esm.js.map +1 -0
  70. package/dist/components/common/ClusterSelector.esm.js +46 -0
  71. package/dist/components/common/ClusterSelector.esm.js.map +1 -0
  72. package/dist/components/common/ErrorPanel.esm.js +33 -0
  73. package/dist/components/common/ErrorPanel.esm.js.map +1 -0
  74. package/dist/components/common/PermissionAlert.esm.js +9 -0
  75. package/dist/components/common/PermissionAlert.esm.js.map +1 -0
  76. package/dist/components/common/ResourceStatus.css.esm.js +7 -0
  77. package/dist/components/common/ResourceStatus.css.esm.js.map +1 -0
  78. package/dist/components/common/StatusSelector.css.esm.js +7 -0
  79. package/dist/components/common/StatusSelector.css.esm.js.map +1 -0
  80. package/dist/components/common/StatusSelector.esm.js +48 -0
  81. package/dist/components/common/StatusSelector.esm.js.map +1 -0
  82. package/dist/components/common/TableExpandCollapse.esm.js +44 -0
  83. package/dist/components/common/TableExpandCollapse.esm.js.map +1 -0
  84. package/dist/components/pipeline-topology/PipelineLayout.esm.js +126 -0
  85. package/dist/components/pipeline-topology/PipelineLayout.esm.js.map +1 -0
  86. package/dist/components/pipeline-topology/PipelineRunVisualization.esm.js +13 -0
  87. package/dist/components/pipeline-topology/PipelineRunVisualization.esm.js.map +1 -0
  88. package/dist/components/pipeline-topology/PipelineTaskNode.css.esm.js +7 -0
  89. package/dist/components/pipeline-topology/PipelineTaskNode.css.esm.js.map +1 -0
  90. package/dist/components/pipeline-topology/PipelineTaskNode.esm.js +132 -0
  91. package/dist/components/pipeline-topology/PipelineTaskNode.esm.js.map +1 -0
  92. package/dist/components/pipeline-topology/PipelineVisualization.css.esm.js +7 -0
  93. package/dist/components/pipeline-topology/PipelineVisualization.css.esm.js.map +1 -0
  94. package/dist/components/pipeline-topology/PipelineVisualization.esm.js +24 -0
  95. package/dist/components/pipeline-topology/PipelineVisualization.esm.js.map +1 -0
  96. package/dist/components/pipeline-topology/PipelineVisualizationStepList.css.esm.js +7 -0
  97. package/dist/components/pipeline-topology/PipelineVisualizationStepList.css.esm.js.map +1 -0
  98. package/dist/components/pipeline-topology/PipelineVisualizationStepList.esm.js +39 -0
  99. package/dist/components/pipeline-topology/PipelineVisualizationStepList.esm.js.map +1 -0
  100. package/dist/components/pipeline-topology/PipelineVisualizationView.esm.js +41 -0
  101. package/dist/components/pipeline-topology/PipelineVisualizationView.esm.js.map +1 -0
  102. package/dist/components/pipeline-topology/TaskGroupEdge.esm.js +16 -0
  103. package/dist/components/pipeline-topology/TaskGroupEdge.esm.js.map +1 -0
  104. package/dist/components/pipeline-topology/dag.esm.js +119 -0
  105. package/dist/components/pipeline-topology/dag.esm.js.map +1 -0
  106. package/dist/components/pipeline-topology/pipelineComponentFactory.esm.js +60 -0
  107. package/dist/components/pipeline-topology/pipelineComponentFactory.esm.js.map +1 -0
  108. package/dist/consts/pipeline-topology-const.esm.js +66 -0
  109. package/dist/consts/pipeline-topology-const.esm.js.map +1 -0
  110. package/dist/consts/tekton-const.esm.js +7 -0
  111. package/dist/consts/tekton-const.esm.js.map +1 -0
  112. package/dist/hooks/TektonResourcesContext.esm.js +16 -0
  113. package/dist/hooks/TektonResourcesContext.esm.js.map +1 -0
  114. package/dist/hooks/useAllWatchResources.esm.js +35 -0
  115. package/dist/hooks/useAllWatchResources.esm.js.map +1 -0
  116. package/dist/hooks/useDarkTheme.esm.js +21 -0
  117. package/dist/hooks/useDarkTheme.esm.js.map +1 -0
  118. package/dist/hooks/usePipelineRunScanResults.esm.js +35 -0
  119. package/dist/hooks/usePipelineRunScanResults.esm.js.map +1 -0
  120. package/dist/hooks/usePodLogsOfPipelineRun.esm.js +67 -0
  121. package/dist/hooks/usePodLogsOfPipelineRun.esm.js.map +1 -0
  122. package/dist/hooks/useResourcesClusters.esm.js +24 -0
  123. package/dist/hooks/useResourcesClusters.esm.js.map +1 -0
  124. package/dist/hooks/useTektonObjectsResponse.esm.js +78 -0
  125. package/dist/hooks/useTektonObjectsResponse.esm.js.map +1 -0
  126. package/dist/hooks/useTektonViewPermission.esm.js +12 -0
  127. package/dist/hooks/useTektonViewPermission.esm.js.map +1 -0
  128. package/dist/index.d.ts +32 -0
  129. package/dist/index.esm.js +3 -0
  130. package/dist/index.esm.js.map +1 -0
  131. package/dist/models.esm.js +21 -0
  132. package/dist/models.esm.js.map +1 -0
  133. package/dist/plugin.esm.js +72 -0
  134. package/dist/plugin.esm.js.map +1 -0
  135. package/dist/types/types.esm.js +15 -0
  136. package/dist/types/types.esm.js.map +1 -0
  137. package/dist/utils/isTektonCIAvailable.esm.js +7 -0
  138. package/dist/utils/isTektonCIAvailable.esm.js.map +1 -0
  139. package/dist/utils/log-downloader-utils.esm.js +33 -0
  140. package/dist/utils/log-downloader-utils.esm.js.map +1 -0
  141. package/dist/utils/pipeline-step-utils.esm.js +53 -0
  142. package/dist/utils/pipeline-step-utils.esm.js.map +1 -0
  143. package/dist/utils/pipeline-topology-utils.esm.js +250 -0
  144. package/dist/utils/pipeline-topology-utils.esm.js.map +1 -0
  145. package/dist/utils/pipelineRun-utils.esm.js +128 -0
  146. package/dist/utils/pipelineRun-utils.esm.js.map +1 -0
  147. package/dist/utils/taskRun-utils.esm.js +50 -0
  148. package/dist/utils/taskRun-utils.esm.js.map +1 -0
  149. package/dist/utils/tekton-utils.esm.js +191 -0
  150. package/dist/utils/tekton-utils.esm.js.map +1 -0
  151. package/package.json +114 -0
package/README.md ADDED
@@ -0,0 +1,369 @@
1
+ # Tekton plugin for Backstage
2
+
3
+ The Tekton plugin enables you to visualize the `PipelineRun` resources available on the Kubernetes cluster.
4
+
5
+ ## For administrators
6
+
7
+ ### Setting up the Tekton plugin
8
+
9
+ #### Prerequisites
10
+
11
+ - The Kubernetes backend plugin `@backstage/plugin-kubernetes-backend` is installed and configured by following the [installation](https://backstage.io/docs/features/kubernetes/installation) and [configuration](https://backstage.io/docs/features/kubernetes/configuration) guides.
12
+
13
+ - The following `customResources` component is added in the [`app-config.yaml`](https://backstage.io/docs/features/kubernetes/configuration#configuring-kubernetes-clusters) file:
14
+ ```yaml
15
+ kubernetes:
16
+ ...
17
+ customResources:
18
+ - group: 'tekton.dev'
19
+ apiVersion: 'v1'
20
+ plural: 'pipelineruns'
21
+ - group: 'tekton.dev'
22
+ apiVersion: 'v1'
23
+ plural: 'taskruns'
24
+ ```
25
+ - The Kubernetes plugin is configured and connects to the cluster using a `ServiceAccount`.
26
+ - The [`ClusterRole`](https://backstage.io/docs/features/kubernetes/configuration#role-based-access-control) must be granted for custom resources (PipelineRuns and TaskRuns) to `ServiceAccount` accessing the cluster.
27
+ - To view the pod logs, you have granted permissions for `pods/log`.
28
+ - If you have the Backstage Kubernetes Plugin configured, then the `ClusterRole` is already granted.
29
+
30
+ You can use the following code to grant the `ClusterRole` for custom resources and pod logs:
31
+
32
+ ```yaml
33
+ ...
34
+ apiVersion: rbac.authorization.k8s.io/v1
35
+ kind: ClusterRole
36
+ metadata:
37
+ name: backstage-read-only
38
+ rules:
39
+ - apiGroups:
40
+ - ""
41
+ resources:
42
+ - pods/log
43
+ verbs:
44
+ - get
45
+ - list
46
+ - watch
47
+ ...
48
+ - apiGroups:
49
+ - tekton.dev
50
+ resources:
51
+ - pipelineruns
52
+ - taskruns
53
+ verbs:
54
+ - get
55
+ - list
56
+
57
+ ```
58
+
59
+ > Tip: You can use the [prepared manifest for a read-only `ClusterRole`](https://raw.githubusercontent.com/backstage/community-plugins/main/workspaces/tekton/plugins/tekton/manifests/clusterrole.yaml), which provides access for both Kubernetes plugin and Tekton plugin.
60
+
61
+ - The following annotation is added to the entity's `catalog-info.yaml` file to identify whether an entity contains the Kubernetes resources:
62
+
63
+ ```yaml
64
+ annotations:
65
+ ...
66
+
67
+ backstage.io/kubernetes-id: <BACKSTAGE_ENTITY_NAME>
68
+ ```
69
+
70
+ You can also add the `backstage.io/kubernetes-namespace` annotation to identify the Kubernetes resources using the defined namespace.
71
+
72
+ ```yaml
73
+ annotations:
74
+ ...
75
+
76
+ backstage.io/kubernetes-namespace: <RESOURCE_NS>
77
+ ```
78
+
79
+ - The following annotation is added to the `catalog-info.yaml` file of the entity to enable the Tekton related features in Backstage. The value of the annotation identifies the name of the Backstage entity:
80
+
81
+ ```yaml
82
+ annotations:
83
+ ...
84
+
85
+ tekton.dev/cicd : "true"
86
+ ```
87
+
88
+ - A custom label selector can be added, which Backstage uses to find the Kubernetes resources. The label selector takes precedence over the ID annotations.
89
+
90
+ ```yaml
91
+ annotations:
92
+ ...
93
+
94
+ backstage.io/kubernetes-label-selector: 'app=my-app,component=front-end'
95
+ ```
96
+
97
+ - The following label is added to the resources so that the Kubernetes plugin gets the Kubernetes resources from the requested entity:
98
+
99
+ ```yaml
100
+ labels:
101
+ ...
102
+
103
+ backstage.io/kubernetes-id: <BACKSTAGE_ENTITY_NAME>`
104
+ ```
105
+
106
+ ***
107
+
108
+ **NOTE**
109
+
110
+ When using the label selector, the mentioned labels must be present on the resource.
111
+
112
+ ***
113
+
114
+ #### Procedure
115
+
116
+ 1. Install the Tekton plugin using the following command:
117
+
118
+ ```console
119
+ yarn workspace app add @backstage-community/plugin-tekton
120
+ ```
121
+
122
+ 1. To enable the PipelineRun list in the **CI/CD** tab on the entity view page, add the following snippet in the `packages/app/src/components/catalog/EntityPage.tsx`.
123
+
124
+ ```tsx title="packages/app/src/components/catalog/EntityPage.tsx"
125
+ /* highlight-add-next-line */
126
+ import {
127
+ isTektonCIAvailable,
128
+ TektonCI,
129
+ } from '@backstage-community/plugin-tekton';
130
+
131
+ const cicdContent = (
132
+ <EntitySwitch>
133
+ {/* ... */}
134
+ {/* highlight-add-start */}
135
+ <EntitySwitch.Case if={isTektonCIAvailable}>
136
+ <TektonCI />
137
+ </EntitySwitch.Case>
138
+ {/* highlight-add-end */}
139
+ </EntitySwitch>
140
+ );
141
+ ```
142
+
143
+ ## For users
144
+
145
+ ### Using the Tekton plugin in Backstage
146
+
147
+ Tekton is a front-end plugin that enables you to view the `PipelineRun` resources.
148
+
149
+ #### Prerequisites
150
+
151
+ - Your Backstage application is installed and running.
152
+ - You have installed the Tekton plugin. For the installation process, see [Installation](#setting-up-the-tekton-plugin).
153
+
154
+ #### Procedure
155
+
156
+ 1. Open your Backstage application and select a component from the **Catalog** page.
157
+
158
+ 1. Go to the **CI/CD** tab.
159
+
160
+ The **CI/CD** tab displays the list of PipelineRun resources associated with a Kubernetes cluster. The list contains pipeline run details, such as **NAME**, **STATUS**, **TASK STATUS**, **STARTED**, and **DURATION**.
161
+
162
+ ![ci-cd-tab-tekton](./docs/images/tekton-plugin-user4.png)
163
+
164
+ 1. Click on expand row button besides PipelineRun name in the list to view the PipelineRun visualization. The pipeline run resource include tasks to complete. When you hover the mouse pointer on a task card, you can view the steps to complete that particular task.
165
+
166
+ ![pipelinerun-view](./docs/images/tekton-plugin-user5.png)
167
+
168
+ ## Enabling UI elements
169
+
170
+ ### Vulnerabilites Column
171
+
172
+ `Vulnerabilities` column provides a visual representation of identified vulnerabilities in the OCI image produced by the pipelinerun. The Author of the pipeline scanner task would provide the CVE summary data using the below format that the UI can interpret.
173
+
174
+ The result of the scanner task should be emitted back to the pipelinerun and it should contain a result that ends with `SCAN_OUTPUT` string.
175
+
176
+ ## Format:
177
+
178
+ Result name: `<any_prefix>_SCAN_OUTPUT`
179
+ eg: `SCAN_OUTPUT`, `MY_ACS_SCAN_OUTPUT`
180
+
181
+ Result value: `'{"vulnerabilities":{"critical": 0,"high": 9,"medium": 2,"low": 13,"unknown": 0},
182
+ "unpatched_vulnerabilities": {"critical": 0,"high": 1,"medium": 0,"low":1}}'`
183
+
184
+ ---
185
+
186
+ Example PipelineRun:
187
+
188
+ ```
189
+ ...
190
+ status:
191
+ results:
192
+ - name: 'MY_SCAN_OUTPUT'
193
+ value:
194
+ '{"vulnerabilities":{"critical": 0,"high": 9,"medium": 2,"low": 13,"unknown": 0},
195
+ "unpatched_vulnerabilities": {"critical": 0,"high": 1,"medium": 0,"low":1}}'
196
+ ```
197
+
198
+ ![tekton-vulnerabilites](./docs/images/tekton-plugin-vulnerabilities.png)
199
+
200
+ ---
201
+
202
+ ## Action buttons
203
+
204
+ ### SBOM
205
+
206
+ Link to SBOM action will be enabled if there is a SBOM task in the pipelinerun and it should contain required annotations and emit the below result
207
+
208
+ ## Format:
209
+
210
+ annotations:
211
+
212
+ ```
213
+ task.output.location: results
214
+ task.results.format: application/text
215
+ task.results.type: external-link # Optional: This will redirect to external page
216
+ task.results.key: LINK_TO_SBOM
217
+
218
+ ```
219
+
220
+ results.name: `LINK_T0_SBOM`
221
+
222
+ results.value: `<sbom-viewer-url>`
223
+
224
+ ---
225
+
226
+ Example:
227
+
228
+ ## Task: [Optional]
229
+
230
+ ```
231
+ apiVersion: tekton.dev/v1
232
+ kind: Task
233
+ metadata:
234
+ name: export-sbom-task
235
+ annotations:
236
+ task.output.location: results
237
+ task.results.format: application/text
238
+ task.results.type: external-link # Optional: This will redirect to external page
239
+ task.results.key: LINK_TO_SBOM
240
+ spec: …
241
+ steps:
242
+ - image: registry.access.redhat.com/ubi8/ubi-minimal
243
+ name: export-sbom
244
+ script: |
245
+ #!/bin/sh
246
+ ## sbom image generation script goes here
247
+ echo 'quay.io/repo/image:build-8e536-1692702836' | tee $(results.LINK_TO_SBOM.path)
248
+ ```
249
+
250
+ _Note: Absence of the below annotation will open SBOM taskrun logs modal._
251
+
252
+ ```
253
+ task.results.type: external-link # This will redirect to external page
254
+ ```
255
+
256
+ ### Output:
257
+
258
+ Output action will be enabled when the pipelinerun emits some results and/or contains taskruns with supported annotations and emits report data in pod logs.
259
+
260
+ This action opens a modal where it will render the reports for Enterprise contract and Advanced cluster security. The report data should be exposed via pod logs and the taskruns should contain the following annotations.
261
+
262
+ Examples:
263
+
264
+ list of supported report tasks with correct annotations are listed below:
265
+
266
+ ## Enterprise contract Task [Optional]:
267
+
268
+ ```
269
+ apiVersion: tekton.dev/v1
270
+ kind: Task
271
+ metadata:
272
+ name: enterprise-contract-task
273
+ annotations:
274
+ task.results.format: application/json
275
+ task.results.type: ec
276
+ task.output.location: logs
277
+ task.results.container: step-report-json
278
+ spec: …
279
+ steps:
280
+ - name: report-json
281
+ image: quay.io/enterprise-contract/ec-cli:snapshot@sha256:33be4031a3316a46db3559a4d8566bc22f9d4d491d262d699614f32f35b45b67
282
+ command: [cat]
283
+ args:
284
+ - "$(params.HOMEDIR)/report-json.json"
285
+
286
+ ```
287
+
288
+ ![tekton-ec-report](./docs/images/tekton-plugin-ec-output.png)
289
+
290
+ ---
291
+
292
+ ## ACS Image scan Task [Optional]:
293
+
294
+ ```
295
+ apiVersion: tekton.dev/v1
296
+ kind: Task
297
+ metadata:
298
+ name: acs-image-scan
299
+ annotations:
300
+ task.results.format: application/json
301
+ task.results.type: roxctl-image-scan
302
+ task.results.key: SCAN_OUTPUT
303
+ task.output.location: logs
304
+ task.results.container: step-report
305
+ spec: …
306
+ steps:
307
+ - name: report
308
+ image: 'quay.io/lrangine/crda-maven:11.0'
309
+ script: |
310
+ #!/bin/sh
311
+ cat $(workspaces.reports.path)/image-scan
312
+
313
+ ```
314
+
315
+ ## ACS Image check Task [Optional]:
316
+
317
+ ```
318
+ apiVersion: tekton.dev/v1
319
+ kind: Task
320
+ metadata:
321
+ name: acs-image-check
322
+ annotations:
323
+ task.results.format: application/json
324
+ task.results.type: roxctl-image-check
325
+ task.results.key: SCAN_OUTPUT
326
+ task.output.location: logs
327
+ task.results.container: step-report
328
+ spec: …
329
+ steps:
330
+ - name: report
331
+ image: 'quay.io/lrangine/crda-maven:11.0'
332
+ script: |
333
+ #!/bin/sh
334
+ cat $(workspaces.reports.path)/image-check
335
+
336
+ ```
337
+
338
+ ## ACS Deployment check Task [Optional]:
339
+
340
+ ```
341
+ apiVersion: tekton.dev/v1
342
+ kind: Task
343
+ metadata:
344
+ name: acs-deployment-check
345
+ annotations:
346
+ task.results.format: application/json
347
+ task.results.type: roxctl-deployment-check
348
+ task.results.key: SCAN_OUTPUT
349
+ task.output.location: logs
350
+ task.results.container: step-report
351
+ spec: …
352
+ steps:
353
+ - name: report
354
+ image: 'quay.io/lrangine/crda-maven:11.0'
355
+ script: |
356
+ #!/bin/sh
357
+ cat $(workspaces.reports.path)/deployment-check
358
+
359
+ ```
360
+
361
+ ![tekton-acs-report](./docs/images/tekton-plugin-acs-output.png)
362
+
363
+ ---
364
+
365
+ ## Pipelinerun results
366
+
367
+ The results emitted in the pipelinerun resource will be available in the Others section in the output modal.
368
+
369
+ ![tekton-pipelinerun-report](./docs/images/tekton-plugin-pipelinerun-output.png)
@@ -0,0 +1,12 @@
1
+ dynamicPlugins:
2
+ frontend:
3
+ backstage-community.plugin-tekton:
4
+ mountPoints:
5
+ - mountPoint: entity.page.ci/cards
6
+ importName: TektonCI
7
+ config:
8
+ layout:
9
+ gridColumn: '1 / -1'
10
+ if:
11
+ allOf:
12
+ - isTektonCIAvailable
@@ -0,0 +1,49 @@
1
+ import React__default from 'react';
2
+ import { Tooltip } from '@patternfly/react-core';
3
+ import { getTaskRunsForPipelineRun, TaskStatusTooltip, HorizontalStackedBars, ComputedStatus, getRunStatusColor } from '@janus-idp/shared-react';
4
+ import { TektonResourcesContext } from '../../hooks/TektonResourcesContext.esm.js';
5
+ import { getTaskStatusOfPLR } from '../../utils/tekton-utils.esm.js';
6
+ import PipelineRunLogDialog from '../PipelineRunLogs/PipelineRunLogDialog.esm.js';
7
+
8
+ const PipelineBars = ({ pipelineRun }) => {
9
+ const { watchResourcesData } = React__default.useContext(TektonResourcesContext);
10
+ const [open, setOpen] = React__default.useState(false);
11
+ const pods = watchResourcesData?.pods?.data || [];
12
+ const taskRuns = watchResourcesData?.taskruns?.data || [];
13
+ const plrTasks = getTaskRunsForPipelineRun(pipelineRun, taskRuns);
14
+ const taskStatus = getTaskStatusOfPLR(pipelineRun, plrTasks);
15
+ const openDialog = () => {
16
+ setOpen(true);
17
+ };
18
+ const closeDialog = () => {
19
+ setOpen(false);
20
+ };
21
+ return /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, /* @__PURE__ */ React__default.createElement(
22
+ PipelineRunLogDialog,
23
+ {
24
+ open,
25
+ closeDialog,
26
+ pods,
27
+ taskRuns,
28
+ pipelineRun
29
+ }
30
+ ), /* @__PURE__ */ React__default.createElement(Tooltip, { content: /* @__PURE__ */ React__default.createElement(TaskStatusTooltip, { taskStatus }) }, /* @__PURE__ */ React__default.createElement(
31
+ HorizontalStackedBars,
32
+ {
33
+ id: `${pipelineRun?.metadata?.name}`,
34
+ onClick: openDialog,
35
+ height: "1em",
36
+ inline: true,
37
+ values: Object.keys(ComputedStatus).map((status) => ({
38
+ color: getRunStatusColor(
39
+ ComputedStatus[status]
40
+ ).color,
41
+ name: status,
42
+ size: taskStatus[ComputedStatus[status]]
43
+ }))
44
+ }
45
+ )));
46
+ };
47
+
48
+ export { PipelineBars as default };
49
+ //# sourceMappingURL=PipelineBars.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PipelineBars.esm.js","sources":["../../../src/components/Charts/PipelineBars.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport React from 'react';\n\nimport { Tooltip } from '@patternfly/react-core';\n\nimport {\n ComputedStatus,\n getRunStatusColor,\n getTaskRunsForPipelineRun,\n HorizontalStackedBars,\n PipelineRunKind,\n TaskStatusTooltip,\n TaskStatusTypes,\n} from '@janus-idp/shared-react';\n\nimport { TektonResourcesContext } from '../../hooks/TektonResourcesContext';\nimport { getTaskStatusOfPLR } from '../../utils/tekton-utils';\nimport PipelineRunLogDialog from '../PipelineRunLogs/PipelineRunLogDialog';\n\ntype PipelineBarProps = { pipelineRun: PipelineRunKind };\n\nconst PipelineBars = ({ pipelineRun }: PipelineBarProps) => {\n const { watchResourcesData } = React.useContext(TektonResourcesContext);\n const [open, setOpen] = React.useState<boolean>(false);\n const pods = watchResourcesData?.pods?.data || [];\n const taskRuns = watchResourcesData?.taskruns?.data || [];\n const plrTasks = getTaskRunsForPipelineRun(pipelineRun, taskRuns);\n const taskStatus = getTaskStatusOfPLR(pipelineRun, plrTasks);\n\n const openDialog = () => {\n setOpen(true);\n };\n\n const closeDialog = () => {\n setOpen(false);\n };\n\n return (\n <>\n <PipelineRunLogDialog\n open={open}\n closeDialog={closeDialog}\n pods={pods}\n taskRuns={taskRuns}\n pipelineRun={pipelineRun}\n />\n <Tooltip content={<TaskStatusTooltip taskStatus={taskStatus} />}>\n <HorizontalStackedBars\n id={`${pipelineRun?.metadata?.name}`}\n onClick={openDialog}\n height=\"1em\"\n inline\n values={Object.keys(ComputedStatus).map(status => ({\n color: getRunStatusColor(\n ComputedStatus[status as keyof typeof ComputedStatus],\n ).color,\n name: status,\n size: taskStatus[\n ComputedStatus[\n status as keyof typeof ComputedStatus\n ] as keyof TaskStatusTypes\n ],\n }))}\n />\n </Tooltip>\n </>\n );\n};\n\nexport default PipelineBars;\n"],"names":["React"],"mappings":";;;;;;;AAmCA,MAAM,YAAe,GAAA,CAAC,EAAE,WAAA,EAAoC,KAAA;AAC1D,EAAA,MAAM,EAAE,kBAAA,EAAuB,GAAAA,cAAA,CAAM,WAAW,sBAAsB,CAAA;AACtE,EAAA,MAAM,CAAC,IAAM,EAAA,OAAO,CAAI,GAAAA,cAAA,CAAM,SAAkB,KAAK,CAAA;AACrD,EAAA,MAAM,IAAO,GAAA,kBAAA,EAAoB,IAAM,EAAA,IAAA,IAAQ,EAAC;AAChD,EAAA,MAAM,QAAW,GAAA,kBAAA,EAAoB,QAAU,EAAA,IAAA,IAAQ,EAAC;AACxD,EAAM,MAAA,QAAA,GAAW,yBAA0B,CAAA,WAAA,EAAa,QAAQ,CAAA;AAChE,EAAM,MAAA,UAAA,GAAa,kBAAmB,CAAA,WAAA,EAAa,QAAQ,CAAA;AAE3D,EAAA,MAAM,aAAa,MAAM;AACvB,IAAA,OAAA,CAAQ,IAAI,CAAA;AAAA,GACd;AAEA,EAAA,MAAM,cAAc,MAAM;AACxB,IAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,GACf;AAEA,EAAA,uBAEIA,cAAA,CAAA,aAAA,CAAAA,cAAA,CAAA,QAAA,EAAA,IAAA,kBAAAA,cAAA,CAAA,aAAA;AAAA,IAAC,oBAAA;AAAA,IAAA;AAAA,MACC,IAAA;AAAA,MACA,WAAA;AAAA,MACA,IAAA;AAAA,MACA,QAAA;AAAA,MACA;AAAA;AAAA,qBAEDA,cAAA,CAAA,aAAA,CAAA,OAAA,EAAA,EAAQ,yBAAUA,cAAA,CAAA,aAAA,CAAA,iBAAA,EAAA,EAAkB,YAAwB,CAC3D,EAAA,kBAAAA,cAAA,CAAA,aAAA;AAAA,IAAC,qBAAA;AAAA,IAAA;AAAA,MACC,EAAI,EAAA,CAAA,EAAG,WAAa,EAAA,QAAA,EAAU,IAAI,CAAA,CAAA;AAAA,MAClC,OAAS,EAAA,UAAA;AAAA,MACT,MAAO,EAAA,KAAA;AAAA,MACP,MAAM,EAAA,IAAA;AAAA,MACN,QAAQ,MAAO,CAAA,IAAA,CAAK,cAAc,CAAA,CAAE,IAAI,CAAW,MAAA,MAAA;AAAA,QACjD,KAAO,EAAA,iBAAA;AAAA,UACL,eAAe,MAAqC;AAAA,SACpD,CAAA,KAAA;AAAA,QACF,IAAM,EAAA,MAAA;AAAA,QACN,IAAM,EAAA,UAAA,CACJ,cACE,CAAA,MACF,CACF;AAAA,OACA,CAAA;AAAA;AAAA,GAEN,CACF,CAAA;AAEJ;;;;"}
@@ -0,0 +1,22 @@
1
+ import * as React from 'react';
2
+ import { global_palette_red_200 } from '@patternfly/react-tokens/dist/js/global_palette_red_200';
3
+
4
+ const CriticalRiskIcon = ({
5
+ className,
6
+ title
7
+ }) => {
8
+ return /* @__PURE__ */ React.createElement(
9
+ "svg",
10
+ {
11
+ viewBox: "0 0 925 1024",
12
+ fill: global_palette_red_200.value,
13
+ xmlns: "http://www.w3.org/2000/svg",
14
+ className
15
+ },
16
+ title && /* @__PURE__ */ React.createElement("title", null, title),
17
+ /* @__PURE__ */ React.createElement("path", { d: "M897.86597,252.24865 L491.105712,7.96742801 C473.40731,-2.65897781 451.300057,-2.65597516 433.611654,7.97743687 L27.1213875,252.245648 C10.3059556,262.353595 0.0163032058,280.549701 0.0163032058,300.182078 L0.0163032058,967.971163 C-1.04266102,1010.81008 49.7156241,1038.89994 85.4314175,1015.41816 C85.4304175,1015.42016 432.807682,798.630273 432.807682,798.630273 C450.891071,787.348287 473.816296,787.342282 491.906685,798.624268 L839.584939,1015.4612 C875.297732,1039.03406 926.031018,1010.73602 924.984054,968.003192 C924.985054,968.005193 924.985054,300.192087 924.985054,300.192087 C924.985054,280.552703 914.688401,262.353595 897.86597,252.24865" })
18
+ );
19
+ };
20
+
21
+ export { CriticalRiskIcon as default };
22
+ //# sourceMappingURL=CriticalRiskIcon.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CriticalRiskIcon.esm.js","sources":["../../../src/components/Icons/CriticalRiskIcon.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport * as React from 'react';\n\nimport { global_palette_red_200 as criticalColor } from '@patternfly/react-tokens/dist/js/global_palette_red_200';\n\nconst CriticalRiskIcon = ({\n className,\n title,\n}: {\n className: string;\n title?: string;\n}): React.ReactElement => {\n return (\n <svg\n viewBox=\"0 0 925 1024\"\n fill={criticalColor.value}\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n {title && <title>{title}</title>}\n <path d=\"M897.86597,252.24865 L491.105712,7.96742801 C473.40731,-2.65897781 451.300057,-2.65597516 433.611654,7.97743687 L27.1213875,252.245648 C10.3059556,262.353595 0.0163032058,280.549701 0.0163032058,300.182078 L0.0163032058,967.971163 C-1.04266102,1010.81008 49.7156241,1038.89994 85.4314175,1015.41816 C85.4304175,1015.42016 432.807682,798.630273 432.807682,798.630273 C450.891071,787.348287 473.816296,787.342282 491.906685,798.624268 L839.584939,1015.4612 C875.297732,1039.03406 926.031018,1010.73602 924.984054,968.003192 C924.985054,968.005193 924.985054,300.192087 924.985054,300.192087 C924.985054,280.552703 914.688401,262.353595 897.86597,252.24865\" />\n </svg>\n );\n};\n\nexport default CriticalRiskIcon;\n"],"names":["criticalColor"],"mappings":";;;AAmBA,MAAM,mBAAmB,CAAC;AAAA,EACxB,SAAA;AAAA,EACA;AACF,CAG0B,KAAA;AACxB,EACE,uBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,OAAQ,EAAA,cAAA;AAAA,MACR,MAAMA,sBAAc,CAAA,KAAA;AAAA,MACpB,KAAM,EAAA,4BAAA;AAAA,MACN;AAAA,KAAA;AAAA,IAEC,KAAA,oBAAU,KAAA,CAAA,aAAA,CAAA,OAAA,EAAA,IAAA,EAAO,KAAM,CAAA;AAAA,oBACxB,KAAA,CAAA,aAAA,CAAC,MAAK,EAAA,EAAA,CAAA,EAAE,+oBAAgpB,EAAA;AAAA,GAC1pB;AAEJ;;;;"}
@@ -0,0 +1,22 @@
1
+ import * as React from 'react';
2
+ import { global_palette_gold_400 } from '@patternfly/react-tokens/dist/js/global_palette_gold_400';
3
+
4
+ const EqualsIcon = ({
5
+ className,
6
+ title
7
+ }) => {
8
+ return /* @__PURE__ */ React.createElement(
9
+ "svg",
10
+ {
11
+ viewBox: "0 -960 960 960",
12
+ fill: global_palette_gold_400.value,
13
+ xmlns: "http://www.w3.org/2000/svg",
14
+ className
15
+ },
16
+ title && /* @__PURE__ */ React.createElement("title", null, title),
17
+ /* @__PURE__ */ React.createElement("path", { d: "M160-280v-120h640v120H160Zm0-280v-120h640v120H160Z" })
18
+ );
19
+ };
20
+
21
+ export { EqualsIcon as default };
22
+ //# sourceMappingURL=EqualsIcon.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EqualsIcon.esm.js","sources":["../../../src/components/Icons/EqualsIcon.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport * as React from 'react';\n\nimport { global_palette_gold_400 as mediumColor } from '@patternfly/react-tokens/dist/js/global_palette_gold_400';\n\nconst EqualsIcon = ({\n className,\n title,\n}: {\n className: string;\n title?: string;\n}): React.ReactElement => {\n return (\n <svg\n viewBox=\"0 -960 960 960\"\n fill={mediumColor.value}\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n {title && <title>{title}</title>}\n <path d=\"M160-280v-120h640v120H160Zm0-280v-120h640v120H160Z\" />\n </svg>\n );\n};\n\nexport default EqualsIcon;\n"],"names":["mediumColor"],"mappings":";;;AAmBA,MAAM,aAAa,CAAC;AAAA,EAClB,SAAA;AAAA,EACA;AACF,CAG0B,KAAA;AACxB,EACE,uBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,OAAQ,EAAA,gBAAA;AAAA,MACR,MAAMA,uBAAY,CAAA,KAAA;AAAA,MAClB,KAAM,EAAA,4BAAA;AAAA,MACN;AAAA,KAAA;AAAA,IAEC,KAAA,oBAAU,KAAA,CAAA,aAAA,CAAA,OAAA,EAAA,IAAA,EAAO,KAAM,CAAA;AAAA,oBACxB,KAAA,CAAA,aAAA,CAAC,MAAK,EAAA,EAAA,CAAA,EAAE,oDAAqD,EAAA;AAAA,GAC/D;AAEJ;;;;"}
@@ -0,0 +1,37 @@
1
+ import * as React from 'react';
2
+ import { makeStyles, createStyles } from '@material-ui/core';
3
+ import classNames from 'classnames';
4
+
5
+ const useStyles = makeStyles(
6
+ (theme) => createStyles({
7
+ icon: {
8
+ fill: "var(--pf-v5-global--Color--100)"
9
+ },
10
+ disabledButton: {
11
+ fill: theme.palette.grey[600]
12
+ }
13
+ })
14
+ );
15
+ const LinkToSBomIcon = ({
16
+ disabled,
17
+ dataTestId
18
+ }) => {
19
+ const classes = useStyles();
20
+ return /* @__PURE__ */ React.createElement(
21
+ "svg",
22
+ {
23
+ "data-testid": dataTestId,
24
+ width: "24",
25
+ height: "24",
26
+ viewBox: "0 0 24 24",
27
+ xmlns: "http://www.w3.org/2000/svg",
28
+ className: classNames(classes.icon, {
29
+ [classes.disabledButton]: disabled
30
+ })
31
+ },
32
+ /* @__PURE__ */ React.createElement("path", { d: "M11 17H7C5.61667 17 4.4375 16.5125 3.4625 15.5375C2.4875 14.5625 2 13.3833 2 12C2 10.6167 2.4875 9.4375 3.4625 8.4625C4.4375 7.4875 5.61667 7 7 7H11V9H7C6.16667 9 5.45833 9.29167 4.875 9.875C4.29167 10.4583 4 11.1667 4 12C4 12.8333 4.29167 13.5417 4.875 14.125C5.45833 14.7083 6.16667 15 7 15H11V17ZM8 13V11H16V13H8ZM13 17V15H17C17.8333 15 18.5417 14.7083 19.125 14.125C19.7083 13.5417 20 12.8333 20 12C20 11.1667 19.7083 10.4583 19.125 9.875C18.5417 9.29167 17.8333 9 17 9H13V7H17C18.3833 7 19.5625 7.4875 20.5375 8.4625C21.5125 9.4375 22 10.6167 22 12C22 13.3833 21.5125 14.5625 20.5375 15.5375C19.5625 16.5125 18.3833 17 17 17H13Z" })
33
+ );
34
+ };
35
+
36
+ export { LinkToSBomIcon as default };
37
+ //# sourceMappingURL=LinkToSbomIcon.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LinkToSbomIcon.esm.js","sources":["../../../src/components/Icons/LinkToSbomIcon.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport * as React from 'react';\n\nimport { createStyles, makeStyles, Theme } from '@material-ui/core';\nimport classNames from 'classnames';\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n icon: {\n fill: 'var(--pf-v5-global--Color--100)',\n },\n disabledButton: {\n fill: theme.palette.grey[600],\n },\n }),\n);\n\nconst LinkToSBomIcon = ({\n disabled,\n dataTestId,\n}: {\n dataTestId: string;\n disabled?: boolean;\n}): React.ReactElement => {\n const classes = useStyles();\n return (\n <svg\n data-testid={dataTestId}\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={classNames(classes.icon, {\n [classes.disabledButton]: disabled,\n })}\n >\n <path d=\"M11 17H7C5.61667 17 4.4375 16.5125 3.4625 15.5375C2.4875 14.5625 2 13.3833 2 12C2 10.6167 2.4875 9.4375 3.4625 8.4625C4.4375 7.4875 5.61667 7 7 7H11V9H7C6.16667 9 5.45833 9.29167 4.875 9.875C4.29167 10.4583 4 11.1667 4 12C4 12.8333 4.29167 13.5417 4.875 14.125C5.45833 14.7083 6.16667 15 7 15H11V17ZM8 13V11H16V13H8ZM13 17V15H17C17.8333 15 18.5417 14.7083 19.125 14.125C19.7083 13.5417 20 12.8333 20 12C20 11.1667 19.7083 10.4583 19.125 9.875C18.5417 9.29167 17.8333 9 17 9H13V7H17C18.3833 7 19.5625 7.4875 20.5375 8.4625C21.5125 9.4375 22 10.6167 22 12C22 13.3833 21.5125 14.5625 20.5375 15.5375C19.5625 16.5125 18.3833 17 17 17H13Z\" />\n </svg>\n );\n};\n\nexport default LinkToSBomIcon;\n"],"names":[],"mappings":";;;;AAoBA,MAAM,SAAY,GAAA,UAAA;AAAA,EAAW,CAAC,UAC5B,YAAa,CAAA;AAAA,IACX,IAAM,EAAA;AAAA,MACJ,IAAM,EAAA;AAAA,KACR;AAAA,IACA,cAAgB,EAAA;AAAA,MACd,IAAM,EAAA,KAAA,CAAM,OAAQ,CAAA,IAAA,CAAK,GAAG;AAAA;AAC9B,GACD;AACH,CAAA;AAEA,MAAM,iBAAiB,CAAC;AAAA,EACtB,QAAA;AAAA,EACA;AACF,CAG0B,KAAA;AACxB,EAAA,MAAM,UAAU,SAAU,EAAA;AAC1B,EACE,uBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,aAAa,EAAA,UAAA;AAAA,MACb,KAAM,EAAA,IAAA;AAAA,MACN,MAAO,EAAA,IAAA;AAAA,MACP,OAAQ,EAAA,WAAA;AAAA,MACR,KAAM,EAAA,4BAAA;AAAA,MACN,SAAA,EAAW,UAAW,CAAA,OAAA,CAAQ,IAAM,EAAA;AAAA,QAClC,CAAC,OAAQ,CAAA,cAAc,GAAG;AAAA,OAC3B;AAAA,KAAA;AAAA,oBAED,KAAA,CAAA,aAAA,CAAC,MAAK,EAAA,EAAA,CAAA,EAAE,2nBAA4nB,EAAA;AAAA,GACtoB;AAEJ;;;;"}
@@ -0,0 +1,36 @@
1
+ import * as React from 'react';
2
+ import { makeStyles, createStyles } from '@material-ui/core';
3
+ import classNames from 'classnames';
4
+
5
+ const useStyles = makeStyles(
6
+ (theme) => createStyles({
7
+ icon: {
8
+ fill: "var(--pf-v5-global--Color--100)"
9
+ },
10
+ disabledButton: {
11
+ fill: theme.palette.grey[600]
12
+ }
13
+ })
14
+ );
15
+ const OutputIcon = ({
16
+ disabled
17
+ }) => {
18
+ const classes = useStyles();
19
+ return /* @__PURE__ */ React.createElement(
20
+ "svg",
21
+ {
22
+ width: "24",
23
+ height: "24",
24
+ viewBox: "0 0 24 24",
25
+ fill: "none",
26
+ xmlns: "http://www.w3.org/2000/svg",
27
+ className: classNames(classes.icon, {
28
+ [classes.disabledButton]: disabled
29
+ })
30
+ },
31
+ /* @__PURE__ */ React.createElement("path", { d: "M5 21C4.45 21 3.97917 20.8042 3.5875 20.4125C3.19583 20.0208 3 19.55 3 19V5C3 4.45 3.19583 3.97917 3.5875 3.5875C3.97917 3.19583 4.45 3 5 3H19C19.55 3 20.0208 3.19583 20.4125 3.5875C20.8042 3.97917 21 4.45 21 5V19C21 19.55 20.8042 20.0208 20.4125 20.4125C20.0208 20.8042 19.55 21 19 21H5ZM5 19H19V7H5V19ZM7 12V10H17V12H7ZM7 16V14H13V16H7Z" })
32
+ );
33
+ };
34
+
35
+ export { OutputIcon as default };
36
+ //# sourceMappingURL=OutputIcon.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OutputIcon.esm.js","sources":["../../../src/components/Icons/OutputIcon.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport * as React from 'react';\n\nimport { createStyles, makeStyles, Theme } from '@material-ui/core';\nimport classNames from 'classnames';\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n icon: {\n fill: 'var(--pf-v5-global--Color--100)',\n },\n disabledButton: {\n fill: theme.palette.grey[600],\n },\n }),\n);\n\nconst OutputIcon = ({\n disabled,\n}: {\n disabled?: boolean;\n}): React.ReactElement => {\n const classes = useStyles();\n return (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={classNames(classes.icon, {\n [classes.disabledButton]: disabled,\n })}\n >\n <path d=\"M5 21C4.45 21 3.97917 20.8042 3.5875 20.4125C3.19583 20.0208 3 19.55 3 19V5C3 4.45 3.19583 3.97917 3.5875 3.5875C3.97917 3.19583 4.45 3 5 3H19C19.55 3 20.0208 3.19583 20.4125 3.5875C20.8042 3.97917 21 4.45 21 5V19C21 19.55 20.8042 20.0208 20.4125 20.4125C20.0208 20.8042 19.55 21 19 21H5ZM5 19H19V7H5V19ZM7 12V10H17V12H7ZM7 16V14H13V16H7Z\" />\n </svg>\n );\n};\n\nexport default OutputIcon;\n"],"names":[],"mappings":";;;;AAoBA,MAAM,SAAY,GAAA,UAAA;AAAA,EAAW,CAAC,UAC5B,YAAa,CAAA;AAAA,IACX,IAAM,EAAA;AAAA,MACJ,IAAM,EAAA;AAAA,KACR;AAAA,IACA,cAAgB,EAAA;AAAA,MACd,IAAM,EAAA,KAAA,CAAM,OAAQ,CAAA,IAAA,CAAK,GAAG;AAAA;AAC9B,GACD;AACH,CAAA;AAEA,MAAM,aAAa,CAAC;AAAA,EAClB;AACF,CAE0B,KAAA;AACxB,EAAA,MAAM,UAAU,SAAU,EAAA;AAC1B,EACE,uBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,KAAM,EAAA,IAAA;AAAA,MACN,MAAO,EAAA,IAAA;AAAA,MACP,OAAQ,EAAA,WAAA;AAAA,MACR,IAAK,EAAA,MAAA;AAAA,MACL,KAAM,EAAA,4BAAA;AAAA,MACN,SAAA,EAAW,UAAW,CAAA,OAAA,CAAQ,IAAM,EAAA;AAAA,QAClC,CAAC,OAAQ,CAAA,cAAc,GAAG;AAAA,OAC3B;AAAA,KAAA;AAAA,oBAED,KAAA,CAAA,aAAA,CAAC,MAAK,EAAA,EAAA,CAAA,EAAE,oVAAqV,EAAA;AAAA,GAC/V;AAEJ;;;;"}
@@ -0,0 +1,16 @@
1
+ import * as React from 'react';
2
+
3
+ const SignedBadgeIcon = ({
4
+ style
5
+ }) => {
6
+ return /* @__PURE__ */ React.createElement("svg", { version: "1.1", viewBox: "0 0 24 24", style }, /* @__PURE__ */ React.createElement("g", { fillRule: "evenodd", stroke: "none", strokeWidth: "1", fill: "none" }, /* @__PURE__ */ React.createElement(
7
+ "path",
8
+ {
9
+ d: "M10.9 15.1L16.6 9.39998L15.55 8.37498L10.975 12.95L8.45 10.425L7.35 11.525L10.9 15.1ZM12 21.975C9.66667 21.3916 7.75 20.0375 6.25 17.9125C4.75 15.7875 4 13.4583 4 10.925V4.97498L12 1.97498L20 4.97498V10.925C20 13.4583 19.25 15.7875 17.75 17.9125C16.25 20.0375 14.3333 21.3916 12 21.975Z",
10
+ fill: "#757575"
11
+ }
12
+ )));
13
+ };
14
+
15
+ export { SignedBadgeIcon as default };
16
+ //# sourceMappingURL=SignedBadge.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SignedBadge.esm.js","sources":["../../../src/components/Icons/SignedBadge.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport * as React from 'react';\n\nconst SignedBadgeIcon: React.FC<React.HTMLProps<SVGElement>> = ({\n style,\n}): React.ReactElement => {\n return (\n <svg version=\"1.1\" viewBox=\"0 0 24 24\" style={style}>\n <g fillRule=\"evenodd\" stroke=\"none\" strokeWidth=\"1\" fill=\"none\">\n <path\n d=\"M10.9 15.1L16.6 9.39998L15.55 8.37498L10.975 12.95L8.45 10.425L7.35 11.525L10.9 15.1ZM12 21.975C9.66667 21.3916 7.75 20.0375 6.25 17.9125C4.75 15.7875 4 13.4583 4 10.925V4.97498L12 1.97498L20 4.97498V10.925C20 13.4583 19.25 15.7875 17.75 17.9125C16.25 20.0375 14.3333 21.3916 12 21.975Z\"\n fill=\"#757575\"\n />\n </g>\n </svg>\n );\n};\n\nexport default SignedBadgeIcon;\n"],"names":[],"mappings":";;AAiBA,MAAM,kBAAyD,CAAC;AAAA,EAC9D;AACF,CAA0B,KAAA;AACxB,EAAA,2CACG,KAAI,EAAA,EAAA,OAAA,EAAQ,KAAM,EAAA,OAAA,EAAQ,aAAY,KACrC,EAAA,kBAAA,KAAA,CAAA,aAAA,CAAC,GAAE,EAAA,EAAA,QAAA,EAAS,WAAU,MAAO,EAAA,MAAA,EAAO,WAAY,EAAA,GAAA,EAAI,MAAK,MACvD,EAAA,kBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,CAAE,EAAA,gSAAA;AAAA,MACF,IAAK,EAAA;AAAA;AAAA,GAET,CACF,CAAA;AAEJ;;;;"}
@@ -0,0 +1,35 @@
1
+ import * as React from 'react';
2
+ import { makeStyles, createStyles } from '@material-ui/core';
3
+ import classNames from 'classnames';
4
+
5
+ const useStyles = makeStyles(
6
+ (theme) => createStyles({
7
+ icon: {
8
+ fill: "var(--pf-v5-global--Color--100)"
9
+ },
10
+ disabledButton: {
11
+ fill: theme.palette.grey[600]
12
+ }
13
+ })
14
+ );
15
+ const ViewLogsIcon = ({
16
+ disabled
17
+ }) => {
18
+ const classes = useStyles();
19
+ return /* @__PURE__ */ React.createElement(
20
+ "svg",
21
+ {
22
+ width: "24",
23
+ height: "24",
24
+ viewBox: "0 0 24 24",
25
+ xmlns: "http://www.w3.org/2000/svg",
26
+ className: classNames(classes.icon, {
27
+ [classes.disabledButton]: disabled
28
+ })
29
+ },
30
+ /* @__PURE__ */ React.createElement("path", { d: "M4.5 21C4.0875 21 3.73438 20.8531 3.44063 20.5594C3.14688 20.2656 3 19.9125 3 19.5V4.5C3 4.0875 3.14688 3.73438 3.44063 3.44063C3.73438 3.14688 4.0875 3 4.5 3H19.5C19.9125 3 20.2656 3.14688 20.5594 3.44063C20.8531 3.73438 21 4.0875 21 4.5V19.5C21 19.9125 20.8531 20.2656 20.5594 20.5594C20.2656 20.8531 19.9125 21 19.5 21H4.5ZM4.5 19.5H19.5V6.5H4.5V19.5ZM12.001 16.875C10.667 16.875 9.475 16.5154 8.425 15.7962C7.375 15.077 6.60833 14.1437 6.125 12.9962C6.60833 11.8487 7.37466 10.9167 8.42398 10.2C9.47329 9.48333 10.665 9.125 11.999 9.125C13.333 9.125 14.525 9.48459 15.575 10.2038C16.625 10.923 17.3917 11.8563 17.875 13.0038C17.3917 14.1513 16.6253 15.0833 15.576 15.8C14.5267 16.5167 13.335 16.875 12.001 16.875ZM11.9971 14.25C11.649 14.25 11.3542 14.1282 11.1125 13.8846C10.8708 13.6409 10.75 13.3451 10.75 12.9971C10.75 12.649 10.8718 12.3542 11.1155 12.1125C11.3591 11.8708 11.6549 11.75 12.003 11.75C12.351 11.75 12.6458 11.8718 12.8875 12.1155C13.1292 12.3591 13.25 12.6549 13.25 13.003C13.25 13.351 13.1282 13.6458 12.8846 13.8875C12.6409 14.1292 12.3451 14.25 11.9971 14.25ZM12 15C12.56 15 13.0333 14.8067 13.42 14.42C13.8067 14.0333 14 13.56 14 13C14 12.44 13.8067 11.9667 13.42 11.58C13.0333 11.1933 12.56 11 12 11C11.44 11 10.9667 11.1933 10.58 11.58C10.1933 11.9667 10 12.44 10 13C10 13.56 10.1933 14.0333 10.58 14.42C10.9667 14.8067 11.44 15 12 15Z" })
31
+ );
32
+ };
33
+
34
+ export { ViewLogsIcon as default };
35
+ //# sourceMappingURL=ViewLogsIcon.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ViewLogsIcon.esm.js","sources":["../../../src/components/Icons/ViewLogsIcon.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport * as React from 'react';\n\nimport { createStyles, makeStyles, Theme } from '@material-ui/core';\nimport classNames from 'classnames';\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n icon: {\n fill: 'var(--pf-v5-global--Color--100)',\n },\n disabledButton: {\n fill: theme.palette.grey[600],\n },\n }),\n);\n\nconst ViewLogsIcon = ({\n disabled,\n}: {\n disabled?: boolean;\n}): React.ReactElement => {\n const classes = useStyles();\n return (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={classNames(classes.icon, {\n [classes.disabledButton]: disabled,\n })}\n >\n <path d=\"M4.5 21C4.0875 21 3.73438 20.8531 3.44063 20.5594C3.14688 20.2656 3 19.9125 3 19.5V4.5C3 4.0875 3.14688 3.73438 3.44063 3.44063C3.73438 3.14688 4.0875 3 4.5 3H19.5C19.9125 3 20.2656 3.14688 20.5594 3.44063C20.8531 3.73438 21 4.0875 21 4.5V19.5C21 19.9125 20.8531 20.2656 20.5594 20.5594C20.2656 20.8531 19.9125 21 19.5 21H4.5ZM4.5 19.5H19.5V6.5H4.5V19.5ZM12.001 16.875C10.667 16.875 9.475 16.5154 8.425 15.7962C7.375 15.077 6.60833 14.1437 6.125 12.9962C6.60833 11.8487 7.37466 10.9167 8.42398 10.2C9.47329 9.48333 10.665 9.125 11.999 9.125C13.333 9.125 14.525 9.48459 15.575 10.2038C16.625 10.923 17.3917 11.8563 17.875 13.0038C17.3917 14.1513 16.6253 15.0833 15.576 15.8C14.5267 16.5167 13.335 16.875 12.001 16.875ZM11.9971 14.25C11.649 14.25 11.3542 14.1282 11.1125 13.8846C10.8708 13.6409 10.75 13.3451 10.75 12.9971C10.75 12.649 10.8718 12.3542 11.1155 12.1125C11.3591 11.8708 11.6549 11.75 12.003 11.75C12.351 11.75 12.6458 11.8718 12.8875 12.1155C13.1292 12.3591 13.25 12.6549 13.25 13.003C13.25 13.351 13.1282 13.6458 12.8846 13.8875C12.6409 14.1292 12.3451 14.25 11.9971 14.25ZM12 15C12.56 15 13.0333 14.8067 13.42 14.42C13.8067 14.0333 14 13.56 14 13C14 12.44 13.8067 11.9667 13.42 11.58C13.0333 11.1933 12.56 11 12 11C11.44 11 10.9667 11.1933 10.58 11.58C10.1933 11.9667 10 12.44 10 13C10 13.56 10.1933 14.0333 10.58 14.42C10.9667 14.8067 11.44 15 12 15Z\" />\n </svg>\n );\n};\n\nexport default ViewLogsIcon;\n"],"names":[],"mappings":";;;;AAoBA,MAAM,SAAY,GAAA,UAAA;AAAA,EAAW,CAAC,UAC5B,YAAa,CAAA;AAAA,IACX,IAAM,EAAA;AAAA,MACJ,IAAM,EAAA;AAAA,KACR;AAAA,IACA,cAAgB,EAAA;AAAA,MACd,IAAM,EAAA,KAAA,CAAM,OAAQ,CAAA,IAAA,CAAK,GAAG;AAAA;AAC9B,GACD;AACH,CAAA;AAEA,MAAM,eAAe,CAAC;AAAA,EACpB;AACF,CAE0B,KAAA;AACxB,EAAA,MAAM,UAAU,SAAU,EAAA;AAC1B,EACE,uBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,KAAM,EAAA,IAAA;AAAA,MACN,MAAO,EAAA,IAAA;AAAA,MACP,OAAQ,EAAA,WAAA;AAAA,MACR,KAAM,EAAA,4BAAA;AAAA,MACN,SAAA,EAAW,UAAW,CAAA,OAAA,CAAQ,IAAM,EAAA;AAAA,QAClC,CAAC,OAAQ,CAAA,cAAc,GAAG;AAAA,OAC3B;AAAA,KAAA;AAAA,oBAED,KAAA,CAAA,aAAA,CAAC,MAAK,EAAA,EAAA,CAAA,EAAE,u1CAAw1C,EAAA;AAAA,GACl2C;AAEJ;;;;"}