blueocean-plugin/checkdeps.js

85 lines
2.8 KiB
JavaScript

"use strict";
/*********************************************************************************************
**********************************************************************************************
Checks for version inconsistencies in PROD dependencies for top-level
projects, and a few first-party "blessed" deps like JDL etc.
Usage:
node checkdeps.js
Any conflicting PROD dependencies will be printed on STDERR, and it will exit(1)
If no conflicts, or only PEER/DEV conflicts, normal exit(0)
**********************************************************************************************
*********************************************************************************************/
// --[ State ]--------------------------------------------------------------------------------
var allDependencies = {};
// --[ Helpers ]------------------------------------------------------------------------------
function initEntry(dependency, version) {
if (!allDependencies.hasOwnProperty(dependency)) {
allDependencies[dependency] = {};
}
var versions = allDependencies[dependency];
if (!versions.hasOwnProperty(version)) {
versions[version] = [];
}
}
// --[ Consume package.json files ]-----------------------------------------------------------
var packageFiles = [];
packageFiles.push(require("./blueocean-dashboard/package.json"));
packageFiles.push(require("./blueocean-web/package.json"));
// Add some expected dependencies, so we go another level deep just for these
packageFiles.push(require("./blueocean-dashboard/node_modules/@jenkins-cd/design-language/package.json"));
packageFiles.push(require("./blueocean-dashboard/node_modules/@jenkins-cd/sse-gateway/package.json"));
packageFiles.push(require("./blueocean-dashboard/node_modules/@jenkins-cd/js-extensions/package.json"));
packageFiles.forEach(packageFile => {
addDependencies("prod", packageFile.dependencies);
// addDependencies("dev", packageFile.devDependencies);
// addDependencies("peer", packageFile.peerDependencies);
function addDependencies(kind, deps) {
if (deps) {
Object.keys(deps).forEach(dependency => {
const version = deps[dependency];
initEntry(dependency, version);
allDependencies[dependency][version].push(packageFile.name + " (" + kind + ")");
});
}
}
});
// --[ Check + print results ]----------------------------------------------------------------
let errs = [];
Object.keys(allDependencies).forEach(dependency => {
let versions = allDependencies[dependency];
if (Object.keys(versions).length !== 1) {
let err = {};
err[dependency] = versions;
errs.push(err);
}
});
if (errs.length) {
console.error(JSON.stringify(errs, null, 4));
process.exitCode = 1;
}