From a33b3ecdac867fa3c47875775efdfcc929cbc772 Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Thu, 25 May 2023 17:46:28 +0200 Subject: [PATCH] feat!: merge matchPaths and matchFiles into matchFileNames (#22406) --- docs/usage/configuration-options.md | 77 +++++++++---------- .../__snapshots__/migration.spec.ts.snap | 16 ++-- lib/config/migration.spec.ts | 30 +++++++- .../custom/automerge-major-migration.spec.ts | 4 +- .../custom/automerge-minor-migration.spec.ts | 4 +- .../custom/automerge-patch-migration.spec.ts | 4 +- .../custom/package-rules-migration.spec.ts | 2 +- .../custom/package-rules-migration.ts | 4 +- lib/config/options/index.ts | 2 +- lib/config/presets/internal/default.ts | 2 +- lib/config/types.ts | 4 +- lib/config/validation.ts | 3 +- lib/modules/manager/npm/extract/index.ts | 2 +- lib/util/package-rules/files.spec.ts | 6 +- lib/util/package-rules/files.ts | 18 +++-- lib/util/package-rules/index.spec.ts | 6 +- lib/util/package-rules/matchers.ts | 6 +- lib/util/package-rules/paths.spec.ts | 45 ----------- lib/util/package-rules/paths.ts | 22 ------ .../__snapshots__/vulnerability.spec.ts.snap | 10 +-- .../repository/init/vulnerability.spec.ts | 2 +- lib/workers/repository/init/vulnerability.ts | 6 +- .../repository/updates/flatten.spec.ts | 2 +- 23 files changed, 118 insertions(+), 159 deletions(-) delete mode 100644 lib/util/package-rules/paths.spec.ts delete mode 100644 lib/util/package-rules/paths.ts diff --git a/docs/usage/configuration-options.md b/docs/usage/configuration-options.md index 2b2a12eed1a1fc..acd6a58f18dc4a 100644 --- a/docs/usage/configuration-options.md +++ b/docs/usage/configuration-options.md @@ -1863,28 +1863,28 @@ Example: The above rule will group together the `neutrino` package and any package matching `@neutrino/*`. -Path rules are convenient to use if you wish to apply configuration rules to certain package files using patterns. +File name matches are convenient to use if you wish to apply configuration rules to certain package or lock files using patterns. For example, if you have an `examples` directory and you want all updates to those examples to use the `chore` prefix instead of `fix`, then you could add this configuration: ```json { "packageRules": [ { - "matchPaths": ["examples/**"], + "matchFileNames": ["examples/**"], "extends": [":semanticCommitTypeAll(chore)"] } ] } ``` -If you wish to limit Renovate to apply configuration rules to certain files in the root repository directory, you have to use `matchPaths` with a `minimatch` pattern or use [`matchFiles`](#matchfiles) with an exact match. +If you wish to limit Renovate to apply configuration rules to certain files in the root repository directory, you have to use `matchFileNames` with a `minimatch` pattern (which can include an exact file name match). For example you have multiple `package.json` and want to use `dependencyDashboardApproval` only on the root `package.json`: ```json { "packageRules": [ { - "matchFiles": ["package.json"], + "matchFileNames": ["package.json"], "dependencyDashboardApproval": true } ] @@ -2179,23 +2179,50 @@ Use the syntax `!/ /` like this: } ``` -### matchFiles +### matchFileNames -Renovate will compare `matchFiles` for an exact match against the dependency's package file or lock file. +Renovate will compare `matchFileNames` glob matching against the dependency's package file or lock file. -For example the following would match `package.json` but not `package/frontend/package.json`: +The following example matches `package.json` but _not_ `package/frontend/package.json`: ```json { "packageRules": [ { - "matchFiles": ["package.json"] + "matchFileNames": ["package.json"], + "labels": ["npm"] } ] } ``` -Use [`matchPaths`](#matchpaths) instead if you need more flexible matching. +The following example matches any `package.json`, including files like `backend/package.json`: + +```json +{ + "packageRules": [ + { + "description": "Group dependencies from package.json files", + "matchFileNames": ["**/package.json"], + "groupName": "All package.json changes" + } + ] +} +``` + +The following example matches any file in directories starting with `app/`: + +```json +{ + "packageRules": [ + { + "description": "Group all dependencies from the app directory", + "matchFileNames": ["app/**"], + "groupName": "App dependencies" + } + ] +} +``` ### matchDepNames @@ -2255,38 +2282,6 @@ See also `excludePackagePrefixes`. Like the earlier `matchPackagePatterns` example, the above will configure `rangeStrategy` to `replace` for any package starting with `angular`. -### matchPaths - -Renovate finds the file(s) listed in `matchPaths` with a `minimatch` glob pattern. - -For example the following matches any `package.json`, including files like `backend/package.json`: - -```json -{ - "packageRules": [ - { - "description": "Group dependencies from package.json files", - "matchPaths": ["**/package.json"], - "groupName": "All package.json changes" - } - ] -} -``` - -The following matches any file in directories starting with `app/`: - -```json -{ - "packageRules": [ - { - "description": "Group all dependencies from the app directory", - "matchPaths": ["app/**"], - "groupName": "App dependencies" - } - ] -} -``` - ### matchSourceUrlPrefixes Here's an example of where you use this to group together all packages from the `renovatebot` GitHub org: diff --git a/lib/config/__snapshots__/migration.spec.ts.snap b/lib/config/__snapshots__/migration.spec.ts.snap index 572cc3bbdb1787..c4df79d9deb94f 100644 --- a/lib/config/__snapshots__/migration.spec.ts.snap +++ b/lib/config/__snapshots__/migration.spec.ts.snap @@ -164,7 +164,7 @@ exports[`config/migration migrateConfig(config, parentConfig) migrates config 1` "extends": [ "node", ], - "matchPaths": [ + "matchFileNames": [ "node/**", ], }, @@ -211,7 +211,7 @@ exports[`config/migration migrateConfig(config, parentConfig) migrates config 1` "extends": [ "foo", ], - "matchPaths": [ + "matchFileNames": [ "examples/**", ], }, @@ -293,7 +293,7 @@ exports[`config/migration migrateConfig(config, parentConfig) migrates more pack "matchDepTypes": [ "devDependencies", ], - "matchPaths": [ + "matchFileNames": [ "package.json", ], "rangeStrategy": "pin", @@ -302,7 +302,7 @@ exports[`config/migration migrateConfig(config, parentConfig) migrates more pack "matchDepTypes": [ "dependencies", ], - "matchPaths": [ + "matchFileNames": [ "package.json", ], "rangeStrategy": "pin", @@ -332,13 +332,13 @@ exports[`config/migration migrateConfig(config, parentConfig) migrates packageFi ], "packageRules": [ { - "matchPaths": [ + "matchFileNames": [ "backend/package.json", ], "rangeStrategy": "replace", }, { - "matchPaths": [ + "matchFileNames": [ "frontend/package.json", ], "rangeStrategy": "pin", @@ -347,7 +347,7 @@ exports[`config/migration migrateConfig(config, parentConfig) migrates packageFi "matchDepTypes": [ "devDependencies", ], - "matchPaths": [ + "matchFileNames": [ "other/package.json", ], "rangeStrategy": "pin", @@ -356,7 +356,7 @@ exports[`config/migration migrateConfig(config, parentConfig) migrates packageFi "matchDepTypes": [ "dependencies", ], - "matchPaths": [ + "matchFileNames": [ "other/package.json", ], "rangeStrategy": "pin", diff --git a/lib/config/migration.spec.ts b/lib/config/migration.spec.ts index fcb40a6609d2d6..eae90ddd53c9fe 100644 --- a/lib/config/migration.spec.ts +++ b/lib/config/migration.spec.ts @@ -568,13 +568,41 @@ describe('config/migration', () => { matchManagers: ['dockerfile'], matchPackageNames: ['foo'], matchPackagePatterns: ['^bar'], - matchPaths: ['package.json'], + matchFileNames: ['package.json'], matchSourceUrlPrefixes: ['https://github.com/lodash'], matchUpdateTypes: ['major'], }, ], }); }); + + it('migrates in order of precedence', () => { + const config: TestRenovateConfig = { + packageRules: [ + { + matchFiles: ['matchFiles'], + matchPaths: ['matchPaths'], + }, + { + matchPaths: ['matchPaths'], + matchFiles: ['matchFiles'], + }, + ], + }; + const { isMigrated, migratedConfig } = + configMigration.migrateConfig(config); + expect(isMigrated).toBeTrue(); + expect(migratedConfig).toEqual({ + packageRules: [ + { + matchFileNames: ['matchPaths'], + }, + { + matchFileNames: ['matchFiles'], + }, + ], + }); + }); }); it('it migrates nested packageRules', () => { diff --git a/lib/config/migrations/custom/automerge-major-migration.spec.ts b/lib/config/migrations/custom/automerge-major-migration.spec.ts index 0d2a9a7d30ba60..9dd5ebd21c87d0 100644 --- a/lib/config/migrations/custom/automerge-major-migration.spec.ts +++ b/lib/config/migrations/custom/automerge-major-migration.spec.ts @@ -19,13 +19,13 @@ describe('config/migrations/custom/automerge-major-migration', () => { { automergeMajor: 'some-value', major: { - matchFiles: ['test'], + matchFileNames: ['test'], }, }, { major: { automerge: true, - matchFiles: ['test'], + matchFileNames: ['test'], }, } ); diff --git a/lib/config/migrations/custom/automerge-minor-migration.spec.ts b/lib/config/migrations/custom/automerge-minor-migration.spec.ts index 9597466a7b3682..5ce417773f84c6 100644 --- a/lib/config/migrations/custom/automerge-minor-migration.spec.ts +++ b/lib/config/migrations/custom/automerge-minor-migration.spec.ts @@ -19,13 +19,13 @@ describe('config/migrations/custom/automerge-minor-migration', () => { { automergeMinor: 'some-value', minor: { - matchFiles: ['test'], + matchFileNames: ['test'], }, }, { minor: { automerge: true, - matchFiles: ['test'], + matchFileNames: ['test'], }, } ); diff --git a/lib/config/migrations/custom/automerge-patch-migration.spec.ts b/lib/config/migrations/custom/automerge-patch-migration.spec.ts index bc7014fa541f61..124f599fe921b3 100644 --- a/lib/config/migrations/custom/automerge-patch-migration.spec.ts +++ b/lib/config/migrations/custom/automerge-patch-migration.spec.ts @@ -19,13 +19,13 @@ describe('config/migrations/custom/automerge-patch-migration', () => { { automergePatch: 'some-value', patch: { - matchFiles: ['test'], + matchFileNames: ['test'], }, }, { patch: { automerge: true, - matchFiles: ['test'], + matchFileNames: ['test'], }, } ); diff --git a/lib/config/migrations/custom/package-rules-migration.spec.ts b/lib/config/migrations/custom/package-rules-migration.spec.ts index e77f20476fab5e..b5f6afaf7a016a 100644 --- a/lib/config/migrations/custom/package-rules-migration.spec.ts +++ b/lib/config/migrations/custom/package-rules-migration.spec.ts @@ -48,7 +48,7 @@ describe('config/migrations/custom/package-rules-migration', () => { { packageRules: [ { - matchPaths: [], + matchFileNames: [], packgageRules: { languages: ['javascript'], }, diff --git a/lib/config/migrations/custom/package-rules-migration.ts b/lib/config/migrations/custom/package-rules-migration.ts index e3be4c4c910ac0..9da8469fe3c23c 100644 --- a/lib/config/migrations/custom/package-rules-migration.ts +++ b/lib/config/migrations/custom/package-rules-migration.ts @@ -2,7 +2,9 @@ import type { PackageRule } from '../../types'; import { AbstractMigration } from '../base/abstract-migration'; export const renameMap = { - paths: 'matchPaths', + matchFiles: 'matchFileNames', + matchPaths: 'matchFileNames', + paths: 'matchFileNames', languages: 'matchLanguages', baseBranchList: 'matchBaseBranches', managers: 'matchManagers', diff --git a/lib/config/options/index.ts b/lib/config/options/index.ts index ed4eefcab2fbad..ad8973d41114fe 100644 --- a/lib/config/options/index.ts +++ b/lib/config/options/index.ts @@ -1294,7 +1294,7 @@ const options: RenovateOptions[] = [ env: false, }, { - name: 'matchFiles', + name: 'matchFileNames', description: 'List of strings to do an exact match against package and lock files with full path. Only works inside a `packageRules` object.', type: 'array', diff --git a/lib/config/presets/internal/default.ts b/lib/config/presets/internal/default.ts index 4a7ca0f2577a20..f65b0c48c93eb9 100644 --- a/lib/config/presets/internal/default.ts +++ b/lib/config/presets/internal/default.ts @@ -361,7 +361,7 @@ export const presets: Record = { 'Use semanticCommitType `{{arg0}}` for all package files matching path `{{arg1}}`.', packageRules: [ { - matchPaths: ['{{arg0}}'], + matchFileNames: ['{{arg0}}'], semanticCommitType: '{{arg1}}', }, ], diff --git a/lib/config/types.ts b/lib/config/types.ts index 5c390b09c825a0..a06a7adc8d8ba6 100644 --- a/lib/config/types.ts +++ b/lib/config/types.ts @@ -313,8 +313,7 @@ export interface PackageRule Record { description?: string | string[]; isVulnerabilityAlert?: boolean; - matchFiles?: string[]; - matchPaths?: string[]; + matchFileNames?: string[]; matchLanguages?: string[]; matchBaseBranches?: string[]; matchManagers?: string | string[]; @@ -459,6 +458,7 @@ export type RenovateOptions = export interface PackageRuleInputConfig extends Record { versioning?: string; packageFile?: string; + lockFiles?: string[]; depType?: string; depTypes?: string[]; depName?: string; diff --git a/lib/config/validation.ts b/lib/config/validation.ts index f5c7b59c5c5657..254e36cb40c8f2 100644 --- a/lib/config/validation.ts +++ b/lib/config/validation.ts @@ -311,8 +311,7 @@ export async function validateConfig( } const selectors = [ - 'matchFiles', - 'matchPaths', + 'matchFileNames', 'matchLanguages', 'matchBaseBranches', 'matchManagers', diff --git a/lib/modules/manager/npm/extract/index.ts b/lib/modules/manager/npm/extract/index.ts index 00c3fb7d3e0444..467cdef6b849fc 100644 --- a/lib/modules/manager/npm/extract/index.ts +++ b/lib/modules/manager/npm/extract/index.ts @@ -64,7 +64,7 @@ export async function extractPackageFile( const error = new Error(CONFIG_VALIDATION); error.validationSource = packageFile; error.validationError = - 'Nested package.json must not contain renovate configuration. Please use `packageRules` with `matchPaths` in your main config instead.'; + 'Nested package.json must not contain Renovate configuration. Please use `packageRules` with `matchFileNames` in your main config instead.'; throw error; } const packageJsonName = packageJson.name; diff --git a/lib/util/package-rules/files.spec.ts b/lib/util/package-rules/files.spec.ts index 374d2650355465..ac30c31247f00d 100644 --- a/lib/util/package-rules/files.spec.ts +++ b/lib/util/package-rules/files.spec.ts @@ -1,7 +1,7 @@ -import { FilesMatcher } from './files'; +import { FileNamesMatcher } from './files'; describe('util/package-rules/files', () => { - const fileMatcher = new FilesMatcher(); + const fileMatcher = new FileNamesMatcher(); describe('match', () => { it('should return false if packageFile is not defined', () => { @@ -10,7 +10,7 @@ describe('util/package-rules/files', () => { packageFile: undefined, }, { - matchFiles: ['frontend/package.json'], + matchFileNames: ['frontend/package.json'], } ); expect(result).toBeFalse(); diff --git a/lib/util/package-rules/files.ts b/lib/util/package-rules/files.ts index e1ab76f4d70192..bb6cd57a3c5c90 100644 --- a/lib/util/package-rules/files.ts +++ b/lib/util/package-rules/files.ts @@ -1,23 +1,27 @@ import is from '@sindresorhus/is'; +import { minimatch } from 'minimatch'; import type { PackageRule, PackageRuleInputConfig } from '../../config/types'; import { Matcher } from './base'; -export class FilesMatcher extends Matcher { +export class FileNamesMatcher extends Matcher { override matches( { packageFile, lockFiles }: PackageRuleInputConfig, - { matchFiles }: PackageRule + { matchFileNames }: PackageRule ): boolean | null { - if (is.undefined(matchFiles)) { + if (is.undefined(matchFileNames)) { return null; } if (is.undefined(packageFile)) { return false; } - return matchFiles.some( - (fileName) => - packageFile === fileName || - (is.array(lockFiles) && lockFiles?.includes(fileName)) + return matchFileNames.some( + (matchFileName) => + minimatch(packageFile, matchFileName, { dot: true }) || + (is.array(lockFiles) && + lockFiles.some((lockFile) => + minimatch(lockFile, matchFileName, { dot: true }) + )) ); } } diff --git a/lib/util/package-rules/index.spec.ts b/lib/util/package-rules/index.spec.ts index ecfeee4914794c..0718b5243126a8 100644 --- a/lib/util/package-rules/index.spec.ts +++ b/lib/util/package-rules/index.spec.ts @@ -930,7 +930,7 @@ describe('util/package-rules/index', () => { packageFile: 'examples/foo/package.json', packageRules: [ { - matchFiles: ['package.json'], + matchFileNames: ['package.json'], x: 1, }, ], @@ -954,7 +954,7 @@ describe('util/package-rules/index', () => { lockFiles: ['yarn.lock'], packageRules: [ { - matchFiles: ['yarn.lock'], + matchFileNames: ['yarn.lock'], x: 1, }, ], @@ -968,7 +968,7 @@ describe('util/package-rules/index', () => { packageFile: 'examples/foo/package.json', packageRules: [ { - matchPaths: ['examples/**', 'lib/'], + matchFileNames: ['examples/**', 'lib/'], x: 1, }, ], diff --git a/lib/util/package-rules/matchers.ts b/lib/util/package-rules/matchers.ts index 2a11fdd8180d58..dd2672c777b678 100644 --- a/lib/util/package-rules/matchers.ts +++ b/lib/util/package-rules/matchers.ts @@ -5,14 +5,13 @@ import { DatasourcesMatcher } from './datasources'; import { DepNameMatcher } from './dep-names'; import { DepPatternsMatcher } from './dep-patterns'; import { DepTypesMatcher } from './dep-types'; -import { FilesMatcher } from './files'; +import { FileNamesMatcher } from './files'; import { LanguagesMatcher } from './languages'; import { ManagersMatcher } from './managers'; import { MergeConfidenceMatcher } from './merge-confidence'; import { PackageNameMatcher } from './package-names'; import { PackagePatternsMatcher } from './package-patterns'; import { PackagePrefixesMatcher } from './package-prefixes'; -import { PathsMatcher } from './paths'; import { SourceUrlPrefixesMatcher } from './sourceurl-prefixes'; import { SourceUrlsMatcher } from './sourceurls'; import type { MatcherApi } from './types'; @@ -29,8 +28,7 @@ matchers.push([ new PackagePatternsMatcher(), new PackagePrefixesMatcher(), ]); -matchers.push([new FilesMatcher()]); -matchers.push([new PathsMatcher()]); +matchers.push([new FileNamesMatcher()]); matchers.push([new DepTypesMatcher()]); matchers.push([new LanguagesMatcher()]); matchers.push([new BaseBranchesMatcher()]); diff --git a/lib/util/package-rules/paths.spec.ts b/lib/util/package-rules/paths.spec.ts deleted file mode 100644 index 4e0bfed3567995..00000000000000 --- a/lib/util/package-rules/paths.spec.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { logger } from '../../logger'; -import { PathsMatcher } from './paths'; - -describe('util/package-rules/paths', () => { - const pathsMatcher = new PathsMatcher(); - - describe('match', () => { - it('should return false if packageFile is not defined', () => { - const result = pathsMatcher.matches( - { - packageFile: undefined, - }, - { - matchPaths: ['opentelemetry/http'], - } - ); - expect(result).toBeFalse(); - }); - - it('should return false on partial match only', () => { - const result = pathsMatcher.matches( - { - packageFile: 'opentelemetry/http/package.json', - }, - { - matchPaths: ['opentelemetry/http'], - } - ); - expect(result).toBeFalse(); - }); - - it('should return true and not log warning on partial and glob match', () => { - const result = pathsMatcher.matches( - { - packageFile: 'package.json', - }, - { - matchPaths: ['package.json'], - } - ); - expect(result).toBeTrue(); - expect(logger.warn).not.toHaveBeenCalled(); - }); - }); -}); diff --git a/lib/util/package-rules/paths.ts b/lib/util/package-rules/paths.ts deleted file mode 100644 index 7fa70aaa9ef991..00000000000000 --- a/lib/util/package-rules/paths.ts +++ /dev/null @@ -1,22 +0,0 @@ -import is from '@sindresorhus/is'; -import { minimatch } from 'minimatch'; -import type { PackageRule, PackageRuleInputConfig } from '../../config/types'; -import { Matcher } from './base'; - -export class PathsMatcher extends Matcher { - override matches( - { packageFile }: PackageRuleInputConfig, - { matchPaths }: PackageRule - ): boolean | null { - if (is.undefined(matchPaths)) { - return null; - } - if (is.undefined(packageFile)) { - return false; - } - - return matchPaths.some((rulePath) => - minimatch(packageFile, rulePath, { dot: true }) - ); - } -} diff --git a/lib/workers/repository/init/__snapshots__/vulnerability.spec.ts.snap b/lib/workers/repository/init/__snapshots__/vulnerability.spec.ts.snap index e731e34f30e745..1c6a552c0026b5 100644 --- a/lib/workers/repository/init/__snapshots__/vulnerability.spec.ts.snap +++ b/lib/workers/repository/init/__snapshots__/vulnerability.spec.ts.snap @@ -7,7 +7,7 @@ exports[`workers/repository/init/vulnerability detectVulnerabilityAlerts() retur "matchDatasources": [ "npm", ], - "matchFiles": [ + "matchFileNames": [ "backend/package-lock.json", ], "matchPackageNames": [ @@ -31,7 +31,7 @@ exports[`workers/repository/init/vulnerability detectVulnerabilityAlerts() retur "matchDatasources": [ "go", ], - "matchFiles": [ + "matchFileNames": [ "go.mod", ], "matchPackageNames": [ @@ -61,7 +61,7 @@ go", "matchDatasources": [ "github-tags", ], - "matchFiles": [ + "matchFileNames": [ ".github/workflows/build.yaml", ], "matchPackageNames": [ @@ -91,7 +91,7 @@ actions", "matchDatasources": [ "pypi", ], - "matchFiles": [ + "matchFileNames": [ "requirements.txt", ], "matchPackageNames": [ @@ -136,7 +136,7 @@ Ansible before versions 2.1.4, 2.2.1 is vulnerable to an improper input validati "matchDatasources": [ "maven", ], - "matchFiles": [ + "matchFileNames": [ "pom.xml", ], "matchPackageNames": [ diff --git a/lib/workers/repository/init/vulnerability.spec.ts b/lib/workers/repository/init/vulnerability.spec.ts index 7b47d5ab7aa06a..90e0b9f328cc6d 100644 --- a/lib/workers/repository/init/vulnerability.spec.ts +++ b/lib/workers/repository/init/vulnerability.spec.ts @@ -332,7 +332,7 @@ describe('workers/repository/init/vulnerability', () => { const res = await detectVulnerabilityAlerts(config); expect(res.packageRules).toMatchSnapshot(); expect(res.packageRules).toHaveLength(5); - expect(res.packageRules?.[1]?.matchFiles?.[0]).toBe('go.mod'); + expect(res.packageRules?.[1]?.matchFileNames?.[0]).toBe('go.mod'); expect(res.packageRules?.[2]?.matchCurrentVersion).toBe('1.8.2'); expect(res.remediations).toMatchSnapshot({ 'backend/package-lock.json': [ diff --git a/lib/workers/repository/init/vulnerability.ts b/lib/workers/repository/init/vulnerability.ts index 7cf228988eb556..69a5cc44c46c39 100644 --- a/lib/workers/repository/init/vulnerability.ts +++ b/lib/workers/repository/init/vulnerability.ts @@ -208,7 +208,7 @@ export async function detectVulnerabilityAlerts( datasource === PypiDatasource.id ? `==${val.firstPatchedVersion!}` : val.firstPatchedVersion; - const matchFiles = + const matchFileNames = datasource === GoDatasource.id ? [fileName.replace('go.sum', 'go.mod')] : [fileName]; @@ -216,7 +216,7 @@ export async function detectVulnerabilityAlerts( matchDatasources: [datasource], matchPackageNames: [depName], matchCurrentVersion, - matchFiles, + matchFileNames, }; const supportedRemediationFileTypes = ['package-lock.json']; if ( @@ -252,7 +252,7 @@ export async function detectVulnerabilityAlerts( // istanbul ignore if if ( config.transitiveRemediation && - matchRule.matchFiles?.[0] === 'package.json' + matchRule.matchFileNames?.[0] === 'package.json' ) { matchRule.force!.rangeStrategy = 'replace'; } diff --git a/lib/workers/repository/updates/flatten.spec.ts b/lib/workers/repository/updates/flatten.spec.ts index b0c83caf13de27..88e3cd8e61565a 100644 --- a/lib/workers/repository/updates/flatten.spec.ts +++ b/lib/workers/repository/updates/flatten.spec.ts @@ -24,7 +24,7 @@ describe('workers/repository/updates/flatten', () => { automerge: true, }, { - matchPaths: ['frontend/package.json'], + matchFileNames: ['frontend/package.json'], lockFileMaintenance: { enabled: false, },