From 6984a02f875ba842c79fb3575cfc3f15323825fb Mon Sep 17 00:00:00 2001
From: Nicolas Da Mutten <nicolas@damutten.ch>
Date: Fri, 29 Jan 2021 10:54:55 +0100
Subject: [PATCH] fix(config): Support local presets in bot admin config
 (#8195)

---
 .../presets/__snapshots__/index.spec.ts.snap    |  8 ++++++++
 lib/config/presets/index.spec.ts                | 17 +++++++++++++++++
 lib/config/presets/index.ts                     |  2 +-
 3 files changed, 26 insertions(+), 1 deletion(-)

diff --git a/lib/config/presets/__snapshots__/index.spec.ts.snap b/lib/config/presets/__snapshots__/index.spec.ts.snap
index 526fe229dc..26cb932f6d 100644
--- a/lib/config/presets/__snapshots__/index.spec.ts.snap
+++ b/lib/config/presets/__snapshots__/index.spec.ts.snap
@@ -487,6 +487,14 @@ Object {
 }
 `;
 
+exports[`config/presets resolvePreset resolves self-hosted presets without baseConfig 1`] = `
+Object {
+  "labels": Array [
+    "self-hosted resolved",
+  ],
+}
+`;
+
 exports[`config/presets resolvePreset returns same if no presets 1`] = `
 Object {
   "foo": 1,
diff --git a/lib/config/presets/index.spec.ts b/lib/config/presets/index.spec.ts
index bffa7bdfd8..80c13d282b 100644
--- a/lib/config/presets/index.spec.ts
+++ b/lib/config/presets/index.spec.ts
@@ -1,13 +1,16 @@
 import { RenovateConfig } from '..';
 import { mocked } from '../../../test/util';
 import presetIkatyang from './__fixtures__/renovate-config-ikatyang.json';
+import * as _local from './local';
 import * as _npm from './npm';
 import * as presets from '.';
 
 jest.mock('./npm');
 jest.mock('./github');
+jest.mock('./local');
 
 const npm = mocked(_npm);
+const local = mocked(_local);
 
 npm.getPreset = jest.fn(({ packageName, presetName }) => {
   if (packageName === 'renovate-config-ikatyang') {
@@ -177,6 +180,20 @@ describe('config/presets', () => {
       expect(config).toMatchObject(res);
       expect(res).toMatchSnapshot();
     });
+
+    it('resolves self-hosted presets without baseConfig', async () => {
+      config.extends = ['local>username/preset-repo'];
+      local.getPreset = jest.fn(({ packageName, presetName, baseConfig }) =>
+        Promise.resolve({ labels: ['self-hosted resolved'] })
+      );
+
+      const res = await presets.resolveConfigPresets(config);
+
+      expect(res.labels).toEqual(['self-hosted resolved']);
+      expect(local.getPreset.mock.calls).toHaveLength(1);
+      expect(local.getPreset.mock.calls[0][0].baseConfig).not.toBeUndefined();
+      expect(res).toMatchSnapshot();
+    });
   });
   describe('replaceArgs', () => {
     const argMappings = {
diff --git a/lib/config/presets/index.ts b/lib/config/presets/index.ts
index d48fb6a0e7..a6e1ddea58 100644
--- a/lib/config/presets/index.ts
+++ b/lib/config/presets/index.ts
@@ -214,7 +214,7 @@ export async function resolveConfigPresets(
         logger.trace(`Resolving preset "${preset}"`);
         let fetchedPreset: RenovateConfig;
         try {
-          fetchedPreset = await getPreset(preset, baseConfig);
+          fetchedPreset = await getPreset(preset, baseConfig ?? inputConfig);
         } catch (err) {
           logger.debug({ preset, err }, 'Preset fetch error');
           // istanbul ignore if
-- 
GitLab