diff --git a/web/package.json b/web/package.json
index ee0e31102..85444706b 100644
--- a/web/package.json
+++ b/web/package.json
@@ -51,7 +51,7 @@
"@codemirror/view": "^6.9.6",
"@harnessio/design-system": "^2.1.1",
"@harnessio/icons": "^2.1.9",
- "@harnessio/react-har-service-client": "^0.12.0",
+ "@harnessio/react-har-service-client": "^0.13.0",
"@harnessio/react-ssca-manager-client": "^0.65.0",
"@harnessio/uicore": "^4.1.2",
"@tanstack/react-query": "4.20.4",
diff --git a/web/src/ar/components/TableCells/TableCells.module.scss b/web/src/ar/components/TableCells/TableCells.module.scss
index e8575b372..24baad28f 100644
--- a/web/src/ar/components/TableCells/TableCells.module.scss
+++ b/web/src/ar/components/TableCells/TableCells.module.scss
@@ -56,3 +56,8 @@
--intent-color: #07a0ab;
}
}
+
+.vulnerabilityCellItem {
+ padding: 0 var(--spacing-small) !important;
+ border-left: solid var(--spacing-1);
+}
diff --git a/web/src/ar/components/TableCells/TableCells.module.scss.d.ts b/web/src/ar/components/TableCells/TableCells.module.scss.d.ts
index 8870d6214..1c0451847 100644
--- a/web/src/ar/components/TableCells/TableCells.module.scss.d.ts
+++ b/web/src/ar/components/TableCells/TableCells.module.scss.d.ts
@@ -25,3 +25,4 @@ export declare const nameCellContainer: string
export declare const nonProd: string
export declare const prod: string
export declare const toggleAccordion: string
+export declare const vulnerabilityCellItem: string
diff --git a/web/src/ar/components/TableCells/TableCells.tsx b/web/src/ar/components/TableCells/TableCells.tsx
index 1da5300dd..208db32f7 100644
--- a/web/src/ar/components/TableCells/TableCells.tsx
+++ b/web/src/ar/components/TableCells/TableCells.tsx
@@ -259,6 +259,45 @@ export const PullCommandCell = ({ value }: CommonCellProps) => {
return
}
+interface VulnerabilityCellProps {
+ critical?: number
+ high?: number
+ medium?: number
+ low?: number
+}
+
+export const VulnerabilityCell = ({ critical, high, medium, low }: VulnerabilityCellProps) => {
+ const { getString } = useStrings()
+ return (
+
+
+ {getString('vulnerabilityStatus.critical', { count: critical })}
+
+
+ {getString('vulnerabilityStatus.high', { count: high })}
+
+
+ {getString('vulnerabilityStatus.medium', { count: medium })}
+
+
+ {getString('vulnerabilityStatus.low', { count: low })}
+
+
+ )
+}
+
export default {
UrlCell,
SizeCell,
@@ -271,5 +310,6 @@ export default {
PullCommandCell,
LastModifiedCell,
ToggleAccordionCell,
- RepositoryLocationBadgeCell
+ RepositoryLocationBadgeCell,
+ VulnerabilityCell
}
diff --git a/web/src/ar/pages/digest-list/components/DigestListTable/DigestListTable.module.scss b/web/src/ar/pages/digest-list/components/DigestListTable/DigestListTable.module.scss
index ec664d90f..e6d9ca499 100644
--- a/web/src/ar/pages/digest-list/components/DigestListTable/DigestListTable.module.scss
+++ b/web/src/ar/pages/digest-list/components/DigestListTable/DigestListTable.module.scss
@@ -34,7 +34,7 @@
div[class*='TableV2--cells'],
div[class*='TableV2--header'] {
display: grid !important;
- grid-template-columns: minmax(var(--har-table-name-column-min-width), 1fr) 1fr 1fr 1fr 1fr 1fr !important;
+ grid-template-columns: minmax(var(--har-table-name-column-min-width), 1fr) 1fr 1fr 1fr 1fr minmax(200px, 1fr) !important;
}
div[class*='TableV2--header'] {
diff --git a/web/src/ar/pages/digest-list/components/DigestListTable/DigestListTable.tsx b/web/src/ar/pages/digest-list/components/DigestListTable/DigestListTable.tsx
index a3f83c125..c5869ac15 100644
--- a/web/src/ar/pages/digest-list/components/DigestListTable/DigestListTable.tsx
+++ b/web/src/ar/pages/digest-list/components/DigestListTable/DigestListTable.tsx
@@ -24,9 +24,9 @@ import { useStrings } from '@ar/frameworks/strings/String'
import {
DigestActionsCell,
DigestNameCell,
+ DigestVulnerabilityCell,
DownloadsCell,
OsArchCell,
- ScanStatusCell,
SizeCell,
UploadedByCell
} from './DigestTableCells'
@@ -73,7 +73,7 @@ export default function DigestListTable(props: DigestListTableProps): JSX.Elemen
{
Header: getString('digestList.table.columns.scanStatus'),
accessor: 'scanStatus',
- Cell: ScanStatusCell,
+ Cell: DigestVulnerabilityCell,
version
},
{
diff --git a/web/src/ar/pages/digest-list/components/DigestListTable/DigestTableCells.tsx b/web/src/ar/pages/digest-list/components/DigestListTable/DigestTableCells.tsx
index d81cbda32..8b7a4fdfb 100644
--- a/web/src/ar/pages/digest-list/components/DigestListTable/DigestTableCells.tsx
+++ b/web/src/ar/pages/digest-list/components/DigestListTable/DigestTableCells.tsx
@@ -15,11 +15,8 @@
*/
import React from 'react'
-import { Link } from 'react-router-dom'
import type { Cell, CellValue, ColumnInstance, Renderer, Row, TableInstance } from 'react-table'
-import { Text } from '@harnessio/uicore'
-import { Color } from '@harnessio/design-system'
import type { DockerManifestDetails } from '@harnessio/react-har-service-client'
import { useStrings } from '@ar/frameworks/strings'
@@ -77,39 +74,20 @@ export const DownloadsCell: CellType = ({ value }) => {
return
}
-export const ScanStatusCell: Renderer<{
- row: Row
- column: ColumnInstance & DigestNameColumnProps
-}> = ({ row, column }) => {
+export const DigestVulnerabilityCell: CellType = ({ row }) => {
const { original } = row
- const { version } = column
- const router = useRoutes()
- const { stoExecutionId, stoPipelineId, digest } = original
- const pathParams = useDecodedParams()
+ const { stoDetails } = original
const { getString } = useStrings()
- if (!stoExecutionId || !stoPipelineId)
+ if (!stoDetails)
return
- const linkTo = router.toARVersionDetailsTab({
- repositoryIdentifier: pathParams.repositoryIdentifier,
- artifactIdentifier: pathParams.artifactIdentifier,
- versionIdentifier: version,
- versionTab: VersionDetailsTab.SECURITY_TESTS,
- pipelineIdentifier: stoPipelineId,
- executionIdentifier: stoExecutionId
- })
return (
-
-
- {getString('artifactList.table.actions.VulnerabilityStatus.scanned')}
-
-
+
)
}
diff --git a/web/src/ar/pages/version-details/DockerVersion/DockerVersionHeader.tsx b/web/src/ar/pages/version-details/DockerVersion/DockerVersionHeader.tsx
index e24dc6c25..5eb09c9f3 100644
--- a/web/src/ar/pages/version-details/DockerVersion/DockerVersionHeader.tsx
+++ b/web/src/ar/pages/version-details/DockerVersion/DockerVersionHeader.tsx
@@ -36,7 +36,7 @@ interface DockerVersionHeaderProps {
export default function DockerVersionHeader(props: DockerVersionHeaderProps): JSX.Element {
const { iconSize = 40, data } = props
- const { imageName: name, version, isLatestVersion = false, packageType } = data
+ const { imageName: name, version, packageType } = data
const pathParams = useDecodedParams()
const { useUpdateQueryParams, useQueryParams } = useParentHooks()
const { updateQueryParams } = useUpdateQueryParams()
@@ -69,7 +69,7 @@ export default function DockerVersionHeader(props: DockerVersionHeaderProps): JS
digest={digest}
onChangeVersion={handleChangeVersion}
onChangeDigest={handleChangeDigest}
- isLatestVersion={isLatestVersion}
+ isLatestVersion={false}
/>
{
+ const handleCloseDetailsModal = () => {
+ hideModal()
+ handleCloseModal()
+ }
return (
{
- hideModal()
- handleCloseModal()
- }}>
+ onClose={handleCloseDetailsModal}>
-
+
diff --git a/web/src/ar/pages/version-details/components/VersionDetailsHeaderContent/VersionDetailsHeaderContent.tsx b/web/src/ar/pages/version-details/components/VersionDetailsHeaderContent/VersionDetailsHeaderContent.tsx
index c3b9d7c03..686922c91 100644
--- a/web/src/ar/pages/version-details/components/VersionDetailsHeaderContent/VersionDetailsHeaderContent.tsx
+++ b/web/src/ar/pages/version-details/components/VersionDetailsHeaderContent/VersionDetailsHeaderContent.tsx
@@ -35,7 +35,7 @@ interface VersionDetailsHeaderContentProps {
export default function VersionDetailsHeaderContent(props: VersionDetailsHeaderContentProps): JSX.Element {
const { iconSize = 40, data } = props
- const { imageName, version, isLatestVersion = false, packageType } = data
+ const { imageName, version, packageType } = data
const pathParams = useDecodedParams()
const history = useHistory()
const routes = useRoutes()
@@ -57,7 +57,7 @@ export default function VersionDetailsHeaderContent(props: VersionDetailsHeaderC
name={imageName}
version={version}
onChangeVersion={handleChangeVersion}
- isLatestVersion={isLatestVersion}
+ isLatestVersion={false}
/>
, V = any> = TableInstance
type CellType = Renderer>
-export const DockerVersionNameCell: CellType = ({ value, row }) => {
- const { original } = row
- const { getString } = useStrings()
+export const DockerVersionNameCell: CellType = ({ value }) => {
return (
- {original.islatestVersion && {getString('tags.latest')}}
)
}
diff --git a/web/src/ar/pages/version-list/__tests__/__mockData__.ts b/web/src/ar/pages/version-list/__tests__/__mockData__.ts
index 7c5722981..28ff7edc1 100644
--- a/web/src/ar/pages/version-list/__tests__/__mockData__.ts
+++ b/web/src/ar/pages/version-list/__tests__/__mockData__.ts
@@ -24,7 +24,6 @@ export const mockHelmLatestVersionListTableData: ListArtifactVersion = {
prodEnvCount: 0
},
digestCount: 1,
- islatestVersion: true,
lastModified: '1729861854693',
name: '1.0.15',
packageType: 'HELM',
@@ -49,7 +48,6 @@ export const mockHelmNoPullCmdVersionListTableData: ListArtifactVersion = {
prodEnvCount: 0
},
digestCount: 1,
- islatestVersion: true,
lastModified: '1729861854693',
name: '1.0.15',
packageType: 'HELM',
@@ -74,7 +72,6 @@ export const mockHelmOldVersionListTableData: ListArtifactVersion = {
prodEnvCount: 0
},
digestCount: 1,
- islatestVersion: false,
lastModified: '1729861854693',
name: '1.0.15',
packageType: 'HELM',
@@ -99,7 +96,6 @@ export const mockDockerNoPullCmdVersionListTableData: ListArtifactVersion = {
prodEnvCount: 0
},
digestCount: 1,
- islatestVersion: true,
lastModified: '1730978736333',
name: '1.0.0',
packageType: 'DOCKER',
@@ -123,7 +119,6 @@ export const mockDockerLatestVersionListTableData: ListArtifactVersion = {
prodEnvCount: 0
},
digestCount: 1,
- islatestVersion: true,
lastModified: '1730978736333',
name: '1.0.0',
packageType: 'DOCKER',
@@ -147,7 +142,6 @@ export const mockDockerOldVersionListTableData: ListArtifactVersion = {
prodEnvCount: 0
},
digestCount: 1,
- islatestVersion: false,
lastModified: '1730978736333',
name: '1.0.0',
packageType: 'DOCKER',
diff --git a/web/src/ar/pages/version-list/components/VersionListTable/VersionListCell.tsx b/web/src/ar/pages/version-list/components/VersionListTable/VersionListCell.tsx
index c84cf35dd..575035449 100644
--- a/web/src/ar/pages/version-list/components/VersionListTable/VersionListCell.tsx
+++ b/web/src/ar/pages/version-list/components/VersionListTable/VersionListCell.tsx
@@ -23,7 +23,6 @@ import { Icon } from '@harnessio/icons'
import { Layout, Text } from '@harnessio/uicore'
import type { ArtifactVersionMetadata } from '@harnessio/react-har-service-client'
-import Tag from '@ar/components/Tag/Tag'
import { useStrings } from '@ar/frameworks/strings'
import { useDecodedParams, useRoutes } from '@ar/hooks'
import TableCells from '@ar/components/TableCells/TableCells'
@@ -60,9 +59,7 @@ export const ToggleAccordionCell: Renderer<{
)
}
-export const VersionNameCell: CellType = ({ value, row }) => {
- const { original } = row
- const { getString } = useStrings()
+export const VersionNameCell: CellType = ({ value }) => {
const routes = useRoutes()
const pathParams = useDecodedParams()
return (
@@ -79,7 +76,6 @@ export const VersionNameCell: CellType = ({ value, row }) => {
{value}
- {original.islatestVersion && {getString('tags.latest')}}
)
}
diff --git a/web/src/ar/pages/version-list/components/VersionListTable/__tests__/VersionListTable.test.tsx b/web/src/ar/pages/version-list/components/VersionListTable/__tests__/VersionListTable.test.tsx
index 3f458fb30..201101a7c 100644
--- a/web/src/ar/pages/version-list/components/VersionListTable/__tests__/VersionListTable.test.tsx
+++ b/web/src/ar/pages/version-list/components/VersionListTable/__tests__/VersionListTable.test.tsx
@@ -15,7 +15,7 @@
*/
import React from 'react'
-import { getByText, queryByText, render } from '@testing-library/react'
+import { getByText, render } from '@testing-library/react'
import userEvent from '@testing-library/user-event'
import copy from 'clipboard-copy'
import repositoryFactory from '@ar/frameworks/RepositoryStep/RepositoryFactory'
@@ -67,8 +67,6 @@ describe('Verify Version List Table', () => {
expect(rows).toHaveLength(1)
const getFirstRowColumn = (col: number) => getTableColumn(1, col) as HTMLElement
- const latestTag = getByText(getFirstRowColumn(1), 'tags.latest')
- expect(latestTag).toBeInTheDocument()
const sizeValue = getByText(
getFirstRowColumn(2),
mockHelmLatestVersionListTableData.artifactVersions?.[0].size as string
@@ -108,23 +106,6 @@ describe('Verify Version List Table', () => {
expect(copyCurlBtn).not.toBeInTheDocument()
})
- test('Should not show latest tag if item version is not latest', () => {
- render(
-
-
-
- )
- const getFirstTableColumn = (col: number) => getTableColumn(col, 1) as HTMLElement
- const latestTag = queryByText(getFirstTableColumn(1), 'tags.latest')
- expect(latestTag).not.toBeInTheDocument()
- })
-
test('Should show no rows if no data is provided', () => {
const { container } = render(
diff --git a/web/src/ar/strings/strings.en.yaml b/web/src/ar/strings/strings.en.yaml
index 4fde05243..99aa8e39d 100644
--- a/web/src/ar/strings/strings.en.yaml
+++ b/web/src/ar/strings/strings.en.yaml
@@ -109,3 +109,8 @@ validationMessages:
passwordRequired: Password is required
accessKeyRequired: Access key is required
secretKeyRequired: Secret key is required
+vulnerabilityStatus:
+ critical: 'C {{count}}'
+ high: 'H {{count}}'
+ medium: 'M {{count}}'
+ low: 'L {{count}}'
diff --git a/web/src/ar/strings/types.ts b/web/src/ar/strings/types.ts
index d7ea88906..f2992e6c8 100644
--- a/web/src/ar/strings/types.ts
+++ b/web/src/ar/strings/types.ts
@@ -392,4 +392,8 @@ export interface StringsMap {
'validationMessages.urlRequired': string
'validationMessages.userNameRequired': string
view: string
+ 'vulnerabilityStatus.critical': string
+ 'vulnerabilityStatus.high': string
+ 'vulnerabilityStatus.low': string
+ 'vulnerabilityStatus.medium': string
}
diff --git a/web/yarn.lock b/web/yarn.lock
index 7c8db8f00..1b6a697af 100644
--- a/web/yarn.lock
+++ b/web/yarn.lock
@@ -1945,10 +1945,10 @@
yargs "^17.6.2"
zod "^3.19.1"
-"@harnessio/react-har-service-client@^0.12.0":
- version "0.12.0"
- resolved "https://registry.yarnpkg.com/@harnessio/react-har-service-client/-/react-har-service-client-0.12.0.tgz#9ad2dec1a4ba2d4150e9c4dea67e2f867d9141ed"
- integrity sha512-bBDrVL/OkX14SdG3XS5/h7W5pQ0BH6tXhK1w2F9eWf5qupyZe2lwaDpVRzxi2fkzr0wojf2wd/e3p3IiB47X0g==
+"@harnessio/react-har-service-client@^0.13.0":
+ version "0.13.0"
+ resolved "https://registry.yarnpkg.com/@harnessio/react-har-service-client/-/react-har-service-client-0.13.0.tgz#c71ff5f4684b6bc5aaaa8e3b28b379fc50a9a71f"
+ integrity sha512-b0gehNm752mE4FqbdYUJlv+tceqetsw4I4P2qMW9vjA1NLIz0Bwo1qpF1CDh8iJmbAwdkYjaiVftuefzVNQh4w==
dependencies:
"@harnessio/oats-cli" "^3.0.0"