@@ -37,6 +37,7 @@ function addVulnTableToSummary(data: Report) {
37
37
] ) ;
38
38
}
39
39
40
+
40
41
function addVulnsByLayerTableToSummary ( data : Report ) {
41
42
if ( ! data . result . layers ) {
42
43
return
@@ -53,17 +54,31 @@ function addVulnsByLayerTableToSummary(data: Report) {
53
54
54
55
data . result . layers . forEach ( ( layer , index ) => {
55
56
core . summary . addCodeBlock ( `LAYER ${ index } - ${ layer . command . replace ( new RegExp ( '\$' , 'g' ) , "$" ) . replace ( new RegExp ( '\&' , 'g' ) , '&' ) } ` ) ;
56
-
57
57
if ( ! layer . digest ) {
58
58
return ;
59
59
}
60
+
60
61
let packagesWithVulns = ( packagesPerLayer [ layer . digest ] ?? [ ] )
61
62
. filter ( pkg => pkg . vulns ) ;
62
-
63
63
if ( packagesWithVulns . length == 0 ) {
64
64
return ;
65
65
}
66
66
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
+
67
82
core . summary . addTable ( [
68
83
[
69
84
{ data : 'Package' , header : true } ,
@@ -77,7 +92,7 @@ function addVulnsByLayerTableToSummary(data: Report) {
77
92
{ data : '⚪ Negligible' , header : true } ,
78
93
{ data : 'Exploit' , header : true } ,
79
94
] ,
80
- ...packagesWithVulns . map ( layerPackage => {
95
+ ...orderedPackagesBySeverity . map ( layerPackage => {
81
96
let criticalVulns = layerPackage . vulns ?. filter ( vuln => vuln . severity . value . toLowerCase ( ) == 'critical' ) . length ?? 0 ;
82
97
let highVulns = layerPackage . vulns ?. filter ( vuln => vuln . severity . value . toLowerCase ( ) == 'high' ) . length ?? 0 ;
83
98
let mediumVulns = layerPackage . vulns ?. filter ( vuln => vuln . severity . value . toLowerCase ( ) == 'medium' ) . length ?? 0 ;
0 commit comments