From c53c87d63069e7c2bf9fb841bd407a0fb67b1c34 Mon Sep 17 00:00:00 2001
From: strtgbb <146047128+strtgbb@users.noreply.github.com>
Date: Thu, 19 Mar 2026 11:49:15 -0400
Subject: [PATCH 1/8] report: improve sorting of cves
---
.../create_workflow_report/ci_run_report.html.jinja | 2 ++
.../create_workflow_report/create_workflow_report.py | 12 ++++++++----
2 files changed, 10 insertions(+), 4 deletions(-)
diff --git a/.github/actions/create_workflow_report/ci_run_report.html.jinja b/.github/actions/create_workflow_report/ci_run_report.html.jinja
index a92c1aa34e3a..940f4ae2669c 100644
--- a/.github/actions/create_workflow_report/ci_run_report.html.jinja
+++ b/.github/actions/create_workflow_report/ci_run_report.html.jinja
@@ -223,6 +223,8 @@
element.className = element.className.replace(regex_dir, '') + dir
}
function getValue(element) {
+ var childWithSort = element.querySelector('[data-sort]')
+ if (childWithSort) return childWithSort.getAttribute('data-sort')
return (
(alt_sort && element.getAttribute('data-sort-alt')) ||
element.getAttribute('data-sort') || element.innerText
diff --git a/.github/actions/create_workflow_report/create_workflow_report.py b/.github/actions/create_workflow_report/create_workflow_report.py
index e3360e45ba22..ca9ec07dbc5e 100755
--- a/.github/actions/create_workflow_report/create_workflow_report.py
+++ b/.github/actions/create_workflow_report/create_workflow_report.py
@@ -55,6 +55,9 @@ def query_dataframe_with_retry(
time.sleep(wait)
+CVE_SEVERITY_ORDER = {"critical": 1, "high": 2, "medium": 3, "low": 4, "negligible": 5}
+
+
def get_commit_statuses(sha: str) -> pd.DataFrame:
"""
Fetch commit statuses for a given SHA and return as a pandas DataFrame.
@@ -461,11 +464,9 @@ def get_cves(pr_number, commit_sha):
return pd.DataFrame()
df = pd.DataFrame(rows).drop_duplicates()
- df = df.sort_values(
+ df = df.sort_values(by="docker_image").sort_values(
by="severity",
- key=lambda col: col.str.lower().map(
- {"critical": 1, "high": 2, "medium": 3, "low": 4, "negligible": 5}
- ),
+ key=lambda col: col.str.lower().map(CVE_SEVERITY_ORDER),
)
return df
@@ -510,6 +511,9 @@ def format_results_as_html_table(results) -> str:
"Identifier": lambda i: url_to_html_link(
"https://nvd.nist.gov/vuln/detail/" + i
),
+ "Severity": lambda s: (
+ f'{s}'
+ ),
},
escape=False,
border=0,
From 64ddbc8190b2a19a4bb263ce2120c22f60443162 Mon Sep 17 00:00:00 2001
From: strtgbb <146047128+strtgbb@users.noreply.github.com>
Date: Thu, 19 Mar 2026 12:11:28 -0400
Subject: [PATCH 2/8] ensure missing grype data does not crash report
---
.../create_workflow_report.py | 15 +++++++++++----
1 file changed, 11 insertions(+), 4 deletions(-)
diff --git a/.github/actions/create_workflow_report/create_workflow_report.py b/.github/actions/create_workflow_report/create_workflow_report.py
index ca9ec07dbc5e..29d4139b5a1b 100755
--- a/.github/actions/create_workflow_report/create_workflow_report.py
+++ b/.github/actions/create_workflow_report/create_workflow_report.py
@@ -434,7 +434,9 @@ def get_cves(pr_number, commit_sha):
Bucket=S3_BUCKET, Prefix=s3_prefix, Delimiter="/"
)
grype_result_dirs = [
- content["Prefix"] for content in response.get("CommonPrefixes", [])
+ content["Prefix"]
+ for content in response.get("CommonPrefixes", [])
+ if isinstance(content, dict) and content.get("Prefix")
]
if len(grype_result_dirs) == 0:
@@ -579,11 +581,16 @@ def main():
"pr_new_fails": [],
"checks_errors": get_checks_errors(db_client, args.commit_sha, branch_name),
"regression_fails": get_regression_fails(db_client, args.actions_run_url),
- "docker_images_cves": (
- [] if not args.cves else get_cves(args.pr_number, args.commit_sha)
- ),
+ "docker_images_cves": [],
}
+ try:
+ fail_results["docker_images_cves"] = (
+ [] if not args.cves else get_cves(args.pr_number, args.commit_sha)
+ )
+ except Exception as e:
+ print(f"Error in get_cves: {e}")
+
# get_cves returns ... in the case where no Grype result files were found.
# This might occur when run in preview mode.
cves_not_checked = not args.cves or fail_results["docker_images_cves"] is ...
From 2d34ea3a6dd2ec3897d319cf342cfedf73ffbe38 Mon Sep 17 00:00:00 2001
From: strtgbb <146047128+strtgbb@users.noreply.github.com>
Date: Thu, 19 Mar 2026 14:33:24 -0400
Subject: [PATCH 3/8] fix sort, pd.sort_values appears to not be stable
---
.../create_workflow_report/create_workflow_report.py | 11 +++++++----
1 file changed, 7 insertions(+), 4 deletions(-)
diff --git a/.github/actions/create_workflow_report/create_workflow_report.py b/.github/actions/create_workflow_report/create_workflow_report.py
index 29d4139b5a1b..b66171446355 100755
--- a/.github/actions/create_workflow_report/create_workflow_report.py
+++ b/.github/actions/create_workflow_report/create_workflow_report.py
@@ -466,10 +466,13 @@ def get_cves(pr_number, commit_sha):
return pd.DataFrame()
df = pd.DataFrame(rows).drop_duplicates()
- df = df.sort_values(by="docker_image").sort_values(
- by="severity",
- key=lambda col: col.str.lower().map(CVE_SEVERITY_ORDER),
- )
+
+ def _cve_sort_key(col):
+ if col.name == "severity":
+ return col.str.lower().map(CVE_SEVERITY_ORDER)
+ return col
+
+ df = df.sort_values(by=["severity", "docker_image"], key=_cve_sort_key)
return df
From 3a0ea669c412e13383ab973a0d1aecadee188eaf Mon Sep 17 00:00:00 2001
From: MyroTk
Date: Tue, 14 Apr 2026 14:58:20 -0400
Subject: [PATCH 4/8] fixes and backports
---
.../ci_run_report.html.jinja | 2 +-
.github/workflows/release_branches.yml | 12 +--
.github/workflows/reusable_sign.yml | 4 +-
tests/ci/build_download_helper.py | 34 +++++++-
tests/ci/ci.py | 4 +
tests/ci/sign_release.py | 85 +++++++++++++++----
6 files changed, 117 insertions(+), 24 deletions(-)
diff --git a/.github/actions/create_workflow_report/ci_run_report.html.jinja b/.github/actions/create_workflow_report/ci_run_report.html.jinja
index 940f4ae2669c..4b2317908a27 100644
--- a/.github/actions/create_workflow_report/ci_run_report.html.jinja
+++ b/.github/actions/create_workflow_report/ci_run_report.html.jinja
@@ -268,4 +268,4 @@
});