This PR introduces comprehensive multi-architecture support, dynamic platform discovery, internalized version management, and adaptive reporting to cve-differential.
Added an optional architectures input in action.yaml:
Auto-Discovery (Default): When omitted or empty, inspects the OCI/Docker image index using docker buildx imagetools inspect --raw and automatically discovers all target platforms.
Explicit Selection: Allows callers to specify target platforms (e.g. amd64,arm64 or linux/amd64,linux/arm64).
Handles single-platform images seamlessly without requiring manifest lists.
For each architecture, extracts the platform-specific SPDX SBOM attestation directly from the registry without downloading image layers.
If attestation is missing for a platform, runs trivy image --platform <platform> --format spdx-json specifically for that architecture.
Exports all extracted head SBOMs to the workspace root for workflow artifact uploads.
3. Internalized Version Management
Trivy versioning is managed and locked internally in action.yaml against checksums.txt.
Removed trivy-version as an external input to prevent caller environment variable mismatches (e.g. TRIVY_VERSION) from crashing the lockfile verification.
Renovate regex is configured to continue detecting and updating TRIVY_VERSION and checksums.txt automatically.
4. Adaptive Multi-Arch Reporting (cve-diff.js)
cve-diff.js now generates both the Delta Report (output-delta) and the Full Vulnerability Summary (output-summary).
Conditional Arch Column:
When more than one architecture is scanned: An Arch column is included. Findings present across all scanned architectures are badged as `all`, while architecture-specific findings list only the affected architectures (e.g. `arm64`).
When only one architecture is scanned (or single-arch image): The Arch column is hidden to eliminate redundant data.
📊 Report Examples
Example 1: Multi-Architecture Delta Report (cve-delta.md)
Generated when 2 or more architectures are scanned (e.g. linux/amd64, linux/arm64):
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary of Changes
This PR introduces comprehensive multi-architecture support, dynamic platform discovery, internalized version management, and adaptive reporting to
cve-differential.1. Dynamic Architecture Discovery & Custom Selection
architecturesinput inaction.yaml:docker buildx imagetools inspect --rawand automatically discovers all target platforms.amd64,arm64orlinux/amd64,linux/arm64).2. Per-Architecture Attestation Extraction & Trivy Fallback
trivy image --platform <platform> --format spdx-jsonspecifically for that architecture.3. Internalized Version Management
action.yamlagainstchecksums.txt.trivy-versionas an external input to prevent caller environment variable mismatches (e.g.TRIVY_VERSION) from crashing the lockfile verification.TRIVY_VERSIONandchecksums.txtautomatically.4. Adaptive Multi-Arch Reporting (
cve-diff.js)cve-diff.jsnow generates both the Delta Report (output-delta) and the Full Vulnerability Summary (output-summary).ArchColumn:Archcolumn is included. Findings present across all scanned architectures are badged as`all`, while architecture-specific findings list only the affected architectures (e.g.`arm64`).Archcolumn is hidden to eliminate redundant data.📊 Report Examples
Example 1: Multi-Architecture Delta Report (
cve-delta.md)Generated when 2 or more architectures are scanned (e.g.
linux/amd64,linux/arm64):🔄 Vulnerability Delta (vs
main)🚨 New Vulnerabilities Introduced (2)
libssl3allglibcarm64✅ Resolved / Removed Vulnerabilities (1)
curlamd64Example 2: Multi-Architecture Full Summary Report (
cve-summary.md)Consolidated inventory covering all architectures:
ðŸ›¡ï¸ Security Scan Report
libssl3allglibcarm64zlib1gallExample 3: Single-Architecture Scan Report
Generated when a single architecture is scanned (e.g. single-platform image or
architectures: 'amd64'). Note theArchcolumn is automatically omitted:🔄 Vulnerability Delta (vs
main)🚨 New Vulnerabilities Introduced (1)
libssl3257e67ff81toe394966a96