Skip to content

Commit 9a269ce

Browse files
committed
feat: change node version warning rules
Change the rule from warning on all unsupported versions to a new rule. Specifically: 1. Warn on odd version numbered node.js releases 2. Warn on versions older than the min supported version 3. Intentionally don't warn on newer version (as long as they are even)
1 parent 7593837 commit 9a269ce

File tree

2 files changed

+57
-13
lines changed

2 files changed

+57
-13
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,54 @@
11
import semver from "semver";
22

3+
import { assertHardhatInvariant } from "../core/errors";
34
import { SUPPORTED_NODE_VERSIONS } from "./constants";
45

56
/**
6-
* Determine if the node version is unsupported by Hardhat
7-
* and so a warning message should be shown.
7+
* Determine if the node version should trigger an unsupported
8+
* warning.
89
*
9-
* The current rule is that Hardhat supports all `Current`,
10-
* `Active LTS`, and `Maintenance LTS` versions of Node.js
11-
* as defined in the Node.js release schedule and encoded
12-
* in the `SUPPORTED_NODE_VERSIONS` constant.
10+
* The current rule is that a unsupported warning will be shown if
11+
*
12+
* 1. An odd numbered version of Node.js is used - as this will never go to LTS
13+
* 2. The version is less than the minimum supported version
14+
*
15+
* We intentionally do not warn on newer **even** versions of Node.js.
1316
*/
1417
export function isNodeVersionToWarnOn(nodeVersion: string): boolean {
15-
return !semver.satisfies(nodeVersion, SUPPORTED_NODE_VERSIONS.join(" || "));
18+
const supportedVersions = SUPPORTED_NODE_VERSIONS.join(" || ");
19+
20+
// If the version is supported, no need to warn and short circuit
21+
if (semver.satisfies(nodeVersion, supportedVersions)) {
22+
return false;
23+
}
24+
25+
if (_onOddNumberedVersion(nodeVersion)) {
26+
return true;
27+
}
28+
29+
if (_lessThanMinimumSupportedVersion(nodeVersion, supportedVersions)) {
30+
return true;
31+
}
32+
33+
// A newer version of Node.js that will go to LTS
34+
// we have opted not to warn.
35+
return false;
36+
}
37+
38+
function _onOddNumberedVersion(nodeVersion: string) {
39+
return semver.major(nodeVersion) % 2 === 1;
40+
}
41+
42+
function _lessThanMinimumSupportedVersion(
43+
nodeVersion: string,
44+
supportedVersions: string
45+
) {
46+
const minSupportedVersion = semver.minVersion(supportedVersions);
47+
48+
assertHardhatInvariant(
49+
minSupportedVersion !== null,
50+
"Unexpectedly failed to parse the minimum supported version of Node.js"
51+
);
52+
53+
return semver.lt(nodeVersion, minSupportedVersion);
1654
}

packages/hardhat-core/test/internal/cli/is-node-version-to-warn-on.ts

+12-6
Original file line numberDiff line numberDiff line change
@@ -13,26 +13,32 @@ describe("isNodeVersionToWarnOn", function () {
1313
assert.isFalse(isNodeVersionToWarnOn("v22.3.0"));
1414
});
1515

16+
it("Should not warn on even newer versions even if they are unsupported", function () {
17+
assert.isFalse(isNodeVersionToWarnOn("v24.0.0"));
18+
assert.isFalse(isNodeVersionToWarnOn("v24.3.0"));
19+
});
20+
1621
it("Should warn on unsupported older node versions", function () {
1722
assert(isNodeVersionToWarnOn("v10.0.0"));
1823
assert(isNodeVersionToWarnOn("v10.24.1"));
1924

25+
assert(isNodeVersionToWarnOn("v11.0.0"));
26+
2027
assert(isNodeVersionToWarnOn("v12.0.0"));
2128
assert(isNodeVersionToWarnOn("v12.22.12"));
2229

30+
assert(isNodeVersionToWarnOn("v13.0.0"));
31+
2332
assert(isNodeVersionToWarnOn("v14.0.0"));
2433
assert(isNodeVersionToWarnOn("v14.21.3"));
2534

35+
assert(isNodeVersionToWarnOn("v15.0.0"));
36+
2637
assert(isNodeVersionToWarnOn("v16.0.0"));
2738
assert(isNodeVersionToWarnOn("v16.20.20"));
2839
});
2940

30-
it("Should warn on unsupported newer versions", function () {
31-
assert(isNodeVersionToWarnOn("v24.0.0"));
32-
assert(isNodeVersionToWarnOn("v24.3.0"));
33-
});
34-
35-
it("Should warn on unsupported odd number releases", function () {
41+
it("Should warn on odd number releases", function () {
3642
assert(isNodeVersionToWarnOn("v15.14.0"));
3743
assert(isNodeVersionToWarnOn("v17.9.1"));
3844
assert(isNodeVersionToWarnOn("v19.9.0"));

0 commit comments

Comments
 (0)