2016-04-20 02:32:20 +00:00
|
|
|
"use strict";
|
|
|
|
|
|
|
|
/*********************************************************************************************
|
|
|
|
**********************************************************************************************
|
|
|
|
|
2016-07-11 23:53:46 +00:00
|
|
|
Checks for version inconsistencies in PROD dependencies for top-level
|
|
|
|
projects, and a few first-party "blessed" deps like JDL etc.
|
2016-04-20 02:32:20 +00:00
|
|
|
|
|
|
|
Usage:
|
|
|
|
|
|
|
|
node checkdeps.js
|
|
|
|
|
2016-07-11 23:53:46 +00:00
|
|
|
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)
|
2016-04-20 02:32:20 +00:00
|
|
|
|
|
|
|
**********************************************************************************************
|
|
|
|
*********************************************************************************************/
|
|
|
|
|
|
|
|
// --[ 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 = [];
|
|
|
|
|
2016-05-25 09:35:47 +00:00
|
|
|
packageFiles.push(require("./blueocean-dashboard/package.json"));
|
2016-04-20 02:32:20 +00:00
|
|
|
packageFiles.push(require("./blueocean-web/package.json"));
|
|
|
|
|
2016-07-11 23:53:46 +00:00
|
|
|
// 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"));
|
|
|
|
|
2016-04-20 02:32:20 +00:00
|
|
|
packageFiles.forEach(packageFile => {
|
|
|
|
|
|
|
|
addDependencies("prod", packageFile.dependencies);
|
2016-07-11 23:53:46 +00:00
|
|
|
// addDependencies("dev", packageFile.devDependencies);
|
|
|
|
// addDependencies("peer", packageFile.peerDependencies);
|
2016-04-20 02:32:20 +00:00
|
|
|
|
|
|
|
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));
|
2016-07-11 23:53:46 +00:00
|
|
|
process.exitCode = 1;
|
2016-04-20 02:32:20 +00:00
|
|
|
}
|