diff --git a/src/lib/components/Image.svelte b/src/lib/components/Image.svelte deleted file mode 100644 index 6f215b49..00000000 --- a/src/lib/components/Image.svelte +++ /dev/null @@ -1,93 +0,0 @@ - - -{#if $data.image} - {@const image = $data.image} -
- Vulnerabilities - - {#if !image.hasSBOM && image.vulnerabilitySummary !== null} - - Data was discovered, but the SBOM was not rendered. - Refer to the Nais documentation for - further assistance. - - {:else if image.vulnerabilitySummary === null} - - No data found. - How to fix - - {:else if image.hasSBOM && image.vulnerabilitySummary && hasFindings} - - {:else if image.hasSBOM} - - No vulnerabilities found. Good work! - - {/if} - - View vulnerability report -
-{/if} - - diff --git a/src/lib/components/VulnerabilitySummary.svelte b/src/lib/components/TeamVulnerabilitySummary.svelte similarity index 100% rename from src/lib/components/VulnerabilitySummary.svelte rename to src/lib/components/TeamVulnerabilitySummary.svelte diff --git a/src/lib/components/Vulnerability.svelte b/src/lib/components/Vulnerability.svelte index 9fdf4733..e6f36e28 100644 --- a/src/lib/components/Vulnerability.svelte +++ b/src/lib/components/Vulnerability.svelte @@ -18,7 +18,7 @@ {:else if count === PendingValue} {:else if count > 0} - + {:else} {/if} diff --git a/src/lib/components/VulnerabilityBadges.svelte b/src/lib/components/VulnerabilityBadges.svelte index ebd0fb5b..9bbec87e 100644 --- a/src/lib/components/VulnerabilityBadges.svelte +++ b/src/lib/components/VulnerabilityBadges.svelte @@ -26,48 +26,52 @@ const categories = ['critical', 'high', 'medium', 'low', 'unassigned'] as const; -
+
+
+ {#if summary !== PendingValue} + {#each categories as category (category)} + + {summary[category]} + +
{category}
+ {/each} + {:else} + + {/if} +
+ {#if summary !== PendingValue} - {#each categories as category (category)} - - {summary[category]} - -
{category}
- {/each} - {:else} - - {/if} -
-{#if summary !== PendingValue} -
-
+ {#if summary['riskScore']} -
Risk score:
-
- 100 ? 'red' : 'green'}>{summary['riskScore']} -
- + Risk score: + {#if summary['coverage']} + {summary['riskScore']} + {:else if summary['riskScore'] > 100} + {summary['riskScore']} (above defined threshold of 100) + {:else} + {summary['riskScore']} + {/if} {/if} - +
+ {#if summary['coverage']} -
Coverage:
-
- {percentageFormatter(summary['coverage'] ? summary['coverage'] : 0, 0)} -
+ Coverage: + {percentageFormatter(summary['coverage'] ? summary['coverage'] : 0, 0)} {/if} -
-
-{/if} + + {/if} +
diff --git a/src/lib/components/WorkloadDeploy.svelte b/src/lib/components/WorkloadDeploy.svelte index 15d13abf..6b118605 100644 --- a/src/lib/components/WorkloadDeploy.svelte +++ b/src/lib/components/WorkloadDeploy.svelte @@ -1,9 +1,11 @@
@@ -69,6 +99,25 @@ No deployment metadata found for workload. {/if}
+
+ Image + {#if $data.image.name.startsWith('europe-north1-docker.pkg.dev')} + + {getImageDisplayName($data.image.name)}:{$data.image.tag} + + + {:else} + {$data.image.name}:{$data.image.tag} + {/if} + {#if relatedWorkloads.length > 0} + Other workloads using this image + {#each relatedWorkloads as workload (workload.id)} + + {/each} + {/if} +
diff --git a/src/lib/components/WorkloadsWithSBOM.svelte b/src/lib/components/WorkloadsWithVulnerabilities.svelte similarity index 100% rename from src/lib/components/WorkloadsWithSBOM.svelte rename to src/lib/components/WorkloadsWithVulnerabilities.svelte diff --git a/src/lib/components/errors/ErrorMessage.svelte b/src/lib/components/errors/ErrorMessage.svelte index 3e55a75c..2872323c 100644 --- a/src/lib/components/errors/ErrorMessage.svelte +++ b/src/lib/components/errors/ErrorMessage.svelte @@ -2,9 +2,9 @@ export const supportedErrorTypes = [ 'WorkloadStatusInvalidNaisYaml', 'WorkloadStatusSynchronizationFailing', - 'WorkloadStatusDeprecatedRegistry', 'WorkloadStatusNoRunningInstances', 'WorkloadStatusFailedRun', + 'WorkloadStatusDeprecatedRegistry', 'WorkloadStatusVulnerable' ] as const; @@ -52,8 +52,10 @@ } | { __typename: 'WorkloadStatusVulnerable'; - riskScore: number; - critical: number; + summary: { + riskScore: number; + critical: number; + }; } )) | { __typename: "non-exhaustive; don't match this" }; @@ -172,13 +174,13 @@ {:else if error.__typename === 'WorkloadStatusVulnerable'} - {#if error.riskScore > 100} + {#if error.summary.riskScore > 100} Risk Score: - {error.riskScore} (Exceeds threshold of 100)
+ {error.summary.riskScore} (Exceeds threshold of 100)
{/if} - {#if error.critical > 0} + {#if error.summary.critical > 0} Critical Vulnerabilities: - {error.critical} + {error.summary.critical} {/if}
diff --git a/src/lib/components/errors/RiskScore.stories.svelte b/src/lib/components/errors/RiskScore.stories.svelte index fe22e2bf..84221118 100644 --- a/src/lib/components/errors/RiskScore.stories.svelte +++ b/src/lib/components/errors/RiskScore.stories.svelte @@ -15,8 +15,10 @@ error={{ __typename: 'WorkloadStatusVulnerable', level: 'WARNING', - riskScore: 276, - critical: 0 + summary: { + riskScore: 276, + critical: 0 + } }} teamSlug="team-service-management" workloadName="ip-lookup-preprod" @@ -31,8 +33,10 @@ error={{ __typename: 'WorkloadStatusVulnerable', level: 'WARNING', - riskScore: 70, - critical: 7 + summary: { + riskScore: 70, + critical: 7 + } }} teamSlug="team-service-management" workloadName="ip-lookup-preprod" @@ -47,8 +51,10 @@ error={{ __typename: 'WorkloadStatusVulnerable', level: 'WARNING', - riskScore: 276, - critical: 1 + summary: { + riskScore: 276, + critical: 1 + } }} teamSlug="team-service-management" workloadName="ip-lookup-preprod" diff --git a/src/lib/components/image/ImageVulnerabilities.svelte b/src/lib/components/image/ImageVulnerabilities.svelte index c8c8f208..7d1a1d92 100644 --- a/src/lib/components/image/ImageVulnerabilities.svelte +++ b/src/lib/components/image/ImageVulnerabilities.svelte @@ -3,7 +3,17 @@ import Pagination from '$lib/Pagination.svelte'; import { changeParams } from '$lib/utils/searchparams'; import { severityToColor } from '$lib/utils/vulnerabilities'; - import { Button, Heading, Table, Tbody, Td, Th, Thead, Tr } from '@nais/ds-svelte-community'; + import { + Button, + Heading, + Loader, + Table, + Tbody, + Td, + Th, + Thead, + Tr + } from '@nais/ds-svelte-community'; import { CheckmarkIcon } from '@nais/ds-svelte-community/icons'; import { untrack } from 'svelte'; import type { ImageVulnerabilitiesVariables } from './$houdini'; @@ -147,32 +157,32 @@ }; -Vulnerabilities - - - - - - - - - - - - {#if $vulnerabilities.data} +Vulnerabilities +{#if $vulnerabilities.data} +
IDPackageSeveritySuppressedState
+ + + + + + + + + + {@const vulnz = $vulnerabilities.data.team.environment.workload.image.vulnerabilities.nodes} {#each vulnz as v (v)} @@ -194,8 +204,11 @@ {/each} - {/if} - -
IDPackageSeveritySuppressedState
{v.package} {v.severity}{v.severity} @@ -222,9 +235,14 @@ No vulnerabilities
+ + +{:else} +
+ +
+{/if} + {#if image} import { fragment, graphql, type ImageWorkloadReferences } from '$houdini'; - import Time from '$lib/Time.svelte'; - - import { Heading, Table, Tbody, Td, Th, Thead, Tr } from '@nais/ds-svelte-community'; import WorkloadLink from '../WorkloadLink.svelte'; interface Props { @@ -30,12 +27,6 @@ } } name - deployments(first: 1) { - nodes { - triggerUrl - createdAt - } - } } } } @@ -45,48 +36,6 @@ ); -
- Workloads using image - - - - - - - - - - {#each $workloadRefs.workloadReferences.nodes as node (node.workload.id)} - {@const { workload } = node} - {@const deployInfo = - workload.deployments.nodes.length > 0 ? workload.deployments.nodes[0] : null} - - - - - - {:else} - - - - {/each} - -
WorkloadDeploy refAge
- - - {#if deployInfo?.triggerUrl} - Run - {/if} - {#if deployInfo?.createdAt} -
No workloads found using this image in Dependency-Track
-
- - +{#each $workloadRefs.workloadReferences.nodes as node (node.workload.id)} + +{/each} diff --git a/src/lib/components/image/TrailFinding.svelte b/src/lib/components/image/TrailFinding.svelte index 7e18dd04..ef1c26c9 100644 --- a/src/lib/components/image/TrailFinding.svelte +++ b/src/lib/components/image/TrailFinding.svelte @@ -111,51 +111,6 @@