Skip to content

Commit bcd9248

Browse files
authored
CI: check NPM dependencies (#9674)
1 parent e416cb3 commit bcd9248

5 files changed

Lines changed: 50 additions & 3 deletions

File tree

.github/workflows/test-code.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,3 +53,6 @@ jobs:
5353

5454
- name: Check for compatibility issues
5555
run: npm run lint:bundle
56+
57+
- name: Check NPM dependencies
58+
run: node tests/dependencies.js

tests/browser/jest.config.mjs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ const config = {
1717
__DEBUG__: false,
1818
__CHROMIUM_MV2__: true,
1919
__CHROMIUM_MV3__: false,
20+
__FIREFOX__: false,
2021
__THUNDERBIRD__: false,
2122
__TEST__: true,
2223
product: 'chrome',

tests/dependencies.js

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
import {dirname, resolve} from 'node:path';
2+
import {fileURLToPath} from 'node:url';
3+
import {readFile} from 'fs/promises';
4+
5+
const __dirname = dirname(fileURLToPath(import.meta.url));
6+
const packageLockPath = resolve(__dirname, '../package-lock.json');
7+
8+
async function readJSON(path) {
9+
return await JSON.parse((await readFile(path)).toString());
10+
}
11+
12+
function checkDependency({resolved, integrity}) {
13+
if (!(
14+
(resolved === undefined ||
15+
resolved.startsWith('https://registry.npmjs.org/')) &&
16+
(integrity === undefined ||
17+
integrity.startsWith('sha512-')))) {
18+
throw new Error('Invalid dependency', resolved);
19+
}
20+
}
21+
22+
/**
23+
* Check that every dependency (including transitive dependencies) is hosted on NPM and not
24+
* in some random URL/git/GitHub repo.
25+
*/
26+
export async function checkDependencies() {
27+
const packageLock = await readJSON(packageLockPath);
28+
29+
const stack = [packageLock.packages];
30+
while(stack.length > 0) {
31+
const curr = stack.pop();
32+
for (const packageName in curr) {
33+
if (packageName === '') {
34+
continue;
35+
}
36+
checkDependency(curr[packageName]);
37+
if (curr[packageName].dependencies) {
38+
stack.push(curr[packageName].dependencies);
39+
}
40+
41+
}
42+
}
43+
44+
}
45+
46+
await checkDependencies();

tests/inject/package.json

Lines changed: 0 additions & 3 deletions
This file was deleted.

0 commit comments

Comments
 (0)