ReviewOS

also looking at this

craft-native/craft

fix(ci): gate release publishing on SBOM scan

#314
Merged glennmichael123 wants to merge codex/release-sbom-prerequisite into main
5 files +44 -9
scripts/scan-sbom.test.tsmodified+10-1
Changes to scripts/scan-sbom.test.ts
@@ -2,7 +2,7 @@ import { afterEach, expect, test } from 'bun:test'
22import { chmodSync, existsSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from 'node:fs'
33import { tmpdir } from 'node:os'
44import { join } from 'node:path'
5import { scanSbom, summarizeVulnerabilities } from './scan-sbom'
5import { enforceScanPolicy, scanSbom, summarizeVulnerabilities } from './scan-sbom'
66
77const roots: string[] = []
88afterEach(() => { for (const root of roots.splice(0)) rmSync(root, { recursive: true, force: true }) })
@@ -18,6 +18,15 @@ test('counts all supported severities without mistaking absent results for zero'
1818 expect(() => summarizeVulnerabilities(invalid)).toThrow()
1919})
2020
21test('High findings block release scans and Critical findings block every scan', () => {
22 const high = summarizeVulnerabilities(report([match('High')])).counts
23 expect(() => enforceScanPolicy(high, false)).not.toThrow()
24 expect(() => enforceScanPolicy(high, true)).toThrow('High vulnerabilities block this release')
25 const critical = summarizeVulnerabilities(report([match('Critical')])).counts
26 expect(() => enforceScanPolicy(critical, false)).toThrow('Critical vulnerabilities')
27 expect(() => enforceScanPolicy(critical, true)).toThrow('Critical vulnerabilities')
28})
29
2130function fixture(source: string) {
2231 const root = mkdtempSync(join(tmpdir(), 'craft-grype-test-'))
2332 roots.push(root)