1
0
mirror of synced 2026-01-02 03:02:26 -05:00
Files
airbyte/airbyte-webapp/scripts/license-check.js
Tim Roes 8c4c8cf44d Upgrade all non major dependencies (#13553)
* Upgrade all non major dependencies

* Fill in missing license
2022-06-07 16:21:02 +02:00

112 lines
3.1 KiB
JavaScript

const path = require("path");
const { promisify } = require("util");
const checker = require("license-checker");
const { version } = require("../package.json");
/**
* A list of all the allowed licenses that production dependencies can have.
*/
const ALLOWED_LICENSES = [
"(Apache-2.0 OR MPL-1.1)",
"(AFL-2.1 OR BSD-3-Clause)",
"(AFLv2.1 OR BSD)",
"(BSD-2-Clause OR MIT OR Apache-2.0)",
"(BSD-3-Clause AND Apache-2.0)",
"(BSD-3-Clause OR GPL-2.0)",
"(CC-BY-4.0 AND MIT)",
"(MIT OR Apache-2.0)",
"(MIT OR CC0-1.0)",
"(MIT OR GPL-3.0)",
"(MIT OR GPL-3.0-or-later)",
"(MIT OR WTFPL)",
"(MIT AND CC-BY-3.0)",
"(MIT AND BSD-3-Clause)",
"(MIT AND Zlib)",
"(WTFPL OR MIT)",
"BSD-3-Clause OR MIT",
"0BSD",
"Apache",
"Apache-2.0",
"BSD",
"BSD-2-Clause",
"BSD-3-Clause",
"CC0-1.0",
"CC-BY-3.0",
"CC-BY-4.0",
"ISC",
"MIT",
"MPL-2.0",
"Public Domain",
"Python-2.0",
"Unlicense",
"WTFPL",
];
/**
* Licenses that should be allowed only for dev dependencies.
*/
const ALLOWED_DEV_LICENSES = [...ALLOWED_LICENSES, "ODC-By-1.0", "MPL-2.0"];
/**
* A list of all packages that should be excluded from license checking.
*/
const IGNORED_PACKAGES = [`airbyte-webapp@${version}`];
/**
* Overwrite licenses for specific packages manually, e.g. because they can't be detected properly.
*/
const LICENSE_OVERWRITES = {
"glob-to-regexp@0.3.0": "BSD-3-Clause",
"trim@0.0.1": "MIT",
"backslash@0.2.0": "MIT",
"browser-assert@1.2.1": "MIT", // via README (https://github.com/socialally/browser-assert/tree/v1.2.1)
};
const checkLicenses = promisify(checker.init);
const params = {
start: path.join(__dirname, ".."),
excludePackages: IGNORED_PACKAGES.join(";"),
unknown: true,
};
function validateLicenes(licenses, allowedLicenes, usedOverwrites) {
let licensesValid = true;
for (const [pkg, info] of Object.entries(licenses)) {
let license = Array.isArray(info.licenses) ? `(${info.licenses.join(" OR ")})` : info.licenses;
if (LICENSE_OVERWRITES[pkg]) {
license = LICENSE_OVERWRITES[pkg];
usedOverwrites.add(pkg);
}
if (license.endsWith("*")) {
license = license.substr(0, license.length - 1);
console.log(`Guessed license for package ${pkg}: ${license}`);
}
if (!license || !allowedLicenes.includes(license)) {
licensesValid = false;
console.error(`Package ${pkg} has incompatible license: ${license}`);
}
}
return licensesValid;
}
Promise.all([checkLicenses({ ...params, production: true }), checkLicenses({ ...params, development: true })]).then(
([prod, dev]) => {
const usedOverwrites = new Set();
const prodLicensesValid = validateLicenes(prod, ALLOWED_LICENSES, usedOverwrites);
const devLicensesValid = validateLicenes(dev, ALLOWED_DEV_LICENSES, usedOverwrites);
for (const overwrite of Object.keys(LICENSE_OVERWRITES)) {
if (!usedOverwrites.has(overwrite)) {
console.warn(`License overwrite for ${overwrite} is no longer needed and can be deleted.`);
}
}
if (!prodLicensesValid || !devLicensesValid) {
process.exit(1);
}
}
);