Skip to content

Commit 47e6cda

Browse files
committed
feat: order packages by vulnerability
1 parent 921d841 commit 47e6cda

File tree

1 file changed

+18
-3
lines changed

1 file changed

+18
-3
lines changed

src/summary.ts

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ function addVulnTableToSummary(data: Report) {
3737
]);
3838
}
3939

40+
4041
function addVulnsByLayerTableToSummary(data: Report) {
4142
if (!data.result.layers) {
4243
return
@@ -53,17 +54,31 @@ function addVulnsByLayerTableToSummary(data: Report) {
5354

5455
data.result.layers.forEach((layer, index) => {
5556
core.summary.addCodeBlock(`LAYER ${index} - ${layer.command.replace(new RegExp('\$', 'g'), "$").replace(new RegExp('\&', 'g'), '&')}`);
56-
5757
if (!layer.digest) {
5858
return;
5959
}
60+
6061
let packagesWithVulns = (packagesPerLayer[layer.digest] ?? [])
6162
.filter(pkg => pkg.vulns);
62-
6363
if (packagesWithVulns.length == 0) {
6464
return;
6565
}
6666

67+
let orderedPackagesBySeverity = packagesWithVulns.sort((a, b) => {
68+
const getSeverityCount = (pkg: Package, severity: string) =>
69+
pkg.vulns?.filter((vul: any) => vul.severity.value === severity).length || 0;
70+
71+
const severities = ['Critical', 'High', 'Medium', 'Low', 'Negligible'];
72+
for (const severity of severities) {
73+
const countA = getSeverityCount(a, severity);
74+
const countB = getSeverityCount(b, severity);
75+
if (countA !== countB) {
76+
return countB - countA;
77+
}
78+
}
79+
return 0;
80+
})
81+
6782
core.summary.addTable([
6883
[
6984
{ data: 'Package', header: true },
@@ -77,7 +92,7 @@ function addVulnsByLayerTableToSummary(data: Report) {
7792
{ data: '⚪ Negligible', header: true },
7893
{ data: 'Exploit', header: true },
7994
],
80-
...packagesWithVulns.map(layerPackage => {
95+
...orderedPackagesBySeverity.map(layerPackage => {
8196
let criticalVulns = layerPackage.vulns?.filter(vuln => vuln.severity.value.toLowerCase() == 'critical').length ?? 0;
8297
let highVulns = layerPackage.vulns?.filter(vuln => vuln.severity.value.toLowerCase() == 'high').length ?? 0;
8398
let mediumVulns = layerPackage.vulns?.filter(vuln => vuln.severity.value.toLowerCase() == 'medium').length ?? 0;

0 commit comments

Comments
 (0)