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() const text = core.summary.stringify()
expect(text).not.toContain('Only included vulnerabilities') 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: '⚠️' 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( export function addSummaryToSummary(
addedPackages: Changes, addedPackages: Changes,
invalidLicenseChanges: InvalidLicenseChanges, invalidLicenseChanges: InvalidLicenseChanges,
@@ -144,9 +122,13 @@ export function addChangeVulnerabilitiesToSummary(
} }
export function addLicensesToSummary( export function addLicensesToSummary(
invalidLicenseChanges: Record<string, Changes>, invalidLicenseChanges: InvalidLicenseChanges,
config: ConfigurationOptions config: ConfigurationOptions
): void { ): void {
if (countLicenseIssues(invalidLicenseChanges) === 0) {
return
}
core.summary.addHeading('License Issues', 3) core.summary.addHeading('License Issues', 3)
if (config.allow_licenses && config.allow_licenses.length > 0) { 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( core.debug(
`found ${invalidLicenseChanges.unlicensed.length} unknown licenses` `found ${invalidLicenseChanges.unlicensed.length} unknown licenses`
) )
@@ -184,27 +161,27 @@ export function addLicensesToSummary(
) )
} }
function printLicenseViolation(heading: string, changes: Changes): void { function printLicenseViolation(heading: string, changes: Changes): void {
core.summary.addHeading(heading, 5).addSeparator() if (changes.length === 0) {
return
}
if (changes.length > 0) { core.summary.addHeading(heading, 4).addSeparator()
const rows: SummaryTableRow[] = []
const manifests = getManifestsSet(changes)
for (const manifest of manifests) { const rows: SummaryTableRow[] = []
core.summary.addHeading(`<em>${manifest}</em>`, 4) const manifests = getManifestsSet(changes)
for (const change of changes.filter(pkg => pkg.manifest === manifest)) { for (const manifest of manifests) {
rows.push([ core.summary.addHeading(`<em>${manifest}</em>`, 4)
renderUrl(change.source_repository_url, change.name),
change.version,
formatLicense(change.license)
])
}
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])
} }
} }