Skip to content
This repository was archived by the owner on Feb 26, 2024. It is now read-only.

Commit a698df8

Browse files
Warn on inexact version ranges
1 parent a7bd91d commit a698df8

File tree

1 file changed

+57
-3
lines changed

1 file changed

+57
-3
lines changed

scripts/check-truffle-namespace-dependency-versions.js

Lines changed: 57 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11
const fs = require("fs");
22
const path = require("path");
33

4+
const chalk = require("chalk");
5+
46
const { Range } = require("semver");
57

68
const debug = require("debug")("check-package-versions");
79

810
function main() {
911
const packages = readPackages();
1012
const errors = [];
13+
const warnings = [];
1114

1215
for (const candidateName in packages) {
1316
for (const dependencyName in packages) {
@@ -19,15 +22,38 @@ function main() {
1922
} catch (err) {
2023
errors.push(err.message);
2124
}
25+
try {
26+
checkDependencyVersionRange(
27+
packages[candidateName],
28+
packages[dependencyName]
29+
);
30+
} catch (err) {
31+
warnings.push(err.message);
32+
}
2233
}
2334
}
2435

36+
for (const error of errors) {
37+
console.error(chalk.red("Error:"), error);
38+
}
39+
for (const warning of warnings) {
40+
console.error(chalk.yellow("Warning:"), warning);
41+
}
42+
43+
const doneColor =
44+
errors.length > 0
45+
? chalk.red
46+
: warnings.length > 0
47+
? chalk.yellow
48+
: chalk.green;
49+
console.error(
50+
doneColor("Done."),
51+
`${errors.length} errors, ${warnings.length} warnings found for @truffle namespace version dependencies.`
52+
);
53+
2554
if (errors.length > 0) {
26-
console.error(errors.join("\n"));
2755
process.exit(1);
2856
}
29-
30-
console.log("No errors found");
3157
}
3258

3359
function getPackageNames() {
@@ -77,6 +103,34 @@ function checkDependencyVersion(candidate, dependency) {
77103
}
78104
}
79105

106+
function checkDependencyVersionRange(candidate, dependency) {
107+
const name = dependency.name;
108+
const version = dependency.version;
109+
110+
for (const depType of [
111+
"dependencies",
112+
"devDependencies",
113+
"peerDependencies"
114+
]) {
115+
const deps = candidate[depType];
116+
if (deps && deps[name]) {
117+
const rawRange = deps[name];
118+
119+
if (rawRange !== `^${version}`) {
120+
throw new Error(
121+
`Package "${candidate.name}" depends on "${name}@${rawRange}", but range has not been updated for version ${version}`
122+
);
123+
} else {
124+
debug(
125+
`${candidate.name} requires ${name}@${version} (${rawRange} is up-to-date for version ${version})`
126+
);
127+
}
128+
} else {
129+
debug(`${candidate.name} does not require ${name}`);
130+
}
131+
}
132+
}
133+
80134
if (require.main === module) {
81135
main();
82136
}

0 commit comments

Comments
 (0)