From 56170df9ae20b4eabc3219235b27de825a8a547d Mon Sep 17 00:00:00 2001 From: RahulGautamSingh <rahultesnik@gmail.com> Date: Tue, 31 May 2022 09:23:25 +0530 Subject: [PATCH] refactor: move updateInternalDeps to worker logic (#15790) --- lib/config/types.ts | 1 + .../__snapshots__/monorepo.spec.ts.snap | 9 ++++-- lib/modules/manager/npm/extract/index.spec.ts | 2 +- lib/modules/manager/npm/extract/index.ts | 10 +++---- .../manager/npm/extract/monorepo.spec.ts | 16 +++++----- lib/modules/manager/npm/extract/monorepo.ts | 30 +++++++++---------- lib/modules/manager/types.ts | 2 +- lib/workers/repository/extract/index.spec.ts | 30 +++++++++++++++++++ lib/workers/repository/extract/index.ts | 8 +++++ 9 files changed, 73 insertions(+), 35 deletions(-) diff --git a/lib/config/types.ts b/lib/config/types.ts index de7c403a40..e1f70922e2 100644 --- a/lib/config/types.ts +++ b/lib/config/types.ts @@ -218,6 +218,7 @@ export interface RenovateConfig repoIsOnboarded?: boolean; repoIsActivated?: boolean; + updateInternalDeps?: boolean; updateType?: UpdateType; warnings?: ValidationMessage[]; diff --git a/lib/modules/manager/npm/extract/__snapshots__/monorepo.spec.ts.snap b/lib/modules/manager/npm/extract/__snapshots__/monorepo.spec.ts.snap index 042573558a..2fd7c3706f 100644 --- a/lib/modules/manager/npm/extract/__snapshots__/monorepo.spec.ts.snap +++ b/lib/modules/manager/npm/extract/__snapshots__/monorepo.spec.ts.snap @@ -6,9 +6,11 @@ Array [ "deps": Array [ Object { "depName": "@org/a", + "isInternal": true, }, Object { "depName": "@org/b", + "isInternal": true, }, Object { "depName": "@org/c", @@ -32,6 +34,7 @@ Array [ "deps": Array [ Object { "depName": "@org/b", + "isInternal": true, }, Object { "depName": "@org/c", @@ -72,11 +75,11 @@ Array [ "deps": Array [ Object { "depName": "@org/a", - "skipReason": "internal-package", + "isInternal": true, }, Object { "depName": "@org/b", - "skipReason": "internal-package", + "isInternal": true, }, Object { "depName": "@org/c", @@ -100,7 +103,7 @@ Array [ "deps": Array [ Object { "depName": "@org/b", - "skipReason": "internal-package", + "isInternal": true, }, Object { "depName": "@org/c", diff --git a/lib/modules/manager/npm/extract/index.spec.ts b/lib/modules/manager/npm/extract/index.spec.ts index b6c18455b9..5226da0f76 100644 --- a/lib/modules/manager/npm/extract/index.spec.ts +++ b/lib/modules/manager/npm/extract/index.spec.ts @@ -752,7 +752,7 @@ describe('modules/manager/npm/extract/index', () => { describe('.postExtract()', () => { it('runs', async () => { - await expect(npmExtract.postExtract([], false)).resolves.not.toThrow(); + await expect(npmExtract.postExtract([])).resolves.not.toThrow(); }); }); }); diff --git a/lib/modules/manager/npm/extract/index.ts b/lib/modules/manager/npm/extract/index.ts index 3d5ba8e4a6..063e409100 100644 --- a/lib/modules/manager/npm/extract/index.ts +++ b/lib/modules/manager/npm/extract/index.ts @@ -472,11 +472,8 @@ export async function extractPackageFile( }; } -export async function postExtract( - packageFiles: PackageFile[], - updateInternalDeps: boolean -): Promise<void> { - await detectMonorepos(packageFiles, updateInternalDeps); +export async function postExtract(packageFiles: PackageFile[]): Promise<void> { + await detectMonorepos(packageFiles); await getLockedVersions(packageFiles); } @@ -500,7 +497,8 @@ export async function extractAllPackageFiles( logger.debug({ packageFile }, 'packageFile has no content'); } } - await postExtract(npmFiles, !!config.updateInternalDeps); + + await postExtract(npmFiles); return npmFiles; } diff --git a/lib/modules/manager/npm/extract/monorepo.spec.ts b/lib/modules/manager/npm/extract/monorepo.spec.ts index 09f776c463..68c91a4717 100644 --- a/lib/modules/manager/npm/extract/monorepo.spec.ts +++ b/lib/modules/manager/npm/extract/monorepo.spec.ts @@ -48,12 +48,12 @@ describe('modules/manager/npm/extract/monorepo', () => { packageJsonName: '@org/b', }, ] as any; - await detectMonorepos(packageFiles, false); + await detectMonorepos(packageFiles); expect(packageFiles).toMatchSnapshot(); expect(packageFiles[1].managerData.lernaJsonFile).toBe('lerna.json'); expect( packageFiles.some((packageFile) => - packageFile.deps?.some((dep) => dep.skipReason) + packageFile.deps?.some((dep) => dep.isInternal) ) ).toBeTrue(); }); @@ -102,14 +102,14 @@ describe('modules/manager/npm/extract/monorepo', () => { packageJsonName: '@org/b', }, ] as any; - await detectMonorepos(packageFiles, true); + await detectMonorepos(packageFiles); expect(packageFiles).toMatchSnapshot(); expect(packageFiles[1].managerData.lernaJsonFile).toBe('lerna.json'); expect( packageFiles.some((packageFile) => - packageFile.deps?.some((dep) => dep.skipReason) + packageFile.deps?.some((dep) => dep.isInternal) ) - ).toBeFalse(); + ).toBeTrue(); }); it('uses yarn workspaces package settings with lerna', async () => { @@ -132,7 +132,7 @@ describe('modules/manager/npm/extract/monorepo', () => { packageJsonName: '@org/b', }, ]; - await detectMonorepos(packageFiles, false); + await detectMonorepos(packageFiles); expect(packageFiles).toMatchSnapshot(); expect(packageFiles[1].managerData.lernaJsonFile).toBe('lerna.json'); }); @@ -154,7 +154,7 @@ describe('modules/manager/npm/extract/monorepo', () => { packageJsonName: '@org/b', }, ]; - await detectMonorepos(packageFiles, false); + await detectMonorepos(packageFiles); expect(packageFiles).toMatchSnapshot([ {}, { npmrc: '@org:registry=//registry.some.org\n' }, @@ -184,7 +184,7 @@ describe('modules/manager/npm/extract/monorepo', () => { skipInstalls: true, }, ]; - await detectMonorepos(packageFiles, false); + await detectMonorepos(packageFiles); expect(packageFiles).toMatchSnapshot([ {}, { managerData: { yarnZeroInstall: true }, skipInstalls: false }, diff --git a/lib/modules/manager/npm/extract/monorepo.ts b/lib/modules/manager/npm/extract/monorepo.ts index bcbbaf89d6..ea7aec797c 100644 --- a/lib/modules/manager/npm/extract/monorepo.ts +++ b/lib/modules/manager/npm/extract/monorepo.ts @@ -6,8 +6,7 @@ import { detectPnpmWorkspaces } from './pnpm'; import { matchesAnyPattern } from './utils'; export async function detectMonorepos( - packageFiles: Partial<PackageFile>[], - updateInternalDeps: boolean + packageFiles: Partial<PackageFile>[] ): Promise<void> { await detectPnpmWorkspaces(packageFiles); logger.debug('Detecting Lerna and Yarn Workspaces'); @@ -41,13 +40,13 @@ export async function detectMonorepos( const internalPackageNames = internalPackageFiles .map((sp) => sp.packageJsonName) .filter(Boolean); - if (!updateInternalDeps) { - p.deps?.forEach((dep) => { - if (internalPackageNames.includes(dep.depName)) { - dep.skipReason = 'internal-package'; - } - }); - } + + p.deps?.forEach((dep) => { + if (internalPackageNames.includes(dep.depName)) { + dep.isInternal = true; + } + }); + for (const subPackage of internalPackageFiles) { subPackage.managerData = subPackage.managerData || {}; subPackage.managerData.lernaJsonFile = lernaJsonFile; @@ -60,13 +59,12 @@ export async function detectMonorepos( subPackage.hasYarnWorkspaces = !!yarnWorkspacesPackages; subPackage.npmrc = subPackage.npmrc || npmrc; } - if (!updateInternalDeps) { - subPackage.deps?.forEach((dep) => { - if (internalPackageNames.includes(dep.depName)) { - dep.skipReason = 'internal-package'; - } - }); - } + + subPackage.deps?.forEach((dep) => { + if (internalPackageNames.includes(dep.depName)) { + dep.isInternal = true; + } + }); } } } diff --git a/lib/modules/manager/types.ts b/lib/modules/manager/types.ts index 6592cd6720..ec0331a20c 100644 --- a/lib/modules/manager/types.ts +++ b/lib/modules/manager/types.ts @@ -21,7 +21,6 @@ export interface ExtractConfig { npmrc?: string; npmrcMerge?: boolean; skipInstalls?: boolean; - updateInternalDeps?: boolean; } export interface RegexManagerTemplates { @@ -172,6 +171,7 @@ export interface PackageDependency<T = Record<string, any>> extends Package<T> { editFile?: string; separateMinorPatch?: boolean; extractVersion?: string; + isInternal?: boolean; } export interface Upgrade<T = Record<string, any>> diff --git a/lib/workers/repository/extract/index.spec.ts b/lib/workers/repository/extract/index.spec.ts index 5fdae44427..91e7bdfe04 100644 --- a/lib/workers/repository/extract/index.spec.ts +++ b/lib/workers/repository/extract/index.spec.ts @@ -40,6 +40,36 @@ describe('workers/repository/extract/index', () => { expect(logger.debug).toHaveBeenCalled(); }); + it('warns if packageFiles is null', async () => { + config.enabledManagers = ['npm']; + managerFiles.getManagerPackageFiles.mockResolvedValue(null); + expect(await extractAllDependencies(config)).toEqual({}); + }); + + it('adds skipReason to internal deps when updateInternalDeps is false/undefined', async () => { + config.enabledManagers = ['npm']; + managerFiles.getManagerPackageFiles.mockResolvedValue([ + { + deps: [{ depName: 'a', isInternal: true }, { depName: 'b' }], + }, + ]); + expect(await extractAllDependencies(config)).toEqual({ + npm: [ + { + deps: [ + { + depName: 'a', + isInternal: true, + skipReason: 'internal-package', + }, + { depName: 'b' }, + ], + }, + ], + }); + expect(logger.debug).toHaveBeenCalled(); + }); + it('checks custom managers', async () => { managerFiles.getManagerPackageFiles.mockResolvedValue([{} as never]); config.regexManagers = [{ fileMatch: ['README'], matchStrings: [''] }]; diff --git a/lib/workers/repository/extract/index.ts b/lib/workers/repository/extract/index.ts index de496dc5db..9c9c02794c 100644 --- a/lib/workers/repository/extract/index.ts +++ b/lib/workers/repository/extract/index.ts @@ -47,6 +47,14 @@ export async function extractAllDependencies( const extractResults = await Promise.all( extractList.map(async (managerConfig) => { const packageFiles = await getManagerPackageFiles(managerConfig); + for (const p of packageFiles ?? []) { + for (const dep of p.deps ?? []) { + if (!config.updateInternalDeps && dep.isInternal) { + dep.skipReason = 'internal-package'; + } + } + } + return { manager: managerConfig.manager, packageFiles }; }) ); -- GitLab