diff --git a/.evergreen/config.yml b/.evergreen/config.yml index fe48d3b9be..c4e9c73a66 100644 --- a/.evergreen/config.yml +++ b/.evergreen/config.yml @@ -1994,6 +1994,8 @@ tasks: updates: - {key: NODE_LTS_VERSION, value: '22'} - func: install dependencies + vars: + NPM_VERSION: 11.11.1 - func: run unit tests - name: run-unit-tests-node-24 tags: @@ -3575,6 +3577,7 @@ buildvariants: run_on: rhel80-large expansions: NODE_LTS_VERSION: 22 + NPM_VERSION: 11.11.1 CLIENT_ENCRYPTION: 'true' TEST_CSFLE: 'true' tasks: @@ -3782,6 +3785,7 @@ buildvariants: run_on: windows-2022-latest-large expansions: NODE_LTS_VERSION: 22 + NPM_VERSION: 11.11.1 CLIENT_ENCRYPTION: 'false' TEST_CSFLE: 'false' tasks: diff --git a/.evergreen/generate_evergreen_tasks.js b/.evergreen/generate_evergreen_tasks.js index 291f7670f4..06f21bf12a 100644 --- a/.evergreen/generate_evergreen_tasks.js +++ b/.evergreen/generate_evergreen_tasks.js @@ -20,6 +20,14 @@ const { UBUNTU_22_OS } = require('./ci_matrix_constants'); +// TODO(NODE-7499): unpin npm version once Node 22 ships a bundled npm that can upgrade itself +const NODE22_NPM_VERSION = '11.11.1'; + +/** Returns the major version number from a Node.js version string (e.g. 'v22.11.0', '20.19.0', 22). */ +function nodeMajorVersion(version) { + return semver.coerce(String(version))?.major; +} + const OPERATING_SYSTEMS = [ { name: DEFAULT_OS, @@ -397,6 +405,12 @@ for (const { const expansions = { NODE_LTS_VERSION }; const taskNames = tasks.map(({ name }) => name); + // bundled npm version in node v22.22.2 (v10.9.7) can't upgrade itself to @latest, + // so we need to pin npm version for these variants to latest "upgradable" version + if (nodeMajorVersion(NODE_LTS_VERSION) === 22) { + expansions.NPM_VERSION = NODE22_NPM_VERSION; + } + expansions.CLIENT_ENCRYPTION = String(!!clientEncryption); expansions.TEST_CSFLE = expansions.CLIENT_ENCRYPTION; @@ -478,7 +492,9 @@ const unitTestTasks = Array.from( updateExpansions({ NODE_LTS_VERSION }), - { func: 'install dependencies' }, + nodeMajorVersion(NODE_LTS_VERSION) === 22 + ? { func: 'install dependencies', vars: { NPM_VERSION: NODE22_NPM_VERSION } } + : { func: 'install dependencies' }, { func: 'run unit tests' } ] };