From 2ab0e36be931d08507316ff03280696a332c58ca Mon Sep 17 00:00:00 2001 From: "M.P. Korstanje" Date: Thu, 23 Jan 2025 18:56:08 +0100 Subject: [PATCH 1/7] fix(manager/custom): Support range strategy with custom managers Fixes: https://github.com/renovatebot/renovate/discussions/28090 --- lib/modules/manager/index.spec.ts | 11 +++++++++++ lib/modules/manager/index.ts | 7 +++++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/lib/modules/manager/index.spec.ts b/lib/modules/manager/index.spec.ts index 1c635b82ff6dfe..446cf84748515b 100644 --- a/lib/modules/manager/index.spec.ts +++ b/lib/modules/manager/index.spec.ts @@ -180,6 +180,17 @@ describe('modules/manager/index', () => { ).toBeNull(); }); + it('handles custom managers', () => { + customManager.getCustomManagers().set('dummy', { + 'defaultConfig': {}, + 'supportedDatasources': [], + 'getRangeStrategy': () => 'bump', + }); + expect( + manager.getRangeStrategy({ manager: 'dummy', rangeStrategy: 'auto' }), + ).not.toBeNull(); + }); + it('returns non-null', () => { manager.getManagers().set('dummy', { defaultConfig: {}, diff --git a/lib/modules/manager/index.ts b/lib/modules/manager/index.ts index e4f9eace2969a3..fb40089e86e979 100644 --- a/lib/modules/manager/index.ts +++ b/lib/modules/manager/index.ts @@ -78,10 +78,13 @@ export function extractPackageFile( export function getRangeStrategy(config: RangeConfig): RangeStrategy | null { const { manager, rangeStrategy } = config; - if (!manager || !managers.has(manager)) { + if (!manager) { + return null; + } + const m = managers.get(manager)! ?? customManagers.get(manager)!; + if (!m) { return null; } - const m = managers.get(manager)!; if (m.getRangeStrategy) { // Use manager's own function if it exists const managerRangeStrategy = m.getRangeStrategy(config); From eca8e1f174e6cf885e8efb91ff088d44618ebfaf Mon Sep 17 00:00:00 2001 From: "M.P. Korstanje" Date: Thu, 23 Jan 2025 19:05:47 +0100 Subject: [PATCH 2/7] Focus tests on actual outcome --- lib/modules/manager/index.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/modules/manager/index.spec.ts b/lib/modules/manager/index.spec.ts index 446cf84748515b..1e22f80073ee00 100644 --- a/lib/modules/manager/index.spec.ts +++ b/lib/modules/manager/index.spec.ts @@ -188,7 +188,7 @@ describe('modules/manager/index', () => { }); expect( manager.getRangeStrategy({ manager: 'dummy', rangeStrategy: 'auto' }), - ).not.toBeNull(); + ).toBe('bump'); }); it('returns non-null', () => { From be62dd61baf11848f6c0f57271cb6818cf7f913f Mon Sep 17 00:00:00 2001 From: "M.P. Korstanje" Date: Thu, 23 Jan 2025 19:06:58 +0100 Subject: [PATCH 3/7] Prettier --- lib/modules/manager/index.spec.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/modules/manager/index.spec.ts b/lib/modules/manager/index.spec.ts index 1e22f80073ee00..d985c3997e3708 100644 --- a/lib/modules/manager/index.spec.ts +++ b/lib/modules/manager/index.spec.ts @@ -182,9 +182,9 @@ describe('modules/manager/index', () => { it('handles custom managers', () => { customManager.getCustomManagers().set('dummy', { - 'defaultConfig': {}, - 'supportedDatasources': [], - 'getRangeStrategy': () => 'bump', + defaultConfig: {}, + supportedDatasources: [], + getRangeStrategy: () => 'bump', }); expect( manager.getRangeStrategy({ manager: 'dummy', rangeStrategy: 'auto' }), From 46c24120ced4d8a0f689e28f373247940eee445d Mon Sep 17 00:00:00 2001 From: "M.P. Korstanje" Date: Fri, 24 Jan 2025 16:02:11 +0100 Subject: [PATCH 4/7] Coverage --- lib/modules/manager/index.spec.ts | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/lib/modules/manager/index.spec.ts b/lib/modules/manager/index.spec.ts index d985c3997e3708..25bc719f006dd0 100644 --- a/lib/modules/manager/index.spec.ts +++ b/lib/modules/manager/index.spec.ts @@ -170,7 +170,7 @@ describe('modules/manager/index', () => { }); describe('getRangeStrategy', () => { - it('returns null', () => { + it('returns null for a unknown manager', () => { manager.getManagers().set('dummy', { defaultConfig: {}, supportedDatasources: [], @@ -180,6 +180,16 @@ describe('modules/manager/index', () => { ).toBeNull(); }); + it('returns null for a undefined manager', () => { + manager.getManagers().set('dummy', { + defaultConfig: {}, + supportedDatasources: [], + }); + expect( + manager.getRangeStrategy({ rangeStrategy: 'auto' }), + ).toBeNull(); + }); + it('handles custom managers', () => { customManager.getCustomManagers().set('dummy', { defaultConfig: {}, From 7991d7af663e557b73d1675bcef00e897321e1dc Mon Sep 17 00:00:00 2001 From: "M.P. Korstanje" Date: Fri, 24 Jan 2025 16:09:41 +0100 Subject: [PATCH 5/7] Prettier --- lib/modules/manager/index.spec.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/lib/modules/manager/index.spec.ts b/lib/modules/manager/index.spec.ts index 25bc719f006dd0..d1f7ee871f2fd0 100644 --- a/lib/modules/manager/index.spec.ts +++ b/lib/modules/manager/index.spec.ts @@ -185,9 +185,7 @@ describe('modules/manager/index', () => { defaultConfig: {}, supportedDatasources: [], }); - expect( - manager.getRangeStrategy({ rangeStrategy: 'auto' }), - ).toBeNull(); + expect(manager.getRangeStrategy({ rangeStrategy: 'auto' })).toBeNull(); }); it('handles custom managers', () => { From fd4e6015385cf326e446955192b3ee5161e92d2d Mon Sep 17 00:00:00 2001 From: "M.P. Korstanje" Date: Tue, 28 Jan 2025 09:43:41 +0100 Subject: [PATCH 6/7] Update lib/modules/manager/index.ts Co-authored-by: Michael Kriese --- lib/modules/manager/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/modules/manager/index.ts b/lib/modules/manager/index.ts index fb40089e86e979..38a80e5c218784 100644 --- a/lib/modules/manager/index.ts +++ b/lib/modules/manager/index.ts @@ -81,7 +81,7 @@ export function getRangeStrategy(config: RangeConfig): RangeStrategy | null { if (!manager) { return null; } - const m = managers.get(manager)! ?? customManagers.get(manager)!; + const m = managers.get(manager) ?? customManagers.get(manager); if (!m) { return null; } From e3fe78146228740ad76dc794750bc2e8d19f5200 Mon Sep 17 00:00:00 2001 From: "M.P. Korstanje" Date: Wed, 29 Jan 2025 08:50:17 +0100 Subject: [PATCH 7/7] Clarify tests --- lib/modules/manager/index.spec.ts | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/lib/modules/manager/index.spec.ts b/lib/modules/manager/index.spec.ts index d1f7ee871f2fd0..96411f363a0836 100644 --- a/lib/modules/manager/index.spec.ts +++ b/lib/modules/manager/index.spec.ts @@ -188,10 +188,22 @@ describe('modules/manager/index', () => { expect(manager.getRangeStrategy({ rangeStrategy: 'auto' })).toBeNull(); }); + it('returns non-null for a custom manager', () => { + customManager.getCustomManagers().set('dummy', { + defaultConfig: {}, + supportedDatasources: [], + }); + expect( + manager.getRangeStrategy({ manager: 'dummy', rangeStrategy: 'auto' }), + ).not.toBeNull(); + }); + it('handles custom managers', () => { customManager.getCustomManagers().set('dummy', { defaultConfig: {}, supportedDatasources: [], + // For completeness. Custom managers are configured in json and can not + // provide a range strategy (yet) but the interface allows for it. getRangeStrategy: () => 'bump', }); expect(