Compare commits
114
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b39e17ba5e | ||
|
|
b8a398b675 | ||
|
|
1612de9646 | ||
|
|
53de591348 | ||
|
|
288d543806 | ||
|
|
359e1ffa80 | ||
|
|
63e1558807 | ||
|
|
069cbabe02 | ||
|
|
2e3c709016 | ||
|
|
01bc87099b | ||
|
|
4b4f0de8e1 | ||
|
|
a93fa86c77 | ||
|
|
550520e2c5 | ||
|
|
2d0fb60634 | ||
|
|
c07c2375ed | ||
|
|
4d842d754e | ||
|
|
a6d4686316 | ||
|
|
4366dbae42 | ||
|
|
50dafeb5e4 | ||
|
|
1cbb048907 | ||
|
|
ee69e92054 | ||
|
|
5991d7a97d | ||
|
|
c409735e58 | ||
|
|
7bbfa034e7 | ||
|
|
26f1ad9120 | ||
|
|
152d8e2def | ||
|
|
b99756ecd3 | ||
|
|
fde92acd08 | ||
|
|
a89dd96450 | ||
|
|
76891836b1 | ||
|
|
fc5e2db757 | ||
|
|
ded987cb3b | ||
|
|
9f45b2463b | ||
|
|
559513a56c | ||
|
|
8edc431d7d | ||
|
|
3e8322e4bb | ||
|
|
5a55885447 | ||
|
|
f952b5a2c5 | ||
|
|
8678cfac42 | ||
|
|
aa8e70d588 | ||
|
|
3331d25f9d | ||
|
|
2af83f55fa | ||
|
|
0d3cf5ba9e | ||
|
|
b2a5ead1f7 | ||
|
|
79f0a0b62b | ||
|
|
fc44602899 | ||
|
|
7177991451 | ||
|
|
90fe789d91 | ||
|
|
5cbf74f675 | ||
|
|
11e0dead9a | ||
|
|
3c1cb72dcd | ||
|
|
570a2b5dcd | ||
|
|
a7e01b8d9c | ||
|
|
168567cd17 | ||
|
|
1d86ff759b | ||
|
|
0631089c32 | ||
|
|
0b8ffde994 | ||
|
|
68d57cd360 | ||
|
|
7314a0c1f5 | ||
|
|
cfeea91bf4 | ||
|
|
c8515ab391 | ||
|
|
cff52fd316 | ||
|
|
e65eb02ccf | ||
|
|
88953c2b16 | ||
|
|
d97416955e | ||
|
|
523c9a28aa | ||
|
|
f85d4d5bc2 | ||
|
|
89ff65dbf7 | ||
|
|
c3c32181a9 | ||
|
|
ead6e4616f | ||
|
|
a265e18106 | ||
|
|
a8759965d7 | ||
|
|
954314c2b1 | ||
|
|
5b62f3bc06 | ||
|
|
fddf4c3474 | ||
|
|
04e56a4409 | ||
|
|
af51c4b700 | ||
|
|
bd3b04e194 | ||
|
|
382d2873a9 | ||
|
|
500120a761 | ||
|
|
212ded88b2 | ||
|
|
7ec89343e1 | ||
|
|
536cc3d4b6 | ||
|
|
2bc52c6348 | ||
|
|
fe9d8a52c4 | ||
|
|
bd251cc9eb | ||
|
|
7e65a9bb48 | ||
|
|
b91ea51364 | ||
|
|
76b050a607 | ||
|
|
e6d6badddb | ||
|
|
f7363549ac | ||
|
|
f71a906c2e | ||
|
|
03ace23f96 | ||
|
|
0564d6f4de | ||
|
|
cd09f857a3 | ||
|
|
69a61b613b | ||
|
|
53eb1ebcf5 | ||
|
|
e8634671a4 | ||
|
|
69ecf4db79 | ||
|
|
70835908ea | ||
|
|
f704f55fa1 | ||
|
|
e51d18ae1e | ||
|
|
62f26a66d6 | ||
|
|
2f836bbce6 | ||
|
|
75dbba1acf | ||
|
|
8325453339 | ||
|
|
353956d50d | ||
|
|
4e41165d4b | ||
|
|
cf3393ef0a | ||
|
|
8213a1db10 | ||
|
|
64a6d1a0b8 | ||
|
|
364de25b16 | ||
|
|
1f5e4f1cd9 | ||
|
|
fcb0293419 |
@@ -24,7 +24,7 @@ jobs:
|
|||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Set Node.js 18.x
|
- name: Set Node.js 18.x
|
||||||
uses: actions/setup-node@v3
|
uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: 18.x
|
node-version: 18.x
|
||||||
cache: npm
|
cache: npm
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
- uses: actions/setup-node@v3
|
- uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: 18
|
node-version: 18
|
||||||
cache: npm
|
cache: npm
|
||||||
@@ -28,7 +28,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
- uses: actions/setup-node@v3
|
- uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: 18
|
node-version: 18
|
||||||
cache: npm
|
cache: npm
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: 'Checkout Repository'
|
- name: 'Checkout Repository'
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
- name: 'Dependency Review'
|
- name: 'Dependency Review'
|
||||||
uses: actions/dependency-review-action@v3
|
uses: actions/dependency-review-action@v3
|
||||||
```
|
```
|
||||||
@@ -57,7 +57,7 @@ jobs:
|
|||||||
runs-on: self-hosted
|
runs-on: self-hosted
|
||||||
steps:
|
steps:
|
||||||
- name: 'Checkout Repository'
|
- name: 'Checkout Repository'
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
- name: 'Dependency Review'
|
- name: 'Dependency Review'
|
||||||
uses: actions/dependency-review-action@v3
|
uses: actions/dependency-review-action@v3
|
||||||
```
|
```
|
||||||
@@ -103,7 +103,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: 'Checkout Repository'
|
- name: 'Checkout Repository'
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
- name: Dependency Review
|
- name: Dependency Review
|
||||||
uses: actions/dependency-review-action@v3
|
uses: actions/dependency-review-action@v3
|
||||||
with:
|
with:
|
||||||
@@ -128,7 +128,7 @@ Start by specifying that you will be using an external configuration file:
|
|||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
- name: Dependency Review
|
- name: Dependency Review
|
||||||
uses: actions/dependency-review-action@v2
|
uses: actions/dependency-review-action@v3
|
||||||
with:
|
with:
|
||||||
config-file: './.github/dependency-review-config.yml'
|
config-file: './.github/dependency-review-config.yml'
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ const pipChange: Change = {
|
|||||||
ecosystem: 'pip',
|
ecosystem: 'pip',
|
||||||
name: 'package-1',
|
name: 'package-1',
|
||||||
version: '1.1.1',
|
version: '1.1.1',
|
||||||
package_url: 'pkg:pip/[email protected]',
|
package_url: 'pkg:pypi/[email protected]',
|
||||||
license: 'MIT',
|
license: 'MIT',
|
||||||
source_repository_url: 'github.com/some-repo',
|
source_repository_url: 'github.com/some-repo',
|
||||||
scope: 'runtime',
|
scope: 'runtime',
|
||||||
|
|||||||
@@ -24,7 +24,6 @@ test('it properly catches RequestError type', async () => {
|
|||||||
headRef: 'refs/heads/master'
|
headRef: 'refs/heads/master'
|
||||||
})
|
})
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
const err = error as RequestError
|
expect(error).toBeInstanceOf(RequestError)
|
||||||
expect(err.status).toBe(401)
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|||||||
+111
-17
@@ -19,7 +19,7 @@ const npmChange: Change = {
|
|||||||
vulnerabilities: [
|
vulnerabilities: [
|
||||||
{
|
{
|
||||||
severity: 'critical',
|
severity: 'critical',
|
||||||
advisory_ghsa_id: 'first-random_string',
|
advisory_ghsa_id: 'vulnerable-ghsa-id',
|
||||||
advisory_summary: 'very dangerous',
|
advisory_summary: 'very dangerous',
|
||||||
advisory_url: 'github.com/future-funk'
|
advisory_url: 'github.com/future-funk'
|
||||||
}
|
}
|
||||||
@@ -39,13 +39,13 @@ const rubyChange: Change = {
|
|||||||
vulnerabilities: [
|
vulnerabilities: [
|
||||||
{
|
{
|
||||||
severity: 'moderate',
|
severity: 'moderate',
|
||||||
advisory_ghsa_id: 'second-random_string',
|
advisory_ghsa_id: 'moderate-ghsa-id',
|
||||||
advisory_summary: 'not so dangerous',
|
advisory_summary: 'not so dangerous',
|
||||||
advisory_url: 'github.com/future-funk'
|
advisory_url: 'github.com/future-funk'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
severity: 'low',
|
severity: 'low',
|
||||||
advisory_ghsa_id: 'third-random_string',
|
advisory_ghsa_id: 'low-ghsa-id',
|
||||||
advisory_summary: 'dont page me',
|
advisory_summary: 'dont page me',
|
||||||
advisory_url: 'github.com/future-funk'
|
advisory_url: 'github.com/future-funk'
|
||||||
}
|
}
|
||||||
@@ -65,6 +65,64 @@ const noVulnNpmChange: Change = {
|
|||||||
vulnerabilities: []
|
vulnerabilities: []
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const lodashChange: Change = {
|
||||||
|
change_type: 'added',
|
||||||
|
manifest: 'package.json',
|
||||||
|
ecosystem: 'npm',
|
||||||
|
name: 'lodash',
|
||||||
|
version: '4.17.0',
|
||||||
|
package_url: 'pkg:npm/[email protected]',
|
||||||
|
license: 'MIT',
|
||||||
|
source_repository_url: 'https://github.com/lodash/lodash',
|
||||||
|
scope: 'runtime',
|
||||||
|
vulnerabilities: [
|
||||||
|
{
|
||||||
|
severity: 'critical',
|
||||||
|
advisory_ghsa_id: 'GHSA-jf85-cpcp-j695',
|
||||||
|
advisory_summary: 'Prototype Pollution in lodash',
|
||||||
|
advisory_url: 'https://github.com/advisories/GHSA-jf85-cpcp-j695'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
severity: 'high',
|
||||||
|
advisory_ghsa_id: 'GHSA-4xc9-xhrj-v574',
|
||||||
|
advisory_summary: 'Prototype Pollution in lodash',
|
||||||
|
advisory_url: 'https://github.com/advisories/GHSA-4xc9-xhrj-v574'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
severity: 'high',
|
||||||
|
advisory_ghsa_id: 'GHSA-35jh-r3h4-6jhm',
|
||||||
|
advisory_summary: 'Command Injection in lodash',
|
||||||
|
advisory_url: 'https://github.com/advisories/GHSA-35jh-r3h4-6jhm'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
severity: 'high',
|
||||||
|
advisory_ghsa_id: 'GHSA-p6mc-m468-83gw',
|
||||||
|
advisory_summary: 'Prototype Pollution in lodash',
|
||||||
|
advisory_url: 'https://github.com/advisories/GHSA-p6mc-m468-83gw'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
severity: 'moderate',
|
||||||
|
advisory_ghsa_id: 'GHSA-x5rq-j2xg-h7qm',
|
||||||
|
advisory_summary:
|
||||||
|
'Regular Expression Denial of Service (ReDoS) in lodash',
|
||||||
|
advisory_url: 'https://github.com/advisories/GHSA-x5rq-j2xg-h7qm'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
severity: 'moderate',
|
||||||
|
advisory_ghsa_id: 'GHSA-29mw-wpgm-hmr9',
|
||||||
|
advisory_summary:
|
||||||
|
'Regular Expression Denial of Service (ReDoS) in lodash',
|
||||||
|
advisory_url: 'https://github.com/advisories/GHSA-29mw-wpgm-hmr9'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
severity: 'low',
|
||||||
|
advisory_ghsa_id: 'GHSA-fvqr-27wr-82fm',
|
||||||
|
advisory_summary: 'Prototype Pollution in lodash',
|
||||||
|
advisory_url: 'https://github.com/advisories/GHSA-fvqr-27wr-82fm'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
test('it properly filters changes by severity', async () => {
|
test('it properly filters changes by severity', async () => {
|
||||||
const changes = [npmChange, rubyChange]
|
const changes = [npmChange, rubyChange]
|
||||||
let result = filterChangesBySeverity('high', changes)
|
let result = filterChangesBySeverity('high', changes)
|
||||||
@@ -99,25 +157,61 @@ test('it properly handles undefined advisory IDs', async () => {
|
|||||||
test('it properly filters changes with allowed vulnerabilities', async () => {
|
test('it properly filters changes with allowed vulnerabilities', async () => {
|
||||||
const changes = [npmChange, rubyChange, noVulnNpmChange]
|
const changes = [npmChange, rubyChange, noVulnNpmChange]
|
||||||
|
|
||||||
let result = filterAllowedAdvisories(['notrealGHSAID'], changes)
|
const fakeGHSAChanges = filterAllowedAdvisories(['notrealGHSAID'], changes)
|
||||||
expect(result).toEqual([npmChange, rubyChange, noVulnNpmChange])
|
expect(fakeGHSAChanges).toEqual([npmChange, rubyChange, noVulnNpmChange])
|
||||||
|
})
|
||||||
|
|
||||||
result = filterAllowedAdvisories(['first-random_string'], changes)
|
test('it properly filters only allowed vulnerabilities', async () => {
|
||||||
expect(result).toEqual([rubyChange, noVulnNpmChange])
|
const changes = [npmChange, rubyChange, noVulnNpmChange]
|
||||||
|
const oldVulns = [
|
||||||
|
...npmChange.vulnerabilities,
|
||||||
|
...rubyChange.vulnerabilities,
|
||||||
|
...noVulnNpmChange.vulnerabilities
|
||||||
|
]
|
||||||
|
|
||||||
result = filterAllowedAdvisories(
|
const vulnerable = filterAllowedAdvisories(['vulnerable-ghsa-id'], changes)
|
||||||
['second-random_string', 'third-random_string'],
|
|
||||||
|
const newVulns = vulnerable.map(change => change.vulnerabilities).flat()
|
||||||
|
|
||||||
|
expect(newVulns.length).toEqual(oldVulns.length - 1)
|
||||||
|
expect(newVulns).not.toContainEqual(
|
||||||
|
expect.objectContaining({advisory_ghsa_id: 'vulnerable-ghsa-id'})
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
|
test('does not drop dependencies when filtering by GHSA', async () => {
|
||||||
|
const changes = [npmChange, rubyChange, noVulnNpmChange]
|
||||||
|
const result = filterAllowedAdvisories(
|
||||||
|
['moderate-ghsa-id', 'low-ghsa-id', 'GHSA-jf85-cpcp-j695'],
|
||||||
changes
|
changes
|
||||||
)
|
)
|
||||||
expect(result).toEqual([npmChange, noVulnNpmChange])
|
|
||||||
|
|
||||||
result = filterAllowedAdvisories(
|
expect(result.map(change => change.name)).toEqual(
|
||||||
['first-random_string', 'second-random_string', 'third-random_string'],
|
changes.map(change => change.name)
|
||||||
changes
|
|
||||||
)
|
)
|
||||||
expect(result).toEqual([noVulnNpmChange])
|
})
|
||||||
|
|
||||||
// if we have a change with multiple vulnerabilities but only one is allowed, we still should not filter out that change
|
test('it properly filters multiple GHSAs', async () => {
|
||||||
result = filterAllowedAdvisories(['second-random_string'], changes)
|
const allowedGHSAs = ['vulnerable-ghsa-id', 'moderate-ghsa-id', 'low-ghsa-id']
|
||||||
expect(result).toEqual([npmChange, rubyChange, noVulnNpmChange])
|
const changes = [npmChange, rubyChange, noVulnNpmChange]
|
||||||
|
const oldVulns = changes.map(change => change.vulnerabilities).flat()
|
||||||
|
|
||||||
|
const result = filterAllowedAdvisories(allowedGHSAs, changes)
|
||||||
|
|
||||||
|
const newVulns = result.map(change => change.vulnerabilities).flat()
|
||||||
|
|
||||||
|
expect(newVulns.length).toEqual(oldVulns.length - 3)
|
||||||
|
})
|
||||||
|
|
||||||
|
test('it filters out GHSA dependencies', async () => {
|
||||||
|
const lodash = filterAllowedAdvisories(
|
||||||
|
['GHSA-jf85-cpcp-j695'],
|
||||||
|
[lodashChange]
|
||||||
|
)[0]
|
||||||
|
// the filter should have removed a single GHSA from the list
|
||||||
|
const expected = lodashChange.vulnerabilities.filter(
|
||||||
|
vuln => vuln.advisory_ghsa_id !== 'GHSA-jf85-cpcp-j695'
|
||||||
|
)
|
||||||
|
expect(expected.length).toEqual(lodashChange.vulnerabilities.length - 1)
|
||||||
|
expect(lodash.vulnerabilities).toEqual(expected)
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ const pipChange: Change = {
|
|||||||
ecosystem: 'pip',
|
ecosystem: 'pip',
|
||||||
name: 'package-1',
|
name: 'package-1',
|
||||||
version: '1.1.1',
|
version: '1.1.1',
|
||||||
package_url: 'pkg:pip/[email protected]',
|
package_url: 'pkg:pypi/[email protected]',
|
||||||
license: 'MIT',
|
license: 'MIT',
|
||||||
source_repository_url: 'github.com/some-repo',
|
source_repository_url: 'github.com/some-repo',
|
||||||
scope: 'runtime',
|
scope: 'runtime',
|
||||||
@@ -183,7 +183,7 @@ test('it does not filter out changes that are on the exclusions list', async ()
|
|||||||
const changes: Changes = [pipChange, npmChange, rubyChange]
|
const changes: Changes = [pipChange, npmChange, rubyChange]
|
||||||
const licensesConfig = {
|
const licensesConfig = {
|
||||||
allow: ['BSD'],
|
allow: ['BSD'],
|
||||||
licenseExclusions: ['pkg:pip/[email protected]', 'pkg:npm/[email protected]']
|
licenseExclusions: ['pkg:pypi/[email protected]', 'pkg:npm/[email protected]']
|
||||||
}
|
}
|
||||||
const invalidLicenses = await getInvalidLicenseChanges(
|
const invalidLicenses = await getInvalidLicenseChanges(
|
||||||
changes,
|
changes,
|
||||||
@@ -199,7 +199,7 @@ test('it does not fail when the packages dont have a valid PURL', async () => {
|
|||||||
const changes: Changes = [emptyPurlChange, npmChange, rubyChange]
|
const changes: Changes = [emptyPurlChange, npmChange, rubyChange]
|
||||||
const licensesConfig = {
|
const licensesConfig = {
|
||||||
allow: ['BSD'],
|
allow: ['BSD'],
|
||||||
licenseExclusions: ['pkg:pip/[email protected]', 'pkg:npm/[email protected]']
|
licenseExclusions: ['pkg:pypi/[email protected]', 'pkg:npm/[email protected]']
|
||||||
}
|
}
|
||||||
|
|
||||||
const invalidLicenses = await getInvalidLicenseChanges(
|
const invalidLicenses = await getInvalidLicenseChanges(
|
||||||
@@ -213,7 +213,10 @@ test('it does filters out changes if they are not on the exclusions list', async
|
|||||||
const changes: Changes = [pipChange, npmChange, rubyChange]
|
const changes: Changes = [pipChange, npmChange, rubyChange]
|
||||||
const licensesConfig = {
|
const licensesConfig = {
|
||||||
allow: ['BSD'],
|
allow: ['BSD'],
|
||||||
licenseExclusions: ['pkg:pip/[email protected]', 'pkg:npm/[email protected]']
|
licenseExclusions: [
|
||||||
|
'pkg:pypi/[email protected]',
|
||||||
|
'pkg:npm/[email protected]'
|
||||||
|
]
|
||||||
}
|
}
|
||||||
const invalidLicenses = await getInvalidLicenseChanges(
|
const invalidLicenses = await getInvalidLicenseChanges(
|
||||||
changes,
|
changes,
|
||||||
|
|||||||
+3
-3
@@ -30,7 +30,7 @@ inputs:
|
|||||||
description: Comma-separated list of forbidden licenses (e.g. "MIT, GPL 3.0, BSD 2 Clause")
|
description: Comma-separated list of forbidden licenses (e.g. "MIT, GPL 3.0, BSD 2 Clause")
|
||||||
required: false
|
required: false
|
||||||
allow-dependencies-licenses:
|
allow-dependencies-licenses:
|
||||||
description: Comma-separated list of dependencies in purl format (e.g. "pkg:npm/express, pkg:pip/pycrypto"). These dependencies will be permitted to use any license, no matter what license policy is enforced otherwise.
|
description: Comma-separated list of dependencies in purl format (e.g. "pkg:npm/express, pkg:pypi/pycrypto"). These dependencies will be permitted to use any license, no matter what license policy is enforced otherwise.
|
||||||
required: false
|
required: false
|
||||||
allow-ghsas:
|
allow-ghsas:
|
||||||
description: Comma-separated list of allowed GitHub Advisory IDs (e.g. "GHSA-abcd-1234-5679, GHSA-efgh-1234-5679")
|
description: Comma-separated list of allowed GitHub Advisory IDs (e.g. "GHSA-abcd-1234-5679, GHSA-efgh-1234-5679")
|
||||||
@@ -48,10 +48,10 @@ inputs:
|
|||||||
description: Determines if the summary is posted as a comment in the PR itself. Setting this to `always` or `on-failure` requires you to give the workflow the write permissions for pull-requests
|
description: Determines if the summary is posted as a comment in the PR itself. Setting this to `always` or `on-failure` requires you to give the workflow the write permissions for pull-requests
|
||||||
required: false
|
required: false
|
||||||
deny-packages:
|
deny-packages:
|
||||||
description: A comma-separated list of package URLs to deny (e.g. "pkg:npm/express, pkg:pip/pycrypto")
|
description: A comma-separated list of package URLs to deny (e.g. "pkg:npm/express, pkg:pypi/pycrypto")
|
||||||
required: false
|
required: false
|
||||||
deny-groups:
|
deny-groups:
|
||||||
description: A comma-separated list of package URLs for group(s)/namespace(s) to deny (e.g. "pkg:npm/express, pkg:pip/pycrypto")
|
description: A comma-separated list of package URLs for group(s)/namespace(s) to deny (e.g. "pkg:npm/express, pkg:pypi/pycrypto")
|
||||||
required: false
|
required: false
|
||||||
retry-on-snapshot-warnings:
|
retry-on-snapshot-warnings:
|
||||||
description: Whether to retry on snapshot warnings
|
description: Whether to retry on snapshot warnings
|
||||||
|
|||||||
+27272
-19451
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
+280
-2
@@ -47,6 +47,28 @@ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|||||||
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
|
||||||
|
@fastify/busboy
|
||||||
|
MIT
|
||||||
|
Copyright Brian White. All rights reserved.
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to
|
||||||
|
deal in the Software without restriction, including without limitation the
|
||||||
|
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||||
|
sell copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||||
|
IN THE SOFTWARE.
|
||||||
|
|
||||||
@octokit/app
|
@octokit/app
|
||||||
MIT
|
MIT
|
||||||
The MIT License
|
The MIT License
|
||||||
@@ -1175,9 +1197,240 @@ FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TOR
|
|||||||
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
|
||||||
lodash
|
lodash.includes
|
||||||
MIT
|
MIT
|
||||||
Copyright OpenJS Foundation and other contributors <https://openjsf.org/>
|
Copyright jQuery Foundation and other contributors <https://jquery.org/>
|
||||||
|
|
||||||
|
Based on Underscore.js, copyright Jeremy Ashkenas,
|
||||||
|
DocumentCloud and Investigative Reporters & Editors <http://underscorejs.org/>
|
||||||
|
|
||||||
|
This software consists of voluntary contributions made by many
|
||||||
|
individuals. For exact contribution history, see the revision history
|
||||||
|
available at https://github.com/lodash/lodash
|
||||||
|
|
||||||
|
The following license applies to all parts of this software except as
|
||||||
|
documented below:
|
||||||
|
|
||||||
|
====
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
a copy of this software and associated documentation files (the
|
||||||
|
"Software"), to deal in the Software without restriction, including
|
||||||
|
without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be
|
||||||
|
included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
|
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
|
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
|
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
====
|
||||||
|
|
||||||
|
Copyright and related rights for sample code are waived via CC0. Sample
|
||||||
|
code is defined as all source code displayed within the prose of the
|
||||||
|
documentation.
|
||||||
|
|
||||||
|
CC0: http://creativecommons.org/publicdomain/zero/1.0/
|
||||||
|
|
||||||
|
====
|
||||||
|
|
||||||
|
Files located in the node_modules and vendor directories are externally
|
||||||
|
maintained libraries used by this software which have their own
|
||||||
|
licenses; we recommend you read them, as their terms may differ from the
|
||||||
|
terms above.
|
||||||
|
|
||||||
|
|
||||||
|
lodash.isboolean
|
||||||
|
MIT
|
||||||
|
Copyright 2012-2016 The Dojo Foundation <http://dojofoundation.org/>
|
||||||
|
Based on Underscore.js, copyright 2009-2016 Jeremy Ashkenas,
|
||||||
|
DocumentCloud and Investigative Reporters & Editors <http://underscorejs.org/>
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
a copy of this software and associated documentation files (the
|
||||||
|
"Software"), to deal in the Software without restriction, including
|
||||||
|
without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be
|
||||||
|
included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
|
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
|
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
|
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
|
||||||
|
lodash.isinteger
|
||||||
|
MIT
|
||||||
|
Copyright jQuery Foundation and other contributors <https://jquery.org/>
|
||||||
|
|
||||||
|
Based on Underscore.js, copyright Jeremy Ashkenas,
|
||||||
|
DocumentCloud and Investigative Reporters & Editors <http://underscorejs.org/>
|
||||||
|
|
||||||
|
This software consists of voluntary contributions made by many
|
||||||
|
individuals. For exact contribution history, see the revision history
|
||||||
|
available at https://github.com/lodash/lodash
|
||||||
|
|
||||||
|
The following license applies to all parts of this software except as
|
||||||
|
documented below:
|
||||||
|
|
||||||
|
====
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
a copy of this software and associated documentation files (the
|
||||||
|
"Software"), to deal in the Software without restriction, including
|
||||||
|
without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be
|
||||||
|
included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
|
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
|
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
|
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
====
|
||||||
|
|
||||||
|
Copyright and related rights for sample code are waived via CC0. Sample
|
||||||
|
code is defined as all source code displayed within the prose of the
|
||||||
|
documentation.
|
||||||
|
|
||||||
|
CC0: http://creativecommons.org/publicdomain/zero/1.0/
|
||||||
|
|
||||||
|
====
|
||||||
|
|
||||||
|
Files located in the node_modules and vendor directories are externally
|
||||||
|
maintained libraries used by this software which have their own
|
||||||
|
licenses; we recommend you read them, as their terms may differ from the
|
||||||
|
terms above.
|
||||||
|
|
||||||
|
|
||||||
|
lodash.isnumber
|
||||||
|
MIT
|
||||||
|
Copyright 2012-2016 The Dojo Foundation <http://dojofoundation.org/>
|
||||||
|
Based on Underscore.js, copyright 2009-2016 Jeremy Ashkenas,
|
||||||
|
DocumentCloud and Investigative Reporters & Editors <http://underscorejs.org/>
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
a copy of this software and associated documentation files (the
|
||||||
|
"Software"), to deal in the Software without restriction, including
|
||||||
|
without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be
|
||||||
|
included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
|
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
|
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
|
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
|
||||||
|
lodash.isplainobject
|
||||||
|
MIT
|
||||||
|
Copyright jQuery Foundation and other contributors <https://jquery.org/>
|
||||||
|
|
||||||
|
Based on Underscore.js, copyright Jeremy Ashkenas,
|
||||||
|
DocumentCloud and Investigative Reporters & Editors <http://underscorejs.org/>
|
||||||
|
|
||||||
|
This software consists of voluntary contributions made by many
|
||||||
|
individuals. For exact contribution history, see the revision history
|
||||||
|
available at https://github.com/lodash/lodash
|
||||||
|
|
||||||
|
The following license applies to all parts of this software except as
|
||||||
|
documented below:
|
||||||
|
|
||||||
|
====
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
a copy of this software and associated documentation files (the
|
||||||
|
"Software"), to deal in the Software without restriction, including
|
||||||
|
without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be
|
||||||
|
included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
|
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
|
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
|
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
====
|
||||||
|
|
||||||
|
Copyright and related rights for sample code are waived via CC0. Sample
|
||||||
|
code is defined as all source code displayed within the prose of the
|
||||||
|
documentation.
|
||||||
|
|
||||||
|
CC0: http://creativecommons.org/publicdomain/zero/1.0/
|
||||||
|
|
||||||
|
====
|
||||||
|
|
||||||
|
Files located in the node_modules and vendor directories are externally
|
||||||
|
maintained libraries used by this software which have their own
|
||||||
|
licenses; we recommend you read them, as their terms may differ from the
|
||||||
|
terms above.
|
||||||
|
|
||||||
|
|
||||||
|
lodash.isstring
|
||||||
|
MIT
|
||||||
|
Copyright 2012-2016 The Dojo Foundation <http://dojofoundation.org/>
|
||||||
|
Based on Underscore.js, copyright 2009-2016 Jeremy Ashkenas,
|
||||||
|
DocumentCloud and Investigative Reporters & Editors <http://underscorejs.org/>
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
a copy of this software and associated documentation files (the
|
||||||
|
"Software"), to deal in the Software without restriction, including
|
||||||
|
without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be
|
||||||
|
included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
|
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
|
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
|
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
|
||||||
|
lodash.once
|
||||||
|
MIT
|
||||||
|
Copyright jQuery Foundation and other contributors <https://jquery.org/>
|
||||||
|
|
||||||
Based on Underscore.js, copyright Jeremy Ashkenas,
|
Based on Underscore.js, copyright Jeremy Ashkenas,
|
||||||
DocumentCloud and Investigative Reporters & Editors <http://underscorejs.org/>
|
DocumentCloud and Investigative Reporters & Editors <http://underscorejs.org/>
|
||||||
@@ -1517,6 +1770,31 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|||||||
THE SOFTWARE.
|
THE SOFTWARE.
|
||||||
|
|
||||||
|
|
||||||
|
undici
|
||||||
|
MIT
|
||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) Matteo Collina and Undici contributors
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
|
||||||
|
|
||||||
universal-github-app-jwt
|
universal-github-app-jwt
|
||||||
MIT
|
MIT
|
||||||
The MIT License
|
The MIT License
|
||||||
|
|||||||
+12
-12
@@ -18,7 +18,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: 'Checkout Repository'
|
- name: 'Checkout Repository'
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
- name: 'Dependency Review'
|
- name: 'Dependency Review'
|
||||||
uses: actions/dependency-review-action@v3
|
uses: actions/dependency-review-action@v3
|
||||||
```
|
```
|
||||||
@@ -39,7 +39,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: 'Checkout Repository'
|
- name: 'Checkout Repository'
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
- name: 'Dependency Review'
|
- name: 'Dependency Review'
|
||||||
uses: actions/dependency-review-action@v3
|
uses: actions/dependency-review-action@v3
|
||||||
with:
|
with:
|
||||||
@@ -76,7 +76,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: 'Checkout Repository'
|
- name: 'Checkout Repository'
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
- name: 'Dependency Review'
|
- name: 'Dependency Review'
|
||||||
uses: actions/dependency-review-action@v3
|
uses: actions/dependency-review-action@v3
|
||||||
with:
|
with:
|
||||||
@@ -103,7 +103,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: 'Checkout Repository'
|
- name: 'Checkout Repository'
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
- name: 'Dependency Review'
|
- name: 'Dependency Review'
|
||||||
uses: actions/dependency-review-action@v3
|
uses: actions/dependency-review-action@v3
|
||||||
with:
|
with:
|
||||||
@@ -130,7 +130,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: 'Checkout Repository'
|
- name: 'Checkout Repository'
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
- name: 'Dependency Review'
|
- name: 'Dependency Review'
|
||||||
uses: actions/dependency-review-action@v3
|
uses: actions/dependency-review-action@v3
|
||||||
with:
|
with:
|
||||||
@@ -155,7 +155,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: 'Checkout Repository'
|
- name: 'Checkout Repository'
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
- name: 'Dependency Review'
|
- name: 'Dependency Review'
|
||||||
uses: actions/dependency-review-action@v3
|
uses: actions/dependency-review-action@v3
|
||||||
with:
|
with:
|
||||||
@@ -183,14 +183,14 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: 'Checkout Repository'
|
- name: 'Checkout Repository'
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
- name: 'Dependency Review'
|
- name: 'Dependency Review'
|
||||||
uses: actions/dependency-review-action@v3
|
uses: actions/dependency-review-action@v3
|
||||||
with:
|
with:
|
||||||
fail-on-severity: critical
|
fail-on-severity: critical
|
||||||
deny-licenses: LGPL-2.0, BSD-2-Clause
|
deny-licenses: LGPL-2.0, BSD-2-Clause
|
||||||
comment-summary-in-pr: always
|
comment-summary-in-pr: always
|
||||||
allow-dependencies-licenses: 'pkg:npm/loadash, pkg:pip/requests'
|
allow-dependencies-licenses: 'pkg:npm/loadash, pkg:pypi/requests'
|
||||||
```
|
```
|
||||||
|
|
||||||
If we were to use configuration file, the configuration would look like this:
|
If we were to use configuration file, the configuration would look like this:
|
||||||
@@ -202,7 +202,7 @@ allow-licenses:
|
|||||||
- 'BSD-2-Clause'
|
- 'BSD-2-Clause'
|
||||||
allow-dependencies-licenses:
|
allow-dependencies-licenses:
|
||||||
- 'pkg:npm/loadash'
|
- 'pkg:npm/loadash'
|
||||||
- 'pkg:pip/requests'
|
- 'pkg:pypi/requests'
|
||||||
```
|
```
|
||||||
|
|
||||||
## Only check for vulnerabilities
|
## Only check for vulnerabilities
|
||||||
@@ -222,7 +222,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: 'Checkout Repository'
|
- name: 'Checkout Repository'
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
- name: 'Dependency Review'
|
- name: 'Dependency Review'
|
||||||
uses: actions/dependency-review-action@v3
|
uses: actions/dependency-review-action@v3
|
||||||
with:
|
with:
|
||||||
@@ -251,7 +251,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: 'Checkout Repository'
|
- name: 'Checkout Repository'
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
- name: 'Dependency Review'
|
- name: 'Dependency Review'
|
||||||
uses: actions/dependency-review-action@v3
|
uses: actions/dependency-review-action@v3
|
||||||
with:
|
with:
|
||||||
@@ -285,7 +285,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: 'Checkout Repository'
|
- name: 'Checkout Repository'
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
- name: 'Dependency Review'
|
- name: 'Dependency Review'
|
||||||
uses: actions/dependency-review-action@v3
|
uses: actions/dependency-review-action@v3
|
||||||
with:
|
with:
|
||||||
|
|||||||
Generated
+1803
-2177
File diff suppressed because it is too large
Load Diff
+22
-22
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "dependency-review-action",
|
"name": "dependency-review-action",
|
||||||
"version": "3.1.0",
|
"version": "3.1.4",
|
||||||
"private": true,
|
"private": true,
|
||||||
"description": "A GitHub Action for Dependency Review",
|
"description": "A GitHub Action for Dependency Review",
|
||||||
"main": "lib/main.js",
|
"main": "lib/main.js",
|
||||||
@@ -25,37 +25,37 @@
|
|||||||
"author": "GitHub",
|
"author": "GitHub",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@actions/core": "^1.10.0",
|
"@actions/core": "^1.10.1",
|
||||||
"@actions/github": "^5.1.1",
|
"@actions/github": "^5.1.1",
|
||||||
"@octokit/plugin-retry": "^5.0.4",
|
"@octokit/plugin-retry": "^5.0.4",
|
||||||
"@octokit/request-error": "^5.0.1",
|
"@octokit/request-error": "^2.1.0",
|
||||||
|
"@types/jest": "^29.5.11",
|
||||||
"ansi-styles": "^6.2.1",
|
"ansi-styles": "^6.2.1",
|
||||||
"got": "^13.0.0",
|
"got": "^13.0.0",
|
||||||
|
"jest": "^29.7.0",
|
||||||
"octokit": "^2.1.0",
|
"octokit": "^2.1.0",
|
||||||
"packageurl-js": "^1.0.2",
|
"packageurl-js": "^1.2.0",
|
||||||
"spdx-expression-parse": "^3.0.1",
|
"spdx-expression-parse": "^3.0.1",
|
||||||
"spdx-satisfies": "^5.0.1",
|
"spdx-satisfies": "^5.0.1",
|
||||||
"yaml": "^2.3.2",
|
"ts-jest": "^29.1.1",
|
||||||
"zod": "^3.22.2"
|
"yaml": "^2.3.4",
|
||||||
|
"zod": "^3.22.3"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/jest": "^27.5.2",
|
"@types/node": "^16.18.62",
|
||||||
"@types/node": "^16.18.48",
|
"@types/spdx-expression-parse": "^3.0.4",
|
||||||
"@types/spdx-expression-parse": "^3.0.2",
|
"@types/spdx-satisfies": "^0.1.1",
|
||||||
"@types/spdx-satisfies": "^0.1.0",
|
"@typescript-eslint/eslint-plugin": "^6.12.0",
|
||||||
"@typescript-eslint/eslint-plugin": "^6.7.2",
|
"@typescript-eslint/parser": "^6.13.1",
|
||||||
"@typescript-eslint/parser": "^6.6.0",
|
"@vercel/ncc": "^0.38.0",
|
||||||
"@vercel/ncc": "^0.36.1",
|
|
||||||
"esbuild-register": "^3.5.0",
|
"esbuild-register": "^3.5.0",
|
||||||
"eslint": "^8.48.0",
|
"eslint": "^8.52.0",
|
||||||
"eslint-plugin-github": "^4.8.0",
|
"eslint-plugin-github": "^4.10.1",
|
||||||
"eslint-plugin-jest": "^27.2.2",
|
"eslint-plugin-jest": "^27.6.0",
|
||||||
"eslint-plugin-prettier": "^5.0.0",
|
"eslint-plugin-prettier": "^5.0.1",
|
||||||
"jest": "^27.5.1",
|
|
||||||
"js-yaml": "^4.1.0",
|
"js-yaml": "^4.1.0",
|
||||||
"nodemon": "^3.0.1",
|
"nodemon": "^3.0.2",
|
||||||
"prettier": "3.0.2",
|
"prettier": "3.1.0",
|
||||||
"ts-jest": "^27.1.4",
|
"typescript": "^5.3.2"
|
||||||
"typescript": "^4.9.5"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,9 +26,9 @@ const defaultConfig: ConfigurationOptions = {
|
|||||||
deny_groups: [],
|
deny_groups: [],
|
||||||
allow_dependencies_licenses: [
|
allow_dependencies_licenses: [
|
||||||
'pkg:npm/[email protected]',
|
'pkg:npm/[email protected]',
|
||||||
'pkg:pip/requests',
|
'pkg:pypi/requests',
|
||||||
'pkg:pip/certifi',
|
'pkg:pypi/certifi',
|
||||||
'pkg:pip/[email protected]'
|
'pkg:pypi/[email protected]'
|
||||||
],
|
],
|
||||||
comment_summary_in_pr: true,
|
comment_summary_in_pr: true,
|
||||||
retry_on_snapshot_warnings: false,
|
retry_on_snapshot_warnings: false,
|
||||||
|
|||||||
+23
-13
@@ -1,5 +1,13 @@
|
|||||||
import {Changes, Severity, SEVERITIES, Scope} from './schemas'
|
import {Changes, Severity, SEVERITIES, Scope} from './schemas'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Filters changes by a severity level. Only vulnerable
|
||||||
|
* dependencies will be returned.
|
||||||
|
*
|
||||||
|
* @param severity - The severity level to filter by.
|
||||||
|
* @param changes - The array of changes to filter.
|
||||||
|
* @returns The filtered array of changes that match the specified severity level and have vulnerabilities.
|
||||||
|
*/
|
||||||
export function filterChangesBySeverity(
|
export function filterChangesBySeverity(
|
||||||
severity: Severity,
|
severity: Severity,
|
||||||
changes: Changes
|
changes: Changes
|
||||||
@@ -31,7 +39,14 @@ export function filterChangesBySeverity(
|
|||||||
filteredChanges = filteredChanges.filter(
|
filteredChanges = filteredChanges.filter(
|
||||||
change => change.vulnerabilities.length > 0
|
change => change.vulnerabilities.length > 0
|
||||||
)
|
)
|
||||||
return filteredChanges
|
|
||||||
|
// only report vulnerability additions
|
||||||
|
return filteredChanges.filter(
|
||||||
|
change =>
|
||||||
|
change.change_type === 'added' &&
|
||||||
|
change.vulnerabilities !== undefined &&
|
||||||
|
change.vulnerabilities.length > 0
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
export function filterChangesByScopes(
|
export function filterChangesByScopes(
|
||||||
@@ -67,25 +82,20 @@ export function filterAllowedAdvisories(
|
|||||||
return changes
|
return changes
|
||||||
}
|
}
|
||||||
|
|
||||||
const filteredChanges = changes.filter(change => {
|
const filteredChanges = changes.map(change => {
|
||||||
const noAdvisories =
|
const noAdvisories =
|
||||||
change.vulnerabilities === undefined ||
|
change.vulnerabilities === undefined ||
|
||||||
change.vulnerabilities.length === 0
|
change.vulnerabilities.length === 0
|
||||||
|
|
||||||
if (noAdvisories) {
|
if (noAdvisories) {
|
||||||
return true
|
return change
|
||||||
}
|
}
|
||||||
|
const newChange = {...change}
|
||||||
|
newChange.vulnerabilities = change.vulnerabilities.filter(
|
||||||
|
vuln => !ghsas.includes(vuln.advisory_ghsa_id)
|
||||||
|
)
|
||||||
|
|
||||||
let allAllowedAdvisories = true
|
return newChange
|
||||||
// if there's at least one advisory that is not allowlisted, we will keep the change
|
|
||||||
for (const vulnerability of change.vulnerabilities) {
|
|
||||||
if (!ghsas.includes(vulnerability.advisory_ghsa_id)) {
|
|
||||||
allAllowedAdvisories = false
|
|
||||||
}
|
|
||||||
if (!allAllowedAdvisories) {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
|
|
||||||
return filteredChanges
|
return filteredChanges
|
||||||
|
|||||||
+4
-2
@@ -32,7 +32,7 @@ export async function getInvalidLicenseChanges(
|
|||||||
const {allow, deny} = licenses
|
const {allow, deny} = licenses
|
||||||
const licenseExclusions = licenses.licenseExclusions?.map(
|
const licenseExclusions = licenses.licenseExclusions?.map(
|
||||||
(pkgUrl: string) => {
|
(pkgUrl: string) => {
|
||||||
return PackageURL.fromString(pkgUrl)
|
return PackageURL.fromString(encodeURI(pkgUrl))
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -45,7 +45,9 @@ export async function getInvalidLicenseChanges(
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
const changeAsPackageURL = PackageURL.fromString(change.package_url)
|
const changeAsPackageURL = PackageURL.fromString(
|
||||||
|
encodeURI(change.package_url)
|
||||||
|
)
|
||||||
|
|
||||||
// We want to find if the licenseExclussion list contains the PackageURL of the Change
|
// We want to find if the licenseExclussion list contains the PackageURL of the Change
|
||||||
// If it does, we want to filter it out and therefore return false
|
// If it does, we want to filter it out and therefore return false
|
||||||
|
|||||||
+2
-6
@@ -80,21 +80,17 @@ async function run(): Promise<void> {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
const minSeverity = config.fail_on_severity
|
|
||||||
const scopedChanges = filterChangesByScopes(config.fail_on_scopes, changes)
|
const scopedChanges = filterChangesByScopes(config.fail_on_scopes, changes)
|
||||||
|
|
||||||
const filteredChanges = filterAllowedAdvisories(
|
const filteredChanges = filterAllowedAdvisories(
|
||||||
config.allow_ghsas,
|
config.allow_ghsas,
|
||||||
scopedChanges
|
scopedChanges
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const minSeverity = config.fail_on_severity
|
||||||
const vulnerableChanges = filterChangesBySeverity(
|
const vulnerableChanges = filterChangesBySeverity(
|
||||||
minSeverity,
|
minSeverity,
|
||||||
filteredChanges
|
filteredChanges
|
||||||
).filter(
|
|
||||||
change =>
|
|
||||||
change.change_type === 'added' &&
|
|
||||||
change.vulnerabilities !== undefined &&
|
|
||||||
change.vulnerabilities.length > 0
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const invalidLicenseChanges = await getInvalidLicenseChanges(
|
const invalidLicenseChanges = await getInvalidLicenseChanges(
|
||||||
|
|||||||
Reference in New Issue
Block a user