From fac38a1dae5ce41f5a320a824313f2d7ea16dbaf Mon Sep 17 00:00:00 2001 From: Rhys Arkins <rhys@arkins.net> Date: Wed, 3 Jun 2020 06:38:20 +0200 Subject: [PATCH] feat(npm): dynamic npm version install (#6415) Closes #6360 --- lib/manager/npm/post-update/npm.spec.ts | 2 +- lib/manager/npm/post-update/npm.ts | 9 ++++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/lib/manager/npm/post-update/npm.spec.ts b/lib/manager/npm/post-update/npm.spec.ts index 83081050bd..ddfb3666f3 100644 --- a/lib/manager/npm/post-update/npm.spec.ts +++ b/lib/manager/npm/post-update/npm.spec.ts @@ -166,7 +166,7 @@ describe('generateLockFile', () => { 'some-dir', {}, 'package-lock.json', - { binarySource: BinarySource.Docker } + { binarySource: BinarySource.Docker, compatibility: { npm: '^6.0.0' } } ); expect(fs.readFile).toHaveBeenCalledTimes(1); expect(res.lockFile).toEqual('package-lock-contents'); diff --git a/lib/manager/npm/post-update/npm.ts b/lib/manager/npm/post-update/npm.ts index d1bd916336..e597371b14 100644 --- a/lib/manager/npm/post-update/npm.ts +++ b/lib/manager/npm/post-update/npm.ts @@ -1,4 +1,6 @@ import { move, pathExists, readFile } from 'fs-extra'; +import { validRange } from 'semver'; +import { quote } from 'shlex'; import { join } from 'upath'; import { SYSTEM_INSUFFICIENT_DISK_SPACE } from '../../../constants/error-messages'; import { logger } from '../../../logger'; @@ -24,7 +26,12 @@ export async function generateLockFile( let lockFile = null; try { - const preCommands = ['npm i -g npm']; + let installNpm = 'npm i -g npm'; + const npmCompatibility = config.compatibility?.npm; + if (validRange(npmCompatibility)) { + installNpm += `@${quote(npmCompatibility)}`; + } + const preCommands = [installNpm]; const commands = []; let cmdOptions = ''; if ( -- GitLab