Files
dependency-review-action/src/deny.ts
T

52 lines
1.3 KiB
TypeScript
Raw Normal View History

2023-08-02 16:17:51 +02:00
import * as core from '@actions/core'
import {Change} from './schemas'
import {PackageURL, parsePURL} from './purl'
2023-08-02 16:17:51 +02:00
export async function getDeniedChanges(
changes: Change[],
deniedPackages: PackageURL[] = [],
deniedGroups: PackageURL[] = []
2023-08-02 16:17:51 +02:00
): Promise<Change[]> {
const changesDenied: Change[] = []
for (const change of changes) {
2025-01-27 15:54:27 -05:00
if (change.change_type === 'removed') {
continue
}
2024-04-04 15:04:45 -05:00
for (const denied of deniedPackages) {
if (
2024-04-26 22:13:45 +00:00
(!denied.version || change.version === denied.version) &&
change.name === denied.name
2024-04-04 15:04:45 -05:00
) {
changesDenied.push(change)
2023-08-07 14:04:41 +02:00
}
}
2024-04-04 15:04:45 -05:00
for (const denied of deniedGroups) {
2024-04-26 22:13:45 +00:00
const namespace = getNamespace(change)
if (!denied.namespace) {
core.error(
`Denied group represented by '${denied.original}' does not have a namespace. The format should be 'pkg:<type>/<namespace>/'.`
)
}
2024-04-26 22:13:45 +00:00
if (namespace && namespace === denied.namespace) {
2024-04-04 15:04:45 -05:00
changesDenied.push(change)
2023-08-02 16:17:51 +02:00
}
}
}
return changesDenied
}
2024-04-26 22:13:45 +00:00
export const getNamespace = (change: Change): string | null => {
2024-04-26 22:13:45 +00:00
if (change.package_url) {
return parsePURL(change.package_url).namespace
2024-04-26 22:13:45 +00:00
}
const matches = change.name.match(/([^:/]+)[:/]/)
if (matches && matches.length > 1) {
return matches[1]
2024-04-26 22:13:45 +00:00
}
return null
2024-04-26 22:13:45 +00:00
}