From ac613076047c9ffed2eba5a29c8747be9d9c7e80 Mon Sep 17 00:00:00 2001
From: Rhys Arkins <rhys@arkins.net>
Date: Sun, 30 May 2021 06:01:24 +0200
Subject: [PATCH] fix(config): don't treat package.json like a config object
 (#10231)

Closes #10230
---
 .../repository/init/__snapshots__/merge.spec.ts.snap     | 7 +++++++
 lib/workers/repository/init/merge.spec.ts                | 2 ++
 lib/workers/repository/init/merge.ts                     | 6 ++++--
 lib/workers/repository/onboarding/branch/check.ts        | 9 +++++++--
 lib/workers/repository/onboarding/branch/index.spec.ts   | 8 ++++++++
 5 files changed, 28 insertions(+), 4 deletions(-)

diff --git a/lib/workers/repository/init/__snapshots__/merge.spec.ts.snap b/lib/workers/repository/init/__snapshots__/merge.spec.ts.snap
index 42481bc0f3..2271e01caa 100644
--- a/lib/workers/repository/init/__snapshots__/merge.spec.ts.snap
+++ b/lib/workers/repository/init/__snapshots__/merge.spec.ts.snap
@@ -66,4 +66,11 @@ Object {
 }
 `;
 
+exports[`workers/repository/init/merge detectRepoFileConfig() uses package.json config if found 2`] = `
+Object {
+  "configFileName": "package.json",
+  "configFileParsed": undefined,
+}
+`;
+
 exports[`workers/repository/init/merge mergeRenovateConfig() throws error if misconfigured 1`] = `[Error: config-validation]`;
diff --git a/lib/workers/repository/init/merge.spec.ts b/lib/workers/repository/init/merge.spec.ts
index b5e620a136..cf508943c1 100644
--- a/lib/workers/repository/init/merge.spec.ts
+++ b/lib/workers/repository/init/merge.spec.ts
@@ -53,6 +53,8 @@ describe(getName(), () => {
         },
       });
       fs.readLocalFile.mockResolvedValue(pJson);
+      platform.getJsonFile.mockResolvedValueOnce(pJson);
+      expect(await detectRepoFileConfig()).toMatchSnapshot();
       expect(await detectRepoFileConfig()).toMatchSnapshot();
     });
     it('returns error if cannot parse', async () => {
diff --git a/lib/workers/repository/init/merge.ts b/lib/workers/repository/init/merge.ts
index 79d029c8b1..aee5befe6b 100644
--- a/lib/workers/repository/init/merge.ts
+++ b/lib/workers/repository/init/merge.ts
@@ -26,9 +26,11 @@ export async function detectRepoFileConfig(): Promise<RepoFileConfig> {
   const cache = getCache();
   let { configFileName } = cache;
   if (configFileName) {
-    const configFileParsed = await platform.getJsonFile(configFileName);
+    let configFileParsed = await platform.getJsonFile(configFileName);
     if (configFileParsed) {
-      logger.debug('Existing config file confirmed');
+      if (configFileName === 'package.json') {
+        configFileParsed = configFileParsed.renovate;
+      }
       return { configFileName, configFileParsed };
     }
     logger.debug('Existing config file no longer exists');
diff --git a/lib/workers/repository/onboarding/branch/check.ts b/lib/workers/repository/onboarding/branch/check.ts
index 475f1e9bc9..1c1e2062e1 100644
--- a/lib/workers/repository/onboarding/branch/check.ts
+++ b/lib/workers/repository/onboarding/branch/check.ts
@@ -66,8 +66,13 @@ export const isOnboarded = async (config: RenovateConfig): Promise<boolean> => {
         cache.configFileName
       );
       if (configFileContent) {
-        logger.debug('Existing config file confirmed');
-        return true;
+        if (
+          cache.configFileName !== 'package.json' ||
+          configFileContent.renovate
+        ) {
+          logger.debug('Existing config file confirmed');
+          return true;
+        }
       }
     } catch (err) {
       // probably file doesn't exist
diff --git a/lib/workers/repository/onboarding/branch/index.spec.ts b/lib/workers/repository/onboarding/branch/index.spec.ts
index b7faee9dd8..43c2991ceb 100644
--- a/lib/workers/repository/onboarding/branch/index.spec.ts
+++ b/lib/workers/repository/onboarding/branch/index.spec.ts
@@ -131,6 +131,14 @@ describe(getName(), () => {
       expect(res.repoIsOnboarded).toBe(true);
     });
 
+    it('handles cached package.json', async () => {
+      cache.getCache.mockReturnValue({ configFileName: 'package.json' });
+      platform.getJsonFile.mockResolvedValueOnce({ renovate: {} });
+      fs.readLocalFile.mockResolvedValueOnce('{}');
+      const res = await checkOnboardingBranch(config);
+      expect(res.repoIsOnboarded).toBe(true);
+    });
+
     it('detects repo is onboarded via package.json config', async () => {
       git.getFileList.mockResolvedValueOnce(['package.json']);
       fs.readLocalFile.mockResolvedValueOnce('{"renovate":{}}');
-- 
GitLab