@backstage-community/plugin-tekton 3.17.0 → 3.18.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 (28) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/dist/components/PipelineRunList/PipelineRunRow.css.esm.js +1 -1
  3. package/dist/components/PipelineRunList/PipelineRunRowActions.esm.js +2 -2
  4. package/dist/components/PipelineRunList/PipelineRunRowActions.esm.js.map +1 -1
  5. package/dist/components/PipelineRunList/PlrStatus.css.esm.js +1 -1
  6. package/dist/components/PipelineRunList/ResourceBadge.css.esm.js +1 -1
  7. package/dist/components/common/ClusterSelector.css.esm.js +1 -1
  8. package/dist/components/common/ResourceStatus.css.esm.js +1 -1
  9. package/dist/components/common/StatusSelector.css.esm.js +1 -1
  10. package/dist/components/common/StatusSelector.esm.js.map +1 -1
  11. package/dist/components/pipeline-topology/PipelineTaskNode.css.esm.js +1 -1
  12. package/dist/components/pipeline-topology/PipelineTaskNode.esm.js +2 -2
  13. package/dist/components/pipeline-topology/PipelineTaskNode.esm.js.map +1 -1
  14. package/dist/components/pipeline-topology/PipelineVisualization.css.esm.js +1 -1
  15. package/dist/components/pipeline-topology/PipelineVisualization.esm.js +1 -1
  16. package/dist/components/pipeline-topology/PipelineVisualization.esm.js.map +1 -1
  17. package/dist/components/pipeline-topology/PipelineVisualizationStepList.css.esm.js +1 -1
  18. package/dist/components/pipeline-topology/pipelineComponentFactory.esm.js +3 -3
  19. package/dist/components/pipeline-topology/pipelineComponentFactory.esm.js.map +1 -1
  20. package/dist/hooks/useResourcesClusters.esm.js +1 -1
  21. package/dist/hooks/useResourcesClusters.esm.js.map +1 -1
  22. package/dist/node_modules_dist/style-inject/dist/style-inject.es.esm.js +29 -0
  23. package/dist/node_modules_dist/style-inject/dist/style-inject.es.esm.js.map +1 -0
  24. package/dist/utils/pipeline-topology-utils.esm.js +2 -2
  25. package/dist/utils/pipeline-topology-utils.esm.js.map +1 -1
  26. package/dist/utils/taskRun-utils.esm.js.map +1 -1
  27. package/dist/utils/tekton-utils.esm.js.map +1 -1
  28. package/package.json +23 -16
package/CHANGELOG.md CHANGED
@@ -1,5 +1,16 @@
1
1
  ### Dependencies
2
2
 
3
+ ## 3.18.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 2f344ca: Backstage version bump to v1.35.0
8
+
9
+ ### Patch Changes
10
+
11
+ - Updated dependencies [2f344ca]
12
+ - @backstage-community/plugin-tekton-common@1.5.0
13
+
3
14
  ## 3.17.0
4
15
 
5
16
  ### Minor Changes
@@ -1,4 +1,4 @@
1
- import styleInject from 'style-inject';
1
+ import styleInject from '../../node_modules_dist/style-inject/dist/style-inject.es.esm.js';
2
2
 
3
3
  var css_248z = ".bs-tkn-timestamp {\n color: inherit;\n}\n";
4
4
  styleInject(css_248z);
@@ -69,7 +69,7 @@ const PipelineRunRowActions = ({
69
69
  closeDialog,
70
70
  pods,
71
71
  taskRuns,
72
- activeTask: noActiveTask ? void 0 : activeTaskName
72
+ activeTask: noActiveTask ? undefined : activeTaskName
73
73
  }
74
74
  ), /* @__PURE__ */ React.createElement(
75
75
  PipelineRunOutputDialog,
@@ -108,7 +108,7 @@ const PipelineRunRowActions = ({
108
108
  "data-testid": "view-sbom-icon",
109
109
  disabled: !sbomTaskRun || !isSbomTaskRun(sbomTaskRun),
110
110
  size: "small",
111
- onClick: !hasExternalLink(sbomTaskRun) ? () => openDialog() : void 0,
111
+ onClick: !hasExternalLink(sbomTaskRun) ? () => openDialog() : undefined,
112
112
  style: { pointerEvents: "auto", padding: 0 }
113
113
  },
114
114
  /* @__PURE__ */ React.createElement(PipelineRunSBOMLink, { sbomTaskRun })
@@ -1 +1 @@
1
- {"version":3,"file":"PipelineRunRowActions.esm.js","sources":["../../../src/components/PipelineRunList/PipelineRunRowActions.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 { kubernetesProxyPermission } from '@backstage/plugin-kubernetes-common';\nimport { usePermission } from '@backstage/plugin-permission-react';\n\nimport { IconButton } from '@material-ui/core';\nimport { Flex, FlexItem } from '@patternfly/react-core';\nimport { Tooltip } from '@patternfly/react-core/dist/esm/components/Tooltip/Tooltip';\n\nimport {\n ComputedStatus,\n pipelineRunFilterReducer,\n PipelineRunKind,\n TaskRunKind,\n} from '@janus-idp/shared-react';\n\nimport { TektonResourcesContext } from '../../hooks/TektonResourcesContext';\nimport {\n getTaskrunsOutputGroup,\n hasExternalLink,\n isSbomTaskRun,\n} from '../../utils/taskRun-utils';\nimport OutputIcon from '../Icons/OutputIcon';\nimport ViewLogsIcon from '../Icons/ViewLogsIcon';\nimport PipelineRunLogDialog from '../PipelineRunLogs/PipelineRunLogDialog';\nimport PipelineRunOutputDialog from '../PipelineRunOutput/PipelineRunOutputDialog';\nimport PipelineRunSBOMLink from './PipelineRunSBOMLink';\n\nconst PipelineRunRowActions: React.FC<{ pipelineRun: PipelineRunKind }> = ({\n pipelineRun,\n}) => {\n const { watchResourcesData } = React.useContext(TektonResourcesContext);\n const [open, setOpen] = React.useState<boolean>(false);\n\n const [openOutput, setOpenOutput] = React.useState<boolean>(false);\n const [noActiveTask, setNoActiveTask] = React.useState(false);\n const pods = watchResourcesData?.pods?.data || [];\n const taskRuns = watchResourcesData?.taskruns?.data || [];\n const { sbomTaskRun } = getTaskrunsOutputGroup(\n pipelineRun?.metadata?.name,\n taskRuns,\n );\n const activeTaskName = sbomTaskRun?.metadata?.name;\n\n const hasKubernetesProxyAccess = usePermission({\n permission: kubernetesProxyPermission,\n });\n\n const openDialog = (viewLogs?: boolean) => {\n if (viewLogs) setNoActiveTask(true);\n setOpen(true);\n };\n\n const openOutputDialog = () => {\n setOpenOutput(true);\n };\n\n const closeDialog = () => {\n setNoActiveTask(false);\n setOpen(false);\n };\n\n const {\n acsImageScanTaskRun,\n acsImageCheckTaskRun,\n acsDeploymentCheckTaskRun,\n ecTaskRun,\n } = getTaskrunsOutputGroup(pipelineRun?.metadata?.name, taskRuns);\n\n const finishedTaskruns = [\n ...(acsImageScanTaskRun ? [acsImageScanTaskRun] : []),\n ...(acsImageCheckTaskRun ? [acsImageCheckTaskRun] : []),\n ...(acsDeploymentCheckTaskRun ? [acsDeploymentCheckTaskRun] : []),\n ...(ecTaskRun ? [ecTaskRun] : []),\n ].filter((taskRun: TaskRunKind) =>\n [\n ComputedStatus.Succeeded,\n ComputedStatus.Failed,\n ComputedStatus.Skipped,\n ].includes(pipelineRunFilterReducer(taskRun)),\n );\n\n const results =\n pipelineRun?.status?.pipelineResults || pipelineRun?.status?.results || [];\n\n const disabled =\n results.length === 0 ? finishedTaskruns.length === 0 : results.length === 0;\n\n return (\n <>\n <PipelineRunLogDialog\n pipelineRun={pipelineRun}\n open={open}\n closeDialog={closeDialog}\n pods={pods}\n taskRuns={taskRuns}\n activeTask={noActiveTask ? undefined : activeTaskName}\n />\n\n <PipelineRunOutputDialog\n pipelineRun={pipelineRun}\n taskRuns={taskRuns}\n open={openOutput}\n closeDialog={() => {\n setOpenOutput(false);\n }}\n />\n <Flex gap={{ default: 'gapXs' }}>\n <FlexItem>\n <Tooltip\n content={\n hasKubernetesProxyAccess.allowed\n ? 'View logs'\n : 'Unauthorized to view logs'\n }\n >\n <IconButton\n size=\"small\"\n data-testid=\"view-logs-icon\"\n onClick={() => openDialog(true)}\n disabled={!hasKubernetesProxyAccess.allowed}\n style={{ pointerEvents: 'auto', padding: 0 }}\n >\n <ViewLogsIcon disabled={!hasKubernetesProxyAccess.allowed} />\n </IconButton>\n </Tooltip>\n </FlexItem>\n\n <FlexItem align={{ default: 'alignLeft' }}>\n <Tooltip\n content={\n !sbomTaskRun\n ? 'View SBOM is not applicable for this PipelineRun'\n : 'View SBOM'\n }\n >\n <IconButton\n data-testid=\"view-sbom-icon\"\n disabled={!sbomTaskRun || !isSbomTaskRun(sbomTaskRun)}\n size=\"small\"\n onClick={\n !hasExternalLink(sbomTaskRun) ? () => openDialog() : undefined\n }\n style={{ pointerEvents: 'auto', padding: 0 }}\n >\n <PipelineRunSBOMLink sbomTaskRun={sbomTaskRun} />\n </IconButton>\n </Tooltip>\n </FlexItem>\n <FlexItem align={{ default: 'alignLeft' }}>\n <Tooltip\n content={\n disabled\n ? 'View Output is not applicable for this PipelineRun'\n : 'View Output'\n }\n >\n <IconButton\n data-testid=\"view-output-icon\"\n disabled={disabled}\n size=\"small\"\n onClick={() => openOutputDialog()}\n style={{ pointerEvents: 'auto', padding: 0 }}\n >\n <OutputIcon disabled={disabled} />\n </IconButton>\n </Tooltip>\n </FlexItem>\n </Flex>\n </>\n );\n};\nexport default React.memo(PipelineRunRowActions);\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PipelineRunRowActions.esm.js","sources":["../../../src/components/PipelineRunList/PipelineRunRowActions.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 { kubernetesProxyPermission } from '@backstage/plugin-kubernetes-common';\nimport { usePermission } from '@backstage/plugin-permission-react';\n\nimport { IconButton } from '@material-ui/core';\nimport { Flex, FlexItem } from '@patternfly/react-core';\nimport { Tooltip } from '@patternfly/react-core/dist/esm/components/Tooltip/Tooltip';\n\nimport {\n ComputedStatus,\n pipelineRunFilterReducer,\n PipelineRunKind,\n TaskRunKind,\n} from '@janus-idp/shared-react';\n\nimport { TektonResourcesContext } from '../../hooks/TektonResourcesContext';\nimport {\n getTaskrunsOutputGroup,\n hasExternalLink,\n isSbomTaskRun,\n} from '../../utils/taskRun-utils';\nimport OutputIcon from '../Icons/OutputIcon';\nimport ViewLogsIcon from '../Icons/ViewLogsIcon';\nimport PipelineRunLogDialog from '../PipelineRunLogs/PipelineRunLogDialog';\nimport PipelineRunOutputDialog from '../PipelineRunOutput/PipelineRunOutputDialog';\nimport PipelineRunSBOMLink from './PipelineRunSBOMLink';\n\nconst PipelineRunRowActions: React.FC<{ pipelineRun: PipelineRunKind }> = ({\n pipelineRun,\n}) => {\n const { watchResourcesData } = React.useContext(TektonResourcesContext);\n const [open, setOpen] = React.useState<boolean>(false);\n\n const [openOutput, setOpenOutput] = React.useState<boolean>(false);\n const [noActiveTask, setNoActiveTask] = React.useState(false);\n const pods = watchResourcesData?.pods?.data || [];\n const taskRuns = watchResourcesData?.taskruns?.data || [];\n const { sbomTaskRun } = getTaskrunsOutputGroup(\n pipelineRun?.metadata?.name,\n taskRuns,\n );\n const activeTaskName = sbomTaskRun?.metadata?.name;\n\n const hasKubernetesProxyAccess = usePermission({\n permission: kubernetesProxyPermission,\n });\n\n const openDialog = (viewLogs?: boolean) => {\n if (viewLogs) setNoActiveTask(true);\n setOpen(true);\n };\n\n const openOutputDialog = () => {\n setOpenOutput(true);\n };\n\n const closeDialog = () => {\n setNoActiveTask(false);\n setOpen(false);\n };\n\n const {\n acsImageScanTaskRun,\n acsImageCheckTaskRun,\n acsDeploymentCheckTaskRun,\n ecTaskRun,\n } = getTaskrunsOutputGroup(pipelineRun?.metadata?.name, taskRuns);\n\n const finishedTaskruns = [\n ...(acsImageScanTaskRun ? [acsImageScanTaskRun] : []),\n ...(acsImageCheckTaskRun ? [acsImageCheckTaskRun] : []),\n ...(acsDeploymentCheckTaskRun ? [acsDeploymentCheckTaskRun] : []),\n ...(ecTaskRun ? [ecTaskRun] : []),\n ].filter((taskRun: TaskRunKind) =>\n [\n ComputedStatus.Succeeded,\n ComputedStatus.Failed,\n ComputedStatus.Skipped,\n ].includes(pipelineRunFilterReducer(taskRun)),\n );\n\n const results =\n pipelineRun?.status?.pipelineResults || pipelineRun?.status?.results || [];\n\n const disabled =\n results.length === 0 ? finishedTaskruns.length === 0 : results.length === 0;\n\n return (\n <>\n <PipelineRunLogDialog\n pipelineRun={pipelineRun}\n open={open}\n closeDialog={closeDialog}\n pods={pods}\n taskRuns={taskRuns}\n activeTask={noActiveTask ? undefined : activeTaskName}\n />\n\n <PipelineRunOutputDialog\n pipelineRun={pipelineRun}\n taskRuns={taskRuns}\n open={openOutput}\n closeDialog={() => {\n setOpenOutput(false);\n }}\n />\n <Flex gap={{ default: 'gapXs' }}>\n <FlexItem>\n <Tooltip\n content={\n hasKubernetesProxyAccess.allowed\n ? 'View logs'\n : 'Unauthorized to view logs'\n }\n >\n <IconButton\n size=\"small\"\n data-testid=\"view-logs-icon\"\n onClick={() => openDialog(true)}\n disabled={!hasKubernetesProxyAccess.allowed}\n style={{ pointerEvents: 'auto', padding: 0 }}\n >\n <ViewLogsIcon disabled={!hasKubernetesProxyAccess.allowed} />\n </IconButton>\n </Tooltip>\n </FlexItem>\n\n <FlexItem align={{ default: 'alignLeft' }}>\n <Tooltip\n content={\n !sbomTaskRun\n ? 'View SBOM is not applicable for this PipelineRun'\n : 'View SBOM'\n }\n >\n <IconButton\n data-testid=\"view-sbom-icon\"\n disabled={!sbomTaskRun || !isSbomTaskRun(sbomTaskRun)}\n size=\"small\"\n onClick={\n !hasExternalLink(sbomTaskRun) ? () => openDialog() : undefined\n }\n style={{ pointerEvents: 'auto', padding: 0 }}\n >\n <PipelineRunSBOMLink sbomTaskRun={sbomTaskRun} />\n </IconButton>\n </Tooltip>\n </FlexItem>\n <FlexItem align={{ default: 'alignLeft' }}>\n <Tooltip\n content={\n disabled\n ? 'View Output is not applicable for this PipelineRun'\n : 'View Output'\n }\n >\n <IconButton\n data-testid=\"view-output-icon\"\n disabled={disabled}\n size=\"small\"\n onClick={() => openOutputDialog()}\n style={{ pointerEvents: 'auto', padding: 0 }}\n >\n <OutputIcon disabled={disabled} />\n </IconButton>\n </Tooltip>\n </FlexItem>\n </Flex>\n </>\n );\n};\nexport default React.memo(PipelineRunRowActions);\n"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import styleInject from 'style-inject';
1
+ import styleInject from '../../node_modules_dist/style-inject/dist/style-inject.es.esm.js';
2
2
 
3
3
  var css_248z = ".bs-tkn-plrstatus {\n display: flex;\n align-items: center;\n}\n\n.bs-tkn-plrstatus svg {\n top: 0;\n}\n";
4
4
  styleInject(css_248z);
@@ -1,4 +1,4 @@
1
- import styleInject from 'style-inject';
1
+ import styleInject from '../../node_modules_dist/style-inject/dist/style-inject.es.esm.js';
2
2
 
3
3
  var css_248z = ".bs-tkn-pipeline-visualization__label {\n align-items: baseline;\n}\n\n.bs-tkn-pipeline-visualization__label .badge {\n font-size: 12px;\n line-height: 20px;\n margin-right: 4px;\n min-width: 24px;\n padding: 0 7px;\n border-radius: 20px;\n color: var(--pf-t--color--white);\n display: inline-block;\n text-align: center;\n white-space: nowrap;\n width: 100%;\n}\n";
4
4
  styleInject(css_248z);
@@ -1,4 +1,4 @@
1
- import styleInject from 'style-inject';
1
+ import styleInject from '../../node_modules_dist/style-inject/dist/style-inject.es.esm.js';
2
2
 
3
3
  var css_248z = ".bs-tkn-cluster-selector {\n display: flex;\n align-items: center;\n}\n\n.bs-tkn-cluster-selector > div > div > div {\n margin-top: 0;\n}\n";
4
4
  styleInject(css_248z);
@@ -1,4 +1,4 @@
1
- import styleInject from 'style-inject';
1
+ import styleInject from '../../node_modules_dist/style-inject/dist/style-inject.es.esm.js';
2
2
 
3
3
  var css_248z = ".bs-tkn-resource-status {\n padding-left: var(--pf-t--global--spacer--sm);\n white-space: nowrap;\n}\n\n.bs-tkn-resource-status__badge {\n vertical-align: middle;\n}\n\n.bs-tkn-resource-status__badge--alt {\n vertical-align: baseline;\n}\n";
4
4
  styleInject(css_248z);
@@ -1,4 +1,4 @@
1
- import styleInject from 'style-inject';
1
+ import styleInject from '../../node_modules_dist/style-inject/dist/style-inject.es.esm.js';
2
2
 
3
3
  var css_248z = ".bs-tkn-status-selector {\n display: flex;\n align-items: center;\n}\n\n.bs-tkn-status-selector > div > div > div {\n margin-top: 0;\n}\n";
4
4
  styleInject(css_248z);
@@ -1 +1 @@
1
- {"version":3,"file":"StatusSelector.esm.js","sources":["../../../src/components/common/StatusSelector.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 { Select, SelectedItems } from '@backstage/core-components';\n\nimport { makeStyles, Theme, Typography } from '@material-ui/core';\n\nimport './StatusSelector.css';\n\nimport { ComputedStatus } from '@janus-idp/shared-react';\n\nimport { TektonResourcesContext } from '../../hooks/TektonResourcesContext';\n\nconst useStyles = makeStyles<Theme>(theme => ({\n label: {\n color: theme.palette.text.primary,\n fontSize: '1rem',\n paddingRight: '10px',\n fontWeight: 'bold',\n },\n}));\n\nexport const statusOptions = Object.entries(ComputedStatus)\n .sort(([keyA], [keyB]) => {\n if (keyA === keyB) {\n return 0;\n } else if (keyA < keyB) {\n return -1;\n }\n return 1;\n })\n .map(([key, value]) => ({\n value: key,\n label: value,\n }));\n\nexport const StatusSelector = () => {\n const classes = useStyles();\n const { selectedStatus, setSelectedStatus } = React.useContext(\n TektonResourcesContext,\n );\n\n const onStatusChange = (status: SelectedItems) => {\n setSelectedStatus(status as ComputedStatus);\n };\n\n return (\n <div className=\"bs-tkn-status-selector\">\n <Typography className={classes.label}>Status</Typography>\n <Select\n onChange={onStatusChange}\n label=\"\"\n items={statusOptions}\n selected={selectedStatus}\n margin=\"dense\"\n />\n </div>\n );\n};\n"],"names":["React"],"mappings":";;;;;;;AA2BA,MAAM,SAAA,GAAY,WAAkB,CAAU,KAAA,MAAA;AAAA,EAC5C,KAAO,EAAA;AAAA,IACL,KAAA,EAAO,KAAM,CAAA,OAAA,CAAQ,IAAK,CAAA,OAAA;AAAA,IAC1B,QAAU,EAAA,MAAA;AAAA,IACV,YAAc,EAAA,MAAA;AAAA,IACd,UAAY,EAAA;AAAA;AAEhB,CAAE,CAAA,CAAA;AAEK,MAAM,aAAgB,GAAA,MAAA,CAAO,OAAQ,CAAA,cAAc,CACvD,CAAA,IAAA,CAAK,CAAC,CAAC,IAAI,CAAA,EAAG,CAAC,IAAI,CAAM,KAAA;AACxB,EAAA,IAAI,SAAS,IAAM,EAAA;AACjB,IAAO,OAAA,CAAA;AAAA,GACT,MAAA,IAAW,OAAO,IAAM,EAAA;AACtB,IAAO,OAAA,CAAA,CAAA;AAAA;AAET,EAAO,OAAA,CAAA;AACT,CAAC,EACA,GAAI,CAAA,CAAC,CAAC,GAAA,EAAK,KAAK,CAAO,MAAA;AAAA,EACtB,KAAO,EAAA,GAAA;AAAA,EACP,KAAO,EAAA;AACT,CAAE,CAAA;AAEG,MAAM,iBAAiB,MAAM;AAClC,EAAA,MAAM,UAAU,SAAU,EAAA;AAC1B,EAAA,MAAM,EAAE,cAAA,EAAgB,iBAAkB,EAAA,GAAIA,cAAM,CAAA,UAAA;AAAA,IAClD;AAAA,GACF;AAEA,EAAM,MAAA,cAAA,GAAiB,CAAC,MAA0B,KAAA;AAChD,IAAA,iBAAA,CAAkB,MAAwB,CAAA;AAAA,GAC5C;AAEA,EACE,uBAAAA,cAAA,CAAA,aAAA,CAAC,KAAI,EAAA,EAAA,SAAA,EAAU,wBACb,EAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,cAAW,SAAW,EAAA,OAAA,CAAQ,KAAO,EAAA,EAAA,QAAM,CAC5C,kBAAAA,cAAA,CAAA,aAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,QAAU,EAAA,cAAA;AAAA,MACV,KAAM,EAAA,EAAA;AAAA,MACN,KAAO,EAAA,aAAA;AAAA,MACP,QAAU,EAAA,cAAA;AAAA,MACV,MAAO,EAAA;AAAA;AAAA,GAEX,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"StatusSelector.esm.js","sources":["../../../src/components/common/StatusSelector.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 { Select, SelectedItems } from '@backstage/core-components';\n\nimport { makeStyles, Theme, Typography } from '@material-ui/core';\n\nimport './StatusSelector.css';\n\nimport { ComputedStatus } from '@janus-idp/shared-react';\n\nimport { TektonResourcesContext } from '../../hooks/TektonResourcesContext';\n\nconst useStyles = makeStyles<Theme>(theme => ({\n label: {\n color: theme.palette.text.primary,\n fontSize: '1rem',\n paddingRight: '10px',\n fontWeight: 'bold',\n },\n}));\n\nexport const statusOptions = Object.entries(ComputedStatus)\n .sort(([keyA], [keyB]) => {\n if (keyA === keyB) {\n return 0;\n } else if (keyA < keyB) {\n return -1;\n }\n return 1;\n })\n .map(([key, value]) => ({\n value: key,\n label: value,\n }));\n\nexport const StatusSelector = () => {\n const classes = useStyles();\n const { selectedStatus, setSelectedStatus } = React.useContext(\n TektonResourcesContext,\n );\n\n const onStatusChange = (status: SelectedItems) => {\n setSelectedStatus(status as ComputedStatus);\n };\n\n return (\n <div className=\"bs-tkn-status-selector\">\n <Typography className={classes.label}>Status</Typography>\n <Select\n onChange={onStatusChange}\n label=\"\"\n items={statusOptions}\n selected={selectedStatus}\n margin=\"dense\"\n />\n </div>\n );\n};\n"],"names":["React"],"mappings":";;;;;;;AA2BA,MAAM,SAAA,GAAY,WAAkB,CAAU,KAAA,MAAA;AAAA,EAC5C,KAAO,EAAA;AAAA,IACL,KAAA,EAAO,KAAM,CAAA,OAAA,CAAQ,IAAK,CAAA,OAAA;AAAA,IAC1B,QAAU,EAAA,MAAA;AAAA,IACV,YAAc,EAAA,MAAA;AAAA,IACd,UAAY,EAAA;AAAA;AAEhB,CAAE,CAAA,CAAA;AAEK,MAAM,aAAgB,GAAA,MAAA,CAAO,OAAQ,CAAA,cAAc,CACvD,CAAA,IAAA,CAAK,CAAC,CAAC,IAAI,CAAA,EAAG,CAAC,IAAI,CAAM,KAAA;AACxB,EAAA,IAAI,SAAS,IAAM,EAAA;AACjB,IAAO,OAAA,CAAA;AAAA,GACT,MAAA,IAAW,OAAO,IAAM,EAAA;AACtB,IAAO,OAAA,EAAA;AAAA;AAET,EAAO,OAAA,CAAA;AACT,CAAC,EACA,GAAI,CAAA,CAAC,CAAC,GAAA,EAAK,KAAK,CAAO,MAAA;AAAA,EACtB,KAAO,EAAA,GAAA;AAAA,EACP,KAAO,EAAA;AACT,CAAE,CAAA;AAEG,MAAM,iBAAiB,MAAM;AAClC,EAAA,MAAM,UAAU,SAAU,EAAA;AAC1B,EAAA,MAAM,EAAE,cAAA,EAAgB,iBAAkB,EAAA,GAAIA,cAAM,CAAA,UAAA;AAAA,IAClD;AAAA,GACF;AAEA,EAAM,MAAA,cAAA,GAAiB,CAAC,MAA0B,KAAA;AAChD,IAAA,iBAAA,CAAkB,MAAwB,CAAA;AAAA,GAC5C;AAEA,EACE,uBAAAA,cAAA,CAAA,aAAA,CAAC,KAAI,EAAA,EAAA,SAAA,EAAU,wBACb,EAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,cAAW,SAAW,EAAA,OAAA,CAAQ,KAAO,EAAA,EAAA,QAAM,CAC5C,kBAAAA,cAAA,CAAA,aAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,QAAU,EAAA,cAAA;AAAA,MACV,KAAM,EAAA,EAAA;AAAA,MACN,KAAO,EAAA,aAAA;AAAA,MACP,QAAU,EAAA,cAAA;AAAA,MACV,MAAO,EAAA;AAAA;AAAA,GAEX,CAAA;AAEJ;;;;"}
@@ -1,4 +1,4 @@
1
- import styleInject from 'style-inject';
1
+ import styleInject from '../../node_modules_dist/style-inject/dist/style-inject.es.esm.js';
2
2
 
3
3
  var css_248z = ".bs-tkn-pipeline-task-node:focus {\n outline: -webkit-focus-ring-color auto 5px;\n}\n";
4
4
  styleInject(css_248z);
@@ -48,7 +48,7 @@ const PipelineTaskNode = ({
48
48
  const passedData = React__default.useMemo(() => {
49
49
  const newData = { ...data };
50
50
  Object.keys(newData).forEach((key) => {
51
- if (newData[key] === void 0) {
51
+ if (newData[key] === undefined) {
52
52
  delete newData[key];
53
53
  }
54
54
  });
@@ -81,7 +81,7 @@ const PipelineTaskNode = ({
81
81
  {
82
82
  className: "bs-tkn-pipeline-task-node",
83
83
  element,
84
- onContextMenu: data.showContextMenu ? onContextMenu : void 0,
84
+ onContextMenu: data.showContextMenu ? onContextMenu : undefined,
85
85
  contextMenuOpen,
86
86
  scaleNode: (hover || contextMenuOpen) && detailsLevel !== ScaleDetailsLevel.high,
87
87
  hideDetailsAtMedium: true,
@@ -1 +1 @@
1
- {"version":3,"file":"PipelineTaskNode.esm.js","sources":["../../../src/components/pipeline-topology/PipelineTaskNode.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';\nimport {\n DEFAULT_LAYER,\n DEFAULT_WHEN_OFFSET,\n GraphElement,\n Layer,\n Node,\n RunStatus,\n ScaleDetailsLevel,\n TaskNode,\n TOP_LAYER,\n useDetailsLevel,\n useHover,\n WhenDecorator,\n WithContextMenuProps,\n WithSelectionProps,\n} from '@patternfly/react-topology';\n// eslint-disable-next-line @backstage/no-undeclared-imports\nimport { observer } from 'mobx-react';\n\nimport { PipelineTaskWithStatus, TaskRunKind } from '@janus-idp/shared-react';\n\nimport { NodeType } from '../../consts/pipeline-topology-const';\nimport {\n TEKTON_PIPELINE_RUN,\n TEKTON_PIPELINE_TASK,\n} from '../../consts/tekton-const';\nimport { TektonResourcesContext } from '../../hooks/TektonResourcesContext';\nimport { StepStatus } from '../../types/taskRun';\nimport { TektonResourcesContextData } from '../../types/types';\nimport { createStepStatus } from '../../utils/pipeline-step-utils';\nimport { getTaskStatus } from '../../utils/pipelineRun-utils';\nimport PipelineRunLogDialog from '../PipelineRunLogs/PipelineRunLogDialog';\nimport { PipelineVisualizationStepList } from './PipelineVisualizationStepList';\n\nimport './PipelineTaskNode.css';\n\ntype PipelineTaskNodeProps = {\n element: Node;\n} & WithContextMenuProps &\n WithSelectionProps &\n GraphElement;\n\nconst PipelineTaskNode = ({\n element,\n onContextMenu,\n contextMenuOpen,\n ...rest\n}: PipelineTaskNodeProps) => {\n const [open, setOpen] = React.useState<boolean>(false);\n const { watchResourcesData } = React.useContext<TektonResourcesContextData>(\n TektonResourcesContext,\n );\n const data = element.getData();\n const triggerRef = React.useRef<SVGGElement | null>(null);\n\n const pipelineRun = data.pipelineRun;\n const [hover, hoverRef] = useHover();\n const detailsLevel = useDetailsLevel();\n const isFinallyTask = element.getType() === NodeType.FINALLY_NODE;\n\n const pods = watchResourcesData?.pods?.data || [];\n const taskRuns = watchResourcesData?.taskruns?.data || [];\n const openDialog = () => {\n setOpen(true);\n };\n\n const closeDialog = () => {\n setOpen(false);\n };\n\n const computedTask: PipelineTaskWithStatus = data.task;\n const stepList =\n computedTask?.status?.steps || computedTask?.taskSpec?.steps || [];\n\n const taskStatus = getTaskStatus(data.pipelineRun, data.task);\n\n const stepStatusList: StepStatus[] = stepList.map((step: { name: string }) =>\n createStepStatus(step, taskStatus),\n );\n const succeededStepsCount = stepStatusList.filter(\n ({ status }) => status === RunStatus.Succeeded,\n ).length;\n\n const badge =\n stepStatusList.length > 0 && data.status\n ? `${succeededStepsCount}/${stepStatusList.length}`\n : null;\n\n const passedData = React.useMemo(() => {\n const newData = { ...data };\n Object.keys(newData).forEach(key => {\n if (newData[key] === undefined) {\n delete newData[key];\n }\n });\n return newData;\n }, [data]);\n\n const hasTaskIcon = !!(data.taskIconClass || data.taskIcon);\n const whenDecorator = data.whenStatus ? (\n <WhenDecorator\n element={element}\n status={data.whenStatus}\n leftOffset={\n hasTaskIcon\n ? DEFAULT_WHEN_OFFSET + (element.getBounds().height - 4) * 0.75\n : DEFAULT_WHEN_OFFSET\n }\n />\n ) : null;\n const activeTaskId = taskRuns.find(\n (tr: TaskRunKind) =>\n tr?.metadata?.labels?.[TEKTON_PIPELINE_RUN] ===\n pipelineRun?.metadata?.name &&\n tr?.metadata?.labels?.[TEKTON_PIPELINE_TASK] === data.task?.name,\n )?.metadata?.name;\n\n const taskNode = (\n <>\n <PipelineRunLogDialog\n pipelineRun={pipelineRun}\n open={open}\n closeDialog={closeDialog}\n pods={pods}\n taskRuns={taskRuns}\n activeTask={activeTaskId}\n />\n <TaskNode\n className=\"bs-tkn-pipeline-task-node\"\n element={element}\n onContextMenu={data.showContextMenu ? onContextMenu : undefined}\n contextMenuOpen={contextMenuOpen}\n scaleNode={\n (hover || contextMenuOpen) && detailsLevel !== ScaleDetailsLevel.high\n }\n hideDetailsAtMedium\n {...passedData}\n {...rest}\n badge={badge}\n truncateLength={element.getData()?.label?.length}\n onSelect={activeTaskId && openDialog}\n >\n {whenDecorator}\n </TaskNode>\n </>\n );\n\n return (\n <Layer\n id={\n detailsLevel !== ScaleDetailsLevel.high && (hover || contextMenuOpen)\n ? TOP_LAYER\n : DEFAULT_LAYER\n }\n >\n <g\n data-test={`task ${element.getLabel()}`}\n className=\"bs-tkn-pipeline-task-node\"\n ref={hoverRef as React.LegacyRef<SVGGElement>}\n >\n <Tooltip\n position=\"bottom\"\n enableFlip={false}\n content={\n <PipelineVisualizationStepList\n isSpecOverview={!data.status}\n taskName={element.getLabel()}\n steps={stepStatusList}\n isFinallyTask={isFinallyTask}\n />\n }\n triggerRef={triggerRef}\n >\n <g ref={triggerRef}>{taskNode}</g>\n </Tooltip>\n </g>\n </Layer>\n );\n};\n\nexport default React.memo(observer(PipelineTaskNode));\n"],"names":["React"],"mappings":"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"}
1
+ {"version":3,"file":"PipelineTaskNode.esm.js","sources":["../../../src/components/pipeline-topology/PipelineTaskNode.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';\nimport {\n DEFAULT_LAYER,\n DEFAULT_WHEN_OFFSET,\n GraphElement,\n Layer,\n Node,\n RunStatus,\n ScaleDetailsLevel,\n TaskNode,\n TOP_LAYER,\n useDetailsLevel,\n useHover,\n WhenDecorator,\n WithContextMenuProps,\n WithSelectionProps,\n} from '@patternfly/react-topology';\n// eslint-disable-next-line @backstage/no-undeclared-imports\nimport { observer } from 'mobx-react';\n\nimport { PipelineTaskWithStatus, TaskRunKind } from '@janus-idp/shared-react';\n\nimport { NodeType } from '../../consts/pipeline-topology-const';\nimport {\n TEKTON_PIPELINE_RUN,\n TEKTON_PIPELINE_TASK,\n} from '../../consts/tekton-const';\nimport { TektonResourcesContext } from '../../hooks/TektonResourcesContext';\nimport { StepStatus } from '../../types/taskRun';\nimport { TektonResourcesContextData } from '../../types/types';\nimport { createStepStatus } from '../../utils/pipeline-step-utils';\nimport { getTaskStatus } from '../../utils/pipelineRun-utils';\nimport PipelineRunLogDialog from '../PipelineRunLogs/PipelineRunLogDialog';\nimport { PipelineVisualizationStepList } from './PipelineVisualizationStepList';\n\nimport './PipelineTaskNode.css';\n\ntype PipelineTaskNodeProps = {\n element: Node;\n} & WithContextMenuProps &\n WithSelectionProps &\n GraphElement;\n\nconst PipelineTaskNode = ({\n element,\n onContextMenu,\n contextMenuOpen,\n ...rest\n}: PipelineTaskNodeProps) => {\n const [open, setOpen] = React.useState<boolean>(false);\n const { watchResourcesData } = React.useContext<TektonResourcesContextData>(\n TektonResourcesContext,\n );\n const data = element.getData();\n const triggerRef = React.useRef<SVGGElement | null>(null);\n\n const pipelineRun = data.pipelineRun;\n const [hover, hoverRef] = useHover();\n const detailsLevel = useDetailsLevel();\n const isFinallyTask = element.getType() === NodeType.FINALLY_NODE;\n\n const pods = watchResourcesData?.pods?.data || [];\n const taskRuns = watchResourcesData?.taskruns?.data || [];\n const openDialog = () => {\n setOpen(true);\n };\n\n const closeDialog = () => {\n setOpen(false);\n };\n\n const computedTask: PipelineTaskWithStatus = data.task;\n const stepList =\n computedTask?.status?.steps || computedTask?.taskSpec?.steps || [];\n\n const taskStatus = getTaskStatus(data.pipelineRun, data.task);\n\n const stepStatusList: StepStatus[] = stepList.map((step: { name: string }) =>\n createStepStatus(step, taskStatus),\n );\n const succeededStepsCount = stepStatusList.filter(\n ({ status }) => status === RunStatus.Succeeded,\n ).length;\n\n const badge =\n stepStatusList.length > 0 && data.status\n ? `${succeededStepsCount}/${stepStatusList.length}`\n : null;\n\n const passedData = React.useMemo(() => {\n const newData = { ...data };\n Object.keys(newData).forEach(key => {\n if (newData[key] === undefined) {\n delete newData[key];\n }\n });\n return newData;\n }, [data]);\n\n const hasTaskIcon = !!(data.taskIconClass || data.taskIcon);\n const whenDecorator = data.whenStatus ? (\n <WhenDecorator\n element={element}\n status={data.whenStatus}\n leftOffset={\n hasTaskIcon\n ? DEFAULT_WHEN_OFFSET + (element.getBounds().height - 4) * 0.75\n : DEFAULT_WHEN_OFFSET\n }\n />\n ) : null;\n const activeTaskId = taskRuns.find(\n (tr: TaskRunKind) =>\n tr?.metadata?.labels?.[TEKTON_PIPELINE_RUN] ===\n pipelineRun?.metadata?.name &&\n tr?.metadata?.labels?.[TEKTON_PIPELINE_TASK] === data.task?.name,\n )?.metadata?.name;\n\n const taskNode = (\n <>\n <PipelineRunLogDialog\n pipelineRun={pipelineRun}\n open={open}\n closeDialog={closeDialog}\n pods={pods}\n taskRuns={taskRuns}\n activeTask={activeTaskId}\n />\n <TaskNode\n className=\"bs-tkn-pipeline-task-node\"\n element={element}\n onContextMenu={data.showContextMenu ? onContextMenu : undefined}\n contextMenuOpen={contextMenuOpen}\n scaleNode={\n (hover || contextMenuOpen) && detailsLevel !== ScaleDetailsLevel.high\n }\n hideDetailsAtMedium\n {...passedData}\n {...rest}\n badge={badge}\n truncateLength={element.getData()?.label?.length}\n onSelect={activeTaskId && openDialog}\n >\n {whenDecorator}\n </TaskNode>\n </>\n );\n\n return (\n <Layer\n id={\n detailsLevel !== ScaleDetailsLevel.high && (hover || contextMenuOpen)\n ? TOP_LAYER\n : DEFAULT_LAYER\n }\n >\n <g\n data-test={`task ${element.getLabel()}`}\n className=\"bs-tkn-pipeline-task-node\"\n ref={hoverRef as React.LegacyRef<SVGGElement>}\n >\n <Tooltip\n position=\"bottom\"\n enableFlip={false}\n content={\n <PipelineVisualizationStepList\n isSpecOverview={!data.status}\n taskName={element.getLabel()}\n steps={stepStatusList}\n isFinallyTask={isFinallyTask}\n />\n }\n triggerRef={triggerRef}\n >\n <g ref={triggerRef}>{taskNode}</g>\n </Tooltip>\n </g>\n </Layer>\n );\n};\n\nexport default React.memo(observer(PipelineTaskNode));\n"],"names":["React"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import styleInject from 'style-inject';
1
+ import styleInject from '../../node_modules_dist/style-inject/dist/style-inject.es.esm.js';
2
2
 
3
3
  var css_248z = ".bs-tkn-pipeline-visualization__label {\n align-items: baseline;\n padding-bottom: var(--pf-t--global--spacer--xs);\n}\n\n.bs-tkn-pipeline-visualization__label .badge {\n font-size: 17px;\n line-height: 20px;\n margin-right: 4px;\n min-width: 24px;\n padding: 0 7px;\n border-radius: 20px;\n color: var(--pf-t--color--white);\n display: inline-block;\n text-align: center;\n white-space: nowrap;\n width: 100%;\n}\n\n.bs-tkn-pipeline-visualization__layout .pf-topology-content {\n border-radius: 20px;\n}\n\n.bs-tkn-pipeline-visualization__layout .pf-topology-visualization-surface {\n font-size: 1rem;\n border-radius: 1rem;\n}\n";
4
4
  styleInject(css_248z);
@@ -9,7 +9,7 @@ const PipelineVisualization = ({
9
9
  taskRuns
10
10
  }) => {
11
11
  useDarkTheme();
12
- const model = getGraphDataModel(pipelineRun ?? void 0, taskRuns ?? []);
12
+ const model = getGraphDataModel(pipelineRun ?? undefined, taskRuns ?? []);
13
13
  return /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, !model || model.nodes.length === 0 && model.edges.length === 0 ? /* @__PURE__ */ React__default.createElement("div", { "data-testid": "pipeline-no-tasks" }, "This Pipeline Run has no tasks to visualize") : /* @__PURE__ */ React__default.createElement(
14
14
  "div",
15
15
  {
@@ -1 +1 @@
1
- {"version":3,"file":"PipelineVisualization.esm.js","sources":["../../../src/components/pipeline-topology/PipelineVisualization.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 { PipelineRunKind, TaskRunKind } from '@janus-idp/shared-react';\n\nimport { useDarkTheme } from '../../hooks/useDarkTheme';\nimport { getGraphDataModel } from '../../utils/pipeline-topology-utils';\nimport { PipelineLayout } from './PipelineLayout';\n\nimport './PipelineVisualization.css';\n\ntype PipelineVisualizationProps = {\n pipelineRun: PipelineRunKind | null;\n taskRuns: TaskRunKind[];\n};\n\nexport const PipelineVisualization = ({\n pipelineRun,\n taskRuns,\n}: PipelineVisualizationProps) => {\n useDarkTheme();\n\n const model = getGraphDataModel(pipelineRun ?? undefined, taskRuns ?? []);\n\n return (\n <>\n {!model || (model.nodes.length === 0 && model.edges.length === 0) ? (\n <div data-testid=\"pipeline-no-tasks\">\n This Pipeline Run has no tasks to visualize\n </div>\n ) : (\n <div\n data-testid=\"pipelineRun-visualization\"\n className=\"bs-tkn-pipeline-visualization__layout\"\n >\n <PipelineLayout model={model} />\n </div>\n )}\n </>\n );\n};\n"],"names":["React"],"mappings":";;;;;;AA8BO,MAAM,wBAAwB,CAAC;AAAA,EACpC,WAAA;AAAA,EACA;AACF,CAAkC,KAAA;AAChC,EAAa,YAAA,EAAA;AAEb,EAAA,MAAM,QAAQ,iBAAkB,CAAA,WAAA,IAAe,KAAW,CAAA,EAAA,QAAA,IAAY,EAAE,CAAA;AAExE,EAAA,mFAEK,CAAC,KAAA,IAAU,KAAM,CAAA,KAAA,CAAM,WAAW,CAAK,IAAA,KAAA,CAAM,KAAM,CAAA,MAAA,KAAW,oBAC5DA,cAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAI,aAAY,EAAA,mBAAA,EAAA,EAAoB,6CAErC,CAEA,mBAAAA,cAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,aAAY,EAAA,2BAAA;AAAA,MACZ,SAAU,EAAA;AAAA,KAAA;AAAA,oBAEVA,cAAA,CAAA,aAAA,CAAC,kBAAe,KAAc,EAAA;AAAA,GAGpC,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"PipelineVisualization.esm.js","sources":["../../../src/components/pipeline-topology/PipelineVisualization.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 { PipelineRunKind, TaskRunKind } from '@janus-idp/shared-react';\n\nimport { useDarkTheme } from '../../hooks/useDarkTheme';\nimport { getGraphDataModel } from '../../utils/pipeline-topology-utils';\nimport { PipelineLayout } from './PipelineLayout';\n\nimport './PipelineVisualization.css';\n\ntype PipelineVisualizationProps = {\n pipelineRun: PipelineRunKind | null;\n taskRuns: TaskRunKind[];\n};\n\nexport const PipelineVisualization = ({\n pipelineRun,\n taskRuns,\n}: PipelineVisualizationProps) => {\n useDarkTheme();\n\n const model = getGraphDataModel(pipelineRun ?? undefined, taskRuns ?? []);\n\n return (\n <>\n {!model || (model.nodes.length === 0 && model.edges.length === 0) ? (\n <div data-testid=\"pipeline-no-tasks\">\n This Pipeline Run has no tasks to visualize\n </div>\n ) : (\n <div\n data-testid=\"pipelineRun-visualization\"\n className=\"bs-tkn-pipeline-visualization__layout\"\n >\n <PipelineLayout model={model} />\n </div>\n )}\n </>\n );\n};\n"],"names":["React"],"mappings":";;;;;;AA8BO,MAAM,wBAAwB,CAAC;AAAA,EACpC,WAAA;AAAA,EACA;AACF,CAAkC,KAAA;AAChC,EAAa,YAAA,EAAA;AAEb,EAAA,MAAM,QAAQ,iBAAkB,CAAA,WAAA,IAAe,SAAW,EAAA,QAAA,IAAY,EAAE,CAAA;AAExE,EAAA,mFAEK,CAAC,KAAA,IAAU,KAAM,CAAA,KAAA,CAAM,WAAW,CAAK,IAAA,KAAA,CAAM,KAAM,CAAA,MAAA,KAAW,oBAC5DA,cAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAI,aAAY,EAAA,mBAAA,EAAA,EAAoB,6CAErC,CAEA,mBAAAA,cAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,aAAY,EAAA,2BAAA;AAAA,MACZ,SAAU,EAAA;AAAA,KAAA;AAAA,oBAEVA,cAAA,CAAA,aAAA,CAAC,kBAAe,KAAc,EAAA;AAAA,GAGpC,CAAA;AAEJ;;;;"}
@@ -1,4 +1,4 @@
1
- import styleInject from 'style-inject';
1
+ import styleInject from '../../node_modules_dist/style-inject/dist/style-inject.es.esm.js';
2
2
 
3
3
  var css_248z = ".bs-tkn-pipeline-visualization-step-list {\n min-width: 10em;\n}\n\n.bs-tkn-pipeline-visualization-step-list__task-name {\n font-weight: var(--pf-t--global--font--weight--heading);\n line-height: var(--pf-t--global--spacer--lg);\n max-height: var(--pf-t--global--spacer--2xl);\n max-width: 15em;\n margin: 0 auto 10px auto;\n\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 2;\n overflow: hidden;\n}\n\n.bs-tkn-pipeline-visualization-step-list__task-type {\n line-height: var(--pf-t--global--spacer--xs);\n max-height: var(--pf-t--global--spacer--2xl);\n margin: 0 auto 10px auto;\n}\n\n.bs-tkn-pipeline-visualization-step-list__step {\n display: flex;\n margin-bottom: var(--pf-t--global--spacer--xs);\n}\n\n.bs-tkn-pipeline-visualization-step-list__step--task-run {\n margin-bottom: var(--pf-t--global--spacer--sm);\n}\n\n.bs-tkn-pipeline-visualization-step-list__step:last-child {\n margin-bottom: 0;\n}\n\n.bs-tkn-pipeline-visualization-step-list__bullet {\n font-size: 1rem;\n}\n\n.bs-tkn-pipeline-visualization-step-list__icon {\n flex: 0 0 18px;\n}\n\n.bs-tkn-pipeline-visualization-step-list__icon-backdrop {\n fill: var(--pf-t--color--white);\n}\n\n.bs-tkn-pipeline-visualization-step-list__name {\n flex: 1 1 auto;\n overflow: hidden;\n padding-left: var(--pf-t--global--spacer--sm);\n text-align: left;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.bs-tkn-pipeline-visualization-step-list__name.is-main-focus {\n padding: 0 var(--pf-t--global--spacer--sm);\n text-align: center;\n}\n\n.bs-tkn-pipeline-visualization-step-list__duration {\n flex: 0 0 auto;\n padding-left: var(--pf-t--global--spacer--sm);\n text-align: right;\n}\n";
4
4
  styleInject(css_248z);
@@ -24,7 +24,7 @@ const layoutFactory = (type, graph) => {
24
24
  case PipelineLayout.DAGRE_VIEWER:
25
25
  return new PipelineDagreLayout(graph, { nodesep: 25 });
26
26
  default:
27
- return void 0;
27
+ return undefined;
28
28
  }
29
29
  };
30
30
  const pipelineComponentFactory = (kind, type) => {
@@ -50,10 +50,10 @@ const pipelineComponentFactory = (kind, type) => {
50
50
  case GROUPED_EDGE_TYPE:
51
51
  return TaskGroupEdge;
52
52
  default:
53
- return void 0;
53
+ return undefined;
54
54
  }
55
55
  }
56
- return void 0;
56
+ return undefined;
57
57
  };
58
58
 
59
59
  export { pipelineComponentFactory as default, layoutFactory };
@@ -1 +1 @@
1
- {"version":3,"file":"pipelineComponentFactory.esm.js","sources":["../../../src/components/pipeline-topology/pipelineComponentFactory.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 {\n ComponentFactory,\n DagreLayout,\n DefaultTaskGroup,\n Graph,\n GraphComponent,\n GraphElement,\n LayoutFactory,\n ModelKind,\n PipelineDagreLayout,\n SpacerNode,\n TaskEdge,\n withPanZoom,\n} from '@patternfly/react-topology';\n\nimport { NodeType, PipelineLayout } from '../../consts/pipeline-topology-const';\nimport { getLayoutData } from '../../utils/pipeline-topology-utils';\nimport PipelineTaskNode from './PipelineTaskNode';\nimport TaskGroupEdge from './TaskGroupEdge';\n\nconst GROUPED_EDGE_TYPE = 'GROUPED_EDGE';\n\nexport const layoutFactory: LayoutFactory = (type: string, graph: Graph) => {\n switch (type) {\n case PipelineLayout.DAGRE_BUILDER:\n case PipelineLayout.DAGRE_BUILDER_SPACED:\n return new DagreLayout(graph, {\n // Hack to get around undesirable defaults\n linkDistance: 0,\n nodeDistance: 0,\n groupDistance: 0,\n collideDistance: 0,\n simulationSpeed: 0,\n chargeStrength: 0,\n allowDrag: false,\n layoutOnDrag: false,\n ...getLayoutData(type),\n });\n case PipelineLayout.DAGRE_VIEWER:\n return new PipelineDagreLayout(graph, { nodesep: 25 });\n default:\n return undefined;\n }\n};\n\nconst pipelineComponentFactory: ComponentFactory = (\n kind: ModelKind,\n type: string,\n): React.ComponentType<{ element: GraphElement }> | undefined => {\n if (kind === ModelKind.graph) {\n return withPanZoom()(GraphComponent) as React.ComponentType<{\n element: GraphElement;\n }>;\n }\n if (kind === ModelKind.edge) {\n return TaskEdge as React.ComponentType<{ element: GraphElement }>;\n }\n if (kind === ModelKind.node) {\n switch (type) {\n case NodeType.TASK_NODE:\n case NodeType.FINALLY_NODE:\n return PipelineTaskNode as React.ComponentType<any>;\n case 'task-group':\n case NodeType.FINALLY_GROUP:\n return DefaultTaskGroup as React.ComponentType<{\n element: GraphElement;\n }>;\n case NodeType.SPACER_NODE:\n return SpacerNode as React.ComponentType<{ element: GraphElement }>;\n case 'finally-spacer-edge':\n case NodeType.EDGE:\n return TaskEdge as React.ComponentType<{ element: GraphElement }>;\n case GROUPED_EDGE_TYPE:\n return TaskGroupEdge as React.ComponentType<{ element: GraphElement }>;\n default:\n return undefined;\n }\n }\n return undefined;\n};\n\nexport default pipelineComponentFactory;\n"],"names":[],"mappings":";;;;;;AAqCA,MAAM,iBAAoB,GAAA,cAAA;AAEb,MAAA,aAAA,GAA+B,CAAC,IAAA,EAAc,KAAiB,KAAA;AAC1E,EAAA,QAAQ,IAAM;AAAA,IACZ,KAAK,cAAe,CAAA,aAAA;AAAA,IACpB,KAAK,cAAe,CAAA,oBAAA;AAClB,MAAO,OAAA,IAAI,YAAY,KAAO,EAAA;AAAA;AAAA,QAE5B,YAAc,EAAA,CAAA;AAAA,QACd,YAAc,EAAA,CAAA;AAAA,QACd,aAAe,EAAA,CAAA;AAAA,QACf,eAAiB,EAAA,CAAA;AAAA,QACjB,eAAiB,EAAA,CAAA;AAAA,QACjB,cAAgB,EAAA,CAAA;AAAA,QAChB,SAAW,EAAA,KAAA;AAAA,QACX,YAAc,EAAA,KAAA;AAAA,QACd,GAAG,cAAc,IAAI;AAAA,OACtB,CAAA;AAAA,IACH,KAAK,cAAe,CAAA,YAAA;AAClB,MAAA,OAAO,IAAI,mBAAoB,CAAA,KAAA,EAAO,EAAE,OAAA,EAAS,IAAI,CAAA;AAAA,IACvD;AACE,MAAO,OAAA,KAAA,CAAA;AAAA;AAEb;AAEM,MAAA,wBAAA,GAA6C,CACjD,IAAA,EACA,IAC+D,KAAA;AAC/D,EAAI,IAAA,IAAA,KAAS,UAAU,KAAO,EAAA;AAC5B,IAAO,OAAA,WAAA,GAAc,cAAc,CAAA;AAAA;AAIrC,EAAI,IAAA,IAAA,KAAS,UAAU,IAAM,EAAA;AAC3B,IAAO,OAAA,QAAA;AAAA;AAET,EAAI,IAAA,IAAA,KAAS,UAAU,IAAM,EAAA;AAC3B,IAAA,QAAQ,IAAM;AAAA,MACZ,KAAK,QAAS,CAAA,SAAA;AAAA,MACd,KAAK,QAAS,CAAA,YAAA;AACZ,QAAO,OAAA,gBAAA;AAAA,MACT,KAAK,YAAA;AAAA,MACL,KAAK,QAAS,CAAA,aAAA;AACZ,QAAO,OAAA,gBAAA;AAAA,MAGT,KAAK,QAAS,CAAA,WAAA;AACZ,QAAO,OAAA,UAAA;AAAA,MACT,KAAK,qBAAA;AAAA,MACL,KAAK,QAAS,CAAA,IAAA;AACZ,QAAO,OAAA,QAAA;AAAA,MACT,KAAK,iBAAA;AACH,QAAO,OAAA,aAAA;AAAA,MACT;AACE,QAAO,OAAA,KAAA,CAAA;AAAA;AACX;AAEF,EAAO,OAAA,KAAA,CAAA;AACT;;;;"}
1
+ {"version":3,"file":"pipelineComponentFactory.esm.js","sources":["../../../src/components/pipeline-topology/pipelineComponentFactory.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 {\n ComponentFactory,\n DagreLayout,\n DefaultTaskGroup,\n Graph,\n GraphComponent,\n GraphElement,\n LayoutFactory,\n ModelKind,\n PipelineDagreLayout,\n SpacerNode,\n TaskEdge,\n withPanZoom,\n} from '@patternfly/react-topology';\n\nimport { NodeType, PipelineLayout } from '../../consts/pipeline-topology-const';\nimport { getLayoutData } from '../../utils/pipeline-topology-utils';\nimport PipelineTaskNode from './PipelineTaskNode';\nimport TaskGroupEdge from './TaskGroupEdge';\n\nconst GROUPED_EDGE_TYPE = 'GROUPED_EDGE';\n\nexport const layoutFactory: LayoutFactory = (type: string, graph: Graph) => {\n switch (type) {\n case PipelineLayout.DAGRE_BUILDER:\n case PipelineLayout.DAGRE_BUILDER_SPACED:\n return new DagreLayout(graph, {\n // Hack to get around undesirable defaults\n linkDistance: 0,\n nodeDistance: 0,\n groupDistance: 0,\n collideDistance: 0,\n simulationSpeed: 0,\n chargeStrength: 0,\n allowDrag: false,\n layoutOnDrag: false,\n ...getLayoutData(type),\n });\n case PipelineLayout.DAGRE_VIEWER:\n return new PipelineDagreLayout(graph, { nodesep: 25 });\n default:\n return undefined;\n }\n};\n\nconst pipelineComponentFactory: ComponentFactory = (\n kind: ModelKind,\n type: string,\n): React.ComponentType<{ element: GraphElement }> | undefined => {\n if (kind === ModelKind.graph) {\n return withPanZoom()(GraphComponent) as React.ComponentType<{\n element: GraphElement;\n }>;\n }\n if (kind === ModelKind.edge) {\n return TaskEdge as React.ComponentType<{ element: GraphElement }>;\n }\n if (kind === ModelKind.node) {\n switch (type) {\n case NodeType.TASK_NODE:\n case NodeType.FINALLY_NODE:\n return PipelineTaskNode as React.ComponentType<any>;\n case 'task-group':\n case NodeType.FINALLY_GROUP:\n return DefaultTaskGroup as React.ComponentType<{\n element: GraphElement;\n }>;\n case NodeType.SPACER_NODE:\n return SpacerNode as React.ComponentType<{ element: GraphElement }>;\n case 'finally-spacer-edge':\n case NodeType.EDGE:\n return TaskEdge as React.ComponentType<{ element: GraphElement }>;\n case GROUPED_EDGE_TYPE:\n return TaskGroupEdge as React.ComponentType<{ element: GraphElement }>;\n default:\n return undefined;\n }\n }\n return undefined;\n};\n\nexport default pipelineComponentFactory;\n"],"names":[],"mappings":";;;;;;AAqCA,MAAM,iBAAoB,GAAA,cAAA;AAEb,MAAA,aAAA,GAA+B,CAAC,IAAA,EAAc,KAAiB,KAAA;AAC1E,EAAA,QAAQ,IAAM;AAAA,IACZ,KAAK,cAAe,CAAA,aAAA;AAAA,IACpB,KAAK,cAAe,CAAA,oBAAA;AAClB,MAAO,OAAA,IAAI,YAAY,KAAO,EAAA;AAAA;AAAA,QAE5B,YAAc,EAAA,CAAA;AAAA,QACd,YAAc,EAAA,CAAA;AAAA,QACd,aAAe,EAAA,CAAA;AAAA,QACf,eAAiB,EAAA,CAAA;AAAA,QACjB,eAAiB,EAAA,CAAA;AAAA,QACjB,cAAgB,EAAA,CAAA;AAAA,QAChB,SAAW,EAAA,KAAA;AAAA,QACX,YAAc,EAAA,KAAA;AAAA,QACd,GAAG,cAAc,IAAI;AAAA,OACtB,CAAA;AAAA,IACH,KAAK,cAAe,CAAA,YAAA;AAClB,MAAA,OAAO,IAAI,mBAAoB,CAAA,KAAA,EAAO,EAAE,OAAA,EAAS,IAAI,CAAA;AAAA,IACvD;AACE,MAAO,OAAA,SAAA;AAAA;AAEb;AAEM,MAAA,wBAAA,GAA6C,CACjD,IAAA,EACA,IAC+D,KAAA;AAC/D,EAAI,IAAA,IAAA,KAAS,UAAU,KAAO,EAAA;AAC5B,IAAO,OAAA,WAAA,GAAc,cAAc,CAAA;AAAA;AAIrC,EAAI,IAAA,IAAA,KAAS,UAAU,IAAM,EAAA;AAC3B,IAAO,OAAA,QAAA;AAAA;AAET,EAAI,IAAA,IAAA,KAAS,UAAU,IAAM,EAAA;AAC3B,IAAA,QAAQ,IAAM;AAAA,MACZ,KAAK,QAAS,CAAA,SAAA;AAAA,MACd,KAAK,QAAS,CAAA,YAAA;AACZ,QAAO,OAAA,gBAAA;AAAA,MACT,KAAK,YAAA;AAAA,MACL,KAAK,QAAS,CAAA,aAAA;AACZ,QAAO,OAAA,gBAAA;AAAA,MAGT,KAAK,QAAS,CAAA,WAAA;AACZ,QAAO,OAAA,UAAA;AAAA,MACT,KAAK,qBAAA;AAAA,MACL,KAAK,QAAS,CAAA,IAAA;AACZ,QAAO,OAAA,QAAA;AAAA,MACT,KAAK,iBAAA;AACH,QAAO,OAAA,aAAA;AAAA,MACT;AACE,QAAO,OAAA,SAAA;AAAA;AACX;AAEF,EAAO,OAAA,SAAA;AACT;;;;"}
@@ -9,7 +9,7 @@ const useResourcesClusters = (k8sObjectsResponse) => {
9
9
  let isMounted = true;
10
10
  if (isMounted && !loading && kubernetesObjects && !error) {
11
11
  const k8sResourcesClusters = getClusters(kubernetesObjects);
12
- if (k8sResourcesClusters) {
12
+ {
13
13
  setClusters(k8sResourcesClusters);
14
14
  }
15
15
  }
@@ -1 +1 @@
1
- {"version":3,"file":"useResourcesClusters.esm.js","sources":["../../src/hooks/useResourcesClusters.ts"],"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 { useEffect, useState } from 'react';\n\nimport { KubernetesObjects } from '@backstage/plugin-kubernetes-react';\n\nimport { useDeepCompareMemoize } from '@janus-idp/shared-react';\n\nimport { ClusterErrors } from '../types/types';\nimport { getClusters } from '../utils/tekton-utils';\n\nexport const useResourcesClusters = (k8sObjectsResponse: KubernetesObjects) => {\n const { kubernetesObjects, loading, error } = k8sObjectsResponse;\n const [clusters, setClusters] = useState<{\n clusters: string[];\n errors: ClusterErrors[];\n }>({ clusters: [], errors: [] });\n\n useEffect(() => {\n let isMounted = true;\n if (isMounted && !loading && kubernetesObjects && !error) {\n const k8sResourcesClusters = getClusters(kubernetesObjects);\n if (k8sResourcesClusters) {\n setClusters(k8sResourcesClusters);\n }\n }\n return () => {\n isMounted = false;\n };\n }, [loading, kubernetesObjects, error]);\n\n return useDeepCompareMemoize(clusters);\n};\n"],"names":[],"mappings":";;;;AAwBa,MAAA,oBAAA,GAAuB,CAAC,kBAA0C,KAAA;AAC7E,EAAA,MAAM,EAAE,iBAAA,EAAmB,OAAS,EAAA,KAAA,EAAU,GAAA,kBAAA;AAC9C,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,QAG7B,CAAA,EAAE,QAAU,EAAA,EAAI,EAAA,MAAA,EAAQ,EAAC,EAAG,CAAA;AAE/B,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,SAAY,GAAA,IAAA;AAChB,IAAA,IAAI,SAAa,IAAA,CAAC,OAAW,IAAA,iBAAA,IAAqB,CAAC,KAAO,EAAA;AACxD,MAAM,MAAA,oBAAA,GAAuB,YAAY,iBAAiB,CAAA;AAC1D,MAAA,IAAI,oBAAsB,EAAA;AACxB,QAAA,WAAA,CAAY,oBAAoB,CAAA;AAAA;AAClC;AAEF,IAAA,OAAO,MAAM;AACX,MAAY,SAAA,GAAA,KAAA;AAAA,KACd;AAAA,GACC,EAAA,CAAC,OAAS,EAAA,iBAAA,EAAmB,KAAK,CAAC,CAAA;AAEtC,EAAA,OAAO,sBAAsB,QAAQ,CAAA;AACvC;;;;"}
1
+ {"version":3,"file":"useResourcesClusters.esm.js","sources":["../../src/hooks/useResourcesClusters.ts"],"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 { useEffect, useState } from 'react';\n\nimport { KubernetesObjects } from '@backstage/plugin-kubernetes-react';\n\nimport { useDeepCompareMemoize } from '@janus-idp/shared-react';\n\nimport { ClusterErrors } from '../types/types';\nimport { getClusters } from '../utils/tekton-utils';\n\nexport const useResourcesClusters = (k8sObjectsResponse: KubernetesObjects) => {\n const { kubernetesObjects, loading, error } = k8sObjectsResponse;\n const [clusters, setClusters] = useState<{\n clusters: string[];\n errors: ClusterErrors[];\n }>({ clusters: [], errors: [] });\n\n useEffect(() => {\n let isMounted = true;\n if (isMounted && !loading && kubernetesObjects && !error) {\n const k8sResourcesClusters = getClusters(kubernetesObjects);\n if (k8sResourcesClusters) {\n setClusters(k8sResourcesClusters);\n }\n }\n return () => {\n isMounted = false;\n };\n }, [loading, kubernetesObjects, error]);\n\n return useDeepCompareMemoize(clusters);\n};\n"],"names":[],"mappings":";;;;AAwBa,MAAA,oBAAA,GAAuB,CAAC,kBAA0C,KAAA;AAC7E,EAAA,MAAM,EAAE,iBAAA,EAAmB,OAAS,EAAA,KAAA,EAAU,GAAA,kBAAA;AAC9C,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,QAG7B,CAAA,EAAE,QAAU,EAAA,EAAI,EAAA,MAAA,EAAQ,EAAC,EAAG,CAAA;AAE/B,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,SAAY,GAAA,IAAA;AAChB,IAAA,IAAI,SAAa,IAAA,CAAC,OAAW,IAAA,iBAAA,IAAqB,CAAC,KAAO,EAAA;AACxD,MAAM,MAAA,oBAAA,GAAuB,YAAY,iBAAiB,CAAA;AAC1D,MAA0B;AACxB,QAAA,WAAA,CAAY,oBAAoB,CAAA;AAAA;AAClC;AAEF,IAAA,OAAO,MAAM;AACX,MAAY,SAAA,GAAA,KAAA;AAAA,KACd;AAAA,GACC,EAAA,CAAC,OAAS,EAAA,iBAAA,EAAmB,KAAK,CAAC,CAAA;AAEtC,EAAA,OAAO,sBAAsB,QAAQ,CAAA;AACvC;;;;"}
@@ -0,0 +1,29 @@
1
+ function styleInject(css, ref) {
2
+ if ( ref === undefined ) ref = {};
3
+ var insertAt = ref.insertAt;
4
+
5
+ if (!css || typeof document === 'undefined') { return; }
6
+
7
+ var head = document.head || document.getElementsByTagName('head')[0];
8
+ var style = document.createElement('style');
9
+ style.type = 'text/css';
10
+
11
+ if (insertAt === 'top') {
12
+ if (head.firstChild) {
13
+ head.insertBefore(style, head.firstChild);
14
+ } else {
15
+ head.appendChild(style);
16
+ }
17
+ } else {
18
+ head.appendChild(style);
19
+ }
20
+
21
+ if (style.styleSheet) {
22
+ style.styleSheet.cssText = css;
23
+ } else {
24
+ style.appendChild(document.createTextNode(css));
25
+ }
26
+ }
27
+
28
+ export { styleInject as default };
29
+ //# sourceMappingURL=style-inject.es.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"style-inject.es.esm.js","sources":["../../../../../../node_modules/style-inject/dist/style-inject.es.js"],"sourcesContent":["function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n"],"names":[],"mappings":"AAAA,SAAS,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE;AAC/B,EAAE,KAAK,GAAG,KAAK,SAAM,GAAG,GAAG,GAAG,EAAE;AAChC,EAAE,IAAI,QAAQ,GAAG,GAAG,CAAC,QAAQ;;AAE7B,EAAE,IAAI,CAAC,GAAG,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE,EAAE,OAAO;;AAExD,EAAE,IAAI,IAAI,GAAG,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACtE,EAAE,IAAI,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;AAC7C,EAAE,KAAK,CAAC,IAAI,GAAG,UAAU;;AAEzB,EAAE,IAAI,QAAQ,KAAK,KAAK,EAAE;AAC1B,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;AACzB,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC;AAC/C,KAAK,MAAM;AACX,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AAC7B;AACA,GAAG,MAAM;AACT,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AAC3B;;AAEA,EAAE,IAAI,KAAK,CAAC,UAAU,EAAE;AACxB,IAAI,KAAK,CAAC,UAAU,CAAC,OAAO,GAAG,GAAG;AAClC,GAAG,MAAM;AACT,IAAI,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;AACnD;AACA;;;;","x_google_ignoreList":[0]}
@@ -68,12 +68,12 @@ const getWhenStatus = (status) => {
68
68
  case ComputedStatus.Idle:
69
69
  return WhenStatus.Unmet;
70
70
  default:
71
- return void 0;
71
+ return undefined;
72
72
  }
73
73
  };
74
74
  const getTaskWhenStatus = (task) => {
75
75
  if (!task.when) {
76
- return void 0;
76
+ return undefined;
77
77
  }
78
78
  return getWhenStatus(task.status?.reason);
79
79
  };
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline-topology-utils.esm.js","sources":["../../src/utils/pipeline-topology-utils.ts"],"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 {\n EdgeModel,\n getEdgesFromNodes,\n getSpacerNodes,\n GraphModel,\n ModelKind,\n RunStatus,\n WhenStatus,\n} from '@patternfly/react-topology';\nimport * as dagre from 'dagre';\nimport { minBy, uniq } from 'lodash';\n\nimport {\n ComputedStatus,\n PipelineRunKind,\n PipelineTask,\n PipelineTaskParam,\n PipelineTaskWithStatus,\n TaskRunKind,\n} from '@janus-idp/shared-react';\n\nimport { DAG, Vertex } from '../components/pipeline-topology/dag';\nimport {\n DAGRE_BUILDER_PROPS,\n DAGRE_BUILDER_SPACED_PROPS,\n DAGRE_VIEWER_PROPS,\n DAGRE_VIEWER_SPACED_PROPS,\n DEFAULT_BADGE_WIDTH,\n DEFAULT_FINALLLY_GROUP_PADDING,\n DEFAULT_NODE_HEIGHT,\n DEFAULT_NODE_ICON_WIDTH,\n FINALLY_NODE_PADDING,\n NODE_HEIGHT,\n NODE_PADDING,\n NODE_WIDTH,\n NodeType,\n PipelineLayout,\n REGEX_EXTRACT_DEPS,\n WHEN_EXPRESSION_SPACING,\n} from '../consts/pipeline-topology-const';\nimport {\n FinallyNodeModel,\n LoadingNodeModel,\n NodeCreator,\n NodeCreatorSetup,\n PipelineEdgeModel,\n PipelineMixedNodeModel,\n PipelineRunAfterNodeModelData,\n} from '../types/pipeline-topology-types';\nimport { appendPipelineRunStatus, getPLRTaskRuns } from './pipelineRun-utils';\n\nconst createGenericNode: NodeCreatorSetup =\n (type, width?, height?) => (name, data) => ({\n id: name,\n label: data?.label || name,\n runAfterTasks: data?.runAfterTasks || [],\n ...(data && { data }),\n height: height ?? NODE_HEIGHT,\n width: width ?? NODE_WIDTH,\n type,\n });\n\nconst getMaxFinallyNode = (finallyTaskList: PipelineTaskWithStatus[]) => {\n const sortedFinallyTaskList = [...finallyTaskList].sort(\n (a, b) => b.name.length - a.name.length,\n );\n return sortedFinallyTaskList[0]?.name || '';\n};\n\nexport const createFinallyNode = (\n height: number,\n): NodeCreator<FinallyNodeModel> =>\n createGenericNode(\n NodeType.FINALLY_NODE,\n NODE_WIDTH + WHEN_EXPRESSION_SPACING + FINALLY_NODE_PADDING * 2,\n height,\n );\n\nexport const createLoadingNode: NodeCreator<LoadingNodeModel> =\n createGenericNode(NodeType.LOADING_NODE);\n\nconst createPipelineTaskNode = (\n type: NodeType,\n data: PipelineRunAfterNodeModelData,\n) => createGenericNode(type, data.width, data.height)(data.id ?? '', data);\n\nexport const getTextWidth = (\n text: string,\n font: string = '0.8rem RedHatText',\n): number => {\n if (!text || text.length === 0) {\n return 0;\n }\n const canvas = document.createElement('canvas');\n const context = canvas.getContext('2d');\n if (!context) {\n return text.length;\n }\n context.font = font;\n const { width } = context.measureText(text);\n return width;\n};\n\nexport const extractDepsFromContextVariables = (\n contextVariable: string | null | undefined,\n) => {\n let matches;\n const deps: string[] = [];\n if (!contextVariable) {\n return deps;\n }\n // eslint-disable-next-line no-cond-assign\n while ((matches = REGEX_EXTRACT_DEPS.exec(contextVariable)) !== null) {\n // This is necessary to avoid infinite loops with zero-width matches\n if (matches.index === REGEX_EXTRACT_DEPS.lastIndex) {\n REGEX_EXTRACT_DEPS.lastIndex++;\n }\n if (matches) {\n if (!deps.includes(matches[1])) {\n deps.push(matches[1]);\n }\n }\n }\n return deps;\n};\n\nexport const getSpacerNode = (\n node: PipelineMixedNodeModel,\n): PipelineMixedNodeModel => ({\n ...node,\n height: 1,\n width: 1,\n});\n\nexport const getWhenStatus = (\n status: ComputedStatus,\n): WhenStatus | undefined => {\n switch (status) {\n case ComputedStatus.Succeeded:\n case ComputedStatus.Failed:\n return WhenStatus.Met;\n case ComputedStatus.Skipped:\n case ComputedStatus['In Progress']:\n case ComputedStatus.Idle:\n return WhenStatus.Unmet;\n default:\n return undefined;\n }\n};\n\nexport const getTaskWhenStatus = (\n task: PipelineTaskWithStatus,\n): WhenStatus | undefined => {\n if (!task.when) {\n return undefined;\n }\n return getWhenStatus(task.status?.reason as ComputedStatus);\n};\n\nconst getDepsFromContextVariables = (task: PipelineTask) => {\n const depsFromContextVariables: string[] = [];\n if (task.params) {\n task.params.forEach((p: PipelineTaskParam) => {\n if (Array.isArray(p.value)) {\n p.value.forEach(paramValue => {\n depsFromContextVariables.push(\n ...extractDepsFromContextVariables(paramValue),\n );\n });\n } else {\n depsFromContextVariables.push(\n ...extractDepsFromContextVariables(p.value),\n );\n }\n });\n }\n if (task?.when) {\n task.when.forEach(({ input, values }) => {\n depsFromContextVariables.push(...extractDepsFromContextVariables(input));\n values.forEach((whenValue: string) => {\n depsFromContextVariables.push(\n ...extractDepsFromContextVariables(whenValue),\n );\n });\n });\n }\n return depsFromContextVariables;\n};\n\nconst getRunAfterTasks = (task: PipelineTask, dag: DAG, vertex: Vertex) => {\n const runAfterTasks: string[] = [];\n const depsFromContextVariables = getDepsFromContextVariables(task);\n\n const dependancies = uniq([...vertex.dependancyNames]);\n if (dependancies) {\n dependancies.forEach(dep => {\n const depObj = dag.vertices.get(dep) as Vertex;\n if (\n depObj.level - vertex.level <= 1 ||\n vertex.data.runAfter?.includes(depObj.name)\n ) {\n runAfterTasks.push(dep);\n }\n });\n }\n if (depsFromContextVariables.length > 0) {\n const v = depsFromContextVariables.map(d => {\n return dag.vertices.get(d) as Vertex;\n });\n const minLevelDep = minBy(v, (d: Vertex) => d.level) as Vertex;\n const nearestDeps = v.filter(v1 => v1.level === minLevelDep.level);\n nearestDeps.forEach(nd => {\n if (nd.level - vertex.level <= 1 || vertex.dependancyNames.length === 0) {\n runAfterTasks.push(nd.name);\n }\n });\n }\n return runAfterTasks;\n};\n\nexport const getGraphDataModel = (\n pipelineRun: PipelineRunKind | undefined,\n taskRuns: TaskRunKind[],\n): {\n graph: GraphModel;\n nodes: PipelineMixedNodeModel[];\n edges: EdgeModel[];\n} | null => {\n if (!pipelineRun) {\n return null;\n }\n\n const plrTaskRuns = getPLRTaskRuns(taskRuns, pipelineRun?.metadata?.name);\n\n const taskList = appendPipelineRunStatus(pipelineRun, plrTaskRuns);\n\n const dag = new DAG();\n taskList?.forEach((task: PipelineTask) => {\n dag.addEdges(task.name, task, '', task.runAfter || []);\n });\n\n const nodes: PipelineMixedNodeModel[] = [];\n const maxWidthForLevel: { [key: string]: number } = {};\n dag.topologicalSort((v: Vertex) => {\n if (!maxWidthForLevel[v.level]) {\n maxWidthForLevel[v.level] = getTextWidth(v.name);\n } else {\n maxWidthForLevel[v.level] = Math.max(\n maxWidthForLevel[v.level],\n getTextWidth(v.name),\n );\n }\n });\n dag.topologicalSort((vertex: Vertex) => {\n const task = vertex.data as PipelineTask;\n const runAfterTasks = getRunAfterTasks(task, dag, vertex);\n const badgePadding =\n Object.keys(pipelineRun.spec)?.length > 0 ? DEFAULT_BADGE_WIDTH : 0;\n const isTaskSkipped = pipelineRun?.status?.skippedTasks?.some(\n t => t.name === task.name,\n );\n nodes.push(\n createPipelineTaskNode(NodeType.TASK_NODE, {\n id: vertex.name,\n label: vertex.name,\n width:\n maxWidthForLevel[vertex.level] +\n NODE_PADDING * 2 +\n DEFAULT_NODE_ICON_WIDTH +\n badgePadding,\n runAfterTasks,\n status: isTaskSkipped ? RunStatus.Skipped : vertex.data.status?.reason,\n whenStatus: getTaskWhenStatus(vertex.data),\n task: vertex.data,\n pipelineRun,\n }),\n );\n });\n\n const finallyTaskList = appendPipelineRunStatus(\n pipelineRun,\n plrTaskRuns,\n true,\n );\n\n const finallyNodes = finallyTaskList.map(fTask => {\n const isTaskSkipped = pipelineRun?.status?.skippedTasks?.some(\n t => t.name === fTask.name,\n );\n\n return createPipelineTaskNode(NodeType.FINALLY_NODE, {\n id: fTask.name,\n label: fTask.name,\n width:\n getTextWidth(getMaxFinallyNode(finallyTaskList)) +\n NODE_PADDING * 2 +\n DEFAULT_FINALLLY_GROUP_PADDING * 2,\n height: DEFAULT_NODE_HEIGHT,\n runAfterTasks: [],\n status: isTaskSkipped\n ? RunStatus.Skipped\n : (fTask.status?.reason as RunStatus),\n whenStatus: getTaskWhenStatus(fTask),\n task: fTask,\n pipelineRun,\n });\n });\n\n const finallyGroup = finallyNodes.length\n ? [\n {\n id: 'finally-group-id',\n type: NodeType.FINALLY_GROUP,\n children: finallyNodes.map(n => n.id),\n group: true,\n style: { padding: DEFAULT_FINALLLY_GROUP_PADDING },\n },\n ]\n : [];\n const spacerNodes: PipelineMixedNodeModel[] = (\n getSpacerNodes([...nodes, ...finallyNodes], NodeType.SPACER_NODE, [\n NodeType.FINALLY_NODE,\n ]) as PipelineMixedNodeModel[]\n ).map(getSpacerNode);\n\n const edges: PipelineEdgeModel[] = getEdgesFromNodes(\n [...nodes, ...spacerNodes, ...finallyNodes],\n NodeType.SPACER_NODE,\n NodeType.EDGE,\n NodeType.EDGE,\n [NodeType.FINALLY_NODE],\n NodeType.EDGE,\n );\n\n return {\n graph: {\n id: `${pipelineRun?.metadata?.name}-graph`,\n type: ModelKind.graph,\n layout: PipelineLayout.DAGRE_VIEWER,\n scaleExtent: [0.5, 1],\n },\n nodes: [\n ...nodes,\n ...spacerNodes,\n ...finallyNodes,\n ...finallyGroup,\n ] as PipelineMixedNodeModel[],\n edges,\n };\n};\n\nexport const getLayoutData = (\n layout: PipelineLayout,\n): dagre.GraphLabel | null => {\n switch (layout) {\n case PipelineLayout.DAGRE_BUILDER:\n return DAGRE_BUILDER_PROPS;\n case PipelineLayout.DAGRE_VIEWER:\n return DAGRE_VIEWER_PROPS;\n case PipelineLayout.DAGRE_VIEWER_SPACED:\n return DAGRE_VIEWER_SPACED_PROPS;\n case PipelineLayout.DAGRE_BUILDER_SPACED:\n return DAGRE_BUILDER_SPACED_PROPS;\n default:\n return null;\n }\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pipeline-topology-utils.esm.js","sources":["../../src/utils/pipeline-topology-utils.ts"],"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 {\n EdgeModel,\n getEdgesFromNodes,\n getSpacerNodes,\n GraphModel,\n ModelKind,\n RunStatus,\n WhenStatus,\n} from '@patternfly/react-topology';\nimport * as dagre from 'dagre';\nimport { minBy, uniq } from 'lodash';\n\nimport {\n ComputedStatus,\n PipelineRunKind,\n PipelineTask,\n PipelineTaskParam,\n PipelineTaskWithStatus,\n TaskRunKind,\n} from '@janus-idp/shared-react';\n\nimport { DAG, Vertex } from '../components/pipeline-topology/dag';\nimport {\n DAGRE_BUILDER_PROPS,\n DAGRE_BUILDER_SPACED_PROPS,\n DAGRE_VIEWER_PROPS,\n DAGRE_VIEWER_SPACED_PROPS,\n DEFAULT_BADGE_WIDTH,\n DEFAULT_FINALLLY_GROUP_PADDING,\n DEFAULT_NODE_HEIGHT,\n DEFAULT_NODE_ICON_WIDTH,\n FINALLY_NODE_PADDING,\n NODE_HEIGHT,\n NODE_PADDING,\n NODE_WIDTH,\n NodeType,\n PipelineLayout,\n REGEX_EXTRACT_DEPS,\n WHEN_EXPRESSION_SPACING,\n} from '../consts/pipeline-topology-const';\nimport {\n FinallyNodeModel,\n LoadingNodeModel,\n NodeCreator,\n NodeCreatorSetup,\n PipelineEdgeModel,\n PipelineMixedNodeModel,\n PipelineRunAfterNodeModelData,\n} from '../types/pipeline-topology-types';\nimport { appendPipelineRunStatus, getPLRTaskRuns } from './pipelineRun-utils';\n\nconst createGenericNode: NodeCreatorSetup =\n (type, width?, height?) => (name, data) => ({\n id: name,\n label: data?.label || name,\n runAfterTasks: data?.runAfterTasks || [],\n ...(data && { data }),\n height: height ?? NODE_HEIGHT,\n width: width ?? NODE_WIDTH,\n type,\n });\n\nconst getMaxFinallyNode = (finallyTaskList: PipelineTaskWithStatus[]) => {\n const sortedFinallyTaskList = [...finallyTaskList].sort(\n (a, b) => b.name.length - a.name.length,\n );\n return sortedFinallyTaskList[0]?.name || '';\n};\n\nexport const createFinallyNode = (\n height: number,\n): NodeCreator<FinallyNodeModel> =>\n createGenericNode(\n NodeType.FINALLY_NODE,\n NODE_WIDTH + WHEN_EXPRESSION_SPACING + FINALLY_NODE_PADDING * 2,\n height,\n );\n\nexport const createLoadingNode: NodeCreator<LoadingNodeModel> =\n createGenericNode(NodeType.LOADING_NODE);\n\nconst createPipelineTaskNode = (\n type: NodeType,\n data: PipelineRunAfterNodeModelData,\n) => createGenericNode(type, data.width, data.height)(data.id ?? '', data);\n\nexport const getTextWidth = (\n text: string,\n font: string = '0.8rem RedHatText',\n): number => {\n if (!text || text.length === 0) {\n return 0;\n }\n const canvas = document.createElement('canvas');\n const context = canvas.getContext('2d');\n if (!context) {\n return text.length;\n }\n context.font = font;\n const { width } = context.measureText(text);\n return width;\n};\n\nexport const extractDepsFromContextVariables = (\n contextVariable: string | null | undefined,\n) => {\n let matches;\n const deps: string[] = [];\n if (!contextVariable) {\n return deps;\n }\n // eslint-disable-next-line no-cond-assign\n while ((matches = REGEX_EXTRACT_DEPS.exec(contextVariable)) !== null) {\n // This is necessary to avoid infinite loops with zero-width matches\n if (matches.index === REGEX_EXTRACT_DEPS.lastIndex) {\n REGEX_EXTRACT_DEPS.lastIndex++;\n }\n if (matches) {\n if (!deps.includes(matches[1])) {\n deps.push(matches[1]);\n }\n }\n }\n return deps;\n};\n\nexport const getSpacerNode = (\n node: PipelineMixedNodeModel,\n): PipelineMixedNodeModel => ({\n ...node,\n height: 1,\n width: 1,\n});\n\nexport const getWhenStatus = (\n status: ComputedStatus,\n): WhenStatus | undefined => {\n switch (status) {\n case ComputedStatus.Succeeded:\n case ComputedStatus.Failed:\n return WhenStatus.Met;\n case ComputedStatus.Skipped:\n case ComputedStatus['In Progress']:\n case ComputedStatus.Idle:\n return WhenStatus.Unmet;\n default:\n return undefined;\n }\n};\n\nexport const getTaskWhenStatus = (\n task: PipelineTaskWithStatus,\n): WhenStatus | undefined => {\n if (!task.when) {\n return undefined;\n }\n return getWhenStatus(task.status?.reason as ComputedStatus);\n};\n\nconst getDepsFromContextVariables = (task: PipelineTask) => {\n const depsFromContextVariables: string[] = [];\n if (task.params) {\n task.params.forEach((p: PipelineTaskParam) => {\n if (Array.isArray(p.value)) {\n p.value.forEach(paramValue => {\n depsFromContextVariables.push(\n ...extractDepsFromContextVariables(paramValue),\n );\n });\n } else {\n depsFromContextVariables.push(\n ...extractDepsFromContextVariables(p.value),\n );\n }\n });\n }\n if (task?.when) {\n task.when.forEach(({ input, values }) => {\n depsFromContextVariables.push(...extractDepsFromContextVariables(input));\n values.forEach((whenValue: string) => {\n depsFromContextVariables.push(\n ...extractDepsFromContextVariables(whenValue),\n );\n });\n });\n }\n return depsFromContextVariables;\n};\n\nconst getRunAfterTasks = (task: PipelineTask, dag: DAG, vertex: Vertex) => {\n const runAfterTasks: string[] = [];\n const depsFromContextVariables = getDepsFromContextVariables(task);\n\n const dependancies = uniq([...vertex.dependancyNames]);\n if (dependancies) {\n dependancies.forEach(dep => {\n const depObj = dag.vertices.get(dep) as Vertex;\n if (\n depObj.level - vertex.level <= 1 ||\n vertex.data.runAfter?.includes(depObj.name)\n ) {\n runAfterTasks.push(dep);\n }\n });\n }\n if (depsFromContextVariables.length > 0) {\n const v = depsFromContextVariables.map(d => {\n return dag.vertices.get(d) as Vertex;\n });\n const minLevelDep = minBy(v, (d: Vertex) => d.level) as Vertex;\n const nearestDeps = v.filter(v1 => v1.level === minLevelDep.level);\n nearestDeps.forEach(nd => {\n if (nd.level - vertex.level <= 1 || vertex.dependancyNames.length === 0) {\n runAfterTasks.push(nd.name);\n }\n });\n }\n return runAfterTasks;\n};\n\nexport const getGraphDataModel = (\n pipelineRun: PipelineRunKind | undefined,\n taskRuns: TaskRunKind[],\n): {\n graph: GraphModel;\n nodes: PipelineMixedNodeModel[];\n edges: EdgeModel[];\n} | null => {\n if (!pipelineRun) {\n return null;\n }\n\n const plrTaskRuns = getPLRTaskRuns(taskRuns, pipelineRun?.metadata?.name);\n\n const taskList = appendPipelineRunStatus(pipelineRun, plrTaskRuns);\n\n const dag = new DAG();\n taskList?.forEach((task: PipelineTask) => {\n dag.addEdges(task.name, task, '', task.runAfter || []);\n });\n\n const nodes: PipelineMixedNodeModel[] = [];\n const maxWidthForLevel: { [key: string]: number } = {};\n dag.topologicalSort((v: Vertex) => {\n if (!maxWidthForLevel[v.level]) {\n maxWidthForLevel[v.level] = getTextWidth(v.name);\n } else {\n maxWidthForLevel[v.level] = Math.max(\n maxWidthForLevel[v.level],\n getTextWidth(v.name),\n );\n }\n });\n dag.topologicalSort((vertex: Vertex) => {\n const task = vertex.data as PipelineTask;\n const runAfterTasks = getRunAfterTasks(task, dag, vertex);\n const badgePadding =\n Object.keys(pipelineRun.spec)?.length > 0 ? DEFAULT_BADGE_WIDTH : 0;\n const isTaskSkipped = pipelineRun?.status?.skippedTasks?.some(\n t => t.name === task.name,\n );\n nodes.push(\n createPipelineTaskNode(NodeType.TASK_NODE, {\n id: vertex.name,\n label: vertex.name,\n width:\n maxWidthForLevel[vertex.level] +\n NODE_PADDING * 2 +\n DEFAULT_NODE_ICON_WIDTH +\n badgePadding,\n runAfterTasks,\n status: isTaskSkipped ? RunStatus.Skipped : vertex.data.status?.reason,\n whenStatus: getTaskWhenStatus(vertex.data),\n task: vertex.data,\n pipelineRun,\n }),\n );\n });\n\n const finallyTaskList = appendPipelineRunStatus(\n pipelineRun,\n plrTaskRuns,\n true,\n );\n\n const finallyNodes = finallyTaskList.map(fTask => {\n const isTaskSkipped = pipelineRun?.status?.skippedTasks?.some(\n t => t.name === fTask.name,\n );\n\n return createPipelineTaskNode(NodeType.FINALLY_NODE, {\n id: fTask.name,\n label: fTask.name,\n width:\n getTextWidth(getMaxFinallyNode(finallyTaskList)) +\n NODE_PADDING * 2 +\n DEFAULT_FINALLLY_GROUP_PADDING * 2,\n height: DEFAULT_NODE_HEIGHT,\n runAfterTasks: [],\n status: isTaskSkipped\n ? RunStatus.Skipped\n : (fTask.status?.reason as RunStatus),\n whenStatus: getTaskWhenStatus(fTask),\n task: fTask,\n pipelineRun,\n });\n });\n\n const finallyGroup = finallyNodes.length\n ? [\n {\n id: 'finally-group-id',\n type: NodeType.FINALLY_GROUP,\n children: finallyNodes.map(n => n.id),\n group: true,\n style: { padding: DEFAULT_FINALLLY_GROUP_PADDING },\n },\n ]\n : [];\n const spacerNodes: PipelineMixedNodeModel[] = (\n getSpacerNodes([...nodes, ...finallyNodes], NodeType.SPACER_NODE, [\n NodeType.FINALLY_NODE,\n ]) as PipelineMixedNodeModel[]\n ).map(getSpacerNode);\n\n const edges: PipelineEdgeModel[] = getEdgesFromNodes(\n [...nodes, ...spacerNodes, ...finallyNodes],\n NodeType.SPACER_NODE,\n NodeType.EDGE,\n NodeType.EDGE,\n [NodeType.FINALLY_NODE],\n NodeType.EDGE,\n );\n\n return {\n graph: {\n id: `${pipelineRun?.metadata?.name}-graph`,\n type: ModelKind.graph,\n layout: PipelineLayout.DAGRE_VIEWER,\n scaleExtent: [0.5, 1],\n },\n nodes: [\n ...nodes,\n ...spacerNodes,\n ...finallyNodes,\n ...finallyGroup,\n ] as PipelineMixedNodeModel[],\n edges,\n };\n};\n\nexport const getLayoutData = (\n layout: PipelineLayout,\n): dagre.GraphLabel | null => {\n switch (layout) {\n case PipelineLayout.DAGRE_BUILDER:\n return DAGRE_BUILDER_PROPS;\n case PipelineLayout.DAGRE_VIEWER:\n return DAGRE_VIEWER_PROPS;\n case PipelineLayout.DAGRE_VIEWER_SPACED:\n return DAGRE_VIEWER_SPACED_PROPS;\n case PipelineLayout.DAGRE_BUILDER_SPACED:\n return DAGRE_BUILDER_SPACED_PROPS;\n default:\n return null;\n }\n};\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"taskRun-utils.esm.js","sources":["../../src/utils/taskRun-utils.ts"],"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 {\n TaskRunResultsAnnotations,\n TaskRunResultsKeyValue,\n TaskRunResultsTypeValue,\n} from '@aonic-ui/pipelines';\n\nimport {\n ComputedStatus,\n pipelineRunFilterReducer,\n TaskRunKind,\n} from '@janus-idp/shared-react';\n\nimport {\n TEKTON_PIPELINE_RUN,\n TEKTON_PIPELINE_TASK,\n} from '../consts/tekton-const';\nimport { OutputTaskRunGroup } from '../types/output';\n\nexport type TaskStep = {\n id: string;\n name: string;\n status: ComputedStatus;\n startedAt?: string;\n endedAt?: string;\n};\n\nexport const getSortedTaskRuns = (tRuns: TaskRunKind[]): TaskStep[] => {\n if (!tRuns || tRuns.length === 0) {\n return [];\n }\n const taskRuns = Array.from(tRuns).sort((a, b) => {\n if (a.status?.completionTime) {\n return b.status?.completionTime &&\n new Date(a.status?.completionTime ?? '') >\n new Date(b.status.completionTime)\n ? 1\n : -1;\n }\n return b.status?.completionTime ||\n new Date(a.status?.startTime ?? '') > new Date(b.status?.startTime ?? '')\n ? 1\n : -1;\n });\n return (taskRuns?.map(tr => {\n return {\n id: tr.metadata?.name,\n name: tr.metadata?.labels?.[TEKTON_PIPELINE_TASK],\n status: pipelineRunFilterReducer(tr),\n startedAt: tr.status?.startTime,\n endedAt: tr.status?.completionTime,\n };\n }) || []) as TaskStep[];\n};\n\nexport const getActiveTaskRun = (\n taskRuns: TaskStep[],\n activeTask: string | undefined,\n): string | undefined =>\n activeTask\n ? taskRuns.find(taskRun => taskRun?.id === activeTask)?.id\n : taskRuns[taskRuns.length - 1]?.id;\n\nconst checkTypeAnnotation = (\n tr: TaskRunKind | undefined,\n type: TaskRunResultsTypeValue,\n): boolean =>\n tr?.metadata?.annotations?.[TaskRunResultsAnnotations.TYPE] === type;\n\nexport const isSbomTaskRun = (tr: TaskRunKind | undefined): boolean =>\n tr?.metadata?.annotations?.[TaskRunResultsAnnotations.KEY] ===\n TaskRunResultsKeyValue.SBOM;\n\nexport const isECTaskRun = (tr: TaskRunKind | undefined): boolean =>\n checkTypeAnnotation(tr, TaskRunResultsTypeValue.EC);\n\nexport const isACSImageScanTaskRun = (tr: TaskRunKind | undefined): boolean =>\n checkTypeAnnotation(tr, TaskRunResultsTypeValue.ROXCTL_IMAGE_SCAN);\n\nexport const isACSImageCheckTaskRun = (tr: TaskRunKind | undefined): boolean =>\n checkTypeAnnotation(tr, TaskRunResultsTypeValue.ROXCTL_IMAGE_CHECK);\n\nexport const isACSDeploymentCheckTaskRun = (\n tr: TaskRunKind | undefined,\n): boolean =>\n checkTypeAnnotation(tr, TaskRunResultsTypeValue.ROXCTL_DEPLOYMENT_CHECK);\n\nexport const getTaskrunsOutputGroup = (\n pipelineRunName: string | undefined,\n taskruns: TaskRunKind[],\n): OutputTaskRunGroup => {\n const getPLRTaskRunByType = (\n check: (tr: TaskRunKind | undefined) => boolean,\n ): TaskRunKind | undefined =>\n taskruns?.find(\n (tr: TaskRunKind) =>\n tr?.metadata?.labels?.[TEKTON_PIPELINE_RUN] === pipelineRunName &&\n check(tr),\n );\n\n return {\n sbomTaskRun: getPLRTaskRunByType(isSbomTaskRun),\n ecTaskRun: getPLRTaskRunByType(isECTaskRun),\n acsImageScanTaskRun: getPLRTaskRunByType(isACSImageScanTaskRun),\n acsImageCheckTaskRun: getPLRTaskRunByType(isACSImageCheckTaskRun),\n acsDeploymentCheckTaskRun: getPLRTaskRunByType(isACSDeploymentCheckTaskRun),\n };\n};\n\nexport const hasExternalLink = (\n sbomTaskRun: TaskRunKind | undefined,\n): boolean =>\n sbomTaskRun?.metadata?.annotations?.[TaskRunResultsAnnotations.TYPE] ===\n TaskRunResultsTypeValue.EXTERNAL_LINK;\n\nexport const getSbomLink = (\n sbomTaskRun: TaskRunKind | undefined,\n): string | undefined =>\n (sbomTaskRun?.status?.results || sbomTaskRun?.status?.taskResults)?.find(\n r => r.name === TaskRunResultsKeyValue.SBOM,\n )?.value;\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"taskRun-utils.esm.js","sources":["../../src/utils/taskRun-utils.ts"],"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 {\n TaskRunResultsAnnotations,\n TaskRunResultsKeyValue,\n TaskRunResultsTypeValue,\n} from '@aonic-ui/pipelines';\n\nimport {\n ComputedStatus,\n pipelineRunFilterReducer,\n TaskRunKind,\n} from '@janus-idp/shared-react';\n\nimport {\n TEKTON_PIPELINE_RUN,\n TEKTON_PIPELINE_TASK,\n} from '../consts/tekton-const';\nimport { OutputTaskRunGroup } from '../types/output';\n\nexport type TaskStep = {\n id: string;\n name: string;\n status: ComputedStatus;\n startedAt?: string;\n endedAt?: string;\n};\n\nexport const getSortedTaskRuns = (tRuns: TaskRunKind[]): TaskStep[] => {\n if (!tRuns || tRuns.length === 0) {\n return [];\n }\n const taskRuns = Array.from(tRuns).sort((a, b) => {\n if (a.status?.completionTime) {\n return b.status?.completionTime &&\n new Date(a.status?.completionTime ?? '') >\n new Date(b.status.completionTime)\n ? 1\n : -1;\n }\n return b.status?.completionTime ||\n new Date(a.status?.startTime ?? '') > new Date(b.status?.startTime ?? '')\n ? 1\n : -1;\n });\n return (taskRuns?.map(tr => {\n return {\n id: tr.metadata?.name,\n name: tr.metadata?.labels?.[TEKTON_PIPELINE_TASK],\n status: pipelineRunFilterReducer(tr),\n startedAt: tr.status?.startTime,\n endedAt: tr.status?.completionTime,\n };\n }) || []) as TaskStep[];\n};\n\nexport const getActiveTaskRun = (\n taskRuns: TaskStep[],\n activeTask: string | undefined,\n): string | undefined =>\n activeTask\n ? taskRuns.find(taskRun => taskRun?.id === activeTask)?.id\n : taskRuns[taskRuns.length - 1]?.id;\n\nconst checkTypeAnnotation = (\n tr: TaskRunKind | undefined,\n type: TaskRunResultsTypeValue,\n): boolean =>\n tr?.metadata?.annotations?.[TaskRunResultsAnnotations.TYPE] === type;\n\nexport const isSbomTaskRun = (tr: TaskRunKind | undefined): boolean =>\n tr?.metadata?.annotations?.[TaskRunResultsAnnotations.KEY] ===\n TaskRunResultsKeyValue.SBOM;\n\nexport const isECTaskRun = (tr: TaskRunKind | undefined): boolean =>\n checkTypeAnnotation(tr, TaskRunResultsTypeValue.EC);\n\nexport const isACSImageScanTaskRun = (tr: TaskRunKind | undefined): boolean =>\n checkTypeAnnotation(tr, TaskRunResultsTypeValue.ROXCTL_IMAGE_SCAN);\n\nexport const isACSImageCheckTaskRun = (tr: TaskRunKind | undefined): boolean =>\n checkTypeAnnotation(tr, TaskRunResultsTypeValue.ROXCTL_IMAGE_CHECK);\n\nexport const isACSDeploymentCheckTaskRun = (\n tr: TaskRunKind | undefined,\n): boolean =>\n checkTypeAnnotation(tr, TaskRunResultsTypeValue.ROXCTL_DEPLOYMENT_CHECK);\n\nexport const getTaskrunsOutputGroup = (\n pipelineRunName: string | undefined,\n taskruns: TaskRunKind[],\n): OutputTaskRunGroup => {\n const getPLRTaskRunByType = (\n check: (tr: TaskRunKind | undefined) => boolean,\n ): TaskRunKind | undefined =>\n taskruns?.find(\n (tr: TaskRunKind) =>\n tr?.metadata?.labels?.[TEKTON_PIPELINE_RUN] === pipelineRunName &&\n check(tr),\n );\n\n return {\n sbomTaskRun: getPLRTaskRunByType(isSbomTaskRun),\n ecTaskRun: getPLRTaskRunByType(isECTaskRun),\n acsImageScanTaskRun: getPLRTaskRunByType(isACSImageScanTaskRun),\n acsImageCheckTaskRun: getPLRTaskRunByType(isACSImageCheckTaskRun),\n acsDeploymentCheckTaskRun: getPLRTaskRunByType(isACSDeploymentCheckTaskRun),\n };\n};\n\nexport const hasExternalLink = (\n sbomTaskRun: TaskRunKind | undefined,\n): boolean =>\n sbomTaskRun?.metadata?.annotations?.[TaskRunResultsAnnotations.TYPE] ===\n TaskRunResultsTypeValue.EXTERNAL_LINK;\n\nexport const getSbomLink = (\n sbomTaskRun: TaskRunKind | undefined,\n): string | undefined =>\n (sbomTaskRun?.status?.results || sbomTaskRun?.status?.taskResults)?.find(\n r => r.name === TaskRunResultsKeyValue.SBOM,\n )?.value;\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"tekton-utils.esm.js","sources":["../../src/utils/tekton-utils.ts"],"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 {\n ClusterObjects,\n ObjectsByEntityResponse,\n} from '@backstage/plugin-kubernetes-common';\n\nimport { pluralize } from '@patternfly/react-core';\nimport { get } from 'lodash';\n\nimport {\n ComputedStatus,\n getTaskRunsForPipelineRun,\n pipelineRunFilterReducer,\n PipelineRunKind,\n pipelineRunStatus,\n SucceedConditionReason,\n TaskRunKind,\n TaskStatusTypes,\n updateTaskStatus,\n} from '@janus-idp/shared-react';\n\nimport { getPipelineRunScanResults } from '../hooks/usePipelineRunScanResults';\nimport { PipelineRunGVK, TaskRunGVK } from '../models';\nimport {\n ClusterErrors,\n Order,\n PipelineRunScanResults,\n TektonResponseData,\n} from '../types/types';\n\nexport const getClusters = (k8sObjects: ObjectsByEntityResponse) => {\n const clusters: string[] = k8sObjects.items.map(\n (item: ClusterObjects) => item.cluster.name,\n );\n const errors: ClusterErrors[] = k8sObjects.items.map(\n (item: ClusterObjects) => item.errors,\n );\n return { clusters, errors };\n};\n\nconst isTektonResource = (kind: string) =>\n [PipelineRunGVK.kind, TaskRunGVK.kind].includes(kind);\n\nconst getResourceType = (kind: string) => {\n switch (kind) {\n case PipelineRunGVK.kind:\n return 'pipelineruns';\n case TaskRunGVK.kind:\n return 'taskruns';\n default:\n return '';\n }\n};\n\nexport const getTektonResources = (\n cluster: number,\n k8sObjects: ObjectsByEntityResponse,\n) =>\n k8sObjects.items?.[cluster]?.resources?.reduce(\n (acc: TektonResponseData, res: any) => {\n if (res.type === 'pods') {\n return {\n ...acc,\n pods: { data: res.resources },\n };\n }\n if (\n res.type !== 'customresources' ||\n (res.type === 'customresources' && res.resources.length === 0)\n ) {\n return acc;\n }\n const customResKind = res.resources[0].kind;\n return {\n ...acc,\n ...(isTektonResource(customResKind) && {\n [getResourceType(customResKind)]: {\n data: res.resources,\n },\n }),\n };\n },\n {},\n );\n\nexport const totalPipelineRunTasks = (pipelinerun: PipelineRunKind): number => {\n if (!pipelinerun?.status?.pipelineSpec) {\n return 0;\n }\n const totalTasks = (pipelinerun.status.pipelineSpec?.tasks || []).length;\n const finallyTasks =\n (pipelinerun.status.pipelineSpec?.finally || []).length ?? 0;\n return totalTasks + finallyTasks;\n};\n\nexport const getTaskStatusOfPLR = (\n pipelinerun: PipelineRunKind,\n taskRuns: TaskRunKind[],\n) => {\n const totalTasks = totalPipelineRunTasks(pipelinerun);\n const plrTasks = getTaskRunsForPipelineRun(pipelinerun, taskRuns);\n const plrTaskLength = plrTasks?.length;\n const skippedTaskLength = pipelinerun?.status?.skippedTasks?.length || 0;\n\n const taskStatus: TaskStatusTypes = updateTaskStatus(pipelinerun, plrTasks);\n\n if (plrTasks?.length > 0) {\n const pipelineRunHasFailure = taskStatus[ComputedStatus.Failed] > 0;\n const pipelineRunIsCancelled =\n pipelineRunFilterReducer(pipelinerun) === ComputedStatus.Cancelled;\n const unhandledTasks =\n totalTasks >= plrTaskLength\n ? totalTasks - plrTaskLength - skippedTaskLength\n : totalTasks;\n\n if (pipelineRunHasFailure || pipelineRunIsCancelled) {\n taskStatus[ComputedStatus.Cancelled] += unhandledTasks;\n } else {\n taskStatus[ComputedStatus.Pending] += unhandledTasks;\n }\n } else if (\n pipelinerun?.status?.conditions?.[0]?.status === 'False' ||\n pipelinerun?.spec?.status === SucceedConditionReason.PipelineRunCancelled\n ) {\n taskStatus[ComputedStatus.Cancelled] = totalTasks;\n } else if (\n pipelinerun?.spec?.status === SucceedConditionReason.PipelineRunPending\n ) {\n taskStatus[ComputedStatus.Pending] += totalTasks;\n } else {\n taskStatus[ComputedStatus.PipelineNotStarted]++;\n }\n return taskStatus;\n};\n\nexport const getDuration = (seconds: number, long?: boolean): string => {\n if (seconds === 0) {\n return 'less than a sec';\n }\n let sec = Math.round(seconds);\n let min = 0;\n let hr = 0;\n let duration = '';\n if (sec >= 60) {\n min = Math.floor(sec / 60);\n sec %= 60;\n }\n if (min >= 60) {\n hr = Math.floor(min / 60);\n min %= 60;\n }\n if (hr > 0) {\n duration += long ? pluralize(hr, 'hour', 'hours') : `${hr}h`;\n duration += ' ';\n }\n if (min > 0) {\n duration += long ? pluralize(min, 'minute', 'minutes') : `${min}m`;\n duration += ' ';\n }\n if (sec > 0) {\n duration += long ? pluralize(sec, 'second', 'seconds') : `${sec}s`;\n }\n\n return duration.trim();\n};\n\nexport const descendingComparator = (\n a: PipelineRunKind,\n b: PipelineRunKind,\n orderBy: string,\n) => {\n if (get(b, orderBy) < get(a, orderBy)) {\n return -1;\n }\n if (get(b, orderBy) > get(a, orderBy)) {\n return 1;\n }\n return 0;\n};\n\nexport const calculateDurationInSeconds = (\n startTime: string,\n endTime?: string,\n) => {\n const start = new Date(startTime).getTime();\n const end = endTime ? new Date(endTime).getTime() : new Date().getTime();\n const durationInSeconds = (end - start) / 1000;\n return durationInSeconds;\n};\n\nexport const durationComparator = (a: PipelineRunKind, b: PipelineRunKind) => {\n const durationA = a.status?.startTime\n ? calculateDurationInSeconds(a.status?.startTime, a.status?.completionTime)\n : 0;\n\n const durationB = b.status?.startTime\n ? calculateDurationInSeconds(b.status?.startTime, b.status?.completionTime)\n : 0;\n\n if (durationB < durationA) {\n return -1;\n }\n if (durationB > durationA) {\n return 1;\n }\n return 0;\n};\n\nconst vulnerabilitiesSortValue = (\n scanResults: PipelineRunScanResults,\n): number => {\n if (!scanResults?.vulnerabilities) {\n return -1;\n }\n // Expect no more than 999 of any one severity\n return (\n (scanResults.vulnerabilities.critical ?? 0) * 1000000000 +\n (scanResults.vulnerabilities.high ?? 0) * 1000000 +\n (scanResults.vulnerabilities.medium ?? 0) * 1000 +\n (scanResults.vulnerabilities.low ?? 0)\n );\n};\n\nexport const vulnerabilitiesComparator = (\n a: PipelineRunKind,\n b: PipelineRunKind,\n) => {\n const vulnerabilitiesSortValueA = vulnerabilitiesSortValue(\n getPipelineRunScanResults(a),\n );\n const vulnerabilitiesSortValueB = vulnerabilitiesSortValue(\n getPipelineRunScanResults(b),\n );\n\n if (vulnerabilitiesSortValueB < vulnerabilitiesSortValueA) {\n return -1;\n }\n if (vulnerabilitiesSortValueB > vulnerabilitiesSortValueA) {\n return 1;\n }\n return 0;\n};\n\nexport const getComparator = (\n order: Order,\n orderBy: string,\n orderById: string,\n) => {\n switch (orderById) {\n case 'duration':\n return (a: PipelineRunKind, b: PipelineRunKind) => {\n return order === 'desc'\n ? durationComparator(a, b)\n : -durationComparator(a, b);\n };\n case 'vulnerabilities':\n return (a: PipelineRunKind, b: PipelineRunKind) => {\n return order === 'desc'\n ? vulnerabilitiesComparator(a, b)\n : -vulnerabilitiesComparator(a, b);\n };\n default:\n return (a: PipelineRunKind, b: PipelineRunKind) => {\n return order === 'desc'\n ? descendingComparator(a, b, orderBy)\n : -descendingComparator(a, b, orderBy);\n };\n }\n};\n\nexport const calculateDuration = (\n startTime: string,\n endTime?: string,\n long?: boolean,\n) => {\n const durationInSeconds = calculateDurationInSeconds(startTime, endTime);\n return getDuration(durationInSeconds, long);\n};\n\nexport const pipelineRunDuration = (run: PipelineRunKind): string => {\n if (!run || Object.keys(run).length === 0) {\n return '-';\n }\n const startTime = run.status?.startTime;\n const completionTime = run.status?.completionTime;\n\n // Duration cannot be computed if start time is missing or a completed/failed pipeline/task has no end time\n if (!startTime || (!completionTime && pipelineRunStatus(run) !== 'Running')) {\n return '-';\n }\n return calculateDuration(startTime, completionTime, true);\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tekton-utils.esm.js","sources":["../../src/utils/tekton-utils.ts"],"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 {\n ClusterObjects,\n ObjectsByEntityResponse,\n} from '@backstage/plugin-kubernetes-common';\n\nimport { pluralize } from '@patternfly/react-core';\nimport { get } from 'lodash';\n\nimport {\n ComputedStatus,\n getTaskRunsForPipelineRun,\n pipelineRunFilterReducer,\n PipelineRunKind,\n pipelineRunStatus,\n SucceedConditionReason,\n TaskRunKind,\n TaskStatusTypes,\n updateTaskStatus,\n} from '@janus-idp/shared-react';\n\nimport { getPipelineRunScanResults } from '../hooks/usePipelineRunScanResults';\nimport { PipelineRunGVK, TaskRunGVK } from '../models';\nimport {\n ClusterErrors,\n Order,\n PipelineRunScanResults,\n TektonResponseData,\n} from '../types/types';\n\nexport const getClusters = (k8sObjects: ObjectsByEntityResponse) => {\n const clusters: string[] = k8sObjects.items.map(\n (item: ClusterObjects) => item.cluster.name,\n );\n const errors: ClusterErrors[] = k8sObjects.items.map(\n (item: ClusterObjects) => item.errors,\n );\n return { clusters, errors };\n};\n\nconst isTektonResource = (kind: string) =>\n [PipelineRunGVK.kind, TaskRunGVK.kind].includes(kind);\n\nconst getResourceType = (kind: string) => {\n switch (kind) {\n case PipelineRunGVK.kind:\n return 'pipelineruns';\n case TaskRunGVK.kind:\n return 'taskruns';\n default:\n return '';\n }\n};\n\nexport const getTektonResources = (\n cluster: number,\n k8sObjects: ObjectsByEntityResponse,\n) =>\n k8sObjects.items?.[cluster]?.resources?.reduce(\n (acc: TektonResponseData, res: any) => {\n if (res.type === 'pods') {\n return {\n ...acc,\n pods: { data: res.resources },\n };\n }\n if (\n res.type !== 'customresources' ||\n (res.type === 'customresources' && res.resources.length === 0)\n ) {\n return acc;\n }\n const customResKind = res.resources[0].kind;\n return {\n ...acc,\n ...(isTektonResource(customResKind) && {\n [getResourceType(customResKind)]: {\n data: res.resources,\n },\n }),\n };\n },\n {},\n );\n\nexport const totalPipelineRunTasks = (pipelinerun: PipelineRunKind): number => {\n if (!pipelinerun?.status?.pipelineSpec) {\n return 0;\n }\n const totalTasks = (pipelinerun.status.pipelineSpec?.tasks || []).length;\n const finallyTasks =\n (pipelinerun.status.pipelineSpec?.finally || []).length ?? 0;\n return totalTasks + finallyTasks;\n};\n\nexport const getTaskStatusOfPLR = (\n pipelinerun: PipelineRunKind,\n taskRuns: TaskRunKind[],\n) => {\n const totalTasks = totalPipelineRunTasks(pipelinerun);\n const plrTasks = getTaskRunsForPipelineRun(pipelinerun, taskRuns);\n const plrTaskLength = plrTasks?.length;\n const skippedTaskLength = pipelinerun?.status?.skippedTasks?.length || 0;\n\n const taskStatus: TaskStatusTypes = updateTaskStatus(pipelinerun, plrTasks);\n\n if (plrTasks?.length > 0) {\n const pipelineRunHasFailure = taskStatus[ComputedStatus.Failed] > 0;\n const pipelineRunIsCancelled =\n pipelineRunFilterReducer(pipelinerun) === ComputedStatus.Cancelled;\n const unhandledTasks =\n totalTasks >= plrTaskLength\n ? totalTasks - plrTaskLength - skippedTaskLength\n : totalTasks;\n\n if (pipelineRunHasFailure || pipelineRunIsCancelled) {\n taskStatus[ComputedStatus.Cancelled] += unhandledTasks;\n } else {\n taskStatus[ComputedStatus.Pending] += unhandledTasks;\n }\n } else if (\n pipelinerun?.status?.conditions?.[0]?.status === 'False' ||\n pipelinerun?.spec?.status === SucceedConditionReason.PipelineRunCancelled\n ) {\n taskStatus[ComputedStatus.Cancelled] = totalTasks;\n } else if (\n pipelinerun?.spec?.status === SucceedConditionReason.PipelineRunPending\n ) {\n taskStatus[ComputedStatus.Pending] += totalTasks;\n } else {\n taskStatus[ComputedStatus.PipelineNotStarted]++;\n }\n return taskStatus;\n};\n\nexport const getDuration = (seconds: number, long?: boolean): string => {\n if (seconds === 0) {\n return 'less than a sec';\n }\n let sec = Math.round(seconds);\n let min = 0;\n let hr = 0;\n let duration = '';\n if (sec >= 60) {\n min = Math.floor(sec / 60);\n sec %= 60;\n }\n if (min >= 60) {\n hr = Math.floor(min / 60);\n min %= 60;\n }\n if (hr > 0) {\n duration += long ? pluralize(hr, 'hour', 'hours') : `${hr}h`;\n duration += ' ';\n }\n if (min > 0) {\n duration += long ? pluralize(min, 'minute', 'minutes') : `${min}m`;\n duration += ' ';\n }\n if (sec > 0) {\n duration += long ? pluralize(sec, 'second', 'seconds') : `${sec}s`;\n }\n\n return duration.trim();\n};\n\nexport const descendingComparator = (\n a: PipelineRunKind,\n b: PipelineRunKind,\n orderBy: string,\n) => {\n if (get(b, orderBy) < get(a, orderBy)) {\n return -1;\n }\n if (get(b, orderBy) > get(a, orderBy)) {\n return 1;\n }\n return 0;\n};\n\nexport const calculateDurationInSeconds = (\n startTime: string,\n endTime?: string,\n) => {\n const start = new Date(startTime).getTime();\n const end = endTime ? new Date(endTime).getTime() : new Date().getTime();\n const durationInSeconds = (end - start) / 1000;\n return durationInSeconds;\n};\n\nexport const durationComparator = (a: PipelineRunKind, b: PipelineRunKind) => {\n const durationA = a.status?.startTime\n ? calculateDurationInSeconds(a.status?.startTime, a.status?.completionTime)\n : 0;\n\n const durationB = b.status?.startTime\n ? calculateDurationInSeconds(b.status?.startTime, b.status?.completionTime)\n : 0;\n\n if (durationB < durationA) {\n return -1;\n }\n if (durationB > durationA) {\n return 1;\n }\n return 0;\n};\n\nconst vulnerabilitiesSortValue = (\n scanResults: PipelineRunScanResults,\n): number => {\n if (!scanResults?.vulnerabilities) {\n return -1;\n }\n // Expect no more than 999 of any one severity\n return (\n (scanResults.vulnerabilities.critical ?? 0) * 1000000000 +\n (scanResults.vulnerabilities.high ?? 0) * 1000000 +\n (scanResults.vulnerabilities.medium ?? 0) * 1000 +\n (scanResults.vulnerabilities.low ?? 0)\n );\n};\n\nexport const vulnerabilitiesComparator = (\n a: PipelineRunKind,\n b: PipelineRunKind,\n) => {\n const vulnerabilitiesSortValueA = vulnerabilitiesSortValue(\n getPipelineRunScanResults(a),\n );\n const vulnerabilitiesSortValueB = vulnerabilitiesSortValue(\n getPipelineRunScanResults(b),\n );\n\n if (vulnerabilitiesSortValueB < vulnerabilitiesSortValueA) {\n return -1;\n }\n if (vulnerabilitiesSortValueB > vulnerabilitiesSortValueA) {\n return 1;\n }\n return 0;\n};\n\nexport const getComparator = (\n order: Order,\n orderBy: string,\n orderById: string,\n) => {\n switch (orderById) {\n case 'duration':\n return (a: PipelineRunKind, b: PipelineRunKind) => {\n return order === 'desc'\n ? durationComparator(a, b)\n : -durationComparator(a, b);\n };\n case 'vulnerabilities':\n return (a: PipelineRunKind, b: PipelineRunKind) => {\n return order === 'desc'\n ? vulnerabilitiesComparator(a, b)\n : -vulnerabilitiesComparator(a, b);\n };\n default:\n return (a: PipelineRunKind, b: PipelineRunKind) => {\n return order === 'desc'\n ? descendingComparator(a, b, orderBy)\n : -descendingComparator(a, b, orderBy);\n };\n }\n};\n\nexport const calculateDuration = (\n startTime: string,\n endTime?: string,\n long?: boolean,\n) => {\n const durationInSeconds = calculateDurationInSeconds(startTime, endTime);\n return getDuration(durationInSeconds, long);\n};\n\nexport const pipelineRunDuration = (run: PipelineRunKind): string => {\n if (!run || Object.keys(run).length === 0) {\n return '-';\n }\n const startTime = run.status?.startTime;\n const completionTime = run.status?.completionTime;\n\n // Duration cannot be computed if start time is missing or a completed/failed pipeline/task has no end time\n if (!startTime || (!completionTime && pipelineRunStatus(run) !== 'Running')) {\n return '-';\n }\n return calculateDuration(startTime, completionTime, true);\n};\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@backstage-community/plugin-tekton",
3
- "version": "3.17.0",
3
+ "version": "3.18.0",
4
4
  "main": "dist/index.esm.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "license": "Apache-2.0",
@@ -11,7 +11,7 @@
11
11
  },
12
12
  "backstage": {
13
13
  "role": "frontend-plugin",
14
- "supported-versions": "^1.32.0",
14
+ "supported-versions": "1.35.0",
15
15
  "pluginId": "tekton",
16
16
  "pluginPackage": "@backstage-community/plugin-tekton",
17
17
  "pluginPackages": [
@@ -35,16 +35,16 @@
35
35
  },
36
36
  "dependencies": {
37
37
  "@aonic-ui/pipelines": "^3.0.0",
38
- "@backstage-community/plugin-tekton-common": "^1.4.0",
39
- "@backstage/catalog-model": "^1.7.0",
40
- "@backstage/core-components": "^0.15.1",
41
- "@backstage/core-plugin-api": "^1.10.0",
42
- "@backstage/plugin-catalog-react": "^1.14.0",
43
- "@backstage/plugin-kubernetes": "^0.11.16",
44
- "@backstage/plugin-kubernetes-common": "^0.8.3",
45
- "@backstage/plugin-kubernetes-react": "^0.4.4",
46
- "@backstage/plugin-permission-react": "^0.4.27",
47
- "@backstage/theme": "^0.6.0",
38
+ "@backstage-community/plugin-tekton-common": "^1.5.0",
39
+ "@backstage/catalog-model": "^1.7.3",
40
+ "@backstage/core-components": "^0.16.3",
41
+ "@backstage/core-plugin-api": "^1.10.3",
42
+ "@backstage/plugin-catalog-react": "^1.15.1",
43
+ "@backstage/plugin-kubernetes": "^0.12.3",
44
+ "@backstage/plugin-kubernetes-common": "^0.9.2",
45
+ "@backstage/plugin-kubernetes-react": "^0.5.3",
46
+ "@backstage/plugin-permission-react": "^0.4.30",
47
+ "@backstage/theme": "^0.6.3",
48
48
  "@janus-idp/shared-react": "^2.13.1",
49
49
  "@kubernetes/client-node": "^0.22.1",
50
50
  "@material-ui/core": "^4.9.13",
@@ -68,10 +68,10 @@
68
68
  "react-router-dom": "^6.0.0"
69
69
  },
70
70
  "devDependencies": {
71
- "@backstage/cli": "0.28.2",
72
- "@backstage/core-app-api": "1.15.1",
73
- "@backstage/dev-utils": "1.1.2",
74
- "@backstage/test-utils": "1.7.0",
71
+ "@backstage/cli": "^0.29.5",
72
+ "@backstage/core-app-api": "^1.15.4",
73
+ "@backstage/dev-utils": "^1.1.6",
74
+ "@backstage/test-utils": "^1.7.4",
75
75
  "@playwright/test": "1.49.1",
76
76
  "@redhat-developer/red-hat-developer-hub-theme": "0.4.0",
77
77
  "@testing-library/jest-dom": "6.6.3",
@@ -111,5 +111,12 @@
111
111
  "@divyanshiGupta"
112
112
  ],
113
113
  "author": "Red Hat",
114
+ "typesVersions": {
115
+ "*": {
116
+ "index": [
117
+ "dist/index.d.ts"
118
+ ]
119
+ }
120
+ },
114
121
  "module": "./dist/index.esm.js"
115
122
  }