diff --git a/lib/config/types.ts b/lib/config/types.ts index d7815f369093ad0edda8bac795be1d4ec4b20484..89718fdf47969592cfe3aa6793813fd5f9d10244 100644 --- a/lib/config/types.ts +++ b/lib/config/types.ts @@ -84,7 +84,7 @@ export interface RenovateSharedConfig { // The below should contain config options where stage=global export interface GlobalOnlyConfig { autodiscover?: boolean; - autodiscoverFilter?: string[]; + autodiscoverFilter?: string[] | string; baseDir?: string; cacheDir?: string; containerbaseDir?: string; diff --git a/lib/workers/global/autodiscover.spec.ts b/lib/workers/global/autodiscover.spec.ts index c2409d94087d929d3bdd89b4e7777bf557bac688..a9e30c327b91ab39d30f347bd7ab35b14a9e74ad 100644 --- a/lib/workers/global/autodiscover.spec.ts +++ b/lib/workers/global/autodiscover.spec.ts @@ -107,6 +107,20 @@ describe('workers/global/autodiscover', () => { expect(res.repositories).toEqual(['project/another-repo']); }); + it('filters autodiscovered github repos with minimatch negation', async () => { + config.autodiscover = true; + config.autodiscoverFilter = '!project/re*'; + config.platform = PlatformId.Github; + hostRules.find = jest.fn(() => ({ + token: 'abc', + })); + ghApi.getRepos = jest.fn(() => + Promise.resolve(['project/repo', 'project/another-repo']) + ); + const res = await autodiscoverRepositories(config); + expect(res.repositories).toEqual(['project/another-repo']); + }); + it('fail if regex pattern is not valid', async () => { config.autodiscover = true; config.autodiscoverFilter = ['/project/re**./']; diff --git a/lib/workers/global/autodiscover.ts b/lib/workers/global/autodiscover.ts index daad41efe2d9b5ff5b8dbbe52570f52037ab240c..99d1bc87925b41918d1416f24106d204224e8795 100644 --- a/lib/workers/global/autodiscover.ts +++ b/lib/workers/global/autodiscover.ts @@ -32,7 +32,12 @@ export async function autodiscoverRepositories( } if (config.autodiscoverFilter) { - discovered = applyFilters(discovered, config.autodiscoverFilter); + discovered = applyFilters( + discovered, + is.string(config.autodiscoverFilter) + ? [config.autodiscoverFilter] + : config.autodiscoverFilter + ); if (!discovered.length) { // Soft fail (no error thrown) if no accessible repositories match the filter @@ -40,6 +45,7 @@ export async function autodiscoverRepositories( return config; } } + logger.info( { length: discovered.length, repositories: discovered }, `Autodiscovered repositories`