@backstage-community/plugin-tekton 3.40.0 → 3.41.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/dist/components/PipelineRunList/PipelineRunList.esm.js +18 -2
- package/dist/components/PipelineRunList/PipelineRunList.esm.js.map +1 -1
- package/dist/components/PipelineRunList/PipelineRunListSearchBar.esm.js +1 -1
- package/dist/components/PipelineRunList/PipelineRunOutput.esm.js +1 -1
- package/dist/components/PipelineRunList/PipelineRunRow.esm.js +1 -1
- package/dist/components/PipelineRunList/PipelineRunRowActions.esm.js +22 -6
- package/dist/components/PipelineRunList/PipelineRunRowActions.esm.js.map +1 -1
- package/dist/components/PipelineRunList/PipelineRunVulnerabilities.esm.js +1 -1
- package/dist/components/PipelineRunList/PipelineTableHeader.esm.js +1 -1
- package/dist/components/PipelineRunList/PlrStatus.esm.js +1 -1
- package/dist/components/PipelineRunList/ResourceBadge.esm.js +10 -1
- package/dist/components/PipelineRunList/ResourceBadge.esm.js.map +1 -1
- package/dist/components/PipelineRunLogs/PipelineRunLogDialog.esm.js +4 -3
- package/dist/components/PipelineRunLogs/PipelineRunLogDialog.esm.js.map +1 -1
- package/dist/components/PipelineRunLogs/PipelineRunLogDownloader.esm.js +1 -1
- package/dist/components/PipelineRunLogs/PipelineRunLogViewer.esm.js +1 -1
- package/dist/components/PipelineRunLogs/PipelineRunLogs.esm.js +1 -1
- package/dist/components/PipelineRunLogs/PodLogsDownloadLink.esm.js +1 -1
- package/dist/components/PipelineRunLogs/TaskStatusStepper.esm.js +1 -1
- package/dist/components/PipelineRunOutput/PipelineRunOutputDialog.esm.js +3 -2
- package/dist/components/PipelineRunOutput/PipelineRunOutputDialog.esm.js.map +1 -1
- package/dist/components/PipelineRunParamsAndResults/Output.esm.js +1 -1
- package/dist/components/PipelineRunParamsAndResults/PipelineRunParams.esm.js +1 -1
- package/dist/components/PipelineRunParamsAndResults/PipelineRunParamsAndResults.esm.js +1 -1
- package/dist/components/PipelineRunParamsAndResults/PipelineRunParamsAndResultsDialog.esm.js +3 -2
- package/dist/components/PipelineRunParamsAndResults/PipelineRunParamsAndResultsDialog.esm.js.map +1 -1
- package/dist/components/PipelineRunParamsAndResults/PipelineRunResults.esm.js +1 -1
- package/dist/components/common/ClusterSelector.esm.js +1 -1
- package/dist/components/common/ErrorPanel.esm.js +1 -1
- package/dist/components/common/PermissionAlert.esm.js +1 -1
- package/dist/components/common/StatusSelector.esm.js +1 -1
- package/dist/components/common/TableExpandCollapse.esm.js +3 -1
- package/dist/components/common/TableExpandCollapse.esm.js.map +1 -1
- package/dist/components/pipeline-topology/PipelineTaskNode.esm.js +1 -1
- package/dist/components/pipeline-topology/PipelineVisualization.esm.js +1 -1
- package/dist/components/pipeline-topology/PipelineVisualizationStepList.esm.js +1 -1
- package/dist/components/pipeline-topology/PipelineVisualizationView.esm.js +1 -1
- package/dist/index.d.ts +3 -84
- package/dist/index.esm.js +1 -1
- package/dist/translations/de.esm.js +1 -0
- package/dist/translations/de.esm.js.map +1 -1
- package/dist/translations/es.esm.js +1 -0
- package/dist/translations/es.esm.js.map +1 -1
- package/dist/translations/fr.esm.js +1 -0
- package/dist/translations/fr.esm.js.map +1 -1
- package/dist/translations/it.esm.js +1 -0
- package/dist/translations/it.esm.js.map +1 -1
- package/dist/translations/ja.esm.js +1 -0
- package/dist/translations/ja.esm.js.map +1 -1
- package/dist/translations/ref.esm.js +1 -0
- package/dist/translations/ref.esm.js.map +1 -1
- package/dist/translations.d.ts +92 -0
- package/dist/translations.esm.js +29 -0
- package/dist/translations.esm.js.map +1 -0
- package/dist/utils/taskRun-utils.esm.js +1 -1
- package/package.json +13 -2
- package/dist/translations/index.esm.js +0 -16
- package/dist/translations/index.esm.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# @backstage-community/plugin-tekton
|
|
2
2
|
|
|
3
|
+
## 3.41.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 087a229: Add NFS translations module with default export for `packages: all` discovery
|
|
8
|
+
|
|
9
|
+
## 3.40.1
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- be57967: Fixed WCAG accessibility violations: added accessible names to icon buttons and expand/collapse controls, resolved nested interactive control in SBOM link, added keyboard-accessible scrollable dialog content, fixed pagination select label, improved dialog title text contrast, and enabled assertion of zero violations in e2e accessibility scan.
|
|
14
|
+
|
|
3
15
|
## 3.40.0
|
|
4
16
|
|
|
5
17
|
### Minor Changes
|
|
@@ -26,7 +26,7 @@ import { PipelineRunTableBody } from './PipelineRunTableBody.esm.js';
|
|
|
26
26
|
import { EnhancedTableHead } from './PipelineTableHeader.esm.js';
|
|
27
27
|
import { pipelineRunTableSx } from './pipelineRunTableColumns.esm.js';
|
|
28
28
|
import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
|
|
29
|
-
import '../../translations
|
|
29
|
+
import '../../translations.esm.js';
|
|
30
30
|
import { tektonTranslationRef } from '../../translations/ref.esm.js';
|
|
31
31
|
|
|
32
32
|
const titleSx = {
|
|
@@ -202,7 +202,23 @@ const PipelineRunList$1 = () => {
|
|
|
202
202
|
page,
|
|
203
203
|
onPageChange: handleChangePage,
|
|
204
204
|
onRowsPerPageChange: handleChangeRowsPerPage,
|
|
205
|
-
labelRowsPerPage:
|
|
205
|
+
labelRowsPerPage: /* @__PURE__ */ jsx(
|
|
206
|
+
"span",
|
|
207
|
+
{
|
|
208
|
+
style: {
|
|
209
|
+
position: "absolute",
|
|
210
|
+
width: "1px",
|
|
211
|
+
height: "1px",
|
|
212
|
+
padding: 0,
|
|
213
|
+
margin: "-1px",
|
|
214
|
+
overflow: "hidden",
|
|
215
|
+
clip: "rect(0, 0, 0, 0)",
|
|
216
|
+
whiteSpace: "nowrap",
|
|
217
|
+
border: 0
|
|
218
|
+
},
|
|
219
|
+
children: t("pipelineRunList.tablePagination.rowsPerPage")
|
|
220
|
+
}
|
|
221
|
+
)
|
|
206
222
|
}
|
|
207
223
|
)
|
|
208
224
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PipelineRunList.esm.js","sources":["../../../src/components/PipelineRunList/PipelineRunList.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 { PropsWithChildren, MouseEvent, ChangeEvent } from 'react';\n\nimport {\n useContext,\n useState,\n useRef,\n useEffect,\n useMemo,\n useCallback,\n memo,\n} from 'react';\n\nimport { InfoCard, Progress } from '@backstage/core-components';\n\nimport Box from '@mui/material/Box';\nimport Paper from '@mui/material/Paper';\nimport Table from '@mui/material/Table';\nimport TableBody from '@mui/material/TableBody';\nimport TableCell from '@mui/material/TableCell';\nimport TablePagination from '@mui/material/TablePagination';\nimport TableRow from '@mui/material/TableRow';\nimport Toolbar from '@mui/material/Toolbar';\nimport Typography from '@mui/material/Typography';\n\nimport {\n ComputedStatus,\n PipelineRunKind,\n pipelineRunStatus,\n} from '@backstage-community/plugin-tekton-react';\n\nimport { TektonResourcesContext } from '../../hooks/TektonResourcesContext';\nimport { ClusterErrors, Order } from '../../types/types';\nimport { getComparator } from '../../utils/tekton-utils';\nimport { ClusterSelector, ErrorPanel } from '../common';\nimport { StatusSelector } from '../common/StatusSelector';\nimport { TableExpandCollapse } from '../common/TableExpandCollapse';\nimport { getPipelineRunColumnHeader } from './PipelineRunColumnHeader';\nimport { PipelineRunListSearchBar } from './PipelineRunListSearchBar';\nimport { PipelineRunTableBody } from './PipelineRunTableBody';\nimport { EnhancedTableHead } from './PipelineTableHeader';\nimport { pipelineRunTableSx } from './pipelineRunTableColumns';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { tektonTranslationRef } from '../../translations/index.ts';\n\ntype WrapperInfoCardProps = {\n allErrors?: ClusterErrors;\n showClusterSelector?: boolean;\n};\n\nconst titleSx = {\n display: 'flex',\n gap: '20px',\n alignItems: 'center',\n};\n\nconst WrapperInfoCard = ({\n children,\n allErrors,\n showClusterSelector = true,\n}: PropsWithChildren<WrapperInfoCardProps>) => (\n <>\n {allErrors && allErrors.length > 0 && <ErrorPanel allErrors={allErrors} />}\n <InfoCard\n {...(showClusterSelector && {\n title: (\n <Box sx={titleSx}>\n <ClusterSelector />\n <StatusSelector />\n <TableExpandCollapse />\n </Box>\n ),\n })}\n >\n {children}\n </InfoCard>\n </>\n);\n\nconst PipelineRunList = () => {\n const {\n loaded,\n responseError,\n watchResourcesData,\n selectedClusterErrors,\n clusters,\n selectedCluster,\n selectedStatus,\n } = useContext(TektonResourcesContext);\n const [search, setSearch] = useState<string>('');\n const [order, setOrder] = useState<Order>('desc');\n const [orderBy, setOrderBy] = useState<string>('status.startTime');\n const [orderById, setOrderById] = useState<string>('startTime'); // 2 columns have the same field\n const [page, setPage] = useState<number>(0);\n const [rowsPerPage, setRowsPerPage] = useState<number>(5);\n const { t } = useTranslationRef(tektonTranslationRef);\n const pipelineRunColumnHeader = getPipelineRunColumnHeader(t);\n\n // Jump to first page when cluster, status and search filter changed\n const updateStateOnFilterChanges = useRef(false);\n useEffect(() => {\n if (updateStateOnFilterChanges.current) {\n setPage(0);\n } else {\n updateStateOnFilterChanges.current = true;\n }\n }, [selectedCluster, selectedStatus, search]);\n\n const allPipelineRuns = useMemo(() => {\n const plrs =\n watchResourcesData?.pipelineruns?.data?.map(d => ({\n ...d,\n id: d.metadata.uid,\n })) ?? [];\n return plrs as PipelineRunKind[];\n }, [watchResourcesData]);\n\n const filteredPipelineRuns = useMemo(() => {\n let plrs = allPipelineRuns;\n\n if (selectedStatus && selectedStatus !== ComputedStatus.All) {\n plrs = plrs.filter(plr => pipelineRunStatus(plr) === selectedStatus);\n }\n\n if (search) {\n const f = search.toLocaleUpperCase('en-US');\n plrs = plrs.filter((plr: PipelineRunKind) => {\n const n = plr.metadata?.name?.toLocaleUpperCase('en-US');\n return n?.includes(f);\n });\n }\n\n plrs = plrs.sort(getComparator(order, orderBy, orderById));\n\n return plrs;\n }, [allPipelineRuns, selectedStatus, search, order, orderBy, orderById]);\n\n const visibleRows = useMemo(() => {\n return filteredPipelineRuns.slice(\n page * rowsPerPage,\n page * rowsPerPage + rowsPerPage,\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [filteredPipelineRuns, page, rowsPerPage, order, orderById]);\n\n const handleRequestSort = useCallback(\n (_event: MouseEvent<unknown>, property: string, id: string) => {\n const isAsc = orderBy === property && order === 'asc';\n setOrder(isAsc ? 'desc' : 'asc');\n setOrderBy(property);\n setOrderById(id);\n },\n [order, orderBy],\n );\n\n const handleChangePage = (_event: unknown, newPage: number) => {\n setPage(newPage);\n };\n\n const handleChangeRowsPerPage = (event: ChangeEvent<HTMLInputElement>) => {\n setRowsPerPage(parseInt(event.target.value, 10));\n setPage(0);\n };\n\n // Avoid a layout jump when reaching the last page with empty rows.\n const emptyRows =\n page > 0\n ? Math.max(\n 0,\n (1 + page) * rowsPerPage - (filteredPipelineRuns.length ?? 0),\n )\n : 0;\n\n const allErrors: ClusterErrors = [\n ...(responseError ? [{ message: responseError }] : []),\n ...(selectedClusterErrors ?? []),\n ];\n\n if (!loaded && !responseError)\n return (\n <div data-testid=\"tekton-progress\">\n <Progress />\n </div>\n );\n\n return (\n <WrapperInfoCard\n allErrors={allErrors}\n showClusterSelector={clusters.length > 0}\n >\n <Box>\n <Paper>\n <Toolbar>\n <Typography variant=\"h5\" component=\"h2\">\n {t('pipelineRunList.title')}\n </Typography>\n <PipelineRunListSearchBar value={search} onChange={setSearch} />\n </Toolbar>\n <Table\n aria-labelledby=\"Pipeline Runs\"\n size=\"small\"\n sx={pipelineRunTableSx}\n >\n <EnhancedTableHead\n order={order}\n orderBy={orderBy}\n orderById={orderById}\n onRequestSort={handleRequestSort}\n />\n {visibleRows?.length > 0 ? (\n <TableBody>\n <PipelineRunTableBody rows={visibleRows} />\n {emptyRows > 0 && (\n <TableRow style={{ height: 55 * emptyRows }}>\n <TableCell colSpan={pipelineRunColumnHeader.length} />\n </TableRow>\n )}\n <TableRow\n sx={{\n '&:nth-of-type(odd)': {\n backgroundColor: theme => theme.palette.background.paper,\n },\n }}\n >\n <TablePagination\n rowsPerPageOptions={[\n {\n value: 5,\n label: t(\n 'pipelineRunList.tablePagination.rowsPerPageOptionLabel',\n { num: '5' },\n ),\n },\n {\n value: 10,\n label: t(\n 'pipelineRunList.tablePagination.rowsPerPageOptionLabel',\n { num: '10' },\n ),\n },\n {\n value: 25,\n label: t(\n 'pipelineRunList.tablePagination.rowsPerPageOptionLabel',\n { num: '25' },\n ),\n },\n ]}\n count={filteredPipelineRuns.length}\n rowsPerPage={rowsPerPage}\n page={page}\n onPageChange={handleChangePage}\n onRowsPerPageChange={handleChangeRowsPerPage}\n labelRowsPerPage={null}\n />\n </TableRow>\n </TableBody>\n ) : (\n <tbody>\n <tr>\n <td colSpan={pipelineRunColumnHeader.length}>\n <Box\n data-testid=\"no-pipeline-runs\"\n sx={{\n padding: 2,\n display: 'flex',\n justifyContent: 'center',\n }}\n >\n {t('pipelineRunList.noPipelineRuns')}\n </Box>\n </td>\n </tr>\n </tbody>\n )}\n </Table>\n </Paper>\n </Box>\n </WrapperInfoCard>\n );\n};\n\nexport default memo(PipelineRunList);\n"],"names":["PipelineRunList"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"PipelineRunList.esm.js","sources":["../../../src/components/PipelineRunList/PipelineRunList.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 { PropsWithChildren, MouseEvent, ChangeEvent } from 'react';\n\nimport {\n useContext,\n useState,\n useRef,\n useEffect,\n useMemo,\n useCallback,\n memo,\n} from 'react';\n\nimport { InfoCard, Progress } from '@backstage/core-components';\n\nimport Box from '@mui/material/Box';\nimport Paper from '@mui/material/Paper';\nimport Table from '@mui/material/Table';\nimport TableBody from '@mui/material/TableBody';\nimport TableCell from '@mui/material/TableCell';\nimport TablePagination from '@mui/material/TablePagination';\nimport TableRow from '@mui/material/TableRow';\nimport Toolbar from '@mui/material/Toolbar';\nimport Typography from '@mui/material/Typography';\n\nimport {\n ComputedStatus,\n PipelineRunKind,\n pipelineRunStatus,\n} from '@backstage-community/plugin-tekton-react';\n\nimport { TektonResourcesContext } from '../../hooks/TektonResourcesContext';\nimport { ClusterErrors, Order } from '../../types/types';\nimport { getComparator } from '../../utils/tekton-utils';\nimport { ClusterSelector, ErrorPanel } from '../common';\nimport { StatusSelector } from '../common/StatusSelector';\nimport { TableExpandCollapse } from '../common/TableExpandCollapse';\nimport { getPipelineRunColumnHeader } from './PipelineRunColumnHeader';\nimport { PipelineRunListSearchBar } from './PipelineRunListSearchBar';\nimport { PipelineRunTableBody } from './PipelineRunTableBody';\nimport { EnhancedTableHead } from './PipelineTableHeader';\nimport { pipelineRunTableSx } from './pipelineRunTableColumns';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { tektonTranslationRef } from '../../translations/index.ts';\n\ntype WrapperInfoCardProps = {\n allErrors?: ClusterErrors;\n showClusterSelector?: boolean;\n};\n\nconst titleSx = {\n display: 'flex',\n gap: '20px',\n alignItems: 'center',\n};\n\nconst WrapperInfoCard = ({\n children,\n allErrors,\n showClusterSelector = true,\n}: PropsWithChildren<WrapperInfoCardProps>) => (\n <>\n {allErrors && allErrors.length > 0 && <ErrorPanel allErrors={allErrors} />}\n <InfoCard\n {...(showClusterSelector && {\n title: (\n <Box sx={titleSx}>\n <ClusterSelector />\n <StatusSelector />\n <TableExpandCollapse />\n </Box>\n ),\n })}\n >\n {children}\n </InfoCard>\n </>\n);\n\nconst PipelineRunList = () => {\n const {\n loaded,\n responseError,\n watchResourcesData,\n selectedClusterErrors,\n clusters,\n selectedCluster,\n selectedStatus,\n } = useContext(TektonResourcesContext);\n const [search, setSearch] = useState<string>('');\n const [order, setOrder] = useState<Order>('desc');\n const [orderBy, setOrderBy] = useState<string>('status.startTime');\n const [orderById, setOrderById] = useState<string>('startTime'); // 2 columns have the same field\n const [page, setPage] = useState<number>(0);\n const [rowsPerPage, setRowsPerPage] = useState<number>(5);\n const { t } = useTranslationRef(tektonTranslationRef);\n const pipelineRunColumnHeader = getPipelineRunColumnHeader(t);\n\n // Jump to first page when cluster, status and search filter changed\n const updateStateOnFilterChanges = useRef(false);\n useEffect(() => {\n if (updateStateOnFilterChanges.current) {\n setPage(0);\n } else {\n updateStateOnFilterChanges.current = true;\n }\n }, [selectedCluster, selectedStatus, search]);\n\n const allPipelineRuns = useMemo(() => {\n const plrs =\n watchResourcesData?.pipelineruns?.data?.map(d => ({\n ...d,\n id: d.metadata.uid,\n })) ?? [];\n return plrs as PipelineRunKind[];\n }, [watchResourcesData]);\n\n const filteredPipelineRuns = useMemo(() => {\n let plrs = allPipelineRuns;\n\n if (selectedStatus && selectedStatus !== ComputedStatus.All) {\n plrs = plrs.filter(plr => pipelineRunStatus(plr) === selectedStatus);\n }\n\n if (search) {\n const f = search.toLocaleUpperCase('en-US');\n plrs = plrs.filter((plr: PipelineRunKind) => {\n const n = plr.metadata?.name?.toLocaleUpperCase('en-US');\n return n?.includes(f);\n });\n }\n\n plrs = plrs.sort(getComparator(order, orderBy, orderById));\n\n return plrs;\n }, [allPipelineRuns, selectedStatus, search, order, orderBy, orderById]);\n\n const visibleRows = useMemo(() => {\n return filteredPipelineRuns.slice(\n page * rowsPerPage,\n page * rowsPerPage + rowsPerPage,\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [filteredPipelineRuns, page, rowsPerPage, order, orderById]);\n\n const handleRequestSort = useCallback(\n (_event: MouseEvent<unknown>, property: string, id: string) => {\n const isAsc = orderBy === property && order === 'asc';\n setOrder(isAsc ? 'desc' : 'asc');\n setOrderBy(property);\n setOrderById(id);\n },\n [order, orderBy],\n );\n\n const handleChangePage = (_event: unknown, newPage: number) => {\n setPage(newPage);\n };\n\n const handleChangeRowsPerPage = (event: ChangeEvent<HTMLInputElement>) => {\n setRowsPerPage(parseInt(event.target.value, 10));\n setPage(0);\n };\n\n // Avoid a layout jump when reaching the last page with empty rows.\n const emptyRows =\n page > 0\n ? Math.max(\n 0,\n (1 + page) * rowsPerPage - (filteredPipelineRuns.length ?? 0),\n )\n : 0;\n\n const allErrors: ClusterErrors = [\n ...(responseError ? [{ message: responseError }] : []),\n ...(selectedClusterErrors ?? []),\n ];\n\n if (!loaded && !responseError)\n return (\n <div data-testid=\"tekton-progress\">\n <Progress />\n </div>\n );\n\n return (\n <WrapperInfoCard\n allErrors={allErrors}\n showClusterSelector={clusters.length > 0}\n >\n <Box>\n <Paper>\n <Toolbar>\n <Typography variant=\"h5\" component=\"h2\">\n {t('pipelineRunList.title')}\n </Typography>\n <PipelineRunListSearchBar value={search} onChange={setSearch} />\n </Toolbar>\n <Table\n aria-labelledby=\"Pipeline Runs\"\n size=\"small\"\n sx={pipelineRunTableSx}\n >\n <EnhancedTableHead\n order={order}\n orderBy={orderBy}\n orderById={orderById}\n onRequestSort={handleRequestSort}\n />\n {visibleRows?.length > 0 ? (\n <TableBody>\n <PipelineRunTableBody rows={visibleRows} />\n {emptyRows > 0 && (\n <TableRow style={{ height: 55 * emptyRows }}>\n <TableCell colSpan={pipelineRunColumnHeader.length} />\n </TableRow>\n )}\n <TableRow\n sx={{\n '&:nth-of-type(odd)': {\n backgroundColor: theme => theme.palette.background.paper,\n },\n }}\n >\n <TablePagination\n rowsPerPageOptions={[\n {\n value: 5,\n label: t(\n 'pipelineRunList.tablePagination.rowsPerPageOptionLabel',\n { num: '5' },\n ),\n },\n {\n value: 10,\n label: t(\n 'pipelineRunList.tablePagination.rowsPerPageOptionLabel',\n { num: '10' },\n ),\n },\n {\n value: 25,\n label: t(\n 'pipelineRunList.tablePagination.rowsPerPageOptionLabel',\n { num: '25' },\n ),\n },\n ]}\n count={filteredPipelineRuns.length}\n rowsPerPage={rowsPerPage}\n page={page}\n onPageChange={handleChangePage}\n onRowsPerPageChange={handleChangeRowsPerPage}\n labelRowsPerPage={\n <span\n style={{\n position: 'absolute',\n width: '1px',\n height: '1px',\n padding: 0,\n margin: '-1px',\n overflow: 'hidden',\n clip: 'rect(0, 0, 0, 0)',\n whiteSpace: 'nowrap',\n border: 0,\n }}\n >\n {t('pipelineRunList.tablePagination.rowsPerPage')}\n </span>\n }\n />\n </TableRow>\n </TableBody>\n ) : (\n <tbody>\n <tr>\n <td colSpan={pipelineRunColumnHeader.length}>\n <Box\n data-testid=\"no-pipeline-runs\"\n sx={{\n padding: 2,\n display: 'flex',\n justifyContent: 'center',\n }}\n >\n {t('pipelineRunList.noPipelineRuns')}\n </Box>\n </td>\n </tr>\n </tbody>\n )}\n </Table>\n </Paper>\n </Box>\n </WrapperInfoCard>\n );\n};\n\nexport default memo(PipelineRunList);\n"],"names":["PipelineRunList"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgEA,MAAM,OAAA,GAAU;AAAA,EACd,OAAA,EAAS,MAAA;AAAA,EACT,GAAA,EAAK,MAAA;AAAA,EACL,UAAA,EAAY;AACd,CAAA;AAEA,MAAM,kBAAkB,CAAC;AAAA,EACvB,QAAA;AAAA,EACA,SAAA;AAAA,EACA,mBAAA,GAAsB;AACxB,CAAA,qBACE,IAAA,CAAA,QAAA,EAAA,EACG,QAAA,EAAA;AAAA,EAAA,SAAA,IAAa,SAAA,CAAU,MAAA,GAAS,CAAA,oBAAK,GAAA,CAAC,cAAW,SAAA,EAAsB,CAAA;AAAA,kBACxE,GAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACE,GAAI,mBAAA,IAAuB;AAAA,QAC1B,KAAA,kBACE,IAAA,CAAC,GAAA,EAAA,EAAI,EAAA,EAAI,OAAA,EACP,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,eAAA,EAAA,EAAgB,CAAA;AAAA,8BAChB,cAAA,EAAA,EAAe,CAAA;AAAA,8BACf,mBAAA,EAAA,EAAoB;AAAA,SAAA,EACvB;AAAA,OAEJ;AAAA,MAEC;AAAA;AAAA;AACH,CAAA,EACF,CAAA;AAGF,MAAMA,oBAAkB,MAAM;AAC5B,EAAA,MAAM;AAAA,IACJ,MAAA;AAAA,IACA,aAAA;AAAA,IACA,kBAAA;AAAA,IACA,qBAAA;AAAA,IACA,QAAA;AAAA,IACA,eAAA;AAAA,IACA;AAAA,GACF,GAAI,WAAW,sBAAsB,CAAA;AACrC,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAI,SAAiB,EAAE,CAAA;AAC/C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,SAAgB,MAAM,CAAA;AAChD,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAI,SAAiB,kBAAkB,CAAA;AACjE,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAAiB,WAAW,CAAA;AAC9D,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAI,SAAiB,CAAC,CAAA;AAC1C,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,SAAiB,CAAC,CAAA;AACxD,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,oBAAoB,CAAA;AACpD,EAAA,MAAM,uBAAA,GAA0B,2BAA2B,CAAC,CAAA;AAG5D,EAAA,MAAM,0BAAA,GAA6B,OAAO,KAAK,CAAA;AAC/C,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,2BAA2B,OAAA,EAAS;AACtC,MAAA,OAAA,CAAQ,CAAC,CAAA;AAAA,IACX,CAAA,MAAO;AACL,MAAA,0BAAA,CAA2B,OAAA,GAAU,IAAA;AAAA,IACvC;AAAA,EACF,CAAA,EAAG,CAAC,eAAA,EAAiB,cAAA,EAAgB,MAAM,CAAC,CAAA;AAE5C,EAAA,MAAM,eAAA,GAAkB,QAAQ,MAAM;AACpC,IAAA,MAAM,IAAA,GACJ,kBAAA,EAAoB,YAAA,EAAc,IAAA,EAAM,IAAI,CAAA,CAAA,MAAM;AAAA,MAChD,GAAG,CAAA;AAAA,MACH,EAAA,EAAI,EAAE,QAAA,CAAS;AAAA,KACjB,CAAE,KAAK,EAAC;AACV,IAAA,OAAO,IAAA;AAAA,EACT,CAAA,EAAG,CAAC,kBAAkB,CAAC,CAAA;AAEvB,EAAA,MAAM,oBAAA,GAAuB,QAAQ,MAAM;AACzC,IAAA,IAAI,IAAA,GAAO,eAAA;AAEX,IAAA,IAAI,cAAA,IAAkB,cAAA,KAAmB,cAAA,CAAe,GAAA,EAAK;AAC3D,MAAA,IAAA,GAAO,KAAK,MAAA,CAAO,CAAA,GAAA,KAAO,iBAAA,CAAkB,GAAG,MAAM,cAAc,CAAA;AAAA,IACrE;AAEA,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,MAAM,CAAA,GAAI,MAAA,CAAO,iBAAA,CAAkB,OAAO,CAAA;AAC1C,MAAA,IAAA,GAAO,IAAA,CAAK,MAAA,CAAO,CAAC,GAAA,KAAyB;AAC3C,QAAA,MAAM,CAAA,GAAI,GAAA,CAAI,QAAA,EAAU,IAAA,EAAM,kBAAkB,OAAO,CAAA;AACvD,QAAA,OAAO,CAAA,EAAG,SAAS,CAAC,CAAA;AAAA,MACtB,CAAC,CAAA;AAAA,IACH;AAEA,IAAA,IAAA,GAAO,KAAK,IAAA,CAAK,aAAA,CAAc,KAAA,EAAO,OAAA,EAAS,SAAS,CAAC,CAAA;AAEzD,IAAA,OAAO,IAAA;AAAA,EACT,CAAA,EAAG,CAAC,eAAA,EAAiB,cAAA,EAAgB,QAAQ,KAAA,EAAO,OAAA,EAAS,SAAS,CAAC,CAAA;AAEvE,EAAA,MAAM,WAAA,GAAc,QAAQ,MAAM;AAChC,IAAA,OAAO,oBAAA,CAAqB,KAAA;AAAA,MAC1B,IAAA,GAAO,WAAA;AAAA,MACP,OAAO,WAAA,GAAc;AAAA,KACvB;AAAA,EAEF,GAAG,CAAC,oBAAA,EAAsB,MAAM,WAAA,EAAa,KAAA,EAAO,SAAS,CAAC,CAAA;AAE9D,EAAA,MAAM,iBAAA,GAAoB,WAAA;AAAA,IACxB,CAAC,MAAA,EAA6B,QAAA,EAAkB,EAAA,KAAe;AAC7D,MAAA,MAAM,KAAA,GAAQ,OAAA,KAAY,QAAA,IAAY,KAAA,KAAU,KAAA;AAChD,MAAA,QAAA,CAAS,KAAA,GAAQ,SAAS,KAAK,CAAA;AAC/B,MAAA,UAAA,CAAW,QAAQ,CAAA;AACnB,MAAA,YAAA,CAAa,EAAE,CAAA;AAAA,IACjB,CAAA;AAAA,IACA,CAAC,OAAO,OAAO;AAAA,GACjB;AAEA,EAAA,MAAM,gBAAA,GAAmB,CAAC,MAAA,EAAiB,OAAA,KAAoB;AAC7D,IAAA,OAAA,CAAQ,OAAO,CAAA;AAAA,EACjB,CAAA;AAEA,EAAA,MAAM,uBAAA,GAA0B,CAAC,KAAA,KAAyC;AACxE,IAAA,cAAA,CAAe,QAAA,CAAS,KAAA,CAAM,MAAA,CAAO,KAAA,EAAO,EAAE,CAAC,CAAA;AAC/C,IAAA,OAAA,CAAQ,CAAC,CAAA;AAAA,EACX,CAAA;AAGA,EAAA,MAAM,SAAA,GACJ,IAAA,GAAO,CAAA,GACH,IAAA,CAAK,GAAA;AAAA,IACH,CAAA;AAAA,IAAA,CACC,CAAA,GAAI,IAAA,IAAQ,WAAA,IAAe,oBAAA,CAAqB,MAAA,IAAU,CAAA;AAAA,GAC7D,GACA,CAAA;AAEN,EAAA,MAAM,SAAA,GAA2B;AAAA,IAC/B,GAAI,gBAAgB,CAAC,EAAE,SAAS,aAAA,EAAe,IAAI,EAAC;AAAA,IACpD,GAAI,yBAAyB;AAAC,GAChC;AAEA,EAAA,IAAI,CAAC,UAAU,CAAC,aAAA;AACd,IAAA,2BACG,KAAA,EAAA,EAAI,aAAA,EAAY,iBAAA,EACf,QAAA,kBAAA,GAAA,CAAC,YAAS,CAAA,EACZ,CAAA;AAGJ,EAAA,uBACE,GAAA;AAAA,IAAC,eAAA;AAAA,IAAA;AAAA,MACC,SAAA;AAAA,MACA,mBAAA,EAAqB,SAAS,MAAA,GAAS,CAAA;AAAA,MAEvC,QAAA,kBAAA,GAAA,CAAC,GAAA,EAAA,EACC,QAAA,kBAAA,IAAA,CAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAA,IAAA,CAAC,OAAA,EAAA,EACC,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,cAAW,OAAA,EAAQ,IAAA,EAAK,WAAU,IAAA,EAChC,QAAA,EAAA,CAAA,CAAE,uBAAuB,CAAA,EAC5B,CAAA;AAAA,0BACA,GAAA,CAAC,wBAAA,EAAA,EAAyB,KAAA,EAAO,MAAA,EAAQ,UAAU,SAAA,EAAW;AAAA,SAAA,EAChE,CAAA;AAAA,wBACA,IAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,iBAAA,EAAgB,eAAA;AAAA,YAChB,IAAA,EAAK,OAAA;AAAA,YACL,EAAA,EAAI,kBAAA;AAAA,YAEJ,QAAA,EAAA;AAAA,8BAAA,GAAA;AAAA,gBAAC,iBAAA;AAAA,gBAAA;AAAA,kBACC,KAAA;AAAA,kBACA,OAAA;AAAA,kBACA,SAAA;AAAA,kBACA,aAAA,EAAe;AAAA;AAAA,eACjB;AAAA,cACC,WAAA,EAAa,MAAA,GAAS,CAAA,mBACrB,IAAA,CAAC,SAAA,EAAA,EACC,QAAA,EAAA;AAAA,gCAAA,GAAA,CAAC,oBAAA,EAAA,EAAqB,MAAM,WAAA,EAAa,CAAA;AAAA,gBACxC,SAAA,GAAY,CAAA,oBACX,GAAA,CAAC,QAAA,EAAA,EAAS,OAAO,EAAE,MAAA,EAAQ,EAAA,GAAK,SAAA,IAC9B,QAAA,kBAAA,GAAA,CAAC,SAAA,EAAA,EAAU,OAAA,EAAS,uBAAA,CAAwB,QAAQ,CAAA,EACtD,CAAA;AAAA,gCAEF,GAAA;AAAA,kBAAC,QAAA;AAAA,kBAAA;AAAA,oBACC,EAAA,EAAI;AAAA,sBACF,oBAAA,EAAsB;AAAA,wBACpB,eAAA,EAAiB,CAAA,KAAA,KAAS,KAAA,CAAM,OAAA,CAAQ,UAAA,CAAW;AAAA;AACrD,qBACF;AAAA,oBAEA,QAAA,kBAAA,GAAA;AAAA,sBAAC,eAAA;AAAA,sBAAA;AAAA,wBACC,kBAAA,EAAoB;AAAA,0BAClB;AAAA,4BACE,KAAA,EAAO,CAAA;AAAA,4BACP,KAAA,EAAO,CAAA;AAAA,8BACL,wDAAA;AAAA,8BACA,EAAE,KAAK,GAAA;AAAI;AACb,2BACF;AAAA,0BACA;AAAA,4BACE,KAAA,EAAO,EAAA;AAAA,4BACP,KAAA,EAAO,CAAA;AAAA,8BACL,wDAAA;AAAA,8BACA,EAAE,KAAK,IAAA;AAAK;AACd,2BACF;AAAA,0BACA;AAAA,4BACE,KAAA,EAAO,EAAA;AAAA,4BACP,KAAA,EAAO,CAAA;AAAA,8BACL,wDAAA;AAAA,8BACA,EAAE,KAAK,IAAA;AAAK;AACd;AACF,yBACF;AAAA,wBACA,OAAO,oBAAA,CAAqB,MAAA;AAAA,wBAC5B,WAAA;AAAA,wBACA,IAAA;AAAA,wBACA,YAAA,EAAc,gBAAA;AAAA,wBACd,mBAAA,EAAqB,uBAAA;AAAA,wBACrB,gBAAA,kBACE,GAAA;AAAA,0BAAC,MAAA;AAAA,0BAAA;AAAA,4BACC,KAAA,EAAO;AAAA,8BACL,QAAA,EAAU,UAAA;AAAA,8BACV,KAAA,EAAO,KAAA;AAAA,8BACP,MAAA,EAAQ,KAAA;AAAA,8BACR,OAAA,EAAS,CAAA;AAAA,8BACT,MAAA,EAAQ,MAAA;AAAA,8BACR,QAAA,EAAU,QAAA;AAAA,8BACV,IAAA,EAAM,kBAAA;AAAA,8BACN,UAAA,EAAY,QAAA;AAAA,8BACZ,MAAA,EAAQ;AAAA,6BACV;AAAA,4BAEC,YAAE,6CAA6C;AAAA;AAAA;AAClD;AAAA;AAEJ;AAAA;AACF,eAAA,EACF,CAAA,uBAEC,OAAA,EAAA,EACC,QAAA,kBAAA,GAAA,CAAC,QACC,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAG,OAAA,EAAS,uBAAA,CAAwB,MAAA,EACnC,QAAA,kBAAA,GAAA;AAAA,gBAAC,GAAA;AAAA,gBAAA;AAAA,kBACC,aAAA,EAAY,kBAAA;AAAA,kBACZ,EAAA,EAAI;AAAA,oBACF,OAAA,EAAS,CAAA;AAAA,oBACT,OAAA,EAAS,MAAA;AAAA,oBACT,cAAA,EAAgB;AAAA,mBAClB;AAAA,kBAEC,YAAE,gCAAgC;AAAA;AAAA,eACrC,EACF,GACF,CAAA,EACF;AAAA;AAAA;AAAA;AAEJ,OAAA,EACF,CAAA,EACF;AAAA;AAAA,GACF;AAEJ,CAAA;AAEA,sBAAe,KAAKA,iBAAe,CAAA;;;;"}
|
|
@@ -6,7 +6,7 @@ import InputAdornment from '@mui/material/InputAdornment';
|
|
|
6
6
|
import Clear from '@mui/icons-material/Clear';
|
|
7
7
|
import Search from '@mui/icons-material/Search';
|
|
8
8
|
import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
|
|
9
|
-
import '../../translations
|
|
9
|
+
import '../../translations.esm.js';
|
|
10
10
|
import { tektonTranslationRef } from '../../translations/ref.esm.js';
|
|
11
11
|
|
|
12
12
|
const PipelineRunListSearchBar = ({
|
|
@@ -8,7 +8,7 @@ import Paper from '@mui/material/Paper';
|
|
|
8
8
|
import Typography from '@mui/material/Typography';
|
|
9
9
|
import { kubernetesProxyApiRef } from '@backstage/plugin-kubernetes-react';
|
|
10
10
|
import { TektonResourcesContext } from '../../hooks/TektonResourcesContext.esm.js';
|
|
11
|
-
import '../../translations
|
|
11
|
+
import '../../translations.esm.js';
|
|
12
12
|
import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
|
|
13
13
|
import { tektonTranslationRef } from '../../translations/ref.esm.js';
|
|
14
14
|
|
|
@@ -20,7 +20,7 @@ import '../pipeline-topology/PipelineTaskNode.esm.js';
|
|
|
20
20
|
import '../pipeline-topology/TaskGroupEdge.esm.js';
|
|
21
21
|
import '../pipeline-topology/PipelineVisualization.css.esm.js';
|
|
22
22
|
import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
|
|
23
|
-
import '../../translations
|
|
23
|
+
import '../../translations.esm.js';
|
|
24
24
|
import { PipelineRunVisualization } from '../pipeline-topology/PipelineRunVisualization.esm.js';
|
|
25
25
|
import PipelineRunRowActions from './PipelineRunRowActions.esm.js';
|
|
26
26
|
import PipelineRunTaskStatus from './PipelineRunTaskStatus.esm.js';
|
|
@@ -7,15 +7,16 @@ import { Flex, FlexItem } from '@patternfly/react-core';
|
|
|
7
7
|
import { Tooltip } from '@patternfly/react-core/dist/esm/components/Tooltip/Tooltip';
|
|
8
8
|
import { ComputedStatus, pipelineRunFilterReducer } from '@backstage-community/plugin-tekton-react';
|
|
9
9
|
import { TektonResourcesContext } from '../../hooks/TektonResourcesContext.esm.js';
|
|
10
|
-
import { getTaskrunsOutputGroup, hasExternalLink,
|
|
10
|
+
import { getTaskrunsOutputGroup, isSbomTaskRun, hasExternalLink, getSbomLink } from '../../utils/taskRun-utils.esm.js';
|
|
11
11
|
import OutputIcon from '../Icons/OutputIcon.esm.js';
|
|
12
12
|
import ViewLogsIcon from '../Icons/ViewLogsIcon.esm.js';
|
|
13
|
+
import LinkToSBomIcon from '../Icons/LinkToSbomIcon.esm.js';
|
|
13
14
|
import ListAltIcon from '@mui/icons-material/ListAlt';
|
|
14
15
|
import PipelineRunLogDialog from '../PipelineRunLogs/PipelineRunLogDialog.esm.js';
|
|
15
16
|
import PipelineRunOutputDialog from '../PipelineRunOutput/PipelineRunOutputDialog.esm.js';
|
|
16
17
|
import PipelineRunSBOMLink from './PipelineRunSBOMLink.esm.js';
|
|
17
18
|
import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
|
|
18
|
-
import '../../translations
|
|
19
|
+
import '../../translations.esm.js';
|
|
19
20
|
import { PipelineRunParamsAndResultsDialog } from '../PipelineRunParamsAndResults/PipelineRunParamsAndResultsDialog.esm.js';
|
|
20
21
|
import { tektonTranslationRef } from '../../translations/ref.esm.js';
|
|
21
22
|
|
|
@@ -113,6 +114,7 @@ const PipelineRunRowActions$1 = ({
|
|
|
113
114
|
{
|
|
114
115
|
size: "small",
|
|
115
116
|
"data-testid": "view-params-and-results-icon",
|
|
117
|
+
"aria-label": t("pipelineRunList.rowActions.viewParamsAndResults"),
|
|
116
118
|
onClick: () => setOpenParamsAndResults(true),
|
|
117
119
|
disabled: !hasKubernetesProxyAccess.allowed,
|
|
118
120
|
style: { pointerEvents: "auto", padding: 0 },
|
|
@@ -130,6 +132,7 @@ const PipelineRunRowActions$1 = ({
|
|
|
130
132
|
{
|
|
131
133
|
size: "small",
|
|
132
134
|
"data-testid": "view-logs-icon",
|
|
135
|
+
"aria-label": t("pipelineRunList.rowActions.viewLogs"),
|
|
133
136
|
onClick: () => openDialog({ forSBOM: false }),
|
|
134
137
|
disabled: !hasKubernetesProxyAccess.allowed,
|
|
135
138
|
style: { pointerEvents: "auto", padding: 0 },
|
|
@@ -142,15 +145,27 @@ const PipelineRunRowActions$1 = ({
|
|
|
142
145
|
Tooltip,
|
|
143
146
|
{
|
|
144
147
|
content: !sbomTaskRun ? t("pipelineRunList.rowActions.SBOMNotApplicable") : t("pipelineRunList.rowActions.viewSBOM"),
|
|
145
|
-
children: /* @__PURE__ */ jsx(
|
|
148
|
+
children: isSbomTaskRun(sbomTaskRun) && hasExternalLink(sbomTaskRun) && /^https?:\/\//.test(getSbomLink(sbomTaskRun) ?? "") ? /* @__PURE__ */ jsx(
|
|
149
|
+
IconButton,
|
|
150
|
+
{
|
|
151
|
+
component: "a",
|
|
152
|
+
href: getSbomLink(sbomTaskRun),
|
|
153
|
+
target: "_blank",
|
|
154
|
+
rel: "noopener noreferrer",
|
|
155
|
+
"data-testid": "view-sbom-icon",
|
|
156
|
+
"aria-label": t("pipelineRunList.rowActions.viewSBOM"),
|
|
157
|
+
size: "small",
|
|
158
|
+
style: { pointerEvents: "auto", padding: 0 },
|
|
159
|
+
children: /* @__PURE__ */ jsx(LinkToSBomIcon, { dataTestId: "external-sbom-link" })
|
|
160
|
+
}
|
|
161
|
+
) : /* @__PURE__ */ jsx(
|
|
146
162
|
IconButton,
|
|
147
163
|
{
|
|
148
164
|
"data-testid": "view-sbom-icon",
|
|
149
165
|
disabled: !sbomTaskRun || !isSbomTaskRun(sbomTaskRun),
|
|
166
|
+
"aria-label": t("pipelineRunList.rowActions.viewSBOM"),
|
|
150
167
|
size: "small",
|
|
151
|
-
onClick:
|
|
152
|
-
openDialog({ forSBOM: true });
|
|
153
|
-
} : void 0,
|
|
168
|
+
onClick: () => openDialog({ forSBOM: true }),
|
|
154
169
|
style: { pointerEvents: "auto", padding: 0 },
|
|
155
170
|
children: /* @__PURE__ */ jsx(PipelineRunSBOMLink, { sbomTaskRun })
|
|
156
171
|
}
|
|
@@ -166,6 +181,7 @@ const PipelineRunRowActions$1 = ({
|
|
|
166
181
|
{
|
|
167
182
|
"data-testid": "view-output-icon",
|
|
168
183
|
disabled,
|
|
184
|
+
"aria-label": t("pipelineRunList.rowActions.viewOutput"),
|
|
169
185
|
size: "small",
|
|
170
186
|
onClick: () => openOutputDialog(),
|
|
171
187
|
style: { pointerEvents: "auto", padding: 0 },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PipelineRunRowActions.esm.js","sources":["../../../src/components/PipelineRunList/PipelineRunRowActions.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport type { FC } from 'react';\n\nimport { useContext, useState, memo } from 'react';\n\nimport { kubernetesProxyPermission } from '@backstage/plugin-kubernetes-common';\nimport { usePermission } from '@backstage/plugin-permission-react';\n\nimport IconButton from '@mui/material/IconButton';\nimport { Flex, FlexItem } from '@patternfly/react-core';\nimport { Tooltip } from '@patternfly/react-core/dist/esm/components/Tooltip/Tooltip';\n\nimport {\n ComputedStatus,\n pipelineRunFilterReducer,\n PipelineRunKind,\n TaskRunKind,\n} from '@backstage-community/plugin-tekton-react';\n\nimport { TektonResourcesContext } from '../../hooks/TektonResourcesContext';\nimport {\n getTaskrunsOutputGroup,\n hasExternalLink,\n isSbomTaskRun,\n} from '../../utils/taskRun-utils';\nimport OutputIcon from '../Icons/OutputIcon';\nimport ViewLogsIcon from '../Icons/ViewLogsIcon';\nimport ListAltIcon from '@mui/icons-material/ListAlt';\nimport PipelineRunLogDialog from '../PipelineRunLogs/PipelineRunLogDialog';\nimport PipelineRunOutputDialog from '../PipelineRunOutput/PipelineRunOutputDialog';\nimport PipelineRunSBOMLink from './PipelineRunSBOMLink';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { tektonTranslationRef } from '../../translations/index.ts';\nimport { PipelineRunParamsAndResultsDialog } from '../PipelineRunParamsAndResults';\n\nconst PipelineRunRowActions: FC<{ pipelineRun: PipelineRunKind }> = ({\n pipelineRun,\n}) => {\n const { watchResourcesData } = useContext(TektonResourcesContext);\n const [open, setOpen] = useState<boolean>(false);\n const { t } = useTranslationRef(tektonTranslationRef);\n\n const [openOutput, setOpenOutput] = useState<boolean>(false);\n const [openParamsAndResults, setOpenParamsAndResults] =\n useState<boolean>(false);\n const pods = watchResourcesData?.pods?.data || [];\n const taskRuns = watchResourcesData?.taskruns?.data || [];\n const { sbomTaskRun } = getTaskrunsOutputGroup(\n pipelineRun?.metadata?.name,\n taskRuns,\n );\n const activeTaskName = sbomTaskRun?.metadata?.name;\n const [forSBOM, toggleForSBOM] = useState(false);\n\n const hasKubernetesProxyAccess = usePermission({\n permission: kubernetesProxyPermission,\n });\n\n const openDialog = (opts: { forSBOM: boolean }) => {\n toggleForSBOM(opts.forSBOM);\n setOpen(true);\n };\n\n const openOutputDialog = () => {\n setOpenOutput(true);\n };\n\n const closeDialog = () => {\n setOpen(false);\n toggleForSBOM(false);\n };\n\n const {\n acsImageScanTaskRun,\n acsImageCheckTaskRun,\n acsDeploymentCheckTaskRun,\n ecTaskRun,\n } = getTaskrunsOutputGroup(pipelineRun?.metadata?.name, taskRuns);\n\n const finishedTaskruns = [\n ...(acsImageScanTaskRun ? [acsImageScanTaskRun] : []),\n ...(acsImageCheckTaskRun ? [acsImageCheckTaskRun] : []),\n ...(acsDeploymentCheckTaskRun ? [acsDeploymentCheckTaskRun] : []),\n ...(ecTaskRun ? [ecTaskRun] : []),\n ].filter((taskRun: TaskRunKind) =>\n [\n ComputedStatus.Succeeded,\n ComputedStatus.Failed,\n ComputedStatus.Skipped,\n ].includes(pipelineRunFilterReducer(taskRun)),\n );\n\n const results =\n pipelineRun?.status?.pipelineResults || pipelineRun?.status?.results || [];\n\n const disabled =\n results.length === 0 ? finishedTaskruns.length === 0 : results.length === 0;\n\n return (\n <>\n <PipelineRunLogDialog\n pipelineRun={pipelineRun}\n open={open}\n closeDialog={closeDialog}\n pods={pods}\n taskRuns={taskRuns}\n activeTask={activeTaskName}\n forSBOM={forSBOM}\n />\n\n <PipelineRunOutputDialog\n pipelineRun={pipelineRun}\n taskRuns={taskRuns}\n open={openOutput}\n closeDialog={() => {\n setOpenOutput(false);\n }}\n />\n\n <PipelineRunParamsAndResultsDialog\n pipelineRun={pipelineRun}\n open={openParamsAndResults}\n closeDialog={() => {\n setOpenParamsAndResults(false);\n }}\n />\n\n <Flex gap={{ default: 'gapXs' }}>\n <FlexItem>\n <Tooltip\n content={\n hasKubernetesProxyAccess.allowed\n ? t('pipelineRunList.rowActions.viewParamsAndResults')\n : t('pipelineRunList.rowActions.unauthorizedViewLogs')\n }\n >\n <IconButton\n size=\"small\"\n data-testid=\"view-params-and-results-icon\"\n onClick={() => setOpenParamsAndResults(true)}\n disabled={!hasKubernetesProxyAccess.allowed}\n style={{ pointerEvents: 'auto', padding: 0 }}\n >\n <ListAltIcon />\n </IconButton>\n </Tooltip>\n </FlexItem>\n\n <FlexItem>\n <Tooltip\n content={\n hasKubernetesProxyAccess.allowed\n ? t('pipelineRunList.rowActions.viewLogs')\n : t('pipelineRunList.rowActions.unauthorizedViewLogs')\n }\n >\n <IconButton\n size=\"small\"\n data-testid=\"view-logs-icon\"\n onClick={() => openDialog({ forSBOM: false })}\n disabled={!hasKubernetesProxyAccess.allowed}\n style={{ pointerEvents: 'auto', padding: 0 }}\n >\n <ViewLogsIcon disabled={!hasKubernetesProxyAccess.allowed} />\n </IconButton>\n </Tooltip>\n </FlexItem>\n\n <FlexItem align={{ default: 'alignLeft' }}>\n <Tooltip\n content={\n !sbomTaskRun\n ? t('pipelineRunList.rowActions.SBOMNotApplicable')\n : t('pipelineRunList.rowActions.viewSBOM')\n }\n >\n <IconButton\n data-testid=\"view-sbom-icon\"\n disabled={!sbomTaskRun || !isSbomTaskRun(sbomTaskRun)}\n size=\"small\"\n onClick={\n !hasExternalLink(sbomTaskRun)\n ? () => {\n openDialog({ forSBOM: true });\n }\n : undefined\n }\n style={{ pointerEvents: 'auto', padding: 0 }}\n >\n <PipelineRunSBOMLink sbomTaskRun={sbomTaskRun} />\n </IconButton>\n </Tooltip>\n </FlexItem>\n <FlexItem align={{ default: 'alignLeft' }}>\n <Tooltip\n content={\n disabled\n ? t('pipelineRunList.rowActions.outputNotApplicable')\n : t('pipelineRunList.rowActions.viewOutput')\n }\n >\n <IconButton\n data-testid=\"view-output-icon\"\n disabled={disabled}\n size=\"small\"\n onClick={() => openOutputDialog()}\n style={{ pointerEvents: 'auto', padding: 0 }}\n >\n <OutputIcon disabled={disabled} />\n </IconButton>\n </Tooltip>\n </FlexItem>\n </Flex>\n </>\n );\n};\nexport default memo(PipelineRunRowActions);\n"],"names":["PipelineRunRowActions"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAiDA,MAAMA,0BAA8D,CAAC;AAAA,EACnE;AACF,CAAA,KAAM;AACJ,EAAA,MAAM,EAAE,kBAAA,EAAmB,GAAI,UAAA,CAAW,sBAAsB,CAAA;AAChE,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAI,SAAkB,KAAK,CAAA;AAC/C,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,oBAAoB,CAAA;AAEpD,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAAkB,KAAK,CAAA;AAC3D,EAAA,MAAM,CAAC,oBAAA,EAAsB,uBAAuB,CAAA,GAClD,SAAkB,KAAK,CAAA;AACzB,EAAA,MAAM,IAAA,GAAO,kBAAA,EAAoB,IAAA,EAAM,IAAA,IAAQ,EAAC;AAChD,EAAA,MAAM,QAAA,GAAW,kBAAA,EAAoB,QAAA,EAAU,IAAA,IAAQ,EAAC;AACxD,EAAA,MAAM,EAAE,aAAY,GAAI,sBAAA;AAAA,IACtB,aAAa,QAAA,EAAU,IAAA;AAAA,IACvB;AAAA,GACF;AACA,EAAA,MAAM,cAAA,GAAiB,aAAa,QAAA,EAAU,IAAA;AAC9C,EAAA,MAAM,CAAC,OAAA,EAAS,aAAa,CAAA,GAAI,SAAS,KAAK,CAAA;AAE/C,EAAA,MAAM,2BAA2B,aAAA,CAAc;AAAA,IAC7C,UAAA,EAAY;AAAA,GACb,CAAA;AAED,EAAA,MAAM,UAAA,GAAa,CAAC,IAAA,KAA+B;AACjD,IAAA,aAAA,CAAc,KAAK,OAAO,CAAA;AAC1B,IAAA,OAAA,CAAQ,IAAI,CAAA;AAAA,EACd,CAAA;AAEA,EAAA,MAAM,mBAAmB,MAAM;AAC7B,IAAA,aAAA,CAAc,IAAI,CAAA;AAAA,EACpB,CAAA;AAEA,EAAA,MAAM,cAAc,MAAM;AACxB,IAAA,OAAA,CAAQ,KAAK,CAAA;AACb,IAAA,aAAA,CAAc,KAAK,CAAA;AAAA,EACrB,CAAA;AAEA,EAAA,MAAM;AAAA,IACJ,mBAAA;AAAA,IACA,oBAAA;AAAA,IACA,yBAAA;AAAA,IACA;AAAA,GACF,GAAI,sBAAA,CAAuB,WAAA,EAAa,QAAA,EAAU,MAAM,QAAQ,CAAA;AAEhE,EAAA,MAAM,gBAAA,GAAmB;AAAA,IACvB,GAAI,mBAAA,GAAsB,CAAC,mBAAmB,IAAI,EAAC;AAAA,IACnD,GAAI,oBAAA,GAAuB,CAAC,oBAAoB,IAAI,EAAC;AAAA,IACrD,GAAI,yBAAA,GAA4B,CAAC,yBAAyB,IAAI,EAAC;AAAA,IAC/D,GAAI,SAAA,GAAY,CAAC,SAAS,IAAI;AAAC,GACjC,CAAE,MAAA;AAAA,IAAO,CAAC,OAAA,KACR;AAAA,MACE,cAAA,CAAe,SAAA;AAAA,MACf,cAAA,CAAe,MAAA;AAAA,MACf,cAAA,CAAe;AAAA,KACjB,CAAE,QAAA,CAAS,wBAAA,CAAyB,OAAO,CAAC;AAAA,GAC9C;AAEA,EAAA,MAAM,UACJ,WAAA,EAAa,MAAA,EAAQ,mBAAmB,WAAA,EAAa,MAAA,EAAQ,WAAW,EAAC;AAE3E,EAAA,MAAM,QAAA,GACJ,QAAQ,MAAA,KAAW,CAAA,GAAI,iBAAiB,MAAA,KAAW,CAAA,GAAI,QAAQ,MAAA,KAAW,CAAA;AAE5E,EAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,oBAAA;AAAA,MAAA;AAAA,QACC,WAAA;AAAA,QACA,IAAA;AAAA,QACA,WAAA;AAAA,QACA,IAAA;AAAA,QACA,QAAA;AAAA,QACA,UAAA,EAAY,cAAA;AAAA,QACZ;AAAA;AAAA,KACF;AAAA,oBAEA,GAAA;AAAA,MAAC,uBAAA;AAAA,MAAA;AAAA,QACC,WAAA;AAAA,QACA,QAAA;AAAA,QACA,IAAA,EAAM,UAAA;AAAA,QACN,aAAa,MAAM;AACjB,UAAA,aAAA,CAAc,KAAK,CAAA;AAAA,QACrB;AAAA;AAAA,KACF;AAAA,oBAEA,GAAA;AAAA,MAAC,iCAAA;AAAA,MAAA;AAAA,QACC,WAAA;AAAA,QACA,IAAA,EAAM,oBAAA;AAAA,QACN,aAAa,MAAM;AACjB,UAAA,uBAAA,CAAwB,KAAK,CAAA;AAAA,QAC/B;AAAA;AAAA,KACF;AAAA,yBAEC,IAAA,EAAA,EAAK,GAAA,EAAK,EAAE,OAAA,EAAS,SAAQ,EAC5B,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,QAAA,EAAA,EACC,QAAA,kBAAA,GAAA;AAAA,QAAC,OAAA;AAAA,QAAA;AAAA,UACC,SACE,wBAAA,CAAyB,OAAA,GACrB,EAAE,iDAAiD,CAAA,GACnD,EAAE,iDAAiD,CAAA;AAAA,UAGzD,QAAA,kBAAA,GAAA;AAAA,YAAC,UAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,OAAA;AAAA,cACL,aAAA,EAAY,8BAAA;AAAA,cACZ,OAAA,EAAS,MAAM,uBAAA,CAAwB,IAAI,CAAA;AAAA,cAC3C,QAAA,EAAU,CAAC,wBAAA,CAAyB,OAAA;AAAA,cACpC,KAAA,EAAO,EAAE,aAAA,EAAe,MAAA,EAAQ,SAAS,CAAA,EAAE;AAAA,cAE3C,8BAAC,WAAA,EAAA,EAAY;AAAA;AAAA;AACf;AAAA,OACF,EACF,CAAA;AAAA,0BAEC,QAAA,EAAA,EACC,QAAA,kBAAA,GAAA;AAAA,QAAC,OAAA;AAAA,QAAA;AAAA,UACC,SACE,wBAAA,CAAyB,OAAA,GACrB,EAAE,qCAAqC,CAAA,GACvC,EAAE,iDAAiD,CAAA;AAAA,UAGzD,QAAA,kBAAA,GAAA;AAAA,YAAC,UAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,OAAA;AAAA,cACL,aAAA,EAAY,gBAAA;AAAA,cACZ,SAAS,MAAM,UAAA,CAAW,EAAE,OAAA,EAAS,OAAO,CAAA;AAAA,cAC5C,QAAA,EAAU,CAAC,wBAAA,CAAyB,OAAA;AAAA,cACpC,KAAA,EAAO,EAAE,aAAA,EAAe,MAAA,EAAQ,SAAS,CAAA,EAAE;AAAA,cAE3C,QAAA,kBAAA,GAAA,CAAC,YAAA,EAAA,EAAa,QAAA,EAAU,CAAC,yBAAyB,OAAA,EAAS;AAAA;AAAA;AAC7D;AAAA,OACF,EACF,CAAA;AAAA,0BAEC,QAAA,EAAA,EAAS,KAAA,EAAO,EAAE,OAAA,EAAS,aAAY,EACtC,QAAA,kBAAA,GAAA;AAAA,QAAC,OAAA;AAAA,QAAA;AAAA,UACC,SACE,CAAC,WAAA,GACG,EAAE,8CAA8C,CAAA,GAChD,EAAE,qCAAqC,CAAA;AAAA,UAG7C,QAAA,kBAAA,GAAA;AAAA,YAAC,UAAA;AAAA,YAAA;AAAA,cACC,aAAA,EAAY,gBAAA;AAAA,cACZ,QAAA,EAAU,CAAC,WAAA,IAAe,CAAC,cAAc,WAAW,CAAA;AAAA,cACpD,IAAA,EAAK,OAAA;AAAA,cACL,OAAA,EACE,CAAC,eAAA,CAAgB,WAAW,IACxB,MAAM;AACJ,gBAAA,UAAA,CAAW,EAAE,OAAA,EAAS,IAAA,EAAM,CAAA;AAAA,cAC9B,CAAA,GACA,MAAA;AAAA,cAEN,KAAA,EAAO,EAAE,aAAA,EAAe,MAAA,EAAQ,SAAS,CAAA,EAAE;AAAA,cAE3C,QAAA,kBAAA,GAAA,CAAC,uBAAoB,WAAA,EAA0B;AAAA;AAAA;AACjD;AAAA,OACF,EACF,CAAA;AAAA,0BACC,QAAA,EAAA,EAAS,KAAA,EAAO,EAAE,OAAA,EAAS,aAAY,EACtC,QAAA,kBAAA,GAAA;AAAA,QAAC,OAAA;AAAA,QAAA;AAAA,UACC,SACE,QAAA,GACI,CAAA,CAAE,gDAAgD,CAAA,GAClD,EAAE,uCAAuC,CAAA;AAAA,UAG/C,QAAA,kBAAA,GAAA;AAAA,YAAC,UAAA;AAAA,YAAA;AAAA,cACC,aAAA,EAAY,kBAAA;AAAA,cACZ,QAAA;AAAA,cACA,IAAA,EAAK,OAAA;AAAA,cACL,OAAA,EAAS,MAAM,gBAAA,EAAiB;AAAA,cAChC,KAAA,EAAO,EAAE,aAAA,EAAe,MAAA,EAAQ,SAAS,CAAA,EAAE;AAAA,cAE3C,QAAA,kBAAA,GAAA,CAAC,cAAW,QAAA,EAAoB;AAAA;AAAA;AAClC;AAAA,OACF,EACF;AAAA,KAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ,CAAA;AACA,4BAAe,KAAKA,uBAAqB,CAAA;;;;"}
|
|
1
|
+
{"version":3,"file":"PipelineRunRowActions.esm.js","sources":["../../../src/components/PipelineRunList/PipelineRunRowActions.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport type { FC } from 'react';\n\nimport { useContext, useState, memo } from 'react';\n\nimport { kubernetesProxyPermission } from '@backstage/plugin-kubernetes-common';\nimport { usePermission } from '@backstage/plugin-permission-react';\n\nimport IconButton from '@mui/material/IconButton';\nimport { Flex, FlexItem } from '@patternfly/react-core';\nimport { Tooltip } from '@patternfly/react-core/dist/esm/components/Tooltip/Tooltip';\n\nimport {\n ComputedStatus,\n pipelineRunFilterReducer,\n PipelineRunKind,\n TaskRunKind,\n} from '@backstage-community/plugin-tekton-react';\n\nimport { TektonResourcesContext } from '../../hooks/TektonResourcesContext';\nimport {\n getTaskrunsOutputGroup,\n getSbomLink,\n hasExternalLink,\n isSbomTaskRun,\n} from '../../utils/taskRun-utils';\nimport OutputIcon from '../Icons/OutputIcon';\nimport ViewLogsIcon from '../Icons/ViewLogsIcon';\nimport LinkToSBomIcon from '../Icons/LinkToSbomIcon';\nimport ListAltIcon from '@mui/icons-material/ListAlt';\nimport PipelineRunLogDialog from '../PipelineRunLogs/PipelineRunLogDialog';\nimport PipelineRunOutputDialog from '../PipelineRunOutput/PipelineRunOutputDialog';\nimport PipelineRunSBOMLink from './PipelineRunSBOMLink';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { tektonTranslationRef } from '../../translations/index.ts';\nimport { PipelineRunParamsAndResultsDialog } from '../PipelineRunParamsAndResults';\n\nconst PipelineRunRowActions: FC<{ pipelineRun: PipelineRunKind }> = ({\n pipelineRun,\n}) => {\n const { watchResourcesData } = useContext(TektonResourcesContext);\n const [open, setOpen] = useState<boolean>(false);\n const { t } = useTranslationRef(tektonTranslationRef);\n\n const [openOutput, setOpenOutput] = useState<boolean>(false);\n const [openParamsAndResults, setOpenParamsAndResults] =\n useState<boolean>(false);\n const pods = watchResourcesData?.pods?.data || [];\n const taskRuns = watchResourcesData?.taskruns?.data || [];\n const { sbomTaskRun } = getTaskrunsOutputGroup(\n pipelineRun?.metadata?.name,\n taskRuns,\n );\n const activeTaskName = sbomTaskRun?.metadata?.name;\n const [forSBOM, toggleForSBOM] = useState(false);\n\n const hasKubernetesProxyAccess = usePermission({\n permission: kubernetesProxyPermission,\n });\n\n const openDialog = (opts: { forSBOM: boolean }) => {\n toggleForSBOM(opts.forSBOM);\n setOpen(true);\n };\n\n const openOutputDialog = () => {\n setOpenOutput(true);\n };\n\n const closeDialog = () => {\n setOpen(false);\n toggleForSBOM(false);\n };\n\n const {\n acsImageScanTaskRun,\n acsImageCheckTaskRun,\n acsDeploymentCheckTaskRun,\n ecTaskRun,\n } = getTaskrunsOutputGroup(pipelineRun?.metadata?.name, taskRuns);\n\n const finishedTaskruns = [\n ...(acsImageScanTaskRun ? [acsImageScanTaskRun] : []),\n ...(acsImageCheckTaskRun ? [acsImageCheckTaskRun] : []),\n ...(acsDeploymentCheckTaskRun ? [acsDeploymentCheckTaskRun] : []),\n ...(ecTaskRun ? [ecTaskRun] : []),\n ].filter((taskRun: TaskRunKind) =>\n [\n ComputedStatus.Succeeded,\n ComputedStatus.Failed,\n ComputedStatus.Skipped,\n ].includes(pipelineRunFilterReducer(taskRun)),\n );\n\n const results =\n pipelineRun?.status?.pipelineResults || pipelineRun?.status?.results || [];\n\n const disabled =\n results.length === 0 ? finishedTaskruns.length === 0 : results.length === 0;\n\n return (\n <>\n <PipelineRunLogDialog\n pipelineRun={pipelineRun}\n open={open}\n closeDialog={closeDialog}\n pods={pods}\n taskRuns={taskRuns}\n activeTask={activeTaskName}\n forSBOM={forSBOM}\n />\n\n <PipelineRunOutputDialog\n pipelineRun={pipelineRun}\n taskRuns={taskRuns}\n open={openOutput}\n closeDialog={() => {\n setOpenOutput(false);\n }}\n />\n\n <PipelineRunParamsAndResultsDialog\n pipelineRun={pipelineRun}\n open={openParamsAndResults}\n closeDialog={() => {\n setOpenParamsAndResults(false);\n }}\n />\n\n <Flex gap={{ default: 'gapXs' }}>\n <FlexItem>\n <Tooltip\n content={\n hasKubernetesProxyAccess.allowed\n ? t('pipelineRunList.rowActions.viewParamsAndResults')\n : t('pipelineRunList.rowActions.unauthorizedViewLogs')\n }\n >\n <IconButton\n size=\"small\"\n data-testid=\"view-params-and-results-icon\"\n aria-label={t('pipelineRunList.rowActions.viewParamsAndResults')}\n onClick={() => setOpenParamsAndResults(true)}\n disabled={!hasKubernetesProxyAccess.allowed}\n style={{ pointerEvents: 'auto', padding: 0 }}\n >\n <ListAltIcon />\n </IconButton>\n </Tooltip>\n </FlexItem>\n\n <FlexItem>\n <Tooltip\n content={\n hasKubernetesProxyAccess.allowed\n ? t('pipelineRunList.rowActions.viewLogs')\n : t('pipelineRunList.rowActions.unauthorizedViewLogs')\n }\n >\n <IconButton\n size=\"small\"\n data-testid=\"view-logs-icon\"\n aria-label={t('pipelineRunList.rowActions.viewLogs')}\n onClick={() => openDialog({ forSBOM: false })}\n disabled={!hasKubernetesProxyAccess.allowed}\n style={{ pointerEvents: 'auto', padding: 0 }}\n >\n <ViewLogsIcon disabled={!hasKubernetesProxyAccess.allowed} />\n </IconButton>\n </Tooltip>\n </FlexItem>\n\n <FlexItem align={{ default: 'alignLeft' }}>\n <Tooltip\n content={\n !sbomTaskRun\n ? t('pipelineRunList.rowActions.SBOMNotApplicable')\n : t('pipelineRunList.rowActions.viewSBOM')\n }\n >\n {isSbomTaskRun(sbomTaskRun) &&\n hasExternalLink(sbomTaskRun) &&\n /^https?:\\/\\//.test(getSbomLink(sbomTaskRun) ?? '') ? (\n <IconButton\n component=\"a\"\n href={getSbomLink(sbomTaskRun)}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n data-testid=\"view-sbom-icon\"\n aria-label={t('pipelineRunList.rowActions.viewSBOM')}\n size=\"small\"\n style={{ pointerEvents: 'auto', padding: 0 }}\n >\n <LinkToSBomIcon dataTestId=\"external-sbom-link\" />\n </IconButton>\n ) : (\n <IconButton\n data-testid=\"view-sbom-icon\"\n disabled={!sbomTaskRun || !isSbomTaskRun(sbomTaskRun)}\n aria-label={t('pipelineRunList.rowActions.viewSBOM')}\n size=\"small\"\n onClick={() => openDialog({ forSBOM: true })}\n style={{ pointerEvents: 'auto', padding: 0 }}\n >\n <PipelineRunSBOMLink sbomTaskRun={sbomTaskRun} />\n </IconButton>\n )}\n </Tooltip>\n </FlexItem>\n <FlexItem align={{ default: 'alignLeft' }}>\n <Tooltip\n content={\n disabled\n ? t('pipelineRunList.rowActions.outputNotApplicable')\n : t('pipelineRunList.rowActions.viewOutput')\n }\n >\n <IconButton\n data-testid=\"view-output-icon\"\n disabled={disabled}\n aria-label={t('pipelineRunList.rowActions.viewOutput')}\n size=\"small\"\n onClick={() => openOutputDialog()}\n style={{ pointerEvents: 'auto', padding: 0 }}\n >\n <OutputIcon disabled={disabled} />\n </IconButton>\n </Tooltip>\n </FlexItem>\n </Flex>\n </>\n );\n};\nexport default memo(PipelineRunRowActions);\n"],"names":["PipelineRunRowActions"],"mappings":"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"}
|
|
@@ -8,7 +8,7 @@ import classNames from 'classnames';
|
|
|
8
8
|
import { usePipelineRunScanResults } from '../../hooks/usePipelineRunScanResults.esm.js';
|
|
9
9
|
import CriticalRiskIcon from '../Icons/CriticalRiskIcon.esm.js';
|
|
10
10
|
import EqualsIcon from '../Icons/EqualsIcon.esm.js';
|
|
11
|
-
import '../../translations
|
|
11
|
+
import '../../translations.esm.js';
|
|
12
12
|
import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
|
|
13
13
|
import { tektonTranslationRef } from '../../translations/ref.esm.js';
|
|
14
14
|
|
|
@@ -6,7 +6,7 @@ import TableSortLabel from '@mui/material/TableSortLabel';
|
|
|
6
6
|
import { getPipelineRunColumnHeader } from './PipelineRunColumnHeader.esm.js';
|
|
7
7
|
import { getMergedPipelineRunTableHeaderCellSx } from './pipelineRunTableColumns.esm.js';
|
|
8
8
|
import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
|
|
9
|
-
import '../../translations
|
|
9
|
+
import '../../translations.esm.js';
|
|
10
10
|
import { tektonTranslationRef } from '../../translations/ref.esm.js';
|
|
11
11
|
|
|
12
12
|
const EnhancedTableHead = ({
|
|
@@ -3,7 +3,7 @@ import { pipelineRunFilterReducer } from '@backstage-community/plugin-tekton-rea
|
|
|
3
3
|
import { Status } from '../common/Status.esm.js';
|
|
4
4
|
import './PlrStatus.css.esm.js';
|
|
5
5
|
import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
|
|
6
|
-
import '../../translations
|
|
6
|
+
import '../../translations.esm.js';
|
|
7
7
|
import { tektonTranslationRef } from '../../translations/ref.esm.js';
|
|
8
8
|
|
|
9
9
|
const PlrStatus = ({ obj }) => {
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { useTheme } from '@mui/material/styles';
|
|
2
3
|
import { Split, SplitItem } from '@patternfly/react-core';
|
|
3
4
|
import './ResourceBadge.css.esm.js';
|
|
4
5
|
|
|
@@ -8,6 +9,7 @@ const ResourceBadge = ({
|
|
|
8
9
|
name,
|
|
9
10
|
suffix
|
|
10
11
|
}) => {
|
|
12
|
+
const theme = useTheme();
|
|
11
13
|
return /* @__PURE__ */ jsxs(Split, { className: "bs-tkn-pipeline-visualization__label", children: [
|
|
12
14
|
/* @__PURE__ */ jsx(SplitItem, { style: { marginRight: "var(--pf-t--global--spacer--sm)" }, children: /* @__PURE__ */ jsx(
|
|
13
15
|
"span",
|
|
@@ -18,7 +20,14 @@ const ResourceBadge = ({
|
|
|
18
20
|
children: abbr
|
|
19
21
|
}
|
|
20
22
|
) }),
|
|
21
|
-
/* @__PURE__ */ jsx(SplitItem, { children: /* @__PURE__ */ jsx(
|
|
23
|
+
/* @__PURE__ */ jsx(SplitItem, { children: /* @__PURE__ */ jsx(
|
|
24
|
+
"span",
|
|
25
|
+
{
|
|
26
|
+
"data-testid": "pipelinerun-name",
|
|
27
|
+
style: { color: theme.palette.text.primary },
|
|
28
|
+
children: name
|
|
29
|
+
}
|
|
30
|
+
) }),
|
|
22
31
|
suffix ? /* @__PURE__ */ jsx(SplitItem, { style: { marginLeft: "var(--pf-t--global--spacer--sm)" }, children: suffix }) : null
|
|
23
32
|
] });
|
|
24
33
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ResourceBadge.esm.js","sources":["../../../src/components/PipelineRunList/ResourceBadge.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 { ReactNode } from 'react';\n\nimport { Split, SplitItem } from '@patternfly/react-core';\n\nimport './ResourceBadge.css';\n\nconst ResourceBadge = ({\n color,\n abbr,\n name,\n suffix,\n}: {\n color: string;\n abbr: string;\n name: string;\n suffix?: ReactNode;\n}) => {\n return (\n <Split className=\"bs-tkn-pipeline-visualization__label\">\n <SplitItem style={{ marginRight: 'var(--pf-t--global--spacer--sm)' }}>\n <span\n data-testid=\"pipelinerun-abbr-badge\"\n className=\"badge\"\n style={{ backgroundColor: color }}\n >\n {abbr}\n </span>\n </SplitItem>\n <SplitItem>\n <span
|
|
1
|
+
{"version":3,"file":"ResourceBadge.esm.js","sources":["../../../src/components/PipelineRunList/ResourceBadge.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 { ReactNode } from 'react';\n\nimport { useTheme } from '@mui/material/styles';\nimport { Split, SplitItem } from '@patternfly/react-core';\n\nimport './ResourceBadge.css';\n\nconst ResourceBadge = ({\n color,\n abbr,\n name,\n suffix,\n}: {\n color: string;\n abbr: string;\n name: string;\n suffix?: ReactNode;\n}) => {\n const theme = useTheme();\n return (\n <Split className=\"bs-tkn-pipeline-visualization__label\">\n <SplitItem style={{ marginRight: 'var(--pf-t--global--spacer--sm)' }}>\n <span\n data-testid=\"pipelinerun-abbr-badge\"\n className=\"badge\"\n style={{ backgroundColor: color }}\n >\n {abbr}\n </span>\n </SplitItem>\n <SplitItem>\n <span\n data-testid=\"pipelinerun-name\"\n style={{ color: theme.palette.text.primary }}\n >\n {name}\n </span>\n </SplitItem>\n {suffix ? (\n <SplitItem style={{ marginLeft: 'var(--pf-t--global--spacer--sm)' }}>\n {suffix}\n </SplitItem>\n ) : null}\n </Split>\n );\n};\n\nexport default ResourceBadge;\n"],"names":[],"mappings":";;;;;AAsBA,MAAM,gBAAgB,CAAC;AAAA,EACrB,KAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA;AACF,CAAA,KAKM;AACJ,EAAA,MAAM,QAAQ,QAAA,EAAS;AACvB,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,sCAAA,EACf,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,SAAA,EAAA,EAAU,KAAA,EAAO,EAAE,WAAA,EAAa,mCAAkC,EACjE,QAAA,kBAAA,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,aAAA,EAAY,wBAAA;AAAA,QACZ,SAAA,EAAU,OAAA;AAAA,QACV,KAAA,EAAO,EAAE,eAAA,EAAiB,KAAA,EAAM;AAAA,QAE/B,QAAA,EAAA;AAAA;AAAA,KACH,EACF,CAAA;AAAA,wBACC,SAAA,EAAA,EACC,QAAA,kBAAA,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,aAAA,EAAY,kBAAA;AAAA,QACZ,OAAO,EAAE,KAAA,EAAO,KAAA,CAAM,OAAA,CAAQ,KAAK,OAAA,EAAQ;AAAA,QAE1C,QAAA,EAAA;AAAA;AAAA,KACH,EACF,CAAA;AAAA,IACC,MAAA,uBACE,SAAA,EAAA,EAAU,KAAA,EAAO,EAAE,UAAA,EAAY,iCAAA,EAAkC,EAC/D,QAAA,EAAA,MAAA,EACH,CAAA,GACE;AAAA,GAAA,EACN,CAAA;AAEJ;;;;"}
|
|
@@ -12,13 +12,14 @@ import ResourceBadge from '../PipelineRunList/ResourceBadge.esm.js';
|
|
|
12
12
|
import PipelineRunLogDownloader from './PipelineRunLogDownloader.esm.js';
|
|
13
13
|
import { PipelineRunLogs } from './PipelineRunLogs.esm.js';
|
|
14
14
|
import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
|
|
15
|
-
import '../../translations
|
|
15
|
+
import '../../translations.esm.js';
|
|
16
16
|
import { tektonTranslationRef } from '../../translations/ref.esm.js';
|
|
17
17
|
|
|
18
18
|
const titleContainerSx = {
|
|
19
19
|
display: "flex",
|
|
20
20
|
alignItems: "center",
|
|
21
|
-
gap: 1
|
|
21
|
+
gap: 1,
|
|
22
|
+
color: "text.primary"
|
|
22
23
|
};
|
|
23
24
|
const closeButtonSx = {
|
|
24
25
|
position: "absolute",
|
|
@@ -70,7 +71,7 @@ const PipelineRunLogDialog$1 = ({
|
|
|
70
71
|
}
|
|
71
72
|
)
|
|
72
73
|
] }) }),
|
|
73
|
-
/* @__PURE__ */ jsx(DialogContent, { children: /* @__PURE__ */ jsxs(ErrorBoundary, { children: [
|
|
74
|
+
/* @__PURE__ */ jsx(DialogContent, { tabIndex: 0, children: /* @__PURE__ */ jsxs(ErrorBoundary, { children: [
|
|
74
75
|
/* @__PURE__ */ jsx(
|
|
75
76
|
PipelineRunLogDownloader,
|
|
76
77
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PipelineRunLogDialog.esm.js","sources":["../../../src/components/PipelineRunLogs/PipelineRunLogDialog.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, useEffect, memo } from 'react';\n\nimport { ErrorBoundary } from '@backstage/core-components';\n\nimport { V1Pod } from '@kubernetes/client-node';\nimport Box from '@mui/material/Box';\nimport Dialog from '@mui/material/Dialog';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport IconButton from '@mui/material/IconButton';\nimport type { SxProps, Theme } from '@mui/material/styles';\nimport CloseIcon from '@mui/icons-material/Close';\n\nimport {\n PipelineRunKind,\n TaskRunKind,\n} from '@backstage-community/plugin-tekton-react';\n\nimport { tektonGroupColor } from '../../types/types';\nimport ResourceBadge from '../PipelineRunList/ResourceBadge';\nimport PipelineRunLogDownloader from './PipelineRunLogDownloader';\nimport PipelineRunLogs from './PipelineRunLogs';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { tektonTranslationRef } from '../../translations/index.ts';\n\nconst titleContainerSx = {\n display: 'flex',\n alignItems: 'center',\n gap: 1,\n};\n\nconst closeButtonSx: SxProps<Theme> = {\n position: 'absolute',\n right: (theme: Theme) => theme.spacing(1),\n top: (theme: Theme) => theme.spacing(1),\n color: (theme: Theme) => theme.palette.grey[500],\n};\n\ntype PipelineRunLogDialogProps = {\n open: boolean;\n closeDialog: () => void;\n pipelineRun: PipelineRunKind;\n taskRuns: TaskRunKind[];\n pods: V1Pod[];\n activeTask?: string;\n forSBOM?: boolean;\n};\nconst PipelineRunLogDialog = ({\n open,\n closeDialog,\n pipelineRun,\n pods,\n taskRuns,\n activeTask,\n forSBOM,\n}: PipelineRunLogDialogProps) => {\n const [task, setTask] = useState(activeTask);\n const { t } = useTranslationRef(tektonTranslationRef);\n\n useEffect(() => {\n // If we trigger this dialog for the SBOM task, update the current active task.\n if (forSBOM && activeTask) {\n setTask(activeTask);\n }\n }, [forSBOM, activeTask]);\n\n return (\n <Dialog\n data-testid=\"pipelinerun-logs-dialog\"\n maxWidth=\"xl\"\n fullWidth\n open={open}\n onClose={closeDialog}\n >\n <DialogTitle id=\"pipelinerun-logs\" title={t('pipelineRunLogs.title')}>\n <Box sx={titleContainerSx}>\n <ResourceBadge\n color={tektonGroupColor}\n abbr=\"PLR\"\n name={pipelineRun?.metadata?.name ?? ''}\n />\n <IconButton\n aria-label=\"close\"\n sx={closeButtonSx}\n onClick={closeDialog}\n >\n <CloseIcon />\n </IconButton>\n </Box>\n </DialogTitle>\n <DialogContent>\n <ErrorBoundary>\n <PipelineRunLogDownloader\n pods={pods}\n activeTask={task}\n pipelineRun={pipelineRun}\n />\n <PipelineRunLogs\n pipelineRun={pipelineRun}\n taskRuns={taskRuns}\n pods={pods}\n activeTask={task}\n setActiveTask={setTask}\n />\n </ErrorBoundary>\n </DialogContent>\n </Dialog>\n );\n};\n\nexport default memo(PipelineRunLogDialog);\n"],"names":["PipelineRunLogDialog"],"mappings":";;;;;;;;;;;;;;;;;AAwCA,MAAM,gBAAA,GAAmB;AAAA,EACvB,OAAA,EAAS,MAAA;AAAA,EACT,UAAA,EAAY,QAAA;AAAA,EACZ,GAAA,EAAK;
|
|
1
|
+
{"version":3,"file":"PipelineRunLogDialog.esm.js","sources":["../../../src/components/PipelineRunLogs/PipelineRunLogDialog.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, useEffect, memo } from 'react';\n\nimport { ErrorBoundary } from '@backstage/core-components';\n\nimport { V1Pod } from '@kubernetes/client-node';\nimport Box from '@mui/material/Box';\nimport Dialog from '@mui/material/Dialog';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport IconButton from '@mui/material/IconButton';\nimport type { SxProps, Theme } from '@mui/material/styles';\nimport CloseIcon from '@mui/icons-material/Close';\n\nimport {\n PipelineRunKind,\n TaskRunKind,\n} from '@backstage-community/plugin-tekton-react';\n\nimport { tektonGroupColor } from '../../types/types';\nimport ResourceBadge from '../PipelineRunList/ResourceBadge';\nimport PipelineRunLogDownloader from './PipelineRunLogDownloader';\nimport PipelineRunLogs from './PipelineRunLogs';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { tektonTranslationRef } from '../../translations/index.ts';\n\nconst titleContainerSx = {\n display: 'flex',\n alignItems: 'center',\n gap: 1,\n color: 'text.primary',\n};\n\nconst closeButtonSx: SxProps<Theme> = {\n position: 'absolute',\n right: (theme: Theme) => theme.spacing(1),\n top: (theme: Theme) => theme.spacing(1),\n color: (theme: Theme) => theme.palette.grey[500],\n};\n\ntype PipelineRunLogDialogProps = {\n open: boolean;\n closeDialog: () => void;\n pipelineRun: PipelineRunKind;\n taskRuns: TaskRunKind[];\n pods: V1Pod[];\n activeTask?: string;\n forSBOM?: boolean;\n};\nconst PipelineRunLogDialog = ({\n open,\n closeDialog,\n pipelineRun,\n pods,\n taskRuns,\n activeTask,\n forSBOM,\n}: PipelineRunLogDialogProps) => {\n const [task, setTask] = useState(activeTask);\n const { t } = useTranslationRef(tektonTranslationRef);\n\n useEffect(() => {\n // If we trigger this dialog for the SBOM task, update the current active task.\n if (forSBOM && activeTask) {\n setTask(activeTask);\n }\n }, [forSBOM, activeTask]);\n\n return (\n <Dialog\n data-testid=\"pipelinerun-logs-dialog\"\n maxWidth=\"xl\"\n fullWidth\n open={open}\n onClose={closeDialog}\n >\n <DialogTitle id=\"pipelinerun-logs\" title={t('pipelineRunLogs.title')}>\n <Box sx={titleContainerSx}>\n <ResourceBadge\n color={tektonGroupColor}\n abbr=\"PLR\"\n name={pipelineRun?.metadata?.name ?? ''}\n />\n <IconButton\n aria-label=\"close\"\n sx={closeButtonSx}\n onClick={closeDialog}\n >\n <CloseIcon />\n </IconButton>\n </Box>\n </DialogTitle>\n <DialogContent tabIndex={0}>\n <ErrorBoundary>\n <PipelineRunLogDownloader\n pods={pods}\n activeTask={task}\n pipelineRun={pipelineRun}\n />\n <PipelineRunLogs\n pipelineRun={pipelineRun}\n taskRuns={taskRuns}\n pods={pods}\n activeTask={task}\n setActiveTask={setTask}\n />\n </ErrorBoundary>\n </DialogContent>\n </Dialog>\n );\n};\n\nexport default memo(PipelineRunLogDialog);\n"],"names":["PipelineRunLogDialog"],"mappings":";;;;;;;;;;;;;;;;;AAwCA,MAAM,gBAAA,GAAmB;AAAA,EACvB,OAAA,EAAS,MAAA;AAAA,EACT,UAAA,EAAY,QAAA;AAAA,EACZ,GAAA,EAAK,CAAA;AAAA,EACL,KAAA,EAAO;AACT,CAAA;AAEA,MAAM,aAAA,GAAgC;AAAA,EACpC,QAAA,EAAU,UAAA;AAAA,EACV,KAAA,EAAO,CAAC,KAAA,KAAiB,KAAA,CAAM,QAAQ,CAAC,CAAA;AAAA,EACxC,GAAA,EAAK,CAAC,KAAA,KAAiB,KAAA,CAAM,QAAQ,CAAC,CAAA;AAAA,EACtC,OAAO,CAAC,KAAA,KAAiB,KAAA,CAAM,OAAA,CAAQ,KAAK,GAAG;AACjD,CAAA;AAWA,MAAMA,yBAAuB,CAAC;AAAA,EAC5B,IAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,IAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA,KAAiC;AAC/B,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAI,SAAS,UAAU,CAAA;AAC3C,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,oBAAoB,CAAA;AAEpD,EAAA,SAAA,CAAU,MAAM;AAEd,IAAA,IAAI,WAAW,UAAA,EAAY;AACzB,MAAA,OAAA,CAAQ,UAAU,CAAA;AAAA,IACpB;AAAA,EACF,CAAA,EAAG,CAAC,OAAA,EAAS,UAAU,CAAC,CAAA;AAExB,EAAA,uBACE,IAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,aAAA,EAAY,yBAAA;AAAA,MACZ,QAAA,EAAS,IAAA;AAAA,MACT,SAAA,EAAS,IAAA;AAAA,MACT,IAAA;AAAA,MACA,OAAA,EAAS,WAAA;AAAA,MAET,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,WAAA,EAAA,EAAY,EAAA,EAAG,kBAAA,EAAmB,KAAA,EAAO,CAAA,CAAE,uBAAuB,CAAA,EACjE,QAAA,kBAAA,IAAA,CAAC,GAAA,EAAA,EAAI,EAAA,EAAI,gBAAA,EACP,QAAA,EAAA;AAAA,0BAAA,GAAA;AAAA,YAAC,aAAA;AAAA,YAAA;AAAA,cACC,KAAA,EAAO,gBAAA;AAAA,cACP,IAAA,EAAK,KAAA;AAAA,cACL,IAAA,EAAM,WAAA,EAAa,QAAA,EAAU,IAAA,IAAQ;AAAA;AAAA,WACvC;AAAA,0BACA,GAAA;AAAA,YAAC,UAAA;AAAA,YAAA;AAAA,cACC,YAAA,EAAW,OAAA;AAAA,cACX,EAAA,EAAI,aAAA;AAAA,cACJ,OAAA,EAAS,WAAA;AAAA,cAET,8BAAC,SAAA,EAAA,EAAU;AAAA;AAAA;AACb,SAAA,EACF,CAAA,EACF,CAAA;AAAA,wBACA,GAAA,CAAC,aAAA,EAAA,EAAc,QAAA,EAAU,CAAA,EACvB,+BAAC,aAAA,EAAA,EACC,QAAA,EAAA;AAAA,0BAAA,GAAA;AAAA,YAAC,wBAAA;AAAA,YAAA;AAAA,cACC,IAAA;AAAA,cACA,UAAA,EAAY,IAAA;AAAA,cACZ;AAAA;AAAA,WACF;AAAA,0BACA,GAAA;AAAA,YAAC,eAAA;AAAA,YAAA;AAAA,cACC,WAAA;AAAA,cACA,QAAA;AAAA,cACA,IAAA;AAAA,cACA,UAAA,EAAY,IAAA;AAAA,cACZ,aAAA,EAAe;AAAA;AAAA;AACjB,SAAA,EACF,CAAA,EACF;AAAA;AAAA;AAAA,GACF;AAEJ,CAAA;AAEA,2BAAe,KAAKA,sBAAoB,CAAA;;;;"}
|
|
@@ -4,7 +4,7 @@ import { Flex, FlexItem } from '@patternfly/react-core';
|
|
|
4
4
|
import { TEKTON_PIPELINE_RUN, TEKTON_PIPELINE_TASKRUN, TEKTON_PIPELINE_TASK } from '../../consts/tekton-const.esm.js';
|
|
5
5
|
import PodLogsDownloadLink from './PodLogsDownloadLink.esm.js';
|
|
6
6
|
import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
|
|
7
|
-
import '../../translations
|
|
7
|
+
import '../../translations.esm.js';
|
|
8
8
|
import { tektonTranslationRef } from '../../translations/ref.esm.js';
|
|
9
9
|
|
|
10
10
|
const PipelineRunLogDownloader = ({ pods, pipelineRun, activeTask }) => {
|
|
@@ -5,7 +5,7 @@ import Skeleton from '@mui/material/Skeleton';
|
|
|
5
5
|
import { QueryClientProvider, QueryClient } from '@tanstack/react-query';
|
|
6
6
|
import { usePodLogsOfPipelineRun } from '../../hooks/usePodLogsOfPipelineRun.esm.js';
|
|
7
7
|
import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
|
|
8
|
-
import '../../translations
|
|
8
|
+
import '../../translations.esm.js';
|
|
9
9
|
import { tektonTranslationRef } from '../../translations/ref.esm.js';
|
|
10
10
|
|
|
11
11
|
const PipelineRunLogViewer = ({ pod }) => {
|
|
@@ -8,7 +8,7 @@ import { getSortedTaskRuns, getActiveTaskRun } from '../../utils/taskRun-utils.e
|
|
|
8
8
|
import { PipelineRunLogViewer as PipelineRunLogViewerWithQueryClient } from './PipelineRunLogViewer.esm.js';
|
|
9
9
|
import { TaskStatusStepper } from './TaskStatusStepper.esm.js';
|
|
10
10
|
import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
|
|
11
|
-
import '../../translations
|
|
11
|
+
import '../../translations.esm.js';
|
|
12
12
|
import { tektonTranslationRef } from '../../translations/ref.esm.js';
|
|
13
13
|
|
|
14
14
|
const PipelineRunLogs = ({
|
|
@@ -7,7 +7,7 @@ import DownloadIcon from '@mui/icons-material/FileDownloadOutlined';
|
|
|
7
7
|
import { TektonResourcesContext } from '../../hooks/TektonResourcesContext.esm.js';
|
|
8
8
|
import { getPodLogs } from '../../utils/log-downloader-utils.esm.js';
|
|
9
9
|
import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
|
|
10
|
-
import '../../translations
|
|
10
|
+
import '../../translations.esm.js';
|
|
11
11
|
import { downloadLogFile } from '../../utils/download-log-file-utils.esm.js';
|
|
12
12
|
import { tektonTranslationRef } from '../../translations/ref.esm.js';
|
|
13
13
|
|
|
@@ -15,7 +15,7 @@ import classNames from 'classnames';
|
|
|
15
15
|
import { ComputedStatus } from '@backstage-community/plugin-tekton-react';
|
|
16
16
|
import { calculateDuration } from '../../utils/tekton-utils.esm.js';
|
|
17
17
|
import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
|
|
18
|
-
import '../../translations
|
|
18
|
+
import '../../translations.esm.js';
|
|
19
19
|
import { tektonTranslationRef } from '../../translations/ref.esm.js';
|
|
20
20
|
|
|
21
21
|
const StepTimeTicker = ({ step }) => {
|
|
@@ -11,13 +11,14 @@ import { tektonGroupColor } from '../../types/types.esm.js';
|
|
|
11
11
|
import PipelineRunOutput from '../PipelineRunList/PipelineRunOutput.esm.js';
|
|
12
12
|
import ResourceBadge from '../PipelineRunList/ResourceBadge.esm.js';
|
|
13
13
|
import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
|
|
14
|
-
import '../../translations
|
|
14
|
+
import '../../translations.esm.js';
|
|
15
15
|
import { tektonTranslationRef } from '../../translations/ref.esm.js';
|
|
16
16
|
|
|
17
17
|
const titleContainerSx = {
|
|
18
18
|
display: "flex",
|
|
19
19
|
alignItems: "center",
|
|
20
|
-
gap: 1
|
|
20
|
+
gap: 1,
|
|
21
|
+
color: "text.primary"
|
|
21
22
|
};
|
|
22
23
|
const closeButtonSx = {
|
|
23
24
|
position: "absolute",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PipelineRunOutputDialog.esm.js","sources":["../../../src/components/PipelineRunOutput/PipelineRunOutputDialog.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 { memo } from 'react';\n\nimport { ErrorBoundary } from '@backstage/core-components';\n\nimport Box from '@mui/material/Box';\nimport Dialog from '@mui/material/Dialog';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport IconButton from '@mui/material/IconButton';\nimport type { SxProps, Theme } from '@mui/material/styles';\nimport CloseIcon from '@mui/icons-material/Close';\n\nimport {\n PipelineRunKind,\n TaskRunKind,\n} from '@backstage-community/plugin-tekton-react';\n\nimport { tektonGroupColor } from '../../types/types';\nimport PipelineRunOutput from '../PipelineRunList/PipelineRunOutput';\nimport ResourceBadge from '../PipelineRunList/ResourceBadge';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { tektonTranslationRef } from '../../translations/index.ts';\n\nconst titleContainerSx = {\n display: 'flex',\n alignItems: 'center',\n gap: 1,\n};\n\nconst closeButtonSx: SxProps<Theme> = {\n position: 'absolute',\n right: (theme: Theme) => theme.spacing(1),\n top: (theme: Theme) => theme.spacing(1),\n color: (theme: Theme) => theme.palette.grey[500],\n};\n\nconst dialogPaperSx: SxProps<Theme> = {\n display: 'flex',\n flexDirection: 'column',\n height: '90vh',\n maxHeight: '90vh',\n};\n\nconst dialogContentSx: SxProps<Theme> = {\n display: 'flex',\n flexDirection: 'column',\n flex: 1,\n minHeight: 0,\n overflow: 'hidden',\n};\n\ntype PipelineRunOutputDialogProps = {\n open: boolean;\n closeDialog: () => void;\n pipelineRun: PipelineRunKind;\n taskRuns: TaskRunKind[];\n};\nconst PipelineRunOutputDialog = ({\n open,\n closeDialog,\n pipelineRun,\n taskRuns,\n}: PipelineRunOutputDialogProps) => {\n const { t } = useTranslationRef(tektonTranslationRef);\n\n return (\n <Dialog\n data-testid=\"pipelinerun-output-dialog\"\n maxWidth=\"xl\"\n fullWidth\n open={open}\n onClose={closeDialog}\n PaperProps={{ sx: dialogPaperSx }}\n >\n <DialogTitle id=\"pipelinerun-output\" title={t('pipelineRunOutput.title')}>\n <Box sx={titleContainerSx}>\n <ResourceBadge\n color={tektonGroupColor}\n abbr=\"PLR\"\n name={pipelineRun?.metadata?.name ?? ''}\n />{' '}\n <IconButton\n aria-label=\"close\"\n sx={closeButtonSx}\n onClick={closeDialog}\n >\n <CloseIcon />\n </IconButton>\n </Box>\n </DialogTitle>\n <DialogContent sx={dialogContentSx}>\n <ErrorBoundary>\n <PipelineRunOutput pipelineRun={pipelineRun} taskRuns={taskRuns} />\n </ErrorBoundary>\n </DialogContent>\n </Dialog>\n );\n};\n\nexport default memo(PipelineRunOutputDialog);\n"],"names":["PipelineRunOutputDialog"],"mappings":";;;;;;;;;;;;;;;;AAsCA,MAAM,gBAAA,GAAmB;AAAA,EACvB,OAAA,EAAS,MAAA;AAAA,EACT,UAAA,EAAY,QAAA;AAAA,EACZ,GAAA,EAAK;
|
|
1
|
+
{"version":3,"file":"PipelineRunOutputDialog.esm.js","sources":["../../../src/components/PipelineRunOutput/PipelineRunOutputDialog.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 { memo } from 'react';\n\nimport { ErrorBoundary } from '@backstage/core-components';\n\nimport Box from '@mui/material/Box';\nimport Dialog from '@mui/material/Dialog';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport IconButton from '@mui/material/IconButton';\nimport type { SxProps, Theme } from '@mui/material/styles';\nimport CloseIcon from '@mui/icons-material/Close';\n\nimport {\n PipelineRunKind,\n TaskRunKind,\n} from '@backstage-community/plugin-tekton-react';\n\nimport { tektonGroupColor } from '../../types/types';\nimport PipelineRunOutput from '../PipelineRunList/PipelineRunOutput';\nimport ResourceBadge from '../PipelineRunList/ResourceBadge';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { tektonTranslationRef } from '../../translations/index.ts';\n\nconst titleContainerSx = {\n display: 'flex',\n alignItems: 'center',\n gap: 1,\n color: 'text.primary',\n};\n\nconst closeButtonSx: SxProps<Theme> = {\n position: 'absolute',\n right: (theme: Theme) => theme.spacing(1),\n top: (theme: Theme) => theme.spacing(1),\n color: (theme: Theme) => theme.palette.grey[500],\n};\n\nconst dialogPaperSx: SxProps<Theme> = {\n display: 'flex',\n flexDirection: 'column',\n height: '90vh',\n maxHeight: '90vh',\n};\n\nconst dialogContentSx: SxProps<Theme> = {\n display: 'flex',\n flexDirection: 'column',\n flex: 1,\n minHeight: 0,\n overflow: 'hidden',\n};\n\ntype PipelineRunOutputDialogProps = {\n open: boolean;\n closeDialog: () => void;\n pipelineRun: PipelineRunKind;\n taskRuns: TaskRunKind[];\n};\nconst PipelineRunOutputDialog = ({\n open,\n closeDialog,\n pipelineRun,\n taskRuns,\n}: PipelineRunOutputDialogProps) => {\n const { t } = useTranslationRef(tektonTranslationRef);\n\n return (\n <Dialog\n data-testid=\"pipelinerun-output-dialog\"\n maxWidth=\"xl\"\n fullWidth\n open={open}\n onClose={closeDialog}\n PaperProps={{ sx: dialogPaperSx }}\n >\n <DialogTitle id=\"pipelinerun-output\" title={t('pipelineRunOutput.title')}>\n <Box sx={titleContainerSx}>\n <ResourceBadge\n color={tektonGroupColor}\n abbr=\"PLR\"\n name={pipelineRun?.metadata?.name ?? ''}\n />{' '}\n <IconButton\n aria-label=\"close\"\n sx={closeButtonSx}\n onClick={closeDialog}\n >\n <CloseIcon />\n </IconButton>\n </Box>\n </DialogTitle>\n <DialogContent sx={dialogContentSx}>\n <ErrorBoundary>\n <PipelineRunOutput pipelineRun={pipelineRun} taskRuns={taskRuns} />\n </ErrorBoundary>\n </DialogContent>\n </Dialog>\n );\n};\n\nexport default memo(PipelineRunOutputDialog);\n"],"names":["PipelineRunOutputDialog"],"mappings":";;;;;;;;;;;;;;;;AAsCA,MAAM,gBAAA,GAAmB;AAAA,EACvB,OAAA,EAAS,MAAA;AAAA,EACT,UAAA,EAAY,QAAA;AAAA,EACZ,GAAA,EAAK,CAAA;AAAA,EACL,KAAA,EAAO;AACT,CAAA;AAEA,MAAM,aAAA,GAAgC;AAAA,EACpC,QAAA,EAAU,UAAA;AAAA,EACV,KAAA,EAAO,CAAC,KAAA,KAAiB,KAAA,CAAM,QAAQ,CAAC,CAAA;AAAA,EACxC,GAAA,EAAK,CAAC,KAAA,KAAiB,KAAA,CAAM,QAAQ,CAAC,CAAA;AAAA,EACtC,OAAO,CAAC,KAAA,KAAiB,KAAA,CAAM,OAAA,CAAQ,KAAK,GAAG;AACjD,CAAA;AAEA,MAAM,aAAA,GAAgC;AAAA,EACpC,OAAA,EAAS,MAAA;AAAA,EACT,aAAA,EAAe,QAAA;AAAA,EACf,MAAA,EAAQ,MAAA;AAAA,EACR,SAAA,EAAW;AACb,CAAA;AAEA,MAAM,eAAA,GAAkC;AAAA,EACtC,OAAA,EAAS,MAAA;AAAA,EACT,aAAA,EAAe,QAAA;AAAA,EACf,IAAA,EAAM,CAAA;AAAA,EACN,SAAA,EAAW,CAAA;AAAA,EACX,QAAA,EAAU;AACZ,CAAA;AAQA,MAAMA,4BAA0B,CAAC;AAAA,EAC/B,IAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA;AACF,CAAA,KAAoC;AAClC,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,oBAAoB,CAAA;AAEpD,EAAA,uBACE,IAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,aAAA,EAAY,2BAAA;AAAA,MACZ,QAAA,EAAS,IAAA;AAAA,MACT,SAAA,EAAS,IAAA;AAAA,MACT,IAAA;AAAA,MACA,OAAA,EAAS,WAAA;AAAA,MACT,UAAA,EAAY,EAAE,EAAA,EAAI,aAAA,EAAc;AAAA,MAEhC,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,WAAA,EAAA,EAAY,EAAA,EAAG,oBAAA,EAAqB,KAAA,EAAO,CAAA,CAAE,yBAAyB,CAAA,EACrE,QAAA,kBAAA,IAAA,CAAC,GAAA,EAAA,EAAI,EAAA,EAAI,gBAAA,EACP,QAAA,EAAA;AAAA,0BAAA,GAAA;AAAA,YAAC,aAAA;AAAA,YAAA;AAAA,cACC,KAAA,EAAO,gBAAA;AAAA,cACP,IAAA,EAAK,KAAA;AAAA,cACL,IAAA,EAAM,WAAA,EAAa,QAAA,EAAU,IAAA,IAAQ;AAAA;AAAA,WACvC;AAAA,UAAG,GAAA;AAAA,0BACH,GAAA;AAAA,YAAC,UAAA;AAAA,YAAA;AAAA,cACC,YAAA,EAAW,OAAA;AAAA,cACX,EAAA,EAAI,aAAA;AAAA,cACJ,OAAA,EAAS,WAAA;AAAA,cAET,8BAAC,SAAA,EAAA,EAAU;AAAA;AAAA;AACb,SAAA,EACF,CAAA,EACF,CAAA;AAAA,wBACA,GAAA,CAAC,aAAA,EAAA,EAAc,EAAA,EAAI,eAAA,EACjB,QAAA,kBAAA,GAAA,CAAC,aAAA,EAAA,EACC,QAAA,kBAAA,GAAA,CAAC,iBAAA,EAAA,EAAkB,WAAA,EAA0B,QAAA,EAAoB,CAAA,EACnE,CAAA,EACF;AAAA;AAAA;AAAA,GACF;AAEJ,CAAA;AAEA,8BAAe,KAAKA,yBAAuB,CAAA;;;;"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
2
2
|
import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
|
|
3
3
|
import { Table, Thead, Tr, Th, Tbody, Td } from '@patternfly/react-table';
|
|
4
|
-
import '../../translations
|
|
4
|
+
import '../../translations.esm.js';
|
|
5
5
|
import { tektonTranslationRef } from '../../translations/ref.esm.js';
|
|
6
6
|
|
|
7
7
|
const Output = ({ results }) => {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
|
|
3
3
|
import Typography from '@mui/material/Typography';
|
|
4
|
-
import '../../translations
|
|
4
|
+
import '../../translations.esm.js';
|
|
5
5
|
import { Output } from './Output.esm.js';
|
|
6
6
|
import { tektonTranslationRef } from '../../translations/ref.esm.js';
|
|
7
7
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
|
|
3
|
-
import '../../translations
|
|
3
|
+
import '../../translations.esm.js';
|
|
4
4
|
import Typography from '@mui/material/Typography';
|
|
5
5
|
import { PipelineRunParams } from './PipelineRunParams.esm.js';
|
|
6
6
|
import { PipelineRunResults } from './PipelineRunResults.esm.js';
|
package/dist/components/PipelineRunParamsAndResults/PipelineRunParamsAndResultsDialog.esm.js
CHANGED
|
@@ -9,14 +9,15 @@ import CloseIcon from '@mui/icons-material/Close';
|
|
|
9
9
|
import { tektonGroupColor } from '../../types/types.esm.js';
|
|
10
10
|
import ResourceBadge from '../PipelineRunList/ResourceBadge.esm.js';
|
|
11
11
|
import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
|
|
12
|
-
import '../../translations
|
|
12
|
+
import '../../translations.esm.js';
|
|
13
13
|
import { PipelineRunParamsAndResults } from './PipelineRunParamsAndResults.esm.js';
|
|
14
14
|
import { tektonTranslationRef } from '../../translations/ref.esm.js';
|
|
15
15
|
|
|
16
16
|
const titleContainerSx = {
|
|
17
17
|
display: "flex",
|
|
18
18
|
alignItems: "center",
|
|
19
|
-
gap: 1
|
|
19
|
+
gap: 1,
|
|
20
|
+
color: "text.primary"
|
|
20
21
|
};
|
|
21
22
|
const closeButtonSx = {
|
|
22
23
|
position: "absolute",
|