-
-
Notifications
You must be signed in to change notification settings - Fork 195
/
Makefile.js
119 lines (92 loc) · 3.36 KB
/
Makefile.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
/**
* @fileoverview Build file
* @author nzakas
* @copyright OpenJS Foundation and other contributors, https://openjsf.org/
* MIT License
*/
//------------------------------------------------------------------------------
// Requirements
//------------------------------------------------------------------------------
import path from "node:path";
import { fileURLToPath } from "node:url";
import "shelljs/make.js";
import checker from "npm-license";
const dirname = path.dirname(fileURLToPath(import.meta.url));
// `shelljs/make.js` global command to unset any `set('-e')` (to exit upon
// first error)
set("+e");
//------------------------------------------------------------------------------
// Settings
//------------------------------------------------------------------------------
const OPEN_SOURCE_LICENSES = [
/MIT/u, /BSD/u, /Apache/u, /ISC/u, /WTF/u, /Public Domain/u
];
//------------------------------------------------------------------------------
// Data
//------------------------------------------------------------------------------
const NODE = "node",
NODE_MODULES = "../../node_modules",
// Utilities - intentional extra space at the end of each string
MOCHA = `${NODE_MODULES}/mocha/bin/_mocha `,
// If switching back to Istanbul when may be working with ESM
// ISTANBUL = `${NODE} ${NODE_MODULES}/istanbul/lib/cli.js `,
C8 = `${NODE} ${NODE_MODULES}/c8/bin/c8.js`,
// Files
TEST_FILES = "tests/*.js",
CJS_TEST_FILES = "tests/*.cjs";
//------------------------------------------------------------------------------
// Tasks
//------------------------------------------------------------------------------
target.all = function() {
target.test();
};
target.test = function() {
let errors = 0;
let lastReturn = exec(`${NODE} ${MOCHA} -- -R progress -c ${CJS_TEST_FILES}`);
if (lastReturn.code !== 0) {
errors++;
}
lastReturn = exec(`${C8} ${MOCHA} -- -R progress -c ${TEST_FILES}`);
if (lastReturn.code !== 0) {
errors++;
}
if (errors) {
exit(1);
}
target.checkLicenses();
};
target.checkLicenses = function() {
/**
* Returns true if the given dependency's licenses are all permissable for use in OSS
* @param {Object} dependency object containing the name and licenses of the given dependency
* @returns {boolean} is permissable dependency
*/
function isPermissible(dependency) {
const licenses = dependency.licenses;
if (Array.isArray(licenses)) {
return licenses.some(license => isPermissible({
name: dependency.name,
licenses: license
}));
}
return OPEN_SOURCE_LICENSES.some(license => license.test(licenses));
}
echo("Validating licenses");
checker.init({
start: dirname,
meta: "./licenses-meta-data.json"
}, deps => {
const impermissible = Object.keys(deps).map(dependency => ({
name: dependency,
licenses: deps[dependency].licenses
})).filter(dependency => !isPermissible(dependency));
if (impermissible.length) {
impermissible.forEach(dependency => {
console.error("%s license for %s is impermissible.",
dependency.licenses,
dependency.name);
});
exit(1);
}
});
};