common/scripts/ensure-consistent-versions.js (47 lines of code) (raw):
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
"use strict";
const fs = require('fs');
const path = require('path');
const PACKAGES_DIR = path.join(__dirname, '..', '..', 'packages');
function findAllPackageJSON(root){
return fs.readdirSync(root).map(
(pkg) => {
const packageJSON = path.join(root, pkg, 'package.json');
const stat = fs.lstatSync(packageJSON);
if (!stat.isFile()) {
throw new Error(packageJSON + ' does not exist!');
}
return packageJSON;
}
)
}
function readPackageVersion(packageJSON) {
const parsed = JSON.parse(fs.readFileSync(packageJSON));
const version = parsed['version'];
if (!version) {
throw new Error('Malformed version in ' + packageJSON);
}
return version;
}
function areVersionsIdentical(versions) {
const goldenVersion = versions[0];
return versions.every((ver) => ver === goldenVersion);
}
function ensurePackageVersionsAreIdentical(packages, versions) {
if (!areVersionsIdentical(versions)) {
console.log('Discovered package versions:');
for (let i = 0; i < packages.length; i++) {
console.log(packages[i], ': ', versions[i]);
}
throw new Error('found mismatched versions!');
}
}
function main() {
const packages = findAllPackageJSON(PACKAGES_DIR);
const versions = packages.map((pkg) => readPackageVersion(pkg));
if (versions.length === 0) {
throw new Error('Failed to find any packages');
}
ensurePackageVersionsAreIdentical(packages, versions);
console.log('All good!')
}
main()