Adds conditional license summary

This commit is contained in:
David Losert
2023-02-28 11:08:39 +00:00
committed by GitHub
parent 6e66d136ec
commit b089c5b002
2 changed files with 94 additions and 44 deletions
+73
View File
@@ -212,3 +212,76 @@ test('addChangeVulnerabilitiesToSummary() - does not print severity statment if
const text = core.summary.stringify()
expect(text).not.toContain('Only included vulnerabilities')
})
test('addLicensesToSummary() - does not include entire section if no license issues found', () => {
summary.addLicensesToSummary(emptyInvalidLicenseChanges, defaultConfig)
const text = core.summary.stringify()
expect(text).toEqual('')
})
test('addLicensesToSummary() - includes all license issues', () => {
const licenseIssues = {
forbidden: [createTestChange()],
unresolved: [createTestChange(), createTestChange()],
unlicensed: [createTestChange(), createTestChange(), createTestChange()]
}
summary.addLicensesToSummary(licenseIssues, defaultConfig)
const text = core.summary.stringify()
expect(text).toContain('<h3>License Issues</h3>')
expect(text).toContain('<h4>Incompatible Licenses</h4>')
expect(text).toContain('<h4>Unknown Licenses</h4>')
expect(text).toContain('<h4>Invalid SPDX License Definitions</h4>')
})
test('addLicensesToSummary() - does not include specific license type sub-section if nothing is found', () => {
const licenseIssues = {
forbidden: [],
unlicensed: [],
unresolved: [createTestChange()]
}
summary.addLicensesToSummary(licenseIssues, defaultConfig)
const text = core.summary.stringify()
expect(text).not.toContain('<h4>Incompatible Licenses</h4>')
expect(text).not.toContain('<h4>Unknown Licenses</h4>')
expect(text).toContain('<h4>Invalid SPDX License Definitions</h4>')
})
test('addLicensesToSummary() - includes list of configured allowed licenses', () => {
const licenseIssues = {
forbidden: [createTestChange()],
unresolved: [],
unlicensed: []
}
const config: ConfigurationOptions = {
...defaultConfig,
allow_licenses: ['MIT', 'Apache-2.0']
}
summary.addLicensesToSummary(licenseIssues, config)
const text = core.summary.stringify()
expect(text).toContain('<strong>Allowed Licenses</strong>: MIT, Apache-2.0')
})
test('addLicensesToSummary() - includes configured denied license', () => {
const licenseIssues = {
forbidden: [createTestChange()],
unresolved: [],
unlicensed: []
}
const config: ConfigurationOptions = {
...defaultConfig,
deny_licenses: ['MIT']
}
summary.addLicensesToSummary(licenseIssues, config)
const text = core.summary.stringify()
expect(text).toContain('<strong>Denied Licenses</strong>: MIT')
})
+21 -44
View File
@@ -10,28 +10,6 @@ const icons = {
warning: '⚠️'
}
export function createSummary(
addedChanges: Changes,
invalidLicenseChanges: InvalidLicenseChanges,
config: ConfigurationOptions
): void {
addSummaryToSummary(
config.vulnerability_check ? addedChanges : [],
config.license_check
? invalidLicenseChanges
: {unresolved: [], forbidden: [], unlicensed: []},
config
)
if (config.vulnerability_check && addedChanges.length > 0) {
addChangeVulnerabilitiesToSummary(addedChanges, config.fail_on_severity)
}
if (config.license_check && invalidLicenseChanges.unresolved.length > 0) {
addLicensesToSummary(invalidLicenseChanges, config)
}
}
export function addSummaryToSummary(
addedPackages: Changes,
invalidLicenseChanges: InvalidLicenseChanges,
@@ -144,9 +122,13 @@ export function addChangeVulnerabilitiesToSummary(
}
export function addLicensesToSummary(
invalidLicenseChanges: Record<string, Changes>,
invalidLicenseChanges: InvalidLicenseChanges,
config: ConfigurationOptions
): void {
if (countLicenseIssues(invalidLicenseChanges) === 0) {
return
}
core.summary.addHeading('License Issues', 3)
if (config.allow_licenses && config.allow_licenses.length > 0) {
@@ -160,11 +142,6 @@ export function addLicensesToSummary(
)
}
if (Object.values(invalidLicenseChanges).every(item => item.length === 0)) {
core.summary.addQuote('No license violations detected.')
return
}
core.debug(
`found ${invalidLicenseChanges.unlicensed.length} unknown licenses`
)
@@ -184,27 +161,27 @@ export function addLicensesToSummary(
)
}
function printLicenseViolation(heading: string, changes: Changes): void {
core.summary.addHeading(heading, 5).addSeparator()
if (changes.length === 0) {
return
}
if (changes.length > 0) {
const rows: SummaryTableRow[] = []
const manifests = getManifestsSet(changes)
core.summary.addHeading(heading, 4).addSeparator()
for (const manifest of manifests) {
core.summary.addHeading(`<em>${manifest}</em>`, 4)
const rows: SummaryTableRow[] = []
const manifests = getManifestsSet(changes)
for (const change of changes.filter(pkg => pkg.manifest === manifest)) {
rows.push([
renderUrl(change.source_repository_url, change.name),
change.version,
formatLicense(change.license)
])
}
for (const manifest of manifests) {
core.summary.addHeading(`<em>${manifest}</em>`, 4)
core.summary.addTable([['Package', 'Version', 'License'], ...rows])
for (const change of changes.filter(pkg => pkg.manifest === manifest)) {
rows.push([
renderUrl(change.source_repository_url, change.name),
change.version,
formatLicense(change.license)
])
}
} else {
core.summary.addQuote(`No ${heading.toLowerCase()} detected.`)
core.summary.addTable([['Package', 'Version', 'License'], ...rows])
}
}