diff --git a/lib/manager/npm/extract/__snapshots__/index.spec.ts.snap b/lib/manager/npm/extract/__snapshots__/index.spec.ts.snap index c2509d138f8ed6..acfa5e2ed80e6a 100644 --- a/lib/manager/npm/extract/__snapshots__/index.spec.ts.snap +++ b/lib/manager/npm/extract/__snapshots__/index.spec.ts.snap @@ -13,7 +13,7 @@ Object { ], "ignoreNpmrcFile": undefined, "lernaClient": undefined, - "lernaDir": undefined, + "lernaJsonFile": undefined, "lernaPackages": undefined, "npmLock": undefined, "npmrc": undefined, @@ -135,7 +135,7 @@ Object { ], "ignoreNpmrcFile": undefined, "lernaClient": undefined, - "lernaDir": undefined, + "lernaJsonFile": undefined, "lernaPackages": undefined, "npmLock": undefined, "npmrc": undefined, @@ -297,7 +297,7 @@ Object { ], "ignoreNpmrcFile": undefined, "lernaClient": undefined, - "lernaDir": undefined, + "lernaJsonFile": undefined, "lernaPackages": undefined, "npmLock": undefined, "npmrc": undefined, @@ -345,7 +345,7 @@ Object { ], "ignoreNpmrcFile": undefined, "lernaClient": undefined, - "lernaDir": undefined, + "lernaJsonFile": undefined, "lernaPackages": undefined, "npmLock": undefined, "npmrc": undefined, @@ -404,7 +404,7 @@ Object { ], "ignoreNpmrcFile": undefined, "lernaClient": undefined, - "lernaDir": undefined, + "lernaJsonFile": undefined, "lernaPackages": undefined, "npmLock": undefined, "npmrc": undefined, @@ -457,7 +457,7 @@ Object { ], "ignoreNpmrcFile": undefined, "lernaClient": undefined, - "lernaDir": undefined, + "lernaJsonFile": undefined, "lernaPackages": undefined, "npmLock": undefined, "npmrc": undefined, @@ -592,7 +592,7 @@ Object { ], "ignoreNpmrcFile": undefined, "lernaClient": "npm", - "lernaDir": ".", + "lernaJsonFile": "lerna.json", "lernaPackages": undefined, "npmLock": undefined, "npmrc": undefined, @@ -727,7 +727,7 @@ Object { ], "ignoreNpmrcFile": undefined, "lernaClient": "yarn", - "lernaDir": ".", + "lernaJsonFile": "lerna.json", "lernaPackages": undefined, "npmLock": undefined, "npmrc": undefined, @@ -862,7 +862,7 @@ Object { ], "ignoreNpmrcFile": undefined, "lernaClient": undefined, - "lernaDir": undefined, + "lernaJsonFile": undefined, "lernaPackages": undefined, "npmLock": undefined, "npmrc": undefined, @@ -883,7 +883,7 @@ Object { "deps": Array [], "ignoreNpmrcFile": undefined, "lernaClient": "npm", - "lernaDir": ".", + "lernaJsonFile": "lerna.json", "lernaPackages": undefined, "npmLock": undefined, "npmrc": undefined, @@ -1020,7 +1020,7 @@ Object { ], "ignoreNpmrcFile": undefined, "lernaClient": "npm", - "lernaDir": ".", + "lernaJsonFile": "lerna.json", "lernaPackages": undefined, "npmLock": undefined, "npmrc": undefined, @@ -1041,7 +1041,7 @@ Object { "deps": Array [], "ignoreNpmrcFile": undefined, "lernaClient": "npm", - "lernaDir": ".", + "lernaJsonFile": "lerna.json", "lernaPackages": undefined, "npmLock": undefined, "npmrc": undefined, @@ -1064,7 +1064,7 @@ Object { "deps": Array [], "ignoreNpmrcFile": undefined, "lernaClient": undefined, - "lernaDir": undefined, + "lernaJsonFile": undefined, "lernaPackages": undefined, "npmLock": undefined, "npmrc": undefined, @@ -1201,7 +1201,7 @@ Object { ], "ignoreNpmrcFile": undefined, "lernaClient": undefined, - "lernaDir": undefined, + "lernaJsonFile": undefined, "lernaPackages": undefined, "npmLock": undefined, "npmrc": undefined, diff --git a/lib/manager/npm/extract/__snapshots__/monorepo.spec.ts.snap b/lib/manager/npm/extract/__snapshots__/monorepo.spec.ts.snap index bddedcf16053a8..9f2ae33089c893 100644 --- a/lib/manager/npm/extract/__snapshots__/monorepo.spec.ts.snap +++ b/lib/manager/npm/extract/__snapshots__/monorepo.spec.ts.snap @@ -17,7 +17,7 @@ Array [ "depName": "foo", }, ], - "lernaDir": ".", + "lernaJsonFile": "lerna.json", "lernaPackages": Array [ "packages/*", ], @@ -39,7 +39,7 @@ Array [ }, ], "lernaClient": undefined, - "lernaDir": ".", + "lernaJsonFile": "lerna.json", "npmLock": undefined, "packageFile": "packages/a/package.json", "packageJsonName": "@org/a", @@ -47,7 +47,7 @@ Array [ }, Object { "lernaClient": undefined, - "lernaDir": ".", + "lernaJsonFile": "lerna.json", "npmLock": undefined, "packageFile": "packages/b/package.json", "packageJsonName": "@org/b", @@ -75,7 +75,7 @@ Array [ "depName": "foo", }, ], - "lernaDir": ".", + "lernaJsonFile": "lerna.json", "lernaPackages": Array [ "packages/*", ], @@ -98,7 +98,7 @@ Array [ }, ], "lernaClient": undefined, - "lernaDir": ".", + "lernaJsonFile": "lerna.json", "npmLock": undefined, "packageFile": "packages/a/package.json", "packageJsonName": "@org/a", @@ -106,7 +106,7 @@ Array [ }, Object { "lernaClient": undefined, - "lernaDir": ".", + "lernaJsonFile": "lerna.json", "npmLock": undefined, "packageFile": "packages/b/package.json", "packageJsonName": "@org/b", @@ -119,7 +119,7 @@ exports[`manager/npm/extract .extractPackageFile() uses yarn workspaces package Array [ Object { "lernaClient": "yarn", - "lernaDir": ".", + "lernaJsonFile": "lerna.json", "lernaPackages": Array [ "oldpackages/*", ], @@ -130,7 +130,7 @@ Array [ }, Object { "lernaClient": "yarn", - "lernaDir": ".", + "lernaJsonFile": "lerna.json", "npmLock": undefined, "packageFile": "packages/a/package.json", "packageJsonName": "@org/a", @@ -138,7 +138,7 @@ Array [ }, Object { "lernaClient": "yarn", - "lernaDir": ".", + "lernaJsonFile": "lerna.json", "npmLock": undefined, "packageFile": "packages/b/package.json", "packageJsonName": "@org/b", @@ -156,7 +156,7 @@ Array [ Object { "hasYarnWorkspaces": true, "lernaClient": undefined, - "lernaDir": undefined, + "lernaJsonFile": undefined, "npmLock": undefined, "packageFile": "packages/a/package.json", "packageJsonName": "@org/a", @@ -164,7 +164,7 @@ Array [ }, Object { "lernaClient": undefined, - "lernaDir": undefined, + "lernaJsonFile": undefined, "npmLock": undefined, "packageFile": "packages/b/package.json", "packageJsonName": "@org/b", diff --git a/lib/manager/npm/extract/index.ts b/lib/manager/npm/extract/index.ts index bd5d442b65a451..f56f63a39a27e2 100644 --- a/lib/manager/npm/extract/index.ts +++ b/lib/manager/npm/extract/index.ts @@ -1,5 +1,4 @@ import is from '@sindresorhus/is'; -import { dirname } from 'upath'; import validateNpmPackageName from 'validate-npm-package-name'; import { getAdminConfig } from '../../../config/admin'; import { CONFIG_VALIDATION } from '../../../constants/error-messages'; @@ -124,7 +123,7 @@ export async function extractPackageFile( yarnrc = (await readLocalFile(yarnrcFileName, 'utf8')) || undefined; } - let lernaDir: string; + let lernaJsonFile: string; let lernaPackages: string[]; let lernaClient: 'yarn' | 'npm'; let hasFileRefs = false; @@ -134,16 +133,17 @@ export async function extractPackageFile( useWorkspaces?: boolean; }; try { - const lernaJsonFileName = getSiblingFileName(fileName, 'lerna.json'); - lernaJson = JSON.parse(await readLocalFile(lernaJsonFileName, 'utf8')); + lernaJsonFile = getSiblingFileName(fileName, 'lerna.json'); + lernaJson = JSON.parse(await readLocalFile(lernaJsonFile, 'utf8')); } catch (err) /* istanbul ignore next */ { logger.warn({ err }, 'Could not parse lerna.json'); } if (lernaJson && !lernaJson.useWorkspaces) { - lernaDir = dirname(fileName); lernaPackages = lernaJson.packages; lernaClient = lernaJson.npmClient === 'yarn' || lockFiles.yarnLock ? 'yarn' : 'npm'; + } else { + lernaJsonFile = undefined; } const depTypes = { @@ -335,7 +335,7 @@ export async function extractPackageFile( packageJsonName || packageFileVersion || npmrc || - lernaDir || + lernaJsonFile || yarnWorkspacesPackages ) ) { @@ -366,7 +366,7 @@ export async function extractPackageFile( ignoreNpmrcFile, yarnrc, ...lockFiles, - lernaDir, + lernaJsonFile, lernaClient, lernaPackages, skipInstalls, diff --git a/lib/manager/npm/extract/monorepo.spec.ts b/lib/manager/npm/extract/monorepo.spec.ts index 51b1c47ccb0b83..0d473c6ec512b8 100644 --- a/lib/manager/npm/extract/monorepo.spec.ts +++ b/lib/manager/npm/extract/monorepo.spec.ts @@ -6,7 +6,7 @@ describe('manager/npm/extract', () => { const packageFiles = [ { packageFile: 'package.json', - lernaDir: '.', + lernaJsonFile: 'lerna.json', lernaPackages: ['packages/*'], packages: ['packages/*'], deps: [ @@ -46,7 +46,7 @@ describe('manager/npm/extract', () => { ] as any; detectMonorepos(packageFiles, false); expect(packageFiles).toMatchSnapshot(); - expect(packageFiles[1].lernaDir).toEqual('.'); + expect(packageFiles[1].lernaJsonFile).toEqual('lerna.json'); expect( packageFiles.some((packageFile) => packageFile.deps?.some((dep) => dep.skipReason) @@ -57,7 +57,7 @@ describe('manager/npm/extract', () => { const packageFiles = [ { packageFile: 'package.json', - lernaDir: '.', + lernaJsonFile: 'lerna.json', lernaPackages: ['packages/*'], packages: ['packages/*'], deps: [ @@ -97,7 +97,7 @@ describe('manager/npm/extract', () => { ] as any; detectMonorepos(packageFiles, true); expect(packageFiles).toMatchSnapshot(); - expect(packageFiles[1].lernaDir).toEqual('.'); + expect(packageFiles[1].lernaJsonFile).toEqual('lerna.json'); expect( packageFiles.some((packageFile) => packageFile.deps?.some((dep) => dep.skipReason) @@ -108,7 +108,7 @@ describe('manager/npm/extract', () => { const packageFiles = [ { packageFile: 'package.json', - lernaDir: '.', + lernaJsonFile: 'lerna.json', lernaPackages: ['oldpackages/*'], lernaClient: 'yarn', yarnWorkspacesPackages: ['packages/*'], @@ -124,7 +124,7 @@ describe('manager/npm/extract', () => { ]; detectMonorepos(packageFiles, false); expect(packageFiles).toMatchSnapshot(); - expect(packageFiles[1].lernaDir).toEqual('.'); + expect(packageFiles[1].lernaJsonFile).toEqual('lerna.json'); }); it('uses yarn workspaces package settings without lerna', () => { const packageFiles = [ diff --git a/lib/manager/npm/extract/monorepo.ts b/lib/manager/npm/extract/monorepo.ts index a6177416cf5ad2..8b7b0a17ef30ad 100644 --- a/lib/manager/npm/extract/monorepo.ts +++ b/lib/manager/npm/extract/monorepo.ts @@ -23,7 +23,7 @@ export function detectMonorepos( packageFile, npmLock, yarnLock, - lernaDir, + lernaJsonFile, lernaClient, lernaPackages, yarnWorkspacesPackages, @@ -56,7 +56,7 @@ export function detectMonorepos( }); } for (const subPackage of internalPackageFiles) { - subPackage.lernaDir = lernaDir; + subPackage.lernaJsonFile = lernaJsonFile; subPackage.lernaClient = lernaClient; subPackage.yarnLock = subPackage.yarnLock || yarnLock; subPackage.npmLock = subPackage.npmLock || npmLock; diff --git a/lib/manager/npm/post-update/index.ts b/lib/manager/npm/post-update/index.ts index 5bea15ee1fa06f..2479542a7e63ad 100644 --- a/lib/manager/npm/post-update/index.ts +++ b/lib/manager/npm/post-update/index.ts @@ -9,6 +9,7 @@ import { getChildProcessEnv } from '../../../util/exec/env'; import { deleteLocalFile, ensureDir, + getSubDirectory, outputFile, readFile, remove, @@ -32,7 +33,7 @@ export interface DetermineLockFileDirsResult { yarnLockDirs: string[]; npmLockDirs: string[]; pnpmShrinkwrapDirs: string[]; - lernaDirs: string[]; + lernaJsonFiles: string[]; } // istanbul ignore next export function determineLockFileDirs( @@ -42,13 +43,13 @@ export function determineLockFileDirs( const npmLockDirs = []; const yarnLockDirs = []; const pnpmShrinkwrapDirs = []; - const lernaDirs = []; + const lernaJsonFiles = []; for (const upgrade of config.upgrades) { if (upgrade.updateType === 'lockFileMaintenance' || upgrade.isRemediation) { // Return every directory that contains a lockfile - if (upgrade.lernaDir && upgrade.npmLock) { - lernaDirs.push(upgrade.lernaDir); + if (upgrade.lernaJsonFile && upgrade.npmLock) { + lernaJsonFiles.push(upgrade.lernaJsonFile); } else { yarnLockDirs.push(upgrade.yarnLock); npmLockDirs.push(upgrade.npmLock); @@ -72,7 +73,7 @@ export function determineLockFileDirs( yarnLockDirs: getDirs(yarnLockDirs), npmLockDirs: getDirs(npmLockDirs), pnpmShrinkwrapDirs: getDirs(pnpmShrinkwrapDirs), - lernaDirs: getDirs(lernaDirs), + lernaJsonFiles: getDirs(lernaJsonFiles), }; } @@ -92,15 +93,15 @@ export function determineLockFileDirs( logger.trace(`Checking ${String(p.name)} for lock files`); const packageFile = getPackageFile(p.name); // lerna first - if (packageFile.lernaDir && packageFile.npmLock) { + if (packageFile.lernaJsonFile && packageFile.npmLock) { logger.debug(`${packageFile.packageFile} has lerna lock file`); - lernaDirs.push(packageFile.lernaDir); + lernaJsonFiles.push(packageFile.lernaJsonFile); } else if ( - packageFile.lernaDir && + packageFile.lernaJsonFile && packageFile.yarnLock && !packageFile.hasYarnWorkspaces ) { - lernaDirs.push(packageFile.lernaDir); + lernaJsonFiles.push(packageFile.lernaJsonFile); } else { // push full lock file names and convert them later yarnLockDirs.push(packageFile.yarnLock); @@ -113,7 +114,7 @@ export function determineLockFileDirs( yarnLockDirs: getDirs(yarnLockDirs), npmLockDirs: getDirs(npmLockDirs), pnpmShrinkwrapDirs: getDirs(pnpmShrinkwrapDirs), - lernaDirs: getDirs(lernaDirs), + lernaJsonFiles: getDirs(lernaJsonFiles), }; } @@ -687,11 +688,11 @@ export async function getAdditionalFiles( await resetNpmrcContent(fullLockFileDir, npmrcContent); } - for (const lernaDir of dirs.lernaDirs) { + for (const lernaJsonFile of dirs.lernaJsonFiles) { let lockFile: string; - logger.debug(`Finding package.json for lerna directory "${lernaDir}"`); + logger.debug(`Finding package.json for lerna location "${lernaJsonFile}"`); const lernaPackageFile = packageFiles.npm.find( - (p) => upath.dirname(p.packageFile) === lernaDir + (p) => getSubDirectory(p.packageFile) === getSubDirectory(lernaJsonFile) ); if (!lernaPackageFile) { logger.debug('No matching package.json found'); @@ -704,7 +705,10 @@ export async function getAdditionalFiles( } const skipInstalls = lockFile === 'npm-shrinkwrap.json' ? false : config.skipInstalls; - const fullLearnaFileDir = upath.join(config.localDir, lernaDir); + const fullLearnaFileDir = upath.join( + config.localDir, + getSubDirectory(lernaJsonFile) + ); const npmrcContent = await getNpmrcContent(fullLearnaFileDir); await updateNpmrcContent( fullLearnaFileDir, diff --git a/lib/manager/types.ts b/lib/manager/types.ts index 19f012363cb6ce..b370888e9514c9 100644 --- a/lib/manager/types.ts +++ b/lib/manager/types.ts @@ -74,7 +74,7 @@ export interface NpmLockFiles { shrinkwrapJson?: string; pnpmShrinkwrap?: string; npmLock?: string; - lernaDir?: string; + lernaJsonFile?: string; lockFiles?: string[]; } diff --git a/lib/workers/repository/extract/__snapshots__/manager-files.spec.ts.snap b/lib/workers/repository/extract/__snapshots__/manager-files.spec.ts.snap index 76fb7729c5bae1..0689e3fb3591a4 100644 --- a/lib/workers/repository/extract/__snapshots__/manager-files.spec.ts.snap +++ b/lib/workers/repository/extract/__snapshots__/manager-files.spec.ts.snap @@ -16,7 +16,7 @@ Array [ ], "ignoreNpmrcFile": undefined, "lernaClient": undefined, - "lernaDir": undefined, + "lernaJsonFile": undefined, "lernaPackages": undefined, "npmLock": undefined, "npmrc": undefined,