@backstage-community/plugin-tekton 3.26.0 → 3.26.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +16 -0
- package/dist/components/PipelineRunList/PipelineRunRow.esm.js +4 -3
- package/dist/components/PipelineRunList/PipelineRunRow.esm.js.map +1 -1
- package/dist/components/PipelineRunList/PlrStatus.esm.js +13 -1
- package/dist/components/PipelineRunList/PlrStatus.esm.js.map +1 -1
- package/dist/components/PipelineRunLogs/PodLogsDownloadLink.esm.js +1 -1
- package/dist/components/PipelineRunLogs/PodLogsDownloadLink.esm.js.map +1 -1
- package/dist/components/PipelineRunLogs/TaskStatusStepper.esm.js +2 -1
- package/dist/components/PipelineRunLogs/TaskStatusStepper.esm.js.map +1 -1
- package/dist/components/common/StatusSelector.esm.js +12 -12
- package/dist/components/common/StatusSelector.esm.js.map +1 -1
- package/dist/components/pipeline-topology/PipelineTaskNode.esm.js +4 -1
- package/dist/components/pipeline-topology/PipelineTaskNode.esm.js.map +1 -1
- package/dist/index.d.ts +23 -3
- package/dist/translation.esm.js +24 -0
- package/dist/translation.esm.js.map +1 -1
- package/dist/utils/download-log-file-utils.esm.js +12 -0
- package/dist/utils/download-log-file-utils.esm.js.map +1 -0
- package/dist/utils/pipeline-step-utils.esm.js +7 -6
- package/dist/utils/pipeline-step-utils.esm.js.map +1 -1
- package/dist/utils/tekton-utils.esm.js +9 -10
- package/dist/utils/tekton-utils.esm.js.map +1 -1
- package/package.json +3 -6
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,21 @@
|
|
|
1
1
|
### Dependencies
|
|
2
2
|
|
|
3
|
+
## 3.26.2
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 8fa8ece: Updated dependency `@types/lodash` to `4.17.17`.
|
|
8
|
+
- 6a59fcf: remove support and lifecycle keywords in package.json
|
|
9
|
+
- Updated dependencies [6a59fcf]
|
|
10
|
+
- @backstage-community/plugin-tekton-common@1.10.1
|
|
11
|
+
|
|
12
|
+
## 3.26.1
|
|
13
|
+
|
|
14
|
+
### Patch Changes
|
|
15
|
+
|
|
16
|
+
- 87918c8: PipelineRun list status and duration support i18n
|
|
17
|
+
- 65f826d: Replaced `downloadLogFile` from `@janus-idp/shared-react` with a local version based on PatternFly’s `CodeEditor`, so the plugin no longer depends on `shared-react` for this utility.
|
|
18
|
+
|
|
3
19
|
## 3.26.0
|
|
4
20
|
|
|
5
21
|
### Minor Changes
|
|
@@ -14,8 +14,8 @@ import '../../consts/pipeline-topology-const.esm.js';
|
|
|
14
14
|
import '../pipeline-topology/PipelineTaskNode.esm.js';
|
|
15
15
|
import '../pipeline-topology/TaskGroupEdge.esm.js';
|
|
16
16
|
import '../pipeline-topology/PipelineVisualization.css.esm.js';
|
|
17
|
-
import '@backstage/core-plugin-api/alpha';
|
|
18
|
-
import '../../translation.esm.js';
|
|
17
|
+
import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
|
|
18
|
+
import { tektonTranslationRef } from '../../translation.esm.js';
|
|
19
19
|
import { PipelineRunVisualization } from '../pipeline-topology/PipelineRunVisualization.esm.js';
|
|
20
20
|
import PipelineRunRowActions from './PipelineRunRowActions.esm.js';
|
|
21
21
|
import PipelineRunTaskStatus from './PipelineRunTaskStatus.esm.js';
|
|
@@ -74,6 +74,7 @@ const PipelineRunRow = ({
|
|
|
74
74
|
}) => {
|
|
75
75
|
const classes = useStyles();
|
|
76
76
|
const uid = row.metadata?.uid;
|
|
77
|
+
const { t } = useTranslationRef(tektonTranslationRef);
|
|
77
78
|
useEffect(() => {
|
|
78
79
|
return setOpen((val) => {
|
|
79
80
|
return {
|
|
@@ -114,7 +115,7 @@ const PipelineRunRow = ({
|
|
|
114
115
|
date: new Date(startTime)
|
|
115
116
|
}
|
|
116
117
|
) : "-" }),
|
|
117
|
-
/* @__PURE__ */ jsx(TableCell, { align: "left", children: pipelineRunDuration(row) }),
|
|
118
|
+
/* @__PURE__ */ jsx(TableCell, { align: "left", children: pipelineRunDuration(row, t) }),
|
|
118
119
|
/* @__PURE__ */ jsx(TableCell, { align: "left", children: /* @__PURE__ */ jsx(PipelineRunRowActions, { pipelineRun: row }) })
|
|
119
120
|
] }),
|
|
120
121
|
/* @__PURE__ */ jsx(TableRow, { className: classes.plrVisRow, children: /* @__PURE__ */ jsx(TableCell, { style: { paddingBottom: 0, paddingTop: 0 }, colSpan: 8, children: /* @__PURE__ */ jsx(Collapse, { in: open, timeout: "auto", unmountOnExit: true, children: /* @__PURE__ */ jsx(Box, { marginTop: 1, marginBottom: 1, children: /* @__PURE__ */ jsx(PipelineRunVisualization, { pipelineRunName: row.metadata?.name }) }) }) }) })
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PipelineRunRow.esm.js","sources":["../../../src/components/PipelineRunList/PipelineRunRow.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 type { SetStateAction, Dispatch } from 'react';\n\nimport { useEffect, Fragment } from 'react';\n\nimport {\n Box,\n Collapse,\n IconButton,\n makeStyles,\n TableCell,\n TableRow,\n Theme,\n} from '@material-ui/core';\nimport KeyboardArrowDownIcon from '@material-ui/icons/KeyboardArrowDown';\nimport KeyboardArrowRightIcon from '@material-ui/icons/KeyboardArrowRight';\nimport { Timestamp, Tooltip } from '@patternfly/react-core';\n\nimport { PipelineRunKind } from '@janus-idp/shared-react';\n\nimport { TEKTON_SIGNED_ANNOTATION } from '../../consts/tekton-const';\nimport { OpenRowStatus, tektonGroupColor } from '../../types/types';\nimport { pipelineRunDuration } from '../../utils/tekton-utils';\nimport { PipelineRunVisualization } from '../pipeline-topology';\nimport PipelineRunRowActions from './PipelineRunRowActions';\nimport PipelineRunTaskStatus from './PipelineRunTaskStatus';\nimport PipelineRunVulnerabilities from './PipelineRunVulnerabilities';\nimport PlrStatus from './PlrStatus';\nimport ResourceBadge from './ResourceBadge';\n\nimport './PipelineRunRow.css';\n\nimport classNames from 'classnames';\n\nimport SignedBadgeIcon from '../Icons/SignedBadge';\n\nconst useStyles = makeStyles((theme: Theme) => ({\n plrRow: {\n '&:nth-of-type(odd)': {\n backgroundColor: `${theme.palette.background.paper}`,\n },\n },\n plrVisRow: {\n borderBottom: `1px solid ${theme.palette.grey.A100}`,\n },\n signedIndicator: {\n display: 'inline-block',\n width: theme.spacing(2.5),\n position: 'relative',\n top: theme.spacing(0.5),\n },\n}));\n\ntype PipelineRunRowProps = {\n row: PipelineRunKind;\n startTime: string;\n isExpanded?: boolean;\n open: boolean;\n setOpen: Dispatch<SetStateAction<OpenRowStatus>>;\n};\n\ntype PipelineRunNameProps = { row: PipelineRunKind };\n\nconst PipelineRunName = ({ row }: PipelineRunNameProps) => {\n const classes = useStyles();\n const name = row.metadata?.name;\n const signed =\n row?.metadata?.annotations?.[TEKTON_SIGNED_ANNOTATION] === 'true';\n\n return (\n <div>\n {name ? (\n <ResourceBadge\n color={tektonGroupColor}\n abbr=\"PLR\"\n name={name || ''}\n suffix={\n signed ? (\n <Tooltip content=\"Signed\">\n <div\n className={classNames(\n classes.signedIndicator,\n 'signed-indicator',\n )}\n >\n <SignedBadgeIcon />\n </div>\n </Tooltip>\n ) : null\n }\n />\n ) : (\n '-'\n )}\n </div>\n );\n};\n\nexport const PipelineRunRow = ({\n row,\n startTime,\n isExpanded = false,\n open,\n setOpen,\n}: PipelineRunRowProps) => {\n const classes = useStyles();\n const uid = row.metadata?.uid;\n\n useEffect(() => {\n return setOpen((val: OpenRowStatus) => {\n return {\n ...val,\n ...(uid && { [uid]: isExpanded }),\n };\n });\n }, [isExpanded, uid, setOpen]);\n\n const expandCollapseClickHandler = () => {\n setOpen((val: OpenRowStatus) => {\n return {\n ...val,\n ...(uid && {\n [uid]: !val[uid],\n }),\n };\n });\n };\n\n return (\n <Fragment key={uid}>\n <TableRow className={classes.plrRow}>\n <TableCell>\n <IconButton\n aria-label=\"expand row\"\n size=\"small\"\n onClick={expandCollapseClickHandler}\n >\n {open ? <KeyboardArrowDownIcon /> : <KeyboardArrowRightIcon />}\n </IconButton>\n </TableCell>\n <TableCell align=\"left\">\n <PipelineRunName row={row} />\n </TableCell>\n <TableCell align=\"left\">\n <PipelineRunVulnerabilities pipelineRun={row} condensed />\n </TableCell>\n <TableCell align=\"left\">\n <PlrStatus obj={row} />\n </TableCell>\n <TableCell align=\"left\">\n <PipelineRunTaskStatus pipelineRun={row} />\n </TableCell>\n <TableCell align=\"left\">\n {startTime ? (\n <Timestamp\n className=\"bs-tkn-timestamp\"\n date={new Date(startTime)}\n />\n ) : (\n '-'\n )}\n </TableCell>\n <TableCell align=\"left\">{pipelineRunDuration(row)}</TableCell>\n <TableCell align=\"left\">\n <PipelineRunRowActions pipelineRun={row} />\n </TableCell>\n </TableRow>\n <TableRow className={classes.plrVisRow}>\n <TableCell style={{ paddingBottom: 0, paddingTop: 0 }} colSpan={8}>\n <Collapse in={open} timeout=\"auto\" unmountOnExit>\n <Box marginTop={1} marginBottom={1}>\n <PipelineRunVisualization pipelineRunName={row.metadata?.name} />\n </Box>\n </Collapse>\n </TableCell>\n </TableRow>\n </Fragment>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"PipelineRunRow.esm.js","sources":["../../../src/components/PipelineRunList/PipelineRunRow.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 type { SetStateAction, Dispatch } from 'react';\n\nimport { useEffect, Fragment } from 'react';\n\nimport {\n Box,\n Collapse,\n IconButton,\n makeStyles,\n TableCell,\n TableRow,\n Theme,\n} from '@material-ui/core';\nimport KeyboardArrowDownIcon from '@material-ui/icons/KeyboardArrowDown';\nimport KeyboardArrowRightIcon from '@material-ui/icons/KeyboardArrowRight';\nimport { Timestamp, Tooltip } from '@patternfly/react-core';\n\nimport { PipelineRunKind } from '@janus-idp/shared-react';\n\nimport { TEKTON_SIGNED_ANNOTATION } from '../../consts/tekton-const';\nimport { OpenRowStatus, tektonGroupColor } from '../../types/types';\nimport { pipelineRunDuration } from '../../utils/tekton-utils';\nimport { PipelineRunVisualization } from '../pipeline-topology';\nimport PipelineRunRowActions from './PipelineRunRowActions';\nimport PipelineRunTaskStatus from './PipelineRunTaskStatus';\nimport PipelineRunVulnerabilities from './PipelineRunVulnerabilities';\nimport PlrStatus from './PlrStatus';\nimport ResourceBadge from './ResourceBadge';\n\nimport './PipelineRunRow.css';\n\nimport classNames from 'classnames';\n\nimport SignedBadgeIcon from '../Icons/SignedBadge';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { tektonTranslationRef } from '../../translation';\n\nconst useStyles = makeStyles((theme: Theme) => ({\n plrRow: {\n '&:nth-of-type(odd)': {\n backgroundColor: `${theme.palette.background.paper}`,\n },\n },\n plrVisRow: {\n borderBottom: `1px solid ${theme.palette.grey.A100}`,\n },\n signedIndicator: {\n display: 'inline-block',\n width: theme.spacing(2.5),\n position: 'relative',\n top: theme.spacing(0.5),\n },\n}));\n\ntype PipelineRunRowProps = {\n row: PipelineRunKind;\n startTime: string;\n isExpanded?: boolean;\n open: boolean;\n setOpen: Dispatch<SetStateAction<OpenRowStatus>>;\n};\n\ntype PipelineRunNameProps = { row: PipelineRunKind };\n\nconst PipelineRunName = ({ row }: PipelineRunNameProps) => {\n const classes = useStyles();\n const name = row.metadata?.name;\n const signed =\n row?.metadata?.annotations?.[TEKTON_SIGNED_ANNOTATION] === 'true';\n\n return (\n <div>\n {name ? (\n <ResourceBadge\n color={tektonGroupColor}\n abbr=\"PLR\"\n name={name || ''}\n suffix={\n signed ? (\n <Tooltip content=\"Signed\">\n <div\n className={classNames(\n classes.signedIndicator,\n 'signed-indicator',\n )}\n >\n <SignedBadgeIcon />\n </div>\n </Tooltip>\n ) : null\n }\n />\n ) : (\n '-'\n )}\n </div>\n );\n};\n\nexport const PipelineRunRow = ({\n row,\n startTime,\n isExpanded = false,\n open,\n setOpen,\n}: PipelineRunRowProps) => {\n const classes = useStyles();\n const uid = row.metadata?.uid;\n const { t } = useTranslationRef(tektonTranslationRef);\n\n useEffect(() => {\n return setOpen((val: OpenRowStatus) => {\n return {\n ...val,\n ...(uid && { [uid]: isExpanded }),\n };\n });\n }, [isExpanded, uid, setOpen]);\n\n const expandCollapseClickHandler = () => {\n setOpen((val: OpenRowStatus) => {\n return {\n ...val,\n ...(uid && {\n [uid]: !val[uid],\n }),\n };\n });\n };\n\n return (\n <Fragment key={uid}>\n <TableRow className={classes.plrRow}>\n <TableCell>\n <IconButton\n aria-label=\"expand row\"\n size=\"small\"\n onClick={expandCollapseClickHandler}\n >\n {open ? <KeyboardArrowDownIcon /> : <KeyboardArrowRightIcon />}\n </IconButton>\n </TableCell>\n <TableCell align=\"left\">\n <PipelineRunName row={row} />\n </TableCell>\n <TableCell align=\"left\">\n <PipelineRunVulnerabilities pipelineRun={row} condensed />\n </TableCell>\n <TableCell align=\"left\">\n <PlrStatus obj={row} />\n </TableCell>\n <TableCell align=\"left\">\n <PipelineRunTaskStatus pipelineRun={row} />\n </TableCell>\n <TableCell align=\"left\">\n {startTime ? (\n <Timestamp\n className=\"bs-tkn-timestamp\"\n date={new Date(startTime)}\n />\n ) : (\n '-'\n )}\n </TableCell>\n <TableCell align=\"left\">{pipelineRunDuration(row, t)}</TableCell>\n <TableCell align=\"left\">\n <PipelineRunRowActions pipelineRun={row} />\n </TableCell>\n </TableRow>\n <TableRow className={classes.plrVisRow}>\n <TableCell style={{ paddingBottom: 0, paddingTop: 0 }} colSpan={8}>\n <Collapse in={open} timeout=\"auto\" unmountOnExit>\n <Box marginTop={1} marginBottom={1}>\n <PipelineRunVisualization pipelineRunName={row.metadata?.name} />\n </Box>\n </Collapse>\n </TableCell>\n </TableRow>\n </Fragment>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,22 @@
|
|
|
1
1
|
import { jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { pipelineRunFilterReducer, Status } from '@janus-idp/shared-react';
|
|
3
3
|
import './PlrStatus.css.esm.js';
|
|
4
|
+
import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
|
|
5
|
+
import { tektonTranslationRef } from '../../translation.esm.js';
|
|
4
6
|
|
|
5
7
|
const PlrStatus = ({ obj }) => {
|
|
6
8
|
const plrStatus = pipelineRunFilterReducer(obj);
|
|
7
|
-
|
|
9
|
+
const { t } = useTranslationRef(tektonTranslationRef);
|
|
10
|
+
return /* @__PURE__ */ jsx(
|
|
11
|
+
Status,
|
|
12
|
+
{
|
|
13
|
+
status: plrStatus,
|
|
14
|
+
displayStatusText: t(`pipelineRunStatus.${plrStatus}`, {
|
|
15
|
+
defaultValue: plrStatus
|
|
16
|
+
}),
|
|
17
|
+
className: "bs-tkn-plrstatus"
|
|
18
|
+
}
|
|
19
|
+
);
|
|
8
20
|
};
|
|
9
21
|
|
|
10
22
|
export { PlrStatus as default };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlrStatus.esm.js","sources":["../../../src/components/PipelineRunList/PlrStatus.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 {\n pipelineRunFilterReducer,\n PipelineRunKind,\n Status,\n} from '@janus-idp/shared-react';\n\nimport './PlrStatus.css';\n\ntype PlrStatusProps = { obj: PipelineRunKind };\n\nconst PlrStatus = ({ obj }: PlrStatusProps) => {\n const plrStatus = pipelineRunFilterReducer(obj);\n return <Status
|
|
1
|
+
{"version":3,"file":"PlrStatus.esm.js","sources":["../../../src/components/PipelineRunList/PlrStatus.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 {\n pipelineRunFilterReducer,\n PipelineRunKind,\n Status,\n} from '@janus-idp/shared-react';\n\nimport './PlrStatus.css';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { tektonTranslationRef } from '../../translation';\n\ntype PlrStatusProps = { obj: PipelineRunKind };\n\nconst PlrStatus = ({ obj }: PlrStatusProps) => {\n const plrStatus = pipelineRunFilterReducer(obj);\n const { t } = useTranslationRef(tektonTranslationRef);\n return (\n <Status\n status={plrStatus}\n displayStatusText={t(`pipelineRunStatus.${plrStatus}` as any, {\n defaultValue: plrStatus,\n })}\n className=\"bs-tkn-plrstatus\"\n />\n );\n};\n\nexport default PlrStatus;\n"],"names":[],"mappings":";;;;;;AA2BA,MAAM,SAAY,GAAA,CAAC,EAAE,GAAA,EAA0B,KAAA;AAC7C,EAAM,MAAA,SAAA,GAAY,yBAAyB,GAAG,CAAA;AAC9C,EAAA,MAAM,EAAE,CAAA,EAAM,GAAA,iBAAA,CAAkB,oBAAoB,CAAA;AACpD,EACE,uBAAA,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,MAAQ,EAAA,SAAA;AAAA,MACR,iBAAmB,EAAA,CAAA,CAAE,CAAqB,kBAAA,EAAA,SAAS,CAAW,CAAA,EAAA;AAAA,QAC5D,YAAc,EAAA;AAAA,OACf,CAAA;AAAA,MACD,SAAU,EAAA;AAAA;AAAA,GACZ;AAEJ;;;;"}
|
|
@@ -4,12 +4,12 @@ import { useApi } from '@backstage/core-plugin-api';
|
|
|
4
4
|
import { makeStyles, Link, createStyles } from '@material-ui/core';
|
|
5
5
|
import DownloadIcon from '@mui/icons-material/FileDownloadOutlined';
|
|
6
6
|
import classNames from 'classnames';
|
|
7
|
-
import { downloadLogFile } from '@janus-idp/shared-react';
|
|
8
7
|
import { TektonResourcesContext } from '../../hooks/TektonResourcesContext.esm.js';
|
|
9
8
|
import { kubernetesProxyApiRef } from '../../types/types.esm.js';
|
|
10
9
|
import { getPodLogs } from '../../utils/log-downloader-utils.esm.js';
|
|
11
10
|
import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
|
|
12
11
|
import { tektonTranslationRef } from '../../translation.esm.js';
|
|
12
|
+
import { downloadLogFile } from '../../utils/download-log-file-utils.esm.js';
|
|
13
13
|
|
|
14
14
|
const useStyles = makeStyles(
|
|
15
15
|
(theme) => createStyles({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PodLogsDownloadLink.esm.js","sources":["../../../src/components/PipelineRunLogs/PodLogsDownloadLink.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 type { FC, ReactElement } from 'react';\n\nimport { useState, useContext } from 'react';\n\nimport { useApi } from '@backstage/core-plugin-api';\n\nimport { V1Pod } from '@kubernetes/client-node';\nimport { createStyles, Link, makeStyles, Theme } from '@material-ui/core';\nimport DownloadIcon from '@mui/icons-material/FileDownloadOutlined';\nimport classNames from 'classnames';\n\nimport {
|
|
1
|
+
{"version":3,"file":"PodLogsDownloadLink.esm.js","sources":["../../../src/components/PipelineRunLogs/PodLogsDownloadLink.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 type { FC, ReactElement } from 'react';\n\nimport { useState, useContext } from 'react';\n\nimport { useApi } from '@backstage/core-plugin-api';\n\nimport { V1Pod } from '@kubernetes/client-node';\nimport { createStyles, Link, makeStyles, Theme } from '@material-ui/core';\nimport DownloadIcon from '@mui/icons-material/FileDownloadOutlined';\nimport classNames from 'classnames';\n\nimport { TektonResourcesContext } from '../../hooks/TektonResourcesContext';\nimport { ContainerScope } from '../../hooks/usePodLogsOfPipelineRun';\nimport {\n kubernetesProxyApiRef,\n TektonResourcesContextData,\n} from '../../types/types';\nimport { getPodLogs } from '../../utils/log-downloader-utils';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { tektonTranslationRef } from '../../translation';\nimport { downloadLogFile } from '../../utils/download-log-file-utils';\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n downloadAction: {\n position: 'relative',\n marginBottom: 'var(--pf-t--global--spacer--sm)',\n color: 'var(--pf-t--global--icon--color--100)',\n cursor: 'pointer',\n },\n buttonDisabled: {\n color: theme.palette.grey[400],\n cursor: 'not-allowed',\n },\n }),\n);\n\nconst PodLogsDownloadLink: FC<{\n pods: V1Pod[];\n fileName: string;\n downloadTitle: string;\n}> = ({ pods, fileName, downloadTitle, ...props }): ReactElement => {\n const classes = useStyles();\n const [downloading, setDownloading] = useState<boolean>(false);\n const kubernetesProxyApi = useApi(kubernetesProxyApiRef);\n const { t } = useTranslationRef(tektonTranslationRef);\n\n const { clusters, selectedCluster = 0 } =\n useContext<TektonResourcesContextData>(TektonResourcesContext);\n const currCluster = clusters.length > 0 ? clusters[selectedCluster] : '';\n\n const getLogs = (podScope: ContainerScope): Promise<{ text: string }> => {\n const { podName, podNamespace, containerName, clusterName } = podScope;\n return kubernetesProxyApi.getPodLogs({\n podName: podName,\n namespace: podNamespace,\n containerName: containerName,\n clusterName: clusterName,\n });\n };\n\n return (\n <Link\n component=\"button\"\n variant=\"body2\"\n underline=\"none\"\n disabled={downloading}\n title={\n downloading\n ? t('pipelineRunLogs.podLogsDownloadLink.downloading')\n : downloadTitle\n }\n onClick={() => {\n setDownloading(true);\n getPodLogs(pods, getLogs, currCluster)\n .then((logs: string) => {\n setDownloading(false);\n downloadLogFile(logs || '', fileName);\n })\n .catch(err => {\n // eslint-disable-next-line no-console\n console.warn('Download failed', err);\n setDownloading(false);\n });\n }}\n className={classNames(classes.downloadAction, {\n [classes.buttonDisabled]: downloading,\n })}\n {...props}\n >\n <DownloadIcon style={{ verticalAlign: '-0.180em' }} />\n {downloadTitle || t('pipelineRunLogs.podLogsDownloadLink.title')}\n </Link>\n );\n};\nexport default PodLogsDownloadLink;\n"],"names":[],"mappings":";;;;;;;;;;;;;AAqCA,MAAM,SAAY,GAAA,UAAA;AAAA,EAAW,CAAC,UAC5B,YAAa,CAAA;AAAA,IACX,cAAgB,EAAA;AAAA,MACd,QAAU,EAAA,UAAA;AAAA,MACV,YAAc,EAAA,iCAAA;AAAA,MACd,KAAO,EAAA,uCAAA;AAAA,MACP,MAAQ,EAAA;AAAA,KACV;AAAA,IACA,cAAgB,EAAA;AAAA,MACd,KAAO,EAAA,KAAA,CAAM,OAAQ,CAAA,IAAA,CAAK,GAAG,CAAA;AAAA,MAC7B,MAAQ,EAAA;AAAA;AACV,GACD;AACH,CAAA;AAEM,MAAA,mBAAA,GAID,CAAC,EAAE,IAAA,EAAM,UAAU,aAAe,EAAA,GAAG,OAA0B,KAAA;AAClE,EAAA,MAAM,UAAU,SAAU,EAAA;AAC1B,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,SAAkB,KAAK,CAAA;AAC7D,EAAM,MAAA,kBAAA,GAAqB,OAAO,qBAAqB,CAAA;AACvD,EAAA,MAAM,EAAE,CAAA,EAAM,GAAA,iBAAA,CAAkB,oBAAoB,CAAA;AAEpD,EAAA,MAAM,EAAE,QAAU,EAAA,eAAA,GAAkB,CAAE,EAAA,GACpC,WAAuC,sBAAsB,CAAA;AAC/D,EAAA,MAAM,cAAc,QAAS,CAAA,MAAA,GAAS,CAAI,GAAA,QAAA,CAAS,eAAe,CAAI,GAAA,EAAA;AAEtE,EAAM,MAAA,OAAA,GAAU,CAAC,QAAwD,KAAA;AACvE,IAAA,MAAM,EAAE,OAAA,EAAS,YAAc,EAAA,aAAA,EAAe,aAAgB,GAAA,QAAA;AAC9D,IAAA,OAAO,mBAAmB,UAAW,CAAA;AAAA,MACnC,OAAA;AAAA,MACA,SAAW,EAAA,YAAA;AAAA,MACX,aAAA;AAAA,MACA;AAAA,KACD,CAAA;AAAA,GACH;AAEA,EACE,uBAAA,IAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,SAAU,EAAA,QAAA;AAAA,MACV,OAAQ,EAAA,OAAA;AAAA,MACR,SAAU,EAAA,MAAA;AAAA,MACV,QAAU,EAAA,WAAA;AAAA,MACV,KACE,EAAA,WAAA,GACI,CAAE,CAAA,iDAAiD,CACnD,GAAA,aAAA;AAAA,MAEN,SAAS,MAAM;AACb,QAAA,cAAA,CAAe,IAAI,CAAA;AACnB,QAAA,UAAA,CAAW,MAAM,OAAS,EAAA,WAAW,CAClC,CAAA,IAAA,CAAK,CAAC,IAAiB,KAAA;AACtB,UAAA,cAAA,CAAe,KAAK,CAAA;AACpB,UAAgB,eAAA,CAAA,IAAA,IAAQ,IAAI,QAAQ,CAAA;AAAA,SACrC,CACA,CAAA,KAAA,CAAM,CAAO,GAAA,KAAA;AAEZ,UAAQ,OAAA,CAAA,IAAA,CAAK,mBAAmB,GAAG,CAAA;AACnC,UAAA,cAAA,CAAe,KAAK,CAAA;AAAA,SACrB,CAAA;AAAA,OACL;AAAA,MACA,SAAA,EAAW,UAAW,CAAA,OAAA,CAAQ,cAAgB,EAAA;AAAA,QAC5C,CAAC,OAAQ,CAAA,cAAc,GAAG;AAAA,OAC3B,CAAA;AAAA,MACA,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,YAAa,EAAA,EAAA,KAAA,EAAO,EAAE,aAAA,EAAe,YAAc,EAAA,CAAA;AAAA,QACnD,aAAA,IAAiB,EAAE,2CAA2C;AAAA;AAAA;AAAA,GACjE;AAEJ;;;;"}
|
|
@@ -44,12 +44,13 @@ const useStyles = makeStyles(
|
|
|
44
44
|
);
|
|
45
45
|
const StepTimeTicker = ({ step }) => {
|
|
46
46
|
const [time, setTime] = useState("");
|
|
47
|
+
const { t } = useTranslationRef(tektonTranslationRef);
|
|
47
48
|
useInterval(() => {
|
|
48
49
|
if (!step.startedAt) {
|
|
49
50
|
setTime("");
|
|
50
51
|
return;
|
|
51
52
|
}
|
|
52
|
-
setTime(calculateDuration(step.startedAt, step.endedAt));
|
|
53
|
+
setTime(calculateDuration(t, step.startedAt, step.endedAt));
|
|
53
54
|
}, 1e3);
|
|
54
55
|
return /* @__PURE__ */ jsx(Typography, { variant: "caption", children: time });
|
|
55
56
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TaskStatusStepper.esm.js","sources":["../../../src/components/PipelineRunLogs/TaskStatusStepper.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 { useState, memo } from 'react';\nimport useInterval from 'react-use/lib/useInterval';\n\nimport {\n CircularProgress,\n createStyles,\n makeStyles,\n StepButton,\n StepIconProps,\n Theme,\n} from '@material-ui/core';\nimport Step from '@material-ui/core/Step';\nimport StepLabel from '@material-ui/core/StepLabel';\nimport Stepper from '@material-ui/core/Stepper';\nimport Typography from '@material-ui/core/Typography';\nimport Cancel from '@material-ui/icons/Cancel';\nimport Check from '@material-ui/icons/Check';\nimport FiberManualRecordIcon from '@material-ui/icons/FiberManualRecord';\nimport classNames from 'classnames';\n\nimport { ComputedStatus } from '@janus-idp/shared-react';\n\nimport { TaskStep } from '../../utils/taskRun-utils';\nimport { calculateDuration } from '../../utils/tekton-utils';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { tektonTranslationRef } from '../../translation';\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n root: {\n width: '100%',\n },\n titleContainer: {\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(1),\n },\n closeButton: {\n position: 'absolute',\n right: theme.spacing(1),\n top: theme.spacing(1),\n color: theme.palette.grey[500],\n },\n labelWrapper: {\n display: 'flex',\n flex: 1,\n flexDirection: 'row',\n justifyContent: 'space-between',\n },\n stepWrapper: {\n width: '100%',\n },\n }),\n);\n\nconst StepTimeTicker = ({ step }: { step: TaskStep }) => {\n const [time, setTime] = useState('');\n\n useInterval(() => {\n if (!step.startedAt) {\n setTime('');\n return;\n }\n\n setTime(calculateDuration(step.startedAt, step.endedAt));\n }, 1000);\n\n return <Typography variant=\"caption\">{time}</Typography>;\n};\n\nconst useStepIconStyles = makeStyles((theme: Theme) =>\n createStyles({\n root: {\n color: theme.palette.text.disabled,\n display: 'flex',\n height: 22,\n alignItems: 'center',\n },\n completed: {\n color: theme.palette.status.ok,\n },\n error: {\n color: theme.palette.status.error,\n },\n }),\n);\n\nconst TaskStepIconComponent = ({ active, completed, error }: StepIconProps) => {\n const classes = useStepIconStyles();\n\n const getMiddle = () => {\n if (active) {\n return <CircularProgress size=\"24px\" />;\n }\n if (completed) {\n return <Check />;\n }\n if (error) {\n return <Cancel />;\n }\n return <FiberManualRecordIcon />;\n };\n\n return (\n <div\n className={classNames(classes.root, {\n [classes.completed]: completed,\n [classes.error]: error,\n })}\n >\n {getMiddle()}\n </div>\n );\n};\n\ntype TaskStatusStepperProps = {\n steps: TaskStep[];\n currentStepId: string | undefined;\n onUserStepChange: (id: string) => void;\n classes?: {\n root?: string;\n };\n};\n\nexport const TaskStatusStepper = memo((props: TaskStatusStepperProps) => {\n const { steps, currentStepId, onUserStepChange } = props;\n const classes = useStyles(props);\n const { t } = useTranslationRef(tektonTranslationRef);\n\n return (\n <div className={classes.root}>\n <Stepper\n activeStep={steps.findIndex(s => s.id === currentStepId)}\n orientation=\"vertical\"\n nonLinear\n >\n {steps.map((step, _) => {\n const isCancelled = step.status === ComputedStatus.Cancelled;\n const isActive = step.status === ComputedStatus.Running;\n const isCompleted = step.status === ComputedStatus.Succeeded;\n const isFailed = step.status === ComputedStatus.Failed;\n const isSkipped = step.status === ComputedStatus.Skipped;\n\n return (\n <Step key={step.id} expanded>\n <StepButton onClick={() => onUserStepChange(step.id)}>\n <StepLabel\n StepIconProps={{\n completed: isCompleted,\n error: isFailed || isCancelled,\n active: isActive,\n }}\n StepIconComponent={TaskStepIconComponent}\n className={classes.stepWrapper}\n >\n <div className={classes.labelWrapper}>\n <Typography variant=\"subtitle2\">{step.name}</Typography>\n {isSkipped ? (\n <Typography variant=\"caption\">\n {t('pipelineRunLogs.taskStatusStepper.skipped')}\n </Typography>\n ) : (\n <StepTimeTicker step={step} />\n )}\n </div>\n </StepLabel>\n </StepButton>\n </Step>\n );\n })}\n </Stepper>\n </div>\n );\n});\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AA0CA,MAAM,SAAY,GAAA,UAAA;AAAA,EAAW,CAAC,UAC5B,YAAa,CAAA;AAAA,IACX,IAAM,EAAA;AAAA,MACJ,KAAO,EAAA;AAAA,KACT;AAAA,IACA,cAAgB,EAAA;AAAA,MACd,OAAS,EAAA,MAAA;AAAA,MACT,UAAY,EAAA,QAAA;AAAA,MACZ,GAAA,EAAK,KAAM,CAAA,OAAA,CAAQ,CAAC;AAAA,KACtB;AAAA,IACA,WAAa,EAAA;AAAA,MACX,QAAU,EAAA,UAAA;AAAA,MACV,KAAA,EAAO,KAAM,CAAA,OAAA,CAAQ,CAAC,CAAA;AAAA,MACtB,GAAA,EAAK,KAAM,CAAA,OAAA,CAAQ,CAAC,CAAA;AAAA,MACpB,KAAO,EAAA,KAAA,CAAM,OAAQ,CAAA,IAAA,CAAK,GAAG;AAAA,KAC/B;AAAA,IACA,YAAc,EAAA;AAAA,MACZ,OAAS,EAAA,MAAA;AAAA,MACT,IAAM,EAAA,CAAA;AAAA,MACN,aAAe,EAAA,KAAA;AAAA,MACf,cAAgB,EAAA;AAAA,KAClB;AAAA,IACA,WAAa,EAAA;AAAA,MACX,KAAO,EAAA;AAAA;AACT,GACD;AACH,CAAA;AAEA,MAAM,cAAiB,GAAA,CAAC,EAAE,IAAA,EAA+B,KAAA;AACvD,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAI,SAAS,EAAE,CAAA;
|
|
1
|
+
{"version":3,"file":"TaskStatusStepper.esm.js","sources":["../../../src/components/PipelineRunLogs/TaskStatusStepper.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 { useState, memo } from 'react';\nimport useInterval from 'react-use/lib/useInterval';\n\nimport {\n CircularProgress,\n createStyles,\n makeStyles,\n StepButton,\n StepIconProps,\n Theme,\n} from '@material-ui/core';\nimport Step from '@material-ui/core/Step';\nimport StepLabel from '@material-ui/core/StepLabel';\nimport Stepper from '@material-ui/core/Stepper';\nimport Typography from '@material-ui/core/Typography';\nimport Cancel from '@material-ui/icons/Cancel';\nimport Check from '@material-ui/icons/Check';\nimport FiberManualRecordIcon from '@material-ui/icons/FiberManualRecord';\nimport classNames from 'classnames';\n\nimport { ComputedStatus } from '@janus-idp/shared-react';\n\nimport { TaskStep } from '../../utils/taskRun-utils';\nimport { calculateDuration } from '../../utils/tekton-utils';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { tektonTranslationRef } from '../../translation';\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n root: {\n width: '100%',\n },\n titleContainer: {\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(1),\n },\n closeButton: {\n position: 'absolute',\n right: theme.spacing(1),\n top: theme.spacing(1),\n color: theme.palette.grey[500],\n },\n labelWrapper: {\n display: 'flex',\n flex: 1,\n flexDirection: 'row',\n justifyContent: 'space-between',\n },\n stepWrapper: {\n width: '100%',\n },\n }),\n);\n\nconst StepTimeTicker = ({ step }: { step: TaskStep }) => {\n const [time, setTime] = useState('');\n const { t } = useTranslationRef(tektonTranslationRef);\n\n useInterval(() => {\n if (!step.startedAt) {\n setTime('');\n return;\n }\n\n setTime(calculateDuration(t, step.startedAt, step.endedAt));\n }, 1000);\n\n return <Typography variant=\"caption\">{time}</Typography>;\n};\n\nconst useStepIconStyles = makeStyles((theme: Theme) =>\n createStyles({\n root: {\n color: theme.palette.text.disabled,\n display: 'flex',\n height: 22,\n alignItems: 'center',\n },\n completed: {\n color: theme.palette.status.ok,\n },\n error: {\n color: theme.palette.status.error,\n },\n }),\n);\n\nconst TaskStepIconComponent = ({ active, completed, error }: StepIconProps) => {\n const classes = useStepIconStyles();\n\n const getMiddle = () => {\n if (active) {\n return <CircularProgress size=\"24px\" />;\n }\n if (completed) {\n return <Check />;\n }\n if (error) {\n return <Cancel />;\n }\n return <FiberManualRecordIcon />;\n };\n\n return (\n <div\n className={classNames(classes.root, {\n [classes.completed]: completed,\n [classes.error]: error,\n })}\n >\n {getMiddle()}\n </div>\n );\n};\n\ntype TaskStatusStepperProps = {\n steps: TaskStep[];\n currentStepId: string | undefined;\n onUserStepChange: (id: string) => void;\n classes?: {\n root?: string;\n };\n};\n\nexport const TaskStatusStepper = memo((props: TaskStatusStepperProps) => {\n const { steps, currentStepId, onUserStepChange } = props;\n const classes = useStyles(props);\n const { t } = useTranslationRef(tektonTranslationRef);\n\n return (\n <div className={classes.root}>\n <Stepper\n activeStep={steps.findIndex(s => s.id === currentStepId)}\n orientation=\"vertical\"\n nonLinear\n >\n {steps.map((step, _) => {\n const isCancelled = step.status === ComputedStatus.Cancelled;\n const isActive = step.status === ComputedStatus.Running;\n const isCompleted = step.status === ComputedStatus.Succeeded;\n const isFailed = step.status === ComputedStatus.Failed;\n const isSkipped = step.status === ComputedStatus.Skipped;\n\n return (\n <Step key={step.id} expanded>\n <StepButton onClick={() => onUserStepChange(step.id)}>\n <StepLabel\n StepIconProps={{\n completed: isCompleted,\n error: isFailed || isCancelled,\n active: isActive,\n }}\n StepIconComponent={TaskStepIconComponent}\n className={classes.stepWrapper}\n >\n <div className={classes.labelWrapper}>\n <Typography variant=\"subtitle2\">{step.name}</Typography>\n {isSkipped ? (\n <Typography variant=\"caption\">\n {t('pipelineRunLogs.taskStatusStepper.skipped')}\n </Typography>\n ) : (\n <StepTimeTicker step={step} />\n )}\n </div>\n </StepLabel>\n </StepButton>\n </Step>\n );\n })}\n </Stepper>\n </div>\n );\n});\n"],"names":[],"mappings":"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"}
|
|
@@ -16,17 +16,6 @@ const useStyles = makeStyles((theme) => ({
|
|
|
16
16
|
fontWeight: "bold"
|
|
17
17
|
}
|
|
18
18
|
}));
|
|
19
|
-
const statusOptions = Object.entries(ComputedStatus).sort(([keyA], [keyB]) => {
|
|
20
|
-
if (keyA === keyB) {
|
|
21
|
-
return 0;
|
|
22
|
-
} else if (keyA < keyB) {
|
|
23
|
-
return -1;
|
|
24
|
-
}
|
|
25
|
-
return 1;
|
|
26
|
-
}).map(([key, value]) => ({
|
|
27
|
-
value: key,
|
|
28
|
-
label: value
|
|
29
|
-
}));
|
|
30
19
|
const StatusSelector = () => {
|
|
31
20
|
const classes = useStyles();
|
|
32
21
|
const { selectedStatus, setSelectedStatus } = useContext(
|
|
@@ -36,6 +25,17 @@ const StatusSelector = () => {
|
|
|
36
25
|
setSelectedStatus(status);
|
|
37
26
|
};
|
|
38
27
|
const { t } = useTranslationRef(tektonTranslationRef);
|
|
28
|
+
const statusOptions = Object.entries(ComputedStatus).sort(([keyA], [keyB]) => {
|
|
29
|
+
if (keyA === keyB) {
|
|
30
|
+
return 0;
|
|
31
|
+
} else if (keyA < keyB) {
|
|
32
|
+
return -1;
|
|
33
|
+
}
|
|
34
|
+
return 1;
|
|
35
|
+
}).map(([key, value]) => ({
|
|
36
|
+
value: key,
|
|
37
|
+
label: t(`pipelineRunStatus.${key}`, { defaultValue: value })
|
|
38
|
+
}));
|
|
39
39
|
return /* @__PURE__ */ jsxs("div", { className: "bs-tkn-status-selector", children: [
|
|
40
40
|
/* @__PURE__ */ jsx(Typography, { className: classes.label, children: t("statusSelector.label") }),
|
|
41
41
|
/* @__PURE__ */ jsx(
|
|
@@ -51,5 +51,5 @@ const StatusSelector = () => {
|
|
|
51
51
|
] });
|
|
52
52
|
};
|
|
53
53
|
|
|
54
|
-
export { StatusSelector
|
|
54
|
+
export { StatusSelector };
|
|
55
55
|
//# sourceMappingURL=StatusSelector.esm.js.map
|
|
@@ -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 { useContext } 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';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { tektonTranslationRef } from '../../translation';\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
|
|
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 { useContext } 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';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { tektonTranslationRef } from '../../translation';\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 StatusSelector = () => {\n const classes = useStyles();\n const { selectedStatus, setSelectedStatus } = useContext(\n TektonResourcesContext,\n );\n\n const onStatusChange = (status: SelectedItems) => {\n setSelectedStatus(status as ComputedStatus);\n };\n const { t } = useTranslationRef(tektonTranslationRef);\n 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: t(`pipelineRunStatus.${key}` as any, { defaultValue: value }),\n }));\n\n return (\n <div className=\"bs-tkn-status-selector\">\n <Typography className={classes.label}>\n {t('statusSelector.label')}\n </Typography>\n <Select\n onChange={onStatusChange}\n label=\"\"\n items={statusOptions}\n selected={selectedStatus}\n margin=\"dense\"\n />\n </div>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;AA6BA,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,iBAAiB,MAAM;AAClC,EAAA,MAAM,UAAU,SAAU,EAAA;AAC1B,EAAM,MAAA,EAAE,cAAgB,EAAA,iBAAA,EAAsB,GAAA,UAAA;AAAA,IAC5C;AAAA,GACF;AAEA,EAAM,MAAA,cAAA,GAAiB,CAAC,MAA0B,KAAA;AAChD,IAAA,iBAAA,CAAkB,MAAwB,CAAA;AAAA,GAC5C;AACA,EAAA,MAAM,EAAE,CAAA,EAAM,GAAA,iBAAA,CAAkB,oBAAoB,CAAA;AACpD,EAAA,MAAM,aAAgB,GAAA,MAAA,CAAO,OAAQ,CAAA,cAAc,CAChD,CAAA,IAAA,CAAK,CAAC,CAAC,IAAI,CAAA,EAAG,CAAC,IAAI,CAAM,KAAA;AACxB,IAAA,IAAI,SAAS,IAAM,EAAA;AACjB,MAAO,OAAA,CAAA;AAAA,KACT,MAAA,IAAW,OAAO,IAAM,EAAA;AACtB,MAAO,OAAA,EAAA;AAAA;AAET,IAAO,OAAA,CAAA;AAAA,GACR,CACA,CAAA,GAAA,CAAI,CAAC,CAAC,GAAA,EAAK,KAAK,CAAO,MAAA;AAAA,IACtB,KAAO,EAAA,GAAA;AAAA,IACP,KAAA,EAAO,EAAE,CAAqB,kBAAA,EAAA,GAAG,IAAW,EAAE,YAAA,EAAc,OAAO;AAAA,GACnE,CAAA,CAAA;AAEJ,EACE,uBAAA,IAAA,CAAC,KAAI,EAAA,EAAA,SAAA,EAAU,wBACb,EAAA,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,cAAW,SAAW,EAAA,OAAA,CAAQ,KAC5B,EAAA,QAAA,EAAA,CAAA,CAAE,sBAAsB,CAC3B,EAAA,CAAA;AAAA,oBACA,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,QAAU,EAAA,cAAA;AAAA,QACV,KAAM,EAAA,EAAA;AAAA,QACN,KAAO,EAAA,aAAA;AAAA,QACP,QAAU,EAAA,cAAA;AAAA,QACV,MAAO,EAAA;AAAA;AAAA;AACT,GACF,EAAA,CAAA;AAEJ;;;;"}
|
|
@@ -11,6 +11,8 @@ import { getTaskStatus } from '../../utils/pipelineRun-utils.esm.js';
|
|
|
11
11
|
import PipelineRunLogDialog from '../PipelineRunLogs/PipelineRunLogDialog.esm.js';
|
|
12
12
|
import { PipelineVisualizationStepList } from './PipelineVisualizationStepList.esm.js';
|
|
13
13
|
import './PipelineTaskNode.css.esm.js';
|
|
14
|
+
import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
|
|
15
|
+
import { tektonTranslationRef } from '../../translation.esm.js';
|
|
14
16
|
|
|
15
17
|
const PipelineTaskNode = ({
|
|
16
18
|
element,
|
|
@@ -22,6 +24,7 @@ const PipelineTaskNode = ({
|
|
|
22
24
|
const { watchResourcesData } = useContext(
|
|
23
25
|
TektonResourcesContext
|
|
24
26
|
);
|
|
27
|
+
const { t } = useTranslationRef(tektonTranslationRef);
|
|
25
28
|
const data = element.getData();
|
|
26
29
|
const triggerRef = useRef(null);
|
|
27
30
|
const pipelineRun = data.pipelineRun;
|
|
@@ -40,7 +43,7 @@ const PipelineTaskNode = ({
|
|
|
40
43
|
const stepList = computedTask?.status?.steps || computedTask?.taskSpec?.steps || [];
|
|
41
44
|
const taskStatus = getTaskStatus(data.pipelineRun, data.task);
|
|
42
45
|
const stepStatusList = stepList.map(
|
|
43
|
-
(step) => createStepStatus(step, taskStatus)
|
|
46
|
+
(step) => createStepStatus(step, taskStatus, t)
|
|
44
47
|
);
|
|
45
48
|
const succeededStepsCount = stepStatusList.filter(
|
|
46
49
|
({ status }) => status === RunStatus.Succeeded
|
|
@@ -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 type { LegacyRef } from 'react';\n\nimport { useState, useContext, useRef, useMemo, memo } 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] = useState<boolean>(false);\n const { watchResourcesData } = useContext<TektonResourcesContextData>(\n TektonResourcesContext,\n );\n const data = element.getData();\n const triggerRef = 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 = 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 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 memo(observer(PipelineTaskNode));\n"],"names":[],"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 type { LegacyRef } from 'react';\n\nimport { useState, useContext, useRef, useMemo, memo } 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';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { tektonTranslationRef } from '../../translation';\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] = useState<boolean>(false);\n const { watchResourcesData } = useContext<TektonResourcesContextData>(\n TektonResourcesContext,\n );\n const { t } = useTranslationRef(tektonTranslationRef);\n const data = element.getData();\n const triggerRef = 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, t),\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 = 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 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 memo(observer(PipelineTaskNode));\n"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -57,12 +57,12 @@ declare const tektonTranslationRef: _backstage_core_plugin_api_alpha.Translation
|
|
|
57
57
|
readonly "pipelineRunList.vulnerabilitySeverityTitle.high": "High";
|
|
58
58
|
readonly "pipelineRunList.vulnerabilitySeverityTitle.medium": "Medium";
|
|
59
59
|
readonly "pipelineRunList.vulnerabilitySeverityTitle.low": "Low";
|
|
60
|
-
readonly "pipelineRunList.tableHeaderTitle.status": "STATUS";
|
|
61
|
-
readonly "pipelineRunList.tableHeaderTitle.startTime": "STARTED";
|
|
62
60
|
readonly "pipelineRunList.tableHeaderTitle.name": "NAME";
|
|
63
|
-
readonly "pipelineRunList.tableHeaderTitle.duration": "DURATION";
|
|
64
61
|
readonly "pipelineRunList.tableHeaderTitle.vulnerabilities": "VULNERABILITIES";
|
|
62
|
+
readonly "pipelineRunList.tableHeaderTitle.status": "STATUS";
|
|
65
63
|
readonly "pipelineRunList.tableHeaderTitle.taskStatus": "TASK STATUS";
|
|
64
|
+
readonly "pipelineRunList.tableHeaderTitle.startTime": "STARTED";
|
|
65
|
+
readonly "pipelineRunList.tableHeaderTitle.duration": "DURATION";
|
|
66
66
|
readonly "pipelineRunList.tableHeaderTitle.actions": "ACTIONS";
|
|
67
67
|
readonly "pipelineRunLogs.title": "PipelineRun Logs";
|
|
68
68
|
readonly "pipelineRunLogs.noLogs": "No logs found";
|
|
@@ -73,6 +73,26 @@ declare const tektonTranslationRef: _backstage_core_plugin_api_alpha.Translation
|
|
|
73
73
|
readonly "pipelineRunLogs.taskStatusStepper.skipped": "Skipped";
|
|
74
74
|
readonly "pipelineRunOutput.title": "PipelineRun Output";
|
|
75
75
|
readonly "pipelineRunOutput.noOutput": "No output";
|
|
76
|
+
readonly "pipelineRunStatus.Skipped": "Skipped";
|
|
77
|
+
readonly "pipelineRunStatus.All": "All";
|
|
78
|
+
readonly "pipelineRunStatus.Cancelling": "Cancelling";
|
|
79
|
+
readonly "pipelineRunStatus.Succeeded": "Succeeded";
|
|
80
|
+
readonly "pipelineRunStatus.Failed": "Failed";
|
|
81
|
+
readonly "pipelineRunStatus.Running": "Running";
|
|
82
|
+
readonly "pipelineRunStatus.In Progress": "In Progress";
|
|
83
|
+
readonly "pipelineRunStatus.FailedToStart": "FailedToStart";
|
|
84
|
+
readonly "pipelineRunStatus.PipelineNotStarted": "PipelineNotStarted";
|
|
85
|
+
readonly "pipelineRunStatus.Cancelled": "Cancelled";
|
|
86
|
+
readonly "pipelineRunStatus.Pending": "Pending";
|
|
87
|
+
readonly "pipelineRunStatus.Idle": "Idle";
|
|
88
|
+
readonly "pipelineRunStatus.Other": "Other";
|
|
89
|
+
readonly "pipelineRunDuration.lessThanSec": "less than a sec";
|
|
90
|
+
readonly "pipelineRunDuration.hour_one": "{{count}} hour";
|
|
91
|
+
readonly "pipelineRunDuration.hour_other": "{{count}} hours";
|
|
92
|
+
readonly "pipelineRunDuration.minute_one": "{{count}} minute";
|
|
93
|
+
readonly "pipelineRunDuration.minute_other": "{{count}} minutes";
|
|
94
|
+
readonly "pipelineRunDuration.second_one": "{{count}} second";
|
|
95
|
+
readonly "pipelineRunDuration.second_other": "{{count}} seconds";
|
|
76
96
|
}>;
|
|
77
97
|
|
|
78
98
|
export { TektonCI, isTektonCIAvailable, tektonPlugin, tektonTranslationRef };
|
package/dist/translation.esm.js
CHANGED
|
@@ -73,6 +73,30 @@ const tektonTranslationRef = createTranslationRef({
|
|
|
73
73
|
pipelineRunOutput: {
|
|
74
74
|
title: "PipelineRun Output",
|
|
75
75
|
noOutput: "No output"
|
|
76
|
+
},
|
|
77
|
+
pipelineRunStatus: {
|
|
78
|
+
All: "All",
|
|
79
|
+
Cancelling: "Cancelling",
|
|
80
|
+
Succeeded: "Succeeded",
|
|
81
|
+
Failed: "Failed",
|
|
82
|
+
Running: "Running",
|
|
83
|
+
"In Progress": "In Progress",
|
|
84
|
+
FailedToStart: "FailedToStart",
|
|
85
|
+
PipelineNotStarted: "PipelineNotStarted",
|
|
86
|
+
Skipped: "Skipped",
|
|
87
|
+
Cancelled: "Cancelled",
|
|
88
|
+
Pending: "Pending",
|
|
89
|
+
Idle: "Idle",
|
|
90
|
+
Other: "Other"
|
|
91
|
+
},
|
|
92
|
+
pipelineRunDuration: {
|
|
93
|
+
lessThanSec: "less than a sec",
|
|
94
|
+
hour_one: "{{count}} hour",
|
|
95
|
+
hour_other: "{{count}} hours",
|
|
96
|
+
minute_one: "{{count}} minute",
|
|
97
|
+
minute_other: "{{count}} minutes",
|
|
98
|
+
second_one: "{{count}} second",
|
|
99
|
+
second_other: "{{count}} seconds"
|
|
76
100
|
}
|
|
77
101
|
}
|
|
78
102
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"translation.esm.js","sources":["../src/translation.ts"],"sourcesContent":["/*\n * Copyright 2025 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 */\n\nimport { createTranslationRef } from '@backstage/core-plugin-api/alpha';\n\n/**\n * Tekton translation reference.\n * @public\n */\nexport const tektonTranslationRef = createTranslationRef({\n id: 'tekton',\n messages: {\n errorPanel: {\n title: 'There was a problem retrieving Kubernetes objects',\n description:\n 'There was a problem retrieving some Kubernetes resources for the entity: {{entityName}}. This could mean that the Error Reporting card is not completely accurate.',\n },\n permissionAlert: {\n title: 'Permission required',\n description:\n 'To view Tekton Pipeline Runs, contact your administrator to give you the following permission(s): {{permissions}}.',\n },\n statusSelector: {\n label: 'Status',\n },\n tableExpandCollapse: {\n collapseAll: 'Collapse all',\n expandAll: 'Expand all',\n },\n pipelineVisualization: {\n emptyState: {\n description: 'No Pipeline Run to visualize',\n },\n noTasksDescription: 'This Pipeline Run has no tasks to visualize',\n stepList: {\n finallyTaskTitle: 'Finally Task',\n },\n },\n pipelineRunList: {\n title: 'Pipeline Runs',\n noPipelineRuns: 'No Pipeline Runs found',\n searchBarPlaceholder: 'Search',\n rowActions: {\n viewLogs: 'View logs',\n unauthorizedViewLogs: 'Unauthorized to view logs',\n viewSBOM: 'View SBOM',\n SBOMNotApplicable: 'View SBOM is not applicable for this PipelineRun',\n viewOutput: 'View output',\n outputNotApplicable:\n 'View Output is not applicable for this PipelineRun',\n },\n vulnerabilitySeverityTitle: {\n critical: 'Critical',\n high: 'High',\n medium: 'Medium',\n low: 'Low',\n },\n tableHeaderTitle: {\n name: 'NAME',\n vulnerabilities: 'VULNERABILITIES',\n status: 'STATUS',\n taskStatus: 'TASK STATUS',\n startTime: 'STARTED',\n duration: 'DURATION',\n actions: 'ACTIONS',\n },\n },\n pipelineRunLogs: {\n title: 'PipelineRun Logs',\n noLogs: 'No logs found',\n downloader: {\n downloadTaskLogs: 'Download',\n downloadPipelineRunLogs: 'Download all tasks logs',\n },\n podLogsDownloadLink: {\n title: 'Download',\n downloading: 'downloading logs',\n },\n taskStatusStepper: {\n skipped: 'Skipped',\n },\n },\n pipelineRunOutput: {\n title: 'PipelineRun Output',\n noOutput: 'No output',\n },\n },\n});\n"],"names":[],"mappings":";;AAsBO,MAAM,uBAAuB,oBAAqB,CAAA;AAAA,EACvD,EAAI,EAAA,QAAA;AAAA,EACJ,QAAU,EAAA;AAAA,IACR,UAAY,EAAA;AAAA,MACV,KAAO,EAAA,mDAAA;AAAA,MACP,WACE,EAAA;AAAA,KACJ;AAAA,IACA,eAAiB,EAAA;AAAA,MACf,KAAO,EAAA,qBAAA;AAAA,MACP,WACE,EAAA;AAAA,KACJ;AAAA,IACA,cAAgB,EAAA;AAAA,MACd,KAAO,EAAA;AAAA,KACT;AAAA,IACA,mBAAqB,EAAA;AAAA,MACnB,WAAa,EAAA,cAAA;AAAA,MACb,SAAW,EAAA;AAAA,KACb;AAAA,IACA,qBAAuB,EAAA;AAAA,MACrB,UAAY,EAAA;AAAA,QACV,WAAa,EAAA;AAAA,OACf;AAAA,MACA,kBAAoB,EAAA,6CAAA;AAAA,MACpB,QAAU,EAAA;AAAA,QACR,gBAAkB,EAAA;AAAA;AACpB,KACF;AAAA,IACA,eAAiB,EAAA;AAAA,MACf,KAAO,EAAA,eAAA;AAAA,MACP,cAAgB,EAAA,wBAAA;AAAA,MAChB,oBAAsB,EAAA,QAAA;AAAA,MACtB,UAAY,EAAA;AAAA,QACV,QAAU,EAAA,WAAA;AAAA,QACV,oBAAsB,EAAA,2BAAA;AAAA,QACtB,QAAU,EAAA,WAAA;AAAA,QACV,iBAAmB,EAAA,kDAAA;AAAA,QACnB,UAAY,EAAA,aAAA;AAAA,QACZ,mBACE,EAAA;AAAA,OACJ;AAAA,MACA,0BAA4B,EAAA;AAAA,QAC1B,QAAU,EAAA,UAAA;AAAA,QACV,IAAM,EAAA,MAAA;AAAA,QACN,MAAQ,EAAA,QAAA;AAAA,QACR,GAAK,EAAA;AAAA,OACP;AAAA,MACA,gBAAkB,EAAA;AAAA,QAChB,IAAM,EAAA,MAAA;AAAA,QACN,eAAiB,EAAA,iBAAA;AAAA,QACjB,MAAQ,EAAA,QAAA;AAAA,QACR,UAAY,EAAA,aAAA;AAAA,QACZ,SAAW,EAAA,SAAA;AAAA,QACX,QAAU,EAAA,UAAA;AAAA,QACV,OAAS,EAAA;AAAA;AACX,KACF;AAAA,IACA,eAAiB,EAAA;AAAA,MACf,KAAO,EAAA,kBAAA;AAAA,MACP,MAAQ,EAAA,eAAA;AAAA,MACR,UAAY,EAAA;AAAA,QACV,gBAAkB,EAAA,UAAA;AAAA,QAClB,uBAAyB,EAAA;AAAA,OAC3B;AAAA,MACA,mBAAqB,EAAA;AAAA,QACnB,KAAO,EAAA,UAAA;AAAA,QACP,WAAa,EAAA;AAAA,OACf;AAAA,MACA,iBAAmB,EAAA;AAAA,QACjB,OAAS,EAAA;AAAA;AACX,KACF;AAAA,IACA,iBAAmB,EAAA;AAAA,MACjB,KAAO,EAAA,oBAAA;AAAA,MACP,QAAU,EAAA;AAAA;
|
|
1
|
+
{"version":3,"file":"translation.esm.js","sources":["../src/translation.ts"],"sourcesContent":["/*\n * Copyright 2025 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 */\n\nimport { createTranslationRef } from '@backstage/core-plugin-api/alpha';\n\n/**\n * Tekton translation reference.\n * @public\n */\nexport const tektonTranslationRef = createTranslationRef({\n id: 'tekton',\n messages: {\n errorPanel: {\n title: 'There was a problem retrieving Kubernetes objects',\n description:\n 'There was a problem retrieving some Kubernetes resources for the entity: {{entityName}}. This could mean that the Error Reporting card is not completely accurate.',\n },\n permissionAlert: {\n title: 'Permission required',\n description:\n 'To view Tekton Pipeline Runs, contact your administrator to give you the following permission(s): {{permissions}}.',\n },\n statusSelector: {\n label: 'Status',\n },\n tableExpandCollapse: {\n collapseAll: 'Collapse all',\n expandAll: 'Expand all',\n },\n pipelineVisualization: {\n emptyState: {\n description: 'No Pipeline Run to visualize',\n },\n noTasksDescription: 'This Pipeline Run has no tasks to visualize',\n stepList: {\n finallyTaskTitle: 'Finally Task',\n },\n },\n pipelineRunList: {\n title: 'Pipeline Runs',\n noPipelineRuns: 'No Pipeline Runs found',\n searchBarPlaceholder: 'Search',\n rowActions: {\n viewLogs: 'View logs',\n unauthorizedViewLogs: 'Unauthorized to view logs',\n viewSBOM: 'View SBOM',\n SBOMNotApplicable: 'View SBOM is not applicable for this PipelineRun',\n viewOutput: 'View output',\n outputNotApplicable:\n 'View Output is not applicable for this PipelineRun',\n },\n vulnerabilitySeverityTitle: {\n critical: 'Critical',\n high: 'High',\n medium: 'Medium',\n low: 'Low',\n },\n tableHeaderTitle: {\n name: 'NAME',\n vulnerabilities: 'VULNERABILITIES',\n status: 'STATUS',\n taskStatus: 'TASK STATUS',\n startTime: 'STARTED',\n duration: 'DURATION',\n actions: 'ACTIONS',\n },\n },\n pipelineRunLogs: {\n title: 'PipelineRun Logs',\n noLogs: 'No logs found',\n downloader: {\n downloadTaskLogs: 'Download',\n downloadPipelineRunLogs: 'Download all tasks logs',\n },\n podLogsDownloadLink: {\n title: 'Download',\n downloading: 'downloading logs',\n },\n taskStatusStepper: {\n skipped: 'Skipped',\n },\n },\n pipelineRunOutput: {\n title: 'PipelineRun Output',\n noOutput: 'No output',\n },\n pipelineRunStatus: {\n All: 'All',\n Cancelling: 'Cancelling',\n Succeeded: 'Succeeded',\n Failed: 'Failed',\n Running: 'Running',\n 'In Progress': 'In Progress',\n FailedToStart: 'FailedToStart',\n PipelineNotStarted: 'PipelineNotStarted',\n Skipped: 'Skipped',\n Cancelled: 'Cancelled',\n Pending: 'Pending',\n Idle: 'Idle',\n Other: 'Other',\n },\n pipelineRunDuration: {\n lessThanSec: 'less than a sec',\n hour_one: '{{count}} hour',\n hour_other: '{{count}} hours',\n minute_one: '{{count}} minute',\n minute_other: '{{count}} minutes',\n second_one: '{{count}} second',\n second_other: '{{count}} seconds',\n },\n },\n});\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
const downloadLogFile = (data, filename) => {
|
|
2
|
+
const blob = new Blob([data], { type: "text/plain;charset=utf-8" });
|
|
3
|
+
const url = URL.createObjectURL(blob);
|
|
4
|
+
const link = document.createElement("a");
|
|
5
|
+
link.href = url;
|
|
6
|
+
link.download = filename;
|
|
7
|
+
link.click();
|
|
8
|
+
URL.revokeObjectURL(url);
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
export { downloadLogFile };
|
|
12
|
+
//# sourceMappingURL=download-log-file-utils.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"download-log-file-utils.esm.js","sources":["../../src/utils/download-log-file-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 */\n/**\n * Triggers a download of the given string data as a file with the specified filename.\n *\n * @param data - The content to download\n * @param filename - The name of the file to save as\n */\nexport const downloadLogFile = (data: string, filename: string) => {\n const blob = new Blob([data], { type: 'text/plain;charset=utf-8' });\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = filename;\n link.click();\n URL.revokeObjectURL(url);\n};\n"],"names":[],"mappings":"AAqBa,MAAA,eAAA,GAAkB,CAAC,IAAA,EAAc,QAAqB,KAAA;AACjE,EAAM,MAAA,IAAA,GAAO,IAAI,IAAK,CAAA,CAAC,IAAI,CAAG,EAAA,EAAE,IAAM,EAAA,0BAAA,EAA4B,CAAA;AAClE,EAAM,MAAA,GAAA,GAAM,GAAI,CAAA,eAAA,CAAgB,IAAI,CAAA;AACpC,EAAM,MAAA,IAAA,GAAO,QAAS,CAAA,aAAA,CAAc,GAAG,CAAA;AACvC,EAAA,IAAA,CAAK,IAAO,GAAA,GAAA;AACZ,EAAA,IAAA,CAAK,QAAW,GAAA,QAAA;AAChB,EAAA,IAAA,CAAK,KAAM,EAAA;AACX,EAAA,GAAA,CAAI,gBAAgB,GAAG,CAAA;AACzB;;;;"}
|
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
import { ComputedStatus, TerminatedReasons } from '@janus-idp/shared-react';
|
|
2
2
|
import { calculateDuration } from './tekton-utils.esm.js';
|
|
3
3
|
|
|
4
|
-
const getMatchingStepDuration = (matchingStep) => {
|
|
4
|
+
const getMatchingStepDuration = (t, matchingStep) => {
|
|
5
5
|
if (!matchingStep) return "";
|
|
6
6
|
if (matchingStep.terminated) {
|
|
7
7
|
return calculateDuration(
|
|
8
|
+
t,
|
|
8
9
|
matchingStep.terminated.startedAt,
|
|
9
10
|
matchingStep.terminated.finishedAt
|
|
10
11
|
);
|
|
11
12
|
}
|
|
12
13
|
if (matchingStep.running) {
|
|
13
|
-
return calculateDuration(matchingStep.running.startedAt);
|
|
14
|
+
return calculateDuration(t, matchingStep.running.startedAt);
|
|
14
15
|
}
|
|
15
16
|
return "";
|
|
16
17
|
};
|
|
@@ -20,7 +21,7 @@ const getMatchingStep = (step, status) => {
|
|
|
20
21
|
return statusStep.name === step.name || statusStep.name === `step-${step.name}`;
|
|
21
22
|
});
|
|
22
23
|
};
|
|
23
|
-
const createStepStatus = (step, status) => {
|
|
24
|
+
const createStepStatus = (step, status, t) => {
|
|
24
25
|
let stepRunStatus = ComputedStatus.PipelineNotStarted;
|
|
25
26
|
let duration = null;
|
|
26
27
|
if (!status?.reason) {
|
|
@@ -31,16 +32,16 @@ const createStepStatus = (step, status) => {
|
|
|
31
32
|
stepRunStatus = ComputedStatus.Pending;
|
|
32
33
|
} else if (matchingStep.terminated) {
|
|
33
34
|
stepRunStatus = matchingStep.terminated.reason === TerminatedReasons.Completed ? ComputedStatus.Succeeded : ComputedStatus.Failed;
|
|
34
|
-
duration = getMatchingStepDuration(matchingStep);
|
|
35
|
+
duration = getMatchingStepDuration(t, matchingStep);
|
|
35
36
|
} else if (matchingStep.running) {
|
|
36
37
|
stepRunStatus = ComputedStatus["In Progress"];
|
|
37
|
-
duration = getMatchingStepDuration(matchingStep);
|
|
38
|
+
duration = getMatchingStepDuration(t, matchingStep);
|
|
38
39
|
} else if (matchingStep.waiting) {
|
|
39
40
|
stepRunStatus = ComputedStatus.Pending;
|
|
40
41
|
}
|
|
41
42
|
} else {
|
|
42
43
|
stepRunStatus = status.reason;
|
|
43
|
-
duration = getMatchingStepDuration(getMatchingStep(step, status)) || status.duration;
|
|
44
|
+
duration = getMatchingStepDuration(t, getMatchingStep(step, status)) || status.duration;
|
|
44
45
|
}
|
|
45
46
|
return {
|
|
46
47
|
duration,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline-step-utils.esm.js","sources":["../../src/utils/pipeline-step-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 { ComputedStatus, TerminatedReasons } from '@janus-idp/shared-react';\n\nimport { StepStatus, TaskStatus, TaskStatusStep } from '../types/taskRun';\nimport { calculateDuration } from './tekton-utils';\n\nconst getMatchingStepDuration = (matchingStep?: TaskStatusStep) => {\n if (!matchingStep) return '';\n\n if (matchingStep.terminated) {\n return calculateDuration(\n matchingStep.terminated.startedAt,\n matchingStep.terminated.finishedAt,\n );\n }\n\n if (matchingStep.running) {\n return calculateDuration(matchingStep.running.startedAt);\n }\n\n return '';\n};\n\nconst getMatchingStep = (\n step: { name: string },\n status: TaskStatus,\n): TaskStatusStep | undefined => {\n const statusSteps: TaskStatusStep[] = status.steps || [];\n return statusSteps.find(statusStep => {\n // In rare occasions the status step name is prefixed with `step-`\n // This is likely a bug but this workaround will be temporary as it's investigated separately\n return (\n statusStep.name === step.name || statusStep.name === `step-${step.name}`\n );\n });\n};\n\nexport const createStepStatus = (\n step: { name: string },\n status: TaskStatus,\n): StepStatus => {\n let stepRunStatus = ComputedStatus.PipelineNotStarted;\n let duration = null;\n\n if (!status?.reason) {\n stepRunStatus = ComputedStatus.Cancelled;\n } else if (status.reason === ComputedStatus['In Progress']) {\n // In progress, try to get granular statuses\n const matchingStep = getMatchingStep(step, status);\n\n if (!matchingStep) {\n stepRunStatus = ComputedStatus.Pending;\n } else if (matchingStep.terminated) {\n stepRunStatus =\n matchingStep.terminated.reason === TerminatedReasons.Completed\n ? ComputedStatus.Succeeded\n : ComputedStatus.Failed;\n duration = getMatchingStepDuration(matchingStep);\n } else if (matchingStep.running) {\n stepRunStatus = ComputedStatus['In Progress'];\n duration = getMatchingStepDuration(matchingStep);\n } else if (matchingStep.waiting) {\n stepRunStatus = ComputedStatus.Pending;\n }\n } else {\n // Not in progress, just use the run status reason\n stepRunStatus = status.reason;\n\n duration =\n getMatchingStepDuration(getMatchingStep(step, status))
|
|
1
|
+
{"version":3,"file":"pipeline-step-utils.esm.js","sources":["../../src/utils/pipeline-step-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 { ComputedStatus, TerminatedReasons } from '@janus-idp/shared-react';\n\nimport { StepStatus, TaskStatus, TaskStatusStep } from '../types/taskRun';\nimport { calculateDuration } from './tekton-utils';\nimport { TranslationFunction } from '@backstage/core-plugin-api/alpha';\nimport { tektonTranslationRef } from '../translation';\n\nconst getMatchingStepDuration = (\n t: TranslationFunction<typeof tektonTranslationRef.T>,\n matchingStep?: TaskStatusStep,\n) => {\n if (!matchingStep) return '';\n\n if (matchingStep.terminated) {\n return calculateDuration(\n t,\n matchingStep.terminated.startedAt,\n matchingStep.terminated.finishedAt,\n );\n }\n\n if (matchingStep.running) {\n return calculateDuration(t, matchingStep.running.startedAt);\n }\n\n return '';\n};\n\nconst getMatchingStep = (\n step: { name: string },\n status: TaskStatus,\n): TaskStatusStep | undefined => {\n const statusSteps: TaskStatusStep[] = status.steps || [];\n return statusSteps.find(statusStep => {\n // In rare occasions the status step name is prefixed with `step-`\n // This is likely a bug but this workaround will be temporary as it's investigated separately\n return (\n statusStep.name === step.name || statusStep.name === `step-${step.name}`\n );\n });\n};\n\nexport const createStepStatus = (\n step: { name: string },\n status: TaskStatus,\n t: TranslationFunction<typeof tektonTranslationRef.T>,\n): StepStatus => {\n let stepRunStatus = ComputedStatus.PipelineNotStarted;\n let duration = null;\n\n if (!status?.reason) {\n stepRunStatus = ComputedStatus.Cancelled;\n } else if (status.reason === ComputedStatus['In Progress']) {\n // In progress, try to get granular statuses\n const matchingStep = getMatchingStep(step, status);\n\n if (!matchingStep) {\n stepRunStatus = ComputedStatus.Pending;\n } else if (matchingStep.terminated) {\n stepRunStatus =\n matchingStep.terminated.reason === TerminatedReasons.Completed\n ? ComputedStatus.Succeeded\n : ComputedStatus.Failed;\n duration = getMatchingStepDuration(t, matchingStep);\n } else if (matchingStep.running) {\n stepRunStatus = ComputedStatus['In Progress'];\n duration = getMatchingStepDuration(t, matchingStep);\n } else if (matchingStep.waiting) {\n stepRunStatus = ComputedStatus.Pending;\n }\n } else {\n // Not in progress, just use the run status reason\n stepRunStatus = status.reason;\n\n duration =\n getMatchingStepDuration(t, getMatchingStep(step, status)) ||\n status.duration;\n }\n\n return {\n duration,\n name: step.name,\n status: stepRunStatus as any,\n };\n};\n"],"names":[],"mappings":";;;AAsBA,MAAM,uBAAA,GAA0B,CAC9B,CAAA,EACA,YACG,KAAA;AACH,EAAI,IAAA,CAAC,cAAqB,OAAA,EAAA;AAE1B,EAAA,IAAI,aAAa,UAAY,EAAA;AAC3B,IAAO,OAAA,iBAAA;AAAA,MACL,CAAA;AAAA,MACA,aAAa,UAAW,CAAA,SAAA;AAAA,MACxB,aAAa,UAAW,CAAA;AAAA,KAC1B;AAAA;AAGF,EAAA,IAAI,aAAa,OAAS,EAAA;AACxB,IAAA,OAAO,iBAAkB,CAAA,CAAA,EAAG,YAAa,CAAA,OAAA,CAAQ,SAAS,CAAA;AAAA;AAG5D,EAAO,OAAA,EAAA;AACT,CAAA;AAEA,MAAM,eAAA,GAAkB,CACtB,IAAA,EACA,MAC+B,KAAA;AAC/B,EAAM,MAAA,WAAA,GAAgC,MAAO,CAAA,KAAA,IAAS,EAAC;AACvD,EAAO,OAAA,WAAA,CAAY,KAAK,CAAc,UAAA,KAAA;AAGpC,IACE,OAAA,UAAA,CAAW,SAAS,IAAK,CAAA,IAAA,IAAQ,WAAW,IAAS,KAAA,CAAA,KAAA,EAAQ,KAAK,IAAI,CAAA,CAAA;AAAA,GAEzE,CAAA;AACH,CAAA;AAEO,MAAM,gBAAmB,GAAA,CAC9B,IACA,EAAA,MAAA,EACA,CACe,KAAA;AACf,EAAA,IAAI,gBAAgB,cAAe,CAAA,kBAAA;AACnC,EAAA,IAAI,QAAW,GAAA,IAAA;AAEf,EAAI,IAAA,CAAC,QAAQ,MAAQ,EAAA;AACnB,IAAA,aAAA,GAAgB,cAAe,CAAA,SAAA;AAAA,GACtB,MAAA,IAAA,MAAA,CAAO,MAAW,KAAA,cAAA,CAAe,aAAa,CAAG,EAAA;AAE1D,IAAM,MAAA,YAAA,GAAe,eAAgB,CAAA,IAAA,EAAM,MAAM,CAAA;AAEjD,IAAA,IAAI,CAAC,YAAc,EAAA;AACjB,MAAA,aAAA,GAAgB,cAAe,CAAA,OAAA;AAAA,KACjC,MAAA,IAAW,aAAa,UAAY,EAAA;AAClC,MAAA,aAAA,GACE,aAAa,UAAW,CAAA,MAAA,KAAW,kBAAkB,SACjD,GAAA,cAAA,CAAe,YACf,cAAe,CAAA,MAAA;AACrB,MAAW,QAAA,GAAA,uBAAA,CAAwB,GAAG,YAAY,CAAA;AAAA,KACpD,MAAA,IAAW,aAAa,OAAS,EAAA;AAC/B,MAAA,aAAA,GAAgB,eAAe,aAAa,CAAA;AAC5C,MAAW,QAAA,GAAA,uBAAA,CAAwB,GAAG,YAAY,CAAA;AAAA,KACpD,MAAA,IAAW,aAAa,OAAS,EAAA;AAC/B,MAAA,aAAA,GAAgB,cAAe,CAAA,OAAA;AAAA;AACjC,GACK,MAAA;AAEL,IAAA,aAAA,GAAgB,MAAO,CAAA,MAAA;AAEvB,IAAA,QAAA,GACE,wBAAwB,CAAG,EAAA,eAAA,CAAgB,MAAM,MAAM,CAAC,KACxD,MAAO,CAAA,QAAA;AAAA;AAGX,EAAO,OAAA;AAAA,IACL,QAAA;AAAA,IACA,MAAM,IAAK,CAAA,IAAA;AAAA,IACX,MAAQ,EAAA;AAAA,GACV;AACF;;;;"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { pluralize } from '@patternfly/react-core';
|
|
2
1
|
import { get } from 'lodash';
|
|
3
2
|
import { pipelineRunStatus, getTaskRunsForPipelineRun, updateTaskStatus, ComputedStatus, pipelineRunFilterReducer, SucceedConditionReason } from '@janus-idp/shared-react';
|
|
4
3
|
import { getPipelineRunScanResults } from '../hooks/usePipelineRunScanResults.esm.js';
|
|
@@ -79,9 +78,9 @@ const getTaskStatusOfPLR = (pipelinerun, taskRuns) => {
|
|
|
79
78
|
}
|
|
80
79
|
return taskStatus;
|
|
81
80
|
};
|
|
82
|
-
const getDuration = (seconds, long) => {
|
|
81
|
+
const getDuration = (t, seconds, long) => {
|
|
83
82
|
if (seconds === 0) {
|
|
84
|
-
return "
|
|
83
|
+
return t("pipelineRunDuration.lessThanSec");
|
|
85
84
|
}
|
|
86
85
|
let sec = Math.round(seconds);
|
|
87
86
|
let min = 0;
|
|
@@ -96,15 +95,15 @@ const getDuration = (seconds, long) => {
|
|
|
96
95
|
min %= 60;
|
|
97
96
|
}
|
|
98
97
|
if (hr > 0) {
|
|
99
|
-
duration += long ?
|
|
98
|
+
duration += long ? t("pipelineRunDuration.hour", { count: hr }) : `${hr}h`;
|
|
100
99
|
duration += " ";
|
|
101
100
|
}
|
|
102
101
|
if (min > 0) {
|
|
103
|
-
duration += long ?
|
|
102
|
+
duration += long ? t("pipelineRunDuration.minute", { count: min }) : `${min}m`;
|
|
104
103
|
duration += " ";
|
|
105
104
|
}
|
|
106
105
|
if (sec > 0) {
|
|
107
|
-
duration += long ?
|
|
106
|
+
duration += long ? t("pipelineRunDuration.second", { count: sec }) : `${sec}s`;
|
|
108
107
|
}
|
|
109
108
|
return duration.trim();
|
|
110
109
|
};
|
|
@@ -171,11 +170,11 @@ const getComparator = (order, orderBy, orderById) => {
|
|
|
171
170
|
};
|
|
172
171
|
}
|
|
173
172
|
};
|
|
174
|
-
const calculateDuration = (startTime, endTime, long) => {
|
|
173
|
+
const calculateDuration = (t, startTime, endTime, long) => {
|
|
175
174
|
const durationInSeconds = calculateDurationInSeconds(startTime, endTime);
|
|
176
|
-
return getDuration(durationInSeconds, long);
|
|
175
|
+
return getDuration(t, durationInSeconds, long);
|
|
177
176
|
};
|
|
178
|
-
const pipelineRunDuration = (run) => {
|
|
177
|
+
const pipelineRunDuration = (run, t) => {
|
|
179
178
|
if (!run || Object.keys(run).length === 0) {
|
|
180
179
|
return "-";
|
|
181
180
|
}
|
|
@@ -184,7 +183,7 @@ const pipelineRunDuration = (run) => {
|
|
|
184
183
|
if (!startTime || !completionTime && pipelineRunStatus(run) !== "Running") {
|
|
185
184
|
return "-";
|
|
186
185
|
}
|
|
187
|
-
return calculateDuration(startTime, completionTime, true);
|
|
186
|
+
return calculateDuration(t, startTime, completionTime, true);
|
|
188
187
|
};
|
|
189
188
|
|
|
190
189
|
export { calculateDuration, calculateDurationInSeconds, descendingComparator, durationComparator, getClusters, getComparator, getDuration, getTaskStatusOfPLR, getTektonResources, pipelineRunDuration, totalPipelineRunTasks, vulnerabilitiesComparator };
|
|
@@ -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 { 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';\nimport { TranslationFunction } from '@backstage/core-plugin-api/alpha';\nimport { tektonTranslationRef } from '../translation';\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 = (\n t: TranslationFunction<typeof tektonTranslationRef.T>,\n seconds: number,\n long?: boolean,\n): string => {\n if (seconds === 0) {\n return t('pipelineRunDuration.lessThanSec');\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 ? t('pipelineRunDuration.hour', { count: hr }) : `${hr}h`;\n duration += ' ';\n }\n if (min > 0) {\n duration += long\n ? t('pipelineRunDuration.minute', { count: min })\n : `${min}m`;\n duration += ' ';\n }\n if (sec > 0) {\n duration += long\n ? t('pipelineRunDuration.second', { count: sec })\n : `${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 t: TranslationFunction<typeof tektonTranslationRef.T>,\n startTime: string,\n endTime?: string,\n long?: boolean,\n) => {\n const durationInSeconds = calculateDurationInSeconds(startTime, endTime);\n return getDuration(t, durationInSeconds, long);\n};\n\nexport const pipelineRunDuration = (\n run: PipelineRunKind,\n t: TranslationFunction<typeof tektonTranslationRef.T>,\n): 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(t, startTime, completionTime, true);\n};\n"],"names":[],"mappings":";;;;;AA6Ca,MAAA,WAAA,GAAc,CAAC,UAAwC,KAAA;AAClE,EAAM,MAAA,QAAA,GAAqB,WAAW,KAAM,CAAA,GAAA;AAAA,IAC1C,CAAC,IAAyB,KAAA,IAAA,CAAK,OAAQ,CAAA;AAAA,GACzC;AACA,EAAM,MAAA,MAAA,GAA0B,WAAW,KAAM,CAAA,GAAA;AAAA,IAC/C,CAAC,SAAyB,IAAK,CAAA;AAAA,GACjC;AACA,EAAO,OAAA,EAAE,UAAU,MAAO,EAAA;AAC5B;AAEA,MAAM,gBAAA,GAAmB,CAAC,IAAA,KACxB,CAAC,cAAA,CAAe,MAAM,UAAW,CAAA,IAAI,CAAE,CAAA,QAAA,CAAS,IAAI,CAAA;AAEtD,MAAM,eAAA,GAAkB,CAAC,IAAiB,KAAA;AACxC,EAAA,QAAQ,IAAM;AAAA,IACZ,KAAK,cAAe,CAAA,IAAA;AAClB,MAAO,OAAA,cAAA;AAAA,IACT,KAAK,UAAW,CAAA,IAAA;AACd,MAAO,OAAA,UAAA;AAAA,IACT;AACE,MAAO,OAAA,EAAA;AAAA;AAEb,CAAA;AAEa,MAAA,kBAAA,GAAqB,CAChC,OACA,EAAA,UAAA,KAEA,WAAW,KAAQ,GAAA,OAAO,GAAG,SAAW,EAAA,MAAA;AAAA,EACtC,CAAC,KAAyB,GAAa,KAAA;AACrC,IAAI,IAAA,GAAA,CAAI,SAAS,MAAQ,EAAA;AACvB,MAAO,OAAA;AAAA,QACL,GAAG,GAAA;AAAA,QACH,IAAM,EAAA,EAAE,IAAM,EAAA,GAAA,CAAI,SAAU;AAAA,OAC9B;AAAA;AAEF,IACE,IAAA,GAAA,CAAI,SAAS,iBACZ,IAAA,GAAA,CAAI,SAAS,iBAAqB,IAAA,GAAA,CAAI,SAAU,CAAA,MAAA,KAAW,CAC5D,EAAA;AACA,MAAO,OAAA,GAAA;AAAA;AAET,IAAA,MAAM,aAAgB,GAAA,GAAA,CAAI,SAAU,CAAA,CAAC,CAAE,CAAA,IAAA;AACvC,IAAO,OAAA;AAAA,MACL,GAAG,GAAA;AAAA,MACH,GAAI,gBAAiB,CAAA,aAAa,CAAK,IAAA;AAAA,QACrC,CAAC,eAAA,CAAgB,aAAa,CAAC,GAAG;AAAA,UAChC,MAAM,GAAI,CAAA;AAAA;AACZ;AACF,KACF;AAAA,GACF;AAAA,EACA;AACF;AAEW,MAAA,qBAAA,GAAwB,CAAC,WAAyC,KAAA;AAC7E,EAAI,IAAA,CAAC,WAAa,EAAA,MAAA,EAAQ,YAAc,EAAA;AACtC,IAAO,OAAA,CAAA;AAAA;AAET,EAAA,MAAM,cAAc,WAAY,CAAA,MAAA,CAAO,YAAc,EAAA,KAAA,IAAS,EAAI,EAAA,MAAA;AAClE,EAAA,MAAM,gBACH,WAAY,CAAA,MAAA,CAAO,cAAc,OAAW,IAAA,IAAI,MAAU,IAAA,CAAA;AAC7D,EAAA,OAAO,UAAa,GAAA,YAAA;AACtB;AAEa,MAAA,kBAAA,GAAqB,CAChC,WAAA,EACA,QACG,KAAA;AACH,EAAM,MAAA,UAAA,GAAa,sBAAsB,WAAW,CAAA;AACpD,EAAM,MAAA,QAAA,GAAW,yBAA0B,CAAA,WAAA,EAAa,QAAQ,CAAA;AAChE,EAAA,MAAM,gBAAgB,QAAU,EAAA,MAAA;AAChC,EAAA,MAAM,iBAAoB,GAAA,WAAA,EAAa,MAAQ,EAAA,YAAA,EAAc,MAAU,IAAA,CAAA;AAEvE,EAAM,MAAA,UAAA,GAA8B,gBAAiB,CAAA,WAAA,EAAa,QAAQ,CAAA;AAE1E,EAAI,IAAA,QAAA,EAAU,SAAS,CAAG,EAAA;AACxB,IAAA,MAAM,qBAAwB,GAAA,UAAA,CAAW,cAAe,CAAA,MAAM,CAAI,GAAA,CAAA;AAClE,IAAA,MAAM,sBACJ,GAAA,wBAAA,CAAyB,WAAW,CAAA,KAAM,cAAe,CAAA,SAAA;AAC3D,IAAA,MAAM,cACJ,GAAA,UAAA,IAAc,aACV,GAAA,UAAA,GAAa,gBAAgB,iBAC7B,GAAA,UAAA;AAEN,IAAA,IAAI,yBAAyB,sBAAwB,EAAA;AACnD,MAAW,UAAA,CAAA,cAAA,CAAe,SAAS,CAAK,IAAA,cAAA;AAAA,KACnC,MAAA;AACL,MAAW,UAAA,CAAA,cAAA,CAAe,OAAO,CAAK,IAAA,cAAA;AAAA;AACxC,GAEA,MAAA,IAAA,WAAA,EAAa,MAAQ,EAAA,UAAA,GAAa,CAAC,CAAA,EAAG,MAAW,KAAA,OAAA,IACjD,WAAa,EAAA,IAAA,EAAM,MAAW,KAAA,sBAAA,CAAuB,oBACrD,EAAA;AACA,IAAW,UAAA,CAAA,cAAA,CAAe,SAAS,CAAI,GAAA,UAAA;AAAA,GAEvC,MAAA,IAAA,WAAA,EAAa,IAAM,EAAA,MAAA,KAAW,uBAAuB,kBACrD,EAAA;AACA,IAAW,UAAA,CAAA,cAAA,CAAe,OAAO,CAAK,IAAA,UAAA;AAAA,GACjC,MAAA;AACL,IAAA,UAAA,CAAW,eAAe,kBAAkB,CAAA,EAAA;AAAA;AAE9C,EAAO,OAAA,UAAA;AACT;AAEO,MAAM,WAAc,GAAA,CACzB,CACA,EAAA,OAAA,EACA,IACW,KAAA;AACX,EAAA,IAAI,YAAY,CAAG,EAAA;AACjB,IAAA,OAAO,EAAE,iCAAiC,CAAA;AAAA;AAE5C,EAAI,IAAA,GAAA,GAAM,IAAK,CAAA,KAAA,CAAM,OAAO,CAAA;AAC5B,EAAA,IAAI,GAAM,GAAA,CAAA;AACV,EAAA,IAAI,EAAK,GAAA,CAAA;AACT,EAAA,IAAI,QAAW,GAAA,EAAA;AACf,EAAA,IAAI,OAAO,EAAI,EAAA;AACb,IAAM,GAAA,GAAA,IAAA,CAAK,KAAM,CAAA,GAAA,GAAM,EAAE,CAAA;AACzB,IAAO,GAAA,IAAA,EAAA;AAAA;AAET,EAAA,IAAI,OAAO,EAAI,EAAA;AACb,IAAK,EAAA,GAAA,IAAA,CAAK,KAAM,CAAA,GAAA,GAAM,EAAE,CAAA;AACxB,IAAO,GAAA,IAAA,EAAA;AAAA;AAET,EAAA,IAAI,KAAK,CAAG,EAAA;AACV,IAAY,QAAA,IAAA,IAAA,GAAO,EAAE,0BAA4B,EAAA,EAAE,OAAO,EAAG,EAAC,CAAI,GAAA,CAAA,EAAG,EAAE,CAAA,CAAA,CAAA;AACvE,IAAY,QAAA,IAAA,GAAA;AAAA;AAEd,EAAA,IAAI,MAAM,CAAG,EAAA;AACX,IAAY,QAAA,IAAA,IAAA,GACR,EAAE,4BAA8B,EAAA,EAAE,OAAO,GAAI,EAAC,CAC9C,GAAA,CAAA,EAAG,GAAG,CAAA,CAAA,CAAA;AACV,IAAY,QAAA,IAAA,GAAA;AAAA;AAEd,EAAA,IAAI,MAAM,CAAG,EAAA;AACX,IAAY,QAAA,IAAA,IAAA,GACR,EAAE,4BAA8B,EAAA,EAAE,OAAO,GAAI,EAAC,CAC9C,GAAA,CAAA,EAAG,GAAG,CAAA,CAAA,CAAA;AAAA;AAGZ,EAAA,OAAO,SAAS,IAAK,EAAA;AACvB;AAEO,MAAM,oBAAuB,GAAA,CAClC,CACA,EAAA,CAAA,EACA,OACG,KAAA;AACH,EAAA,IAAI,IAAI,CAAG,EAAA,OAAO,IAAI,GAAI,CAAA,CAAA,EAAG,OAAO,CAAG,EAAA;AACrC,IAAO,OAAA,EAAA;AAAA;AAET,EAAA,IAAI,IAAI,CAAG,EAAA,OAAO,IAAI,GAAI,CAAA,CAAA,EAAG,OAAO,CAAG,EAAA;AACrC,IAAO,OAAA,CAAA;AAAA;AAET,EAAO,OAAA,CAAA;AACT;AAEa,MAAA,0BAAA,GAA6B,CACxC,SAAA,EACA,OACG,KAAA;AACH,EAAA,MAAM,KAAQ,GAAA,IAAI,IAAK,CAAA,SAAS,EAAE,OAAQ,EAAA;AAC1C,EAAM,MAAA,GAAA,GAAM,OAAU,GAAA,IAAI,IAAK,CAAA,OAAO,CAAE,CAAA,OAAA,EAAY,GAAA,iBAAA,IAAI,IAAK,EAAA,EAAE,OAAQ,EAAA;AACvE,EAAM,MAAA,iBAAA,GAAA,CAAqB,MAAM,KAAS,IAAA,GAAA;AAC1C,EAAO,OAAA,iBAAA;AACT;AAEa,MAAA,kBAAA,GAAqB,CAAC,CAAA,EAAoB,CAAuB,KAAA;AAC5E,EAAM,MAAA,SAAA,GAAY,CAAE,CAAA,MAAA,EAAQ,SACxB,GAAA,0BAAA,CAA2B,CAAE,CAAA,MAAA,EAAQ,SAAW,EAAA,CAAA,CAAE,MAAQ,EAAA,cAAc,CACxE,GAAA,CAAA;AAEJ,EAAM,MAAA,SAAA,GAAY,CAAE,CAAA,MAAA,EAAQ,SACxB,GAAA,0BAAA,CAA2B,CAAE,CAAA,MAAA,EAAQ,SAAW,EAAA,CAAA,CAAE,MAAQ,EAAA,cAAc,CACxE,GAAA,CAAA;AAEJ,EAAA,IAAI,YAAY,SAAW,EAAA;AACzB,IAAO,OAAA,EAAA;AAAA;AAET,EAAA,IAAI,YAAY,SAAW,EAAA;AACzB,IAAO,OAAA,CAAA;AAAA;AAET,EAAO,OAAA,CAAA;AACT;AAEA,MAAM,wBAAA,GAA2B,CAC/B,WACW,KAAA;AACX,EAAI,IAAA,CAAC,aAAa,eAAiB,EAAA;AACjC,IAAO,OAAA,EAAA;AAAA;AAGT,EAAA,OAAA,CACG,YAAY,eAAgB,CAAA,QAAA,IAAY,CAAK,IAAA,GAAA,GAAA,CAC7C,YAAY,eAAgB,CAAA,IAAA,IAAQ,CAAK,IAAA,GAAA,GAAA,CACzC,YAAY,eAAgB,CAAA,MAAA,IAAU,KAAK,GAC3C,IAAA,WAAA,CAAY,gBAAgB,GAAO,IAAA,CAAA,CAAA;AAExC,CAAA;AAEa,MAAA,yBAAA,GAA4B,CACvC,CAAA,EACA,CACG,KAAA;AACH,EAAA,MAAM,yBAA4B,GAAA,wBAAA;AAAA,IAChC,0BAA0B,CAAC;AAAA,GAC7B;AACA,EAAA,MAAM,yBAA4B,GAAA,wBAAA;AAAA,IAChC,0BAA0B,CAAC;AAAA,GAC7B;AAEA,EAAA,IAAI,4BAA4B,yBAA2B,EAAA;AACzD,IAAO,OAAA,EAAA;AAAA;AAET,EAAA,IAAI,4BAA4B,yBAA2B,EAAA;AACzD,IAAO,OAAA,CAAA;AAAA;AAET,EAAO,OAAA,CAAA;AACT;AAEO,MAAM,aAAgB,GAAA,CAC3B,KACA,EAAA,OAAA,EACA,SACG,KAAA;AACH,EAAA,QAAQ,SAAW;AAAA,IACjB,KAAK,UAAA;AACH,MAAO,OAAA,CAAC,GAAoB,CAAuB,KAAA;AACjD,QAAO,OAAA,KAAA,KAAU,SACb,kBAAmB,CAAA,CAAA,EAAG,CAAC,CACvB,GAAA,CAAC,kBAAmB,CAAA,CAAA,EAAG,CAAC,CAAA;AAAA,OAC9B;AAAA,IACF,KAAK,iBAAA;AACH,MAAO,OAAA,CAAC,GAAoB,CAAuB,KAAA;AACjD,QAAO,OAAA,KAAA,KAAU,SACb,yBAA0B,CAAA,CAAA,EAAG,CAAC,CAC9B,GAAA,CAAC,yBAA0B,CAAA,CAAA,EAAG,CAAC,CAAA;AAAA,OACrC;AAAA,IACF;AACE,MAAO,OAAA,CAAC,GAAoB,CAAuB,KAAA;AACjD,QAAO,OAAA,KAAA,KAAU,MACb,GAAA,oBAAA,CAAqB,CAAG,EAAA,CAAA,EAAG,OAAO,CAAA,GAClC,CAAC,oBAAA,CAAqB,CAAG,EAAA,CAAA,EAAG,OAAO,CAAA;AAAA,OACzC;AAAA;AAEN;AAEO,MAAM,iBAAoB,GAAA,CAC/B,CACA,EAAA,SAAA,EACA,SACA,IACG,KAAA;AACH,EAAM,MAAA,iBAAA,GAAoB,0BAA2B,CAAA,SAAA,EAAW,OAAO,CAAA;AACvE,EAAO,OAAA,WAAA,CAAY,CAAG,EAAA,iBAAA,EAAmB,IAAI,CAAA;AAC/C;AAEa,MAAA,mBAAA,GAAsB,CACjC,GAAA,EACA,CACW,KAAA;AACX,EAAA,IAAI,CAAC,GAAO,IAAA,MAAA,CAAO,KAAK,GAAG,CAAA,CAAE,WAAW,CAAG,EAAA;AACzC,IAAO,OAAA,GAAA;AAAA;AAET,EAAM,MAAA,SAAA,GAAY,IAAI,MAAQ,EAAA,SAAA;AAC9B,EAAM,MAAA,cAAA,GAAiB,IAAI,MAAQ,EAAA,cAAA;AAGnC,EAAA,IAAI,CAAC,SAAc,IAAA,CAAC,kBAAkB,iBAAkB,CAAA,GAAG,MAAM,SAAY,EAAA;AAC3E,IAAO,OAAA,GAAA;AAAA;AAET,EAAA,OAAO,iBAAkB,CAAA,CAAA,EAAG,SAAW,EAAA,cAAA,EAAgB,IAAI,CAAA;AAC7D;;;;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@backstage-community/plugin-tekton",
|
|
3
|
-
"version": "3.26.
|
|
3
|
+
"version": "3.26.2",
|
|
4
4
|
"main": "dist/index.esm.js",
|
|
5
5
|
"types": "dist/index.d.ts",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -11,7 +11,6 @@
|
|
|
11
11
|
},
|
|
12
12
|
"backstage": {
|
|
13
13
|
"role": "frontend-plugin",
|
|
14
|
-
"supported-versions": "1.39.1",
|
|
15
14
|
"pluginId": "tekton",
|
|
16
15
|
"pluginPackage": "@backstage-community/plugin-tekton",
|
|
17
16
|
"pluginPackages": [
|
|
@@ -35,7 +34,7 @@
|
|
|
35
34
|
},
|
|
36
35
|
"dependencies": {
|
|
37
36
|
"@aonic-ui/pipelines": "^3.1.0",
|
|
38
|
-
"@backstage-community/plugin-tekton-common": "^1.10.
|
|
37
|
+
"@backstage-community/plugin-tekton-common": "^1.10.1",
|
|
39
38
|
"@backstage/catalog-model": "^1.7.4",
|
|
40
39
|
"@backstage/core-components": "^0.17.2",
|
|
41
40
|
"@backstage/core-plugin-api": "^1.10.7",
|
|
@@ -80,7 +79,7 @@
|
|
|
80
79
|
"@testing-library/react-hooks": "8.0.1",
|
|
81
80
|
"@testing-library/user-event": "14.6.1",
|
|
82
81
|
"@types/dagre": "^0.7.52",
|
|
83
|
-
"@types/lodash": "4.17.
|
|
82
|
+
"@types/lodash": "4.17.17",
|
|
84
83
|
"cross-fetch": "4.0.0",
|
|
85
84
|
"msw": "1.3.5",
|
|
86
85
|
"start-server-and-test": "2.0.12"
|
|
@@ -95,8 +94,6 @@
|
|
|
95
94
|
"directory": "workspaces/tekton/plugins/tekton"
|
|
96
95
|
},
|
|
97
96
|
"keywords": [
|
|
98
|
-
"support:production",
|
|
99
|
-
"lifecycle:active",
|
|
100
97
|
"kubernetes",
|
|
101
98
|
"tekton",
|
|
102
99
|
"backstage",
|