From 1f6de6d074ad70718b638ebd0e54c7536f55c1a0 Mon Sep 17 00:00:00 2001 From: Christophe Hurpeau <christophe@hurpeau.com> Date: Mon, 7 Dec 2020 09:17:23 +0100 Subject: [PATCH] fix: lerna with useWorkspaces: true (#7766) --- .../extract/__snapshots__/index.spec.ts.snap | 23 +++++++++++++++++++ lib/manager/npm/extract/index.spec.ts | 14 +++++++++++ lib/manager/npm/extract/index.ts | 8 +++++-- 3 files changed, 43 insertions(+), 2 deletions(-) diff --git a/lib/manager/npm/extract/__snapshots__/index.spec.ts.snap b/lib/manager/npm/extract/__snapshots__/index.spec.ts.snap index 71a9dcc7ce..7fcb294cb7 100644 --- a/lib/manager/npm/extract/__snapshots__/index.spec.ts.snap +++ b/lib/manager/npm/extract/__snapshots__/index.spec.ts.snap @@ -1073,6 +1073,29 @@ Object { } `; +exports[`manager/npm/extract .extractPackageFile() finds simple yarn workspaces with lerna.json and useWorkspaces: true 1`] = ` +Object { + "constraints": Object {}, + "deps": Array [], + "ignoreNpmrcFile": undefined, + "lernaClient": undefined, + "lernaDir": undefined, + "lernaPackages": undefined, + "npmLock": undefined, + "npmrc": undefined, + "packageFileVersion": "0.0.8", + "packageJsonName": "@a/b", + "packageJsonType": "app", + "pnpmShrinkwrap": undefined, + "skipInstalls": true, + "yarnLock": undefined, + "yarnWorkspacesPackages": Array [ + "packages/*", + ], + "yarnrc": undefined, +} +`; + exports[`manager/npm/extract .extractPackageFile() returns an array of dependencies 1`] = ` Object { "constraints": Object {}, diff --git a/lib/manager/npm/extract/index.spec.ts b/lib/manager/npm/extract/index.spec.ts index 46e6e20ab1..0bb64e0f1b 100644 --- a/lib/manager/npm/extract/index.spec.ts +++ b/lib/manager/npm/extract/index.spec.ts @@ -183,6 +183,20 @@ describe('manager/npm/extract', () => { ); expect(res).toMatchSnapshot(); }); + it('finds simple yarn workspaces with lerna.json and useWorkspaces: true', async () => { + fs.readLocalFile = jest.fn((fileName) => { + if (fileName === 'lerna.json') { + return '{"useWorkspaces": true}'; + } + return null; + }); + const res = await npmExtract.extractPackageFile( + workspacesSimpleContent, + 'package.json', + defaultConfig + ); + expect(res).toMatchSnapshot(); + }); it('finds complex yarn workspaces', async () => { fs.readLocalFile = jest.fn((fileName) => { if (fileName === 'lerna.json') { diff --git a/lib/manager/npm/extract/index.ts b/lib/manager/npm/extract/index.ts index 1ef0ac0b6e..578051f2b9 100644 --- a/lib/manager/npm/extract/index.ts +++ b/lib/manager/npm/extract/index.ts @@ -127,14 +127,18 @@ export async function extractPackageFile( let lernaPackages: string[]; let lernaClient: 'yarn' | 'npm'; let hasFileRefs = false; - let lernaJson: { packages: string[]; npmClient: string }; + let lernaJson: { + packages: string[]; + npmClient: string; + useWorkspaces?: boolean; + }; try { const lernaJsonFileName = getSiblingFileName(fileName, 'lerna.json'); lernaJson = JSON.parse(await readLocalFile(lernaJsonFileName, 'utf8')); } catch (err) /* istanbul ignore next */ { logger.warn({ err }, 'Could not parse lerna.json'); } - if (lernaJson) { + if (lernaJson && !lernaJson.useWorkspaces) { lernaDir = dirname(fileName); lernaPackages = lernaJson.packages; lernaClient = -- GitLab