From 8d0c72af063d17c8f3979b98a662503875677f4e Mon Sep 17 00:00:00 2001
From: Rhys Arkins <rhys@arkins.net>
Date: Tue, 26 Jul 2022 07:25:37 +0200
Subject: [PATCH] fix(config): filter out invalid massaged packageRules
 (#16778)

Closes #16777
---
 lib/config/massage.spec.ts | 15 +++++++++++++++
 lib/config/massage.ts      | 13 ++++++++++++-
 2 files changed, 27 insertions(+), 1 deletion(-)

diff --git a/lib/config/massage.spec.ts b/lib/config/massage.spec.ts
index 0d5ac6b4fd..117b3e5a76 100644
--- a/lib/config/massage.spec.ts
+++ b/lib/config/massage.spec.ts
@@ -46,6 +46,21 @@ describe('config/massage', () => {
       expect(res.packageRules).toHaveLength(3);
     });
 
+    it('filters packageRules with only match/exclude', () => {
+      const config: RenovateConfig = {
+        packageRules: [
+          {
+            matchBaseBranches: ['main'],
+            major: {
+              enabled: true,
+            },
+          },
+        ],
+      };
+      const res = massage.massageConfig(config);
+      expect(res.packageRules).toHaveLength(1);
+    });
+
     it('does not massage lockFileMaintenance', () => {
       const config: RenovateConfig = {
         packageRules: [
diff --git a/lib/config/massage.ts b/lib/config/massage.ts
index ef3fff325a..094237c11b 100644
--- a/lib/config/massage.ts
+++ b/lib/config/massage.ts
@@ -40,7 +40,7 @@ export function massageConfig(config: RenovateConfig): RenovateConfig {
     }
   }
   if (is.nonEmptyArray(massagedConfig.packageRules)) {
-    const newRules: PackageRule[] = [];
+    let newRules: PackageRule[] = [];
     const updateTypes: UpdateType[] = [
       'major',
       'minor',
@@ -74,6 +74,17 @@ export function massageConfig(config: RenovateConfig): RenovateConfig {
         delete rule[updateType];
       });
     }
+    newRules = newRules.filter((rule) => {
+      if (
+        Object.keys(rule).every(
+          (key) => key.startsWith('match') || key.startsWith('exclude')
+        )
+      ) {
+        // Exclude rules which contain only match or exclude options
+        return false;
+      }
+      return true;
+    });
     massagedConfig.packageRules = newRules;
   }
   return massagedConfig;
-- 
GitLab