diff --git a/src/linter/rules/invalid-change-version.mjs b/src/linter/rules/invalid-change-version.mjs index c11b2471..aa688f49 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,21 @@ 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. + * + * 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. + */ +const isIgnoredVersion = version => { + const { major, minor } = parse(version) || {}; + return major === 0 && minor < 2; +}; + /** * Determines if a given version is invalid. * @@ -26,6 +41,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..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'] }, + { version: ['SOME_OTHER_RELEASED_VERSION', 'v0.1.2'] }, ], }, ]);