From 3f07e31970fda891e8287cee6a9453f150877b8a Mon Sep 17 00:00:00 2001 From: avivkeller Date: Sun, 6 Apr 2025 19:09:08 -0400 Subject: [PATCH 1/4] fix(lint): hardcode ignored invalid change versions --- src/linter/rules/invalid-change-version.mjs | 16 +++++++++++++++- .../invalidChangeVersion-environment.mjs | 2 +- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/linter/rules/invalid-change-version.mjs b/src/linter/rules/invalid-change-version.mjs index c11b2471..8d763ef5 100644 --- a/src/linter/rules/invalid-change-version.mjs +++ b/src/linter/rules/invalid-change-version.mjs @@ -1,5 +1,5 @@ import { LINT_MESSAGES } from '../constants.mjs'; -import { valid } from 'semver'; +import { valid, parse } from 'semver'; import { env } from 'node:process'; const NODE_RELEASED_VERSIONS = env.NODE_RELEASED_VERSIONS?.split(','); @@ -14,6 +14,19 @@ const NODE_RELEASED_VERSIONS = env.NODE_RELEASED_VERSIONS?.split(','); const isValidReplaceMe = (version, length) => length === 1 && version === 'REPLACEME'; +/** + * Checks if a given semantic version should be ignored. + * A version is considered ignored if its major version is 0 and minor version is less than 2. + * + * @param {string} version - The version to check. + * @returns {boolean|undefined} Returns true if the version is ignored, false otherwise. + */ +const isIgnoredVersion = version => { + if (version === 'v0.11.15') return true; + const { major, minor } = parse(version) || {}; + return major === 0 && minor < 2; +}; + /** * Determines if a given version is invalid. * @@ -26,6 +39,7 @@ const isInvalid = NODE_RELEASED_VERSIONS ? (version, _, { length }) => !( isValidReplaceMe(version, length) || + isIgnoredVersion(version) || NODE_RELEASED_VERSIONS.includes(version.replace(/^v/, '')) ) : (version, _, { length }) => diff --git a/src/linter/tests/fixtures/invalidChangeVersion-environment.mjs b/src/linter/tests/fixtures/invalidChangeVersion-environment.mjs index 6201912e..9608bd4e 100644 --- a/src/linter/tests/fixtures/invalidChangeVersion-environment.mjs +++ b/src/linter/tests/fixtures/invalidChangeVersion-environment.mjs @@ -7,7 +7,7 @@ const issues = invalidChangeVersion([ ...assertEntry, changes: [ ...assertEntry.changes, - { version: ['SOME_OTHER_RELEASED_VERSION'] }, + { version: ['SOME_OTHER_RELEASED_VERSION', 'v0.11.15', 'v0.1.2'] }, ], }, ]); From 8e3301290c1921fa9ba833507b0bd3eed86ec195 Mon Sep 17 00:00:00 2001 From: avivkeller Date: Sun, 6 Apr 2025 19:11:47 -0400 Subject: [PATCH 2/4] only return boolean type --- src/linter/rules/invalid-change-version.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/linter/rules/invalid-change-version.mjs b/src/linter/rules/invalid-change-version.mjs index 8d763ef5..6d56c8bb 100644 --- a/src/linter/rules/invalid-change-version.mjs +++ b/src/linter/rules/invalid-change-version.mjs @@ -19,7 +19,7 @@ const isValidReplaceMe = (version, length) => * A version is considered ignored if its major version is 0 and minor version is less than 2. * * @param {string} version - The version to check. - * @returns {boolean|undefined} Returns true if the version is ignored, false otherwise. + * @returns {boolean} Returns true if the version is ignored, false otherwise. */ const isIgnoredVersion = version => { if (version === 'v0.11.15') return true; From a54b38ed107d3ebbb1d960441654eeda5c848816 Mon Sep 17 00:00:00 2001 From: avivkeller Date: Sun, 6 Apr 2025 19:13:50 -0400 Subject: [PATCH 3/4] remove `0.11.15` --- src/linter/rules/invalid-change-version.mjs | 1 - src/linter/tests/fixtures/invalidChangeVersion-environment.mjs | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/linter/rules/invalid-change-version.mjs b/src/linter/rules/invalid-change-version.mjs index 6d56c8bb..59ba7907 100644 --- a/src/linter/rules/invalid-change-version.mjs +++ b/src/linter/rules/invalid-change-version.mjs @@ -22,7 +22,6 @@ const isValidReplaceMe = (version, length) => * @returns {boolean} Returns true if the version is ignored, false otherwise. */ const isIgnoredVersion = version => { - if (version === 'v0.11.15') return true; const { major, minor } = parse(version) || {}; return major === 0 && minor < 2; }; diff --git a/src/linter/tests/fixtures/invalidChangeVersion-environment.mjs b/src/linter/tests/fixtures/invalidChangeVersion-environment.mjs index 9608bd4e..cbb4d0ca 100644 --- a/src/linter/tests/fixtures/invalidChangeVersion-environment.mjs +++ b/src/linter/tests/fixtures/invalidChangeVersion-environment.mjs @@ -7,7 +7,7 @@ const issues = invalidChangeVersion([ ...assertEntry, changes: [ ...assertEntry.changes, - { version: ['SOME_OTHER_RELEASED_VERSION', 'v0.11.15', 'v0.1.2'] }, + { version: ['SOME_OTHER_RELEASED_VERSION', 'v0.1.2'] }, ], }, ]); From 728bc75456e4271abab05c6bcc79d3594a659229 Mon Sep 17 00:00:00 2001 From: Aviv Keller Date: Tue, 8 Apr 2025 17:10:21 -0400 Subject: [PATCH 4/4] Add comments explaining ignored versions in linter --- src/linter/rules/invalid-change-version.mjs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/linter/rules/invalid-change-version.mjs b/src/linter/rules/invalid-change-version.mjs index 59ba7907..aa688f49 100644 --- a/src/linter/rules/invalid-change-version.mjs +++ b/src/linter/rules/invalid-change-version.mjs @@ -18,6 +18,9 @@ const isValidReplaceMe = (version, length) => * Checks if a given semantic version should be ignored. * A version is considered ignored if its major version is 0 and minor version is less than 2. * + * These versions are extremely old, and are not shown in the changelog used to generate + * `NODE_RELEASED_VERSIONS`, so they must be hardcoded. + * * @param {string} version - The version to check. * @returns {boolean} Returns true if the version is ignored, false otherwise. */