From 6964458df17e181bb4fd5df000f46387e860cbb7 Mon Sep 17 00:00:00 2001 From: RahulGautamSingh <rahultesnik@gmail.com> Date: Fri, 17 Jan 2025 21:28:40 +0530 Subject: [PATCH] fix(config/inherited): set `hostRules` (#33530) --- lib/workers/repository/init/inherited.spec.ts | 23 +++++++++++++++- lib/workers/repository/init/inherited.ts | 26 +++++++++++++++++++ 2 files changed, 48 insertions(+), 1 deletion(-) diff --git a/lib/workers/repository/init/inherited.spec.ts b/lib/workers/repository/init/inherited.spec.ts index e31f5ba2fc..5808c82d53 100644 --- a/lib/workers/repository/init/inherited.spec.ts +++ b/lib/workers/repository/init/inherited.spec.ts @@ -1,4 +1,4 @@ -import { mocked, platform } from '../../../../test/util'; +import { hostRules, mocked, platform } from '../../../../test/util'; import * as presets_ from '../../../config/presets'; import type { RenovateConfig } from '../../../config/types'; import * as validation from '../../../config/validation'; @@ -91,6 +91,27 @@ describe('workers/repository/init/inherited', () => { expect(logger.warn).not.toHaveBeenCalled(); }); + it('should set hostRules from inherited config', async () => { + platform.getRawFile.mockResolvedValue( + `{ + "hostRules": [ + { + "matchHost": "some-host-url", + "token": "some-token" + } + ] + }`, + ); + const res = await mergeInheritedConfig(config); + expect(hostRules.getAll()).toMatchObject([ + { + matchHost: 'some-host-url', + token: 'some-token', + }, + ]); + expect(res.hostRules).toBeUndefined(); + }); + it('should resolve presets found in inherited config', async () => { platform.getRawFile.mockResolvedValue( '{"onboarding":false,"labels":["test"],"extends":[":automergeAll"]}', diff --git a/lib/workers/repository/init/inherited.ts b/lib/workers/repository/init/inherited.ts index d924ff825b..da497ca5ae 100644 --- a/lib/workers/repository/init/inherited.ts +++ b/lib/workers/repository/init/inherited.ts @@ -12,6 +12,9 @@ import { } from '../../../constants/error-messages'; import { logger } from '../../../logger'; import { platform } from '../../../modules/platform'; +import * as hostRules from '../../../util/host-rules'; +import * as queue from '../../../util/http/queue'; +import * as throttle from '../../../util/http/throttle'; import * as template from '../../../util/template'; export async function mergeInheritedConfig( @@ -102,6 +105,7 @@ export async function mergeInheritedConfig( } if (is.nullOrUndefined(filteredConfig.extends)) { + setInheritedHostRules(filteredConfig); return mergeChildConfig(config, filteredConfig); } @@ -137,5 +141,27 @@ export async function mergeInheritedConfig( ); } + setInheritedHostRules(filteredConfig); return mergeChildConfig(config, filteredConfig); } + +function setInheritedHostRules(config: RenovateConfig): void { + if (config.hostRules) { + logger.debug('Setting hostRules from config'); + for (const rule of config.hostRules) { + try { + hostRules.add(rule); + } catch (err) { + // istanbul ignore next + logger.warn( + { err, config: rule }, + 'Error setting hostRule from config', + ); + } + } + // host rules can change concurrency + queue.clear(); + throttle.clear(); + delete config.hostRules; + } +} -- GitLab