From 94cfaecef23dd28609cf038599b907704c7a7562 Mon Sep 17 00:00:00 2001
From: Gary Lockett <gary@creativecow.uk>
Date: Mon, 29 Aug 2022 07:31:33 +0100
Subject: [PATCH] fix(manager/composer): match composer's handling of the patch
 number for platform PHP version (#17299)

Signed-off-by: Gary Lockett <gary@creativecow.uk>
---
 lib/modules/manager/composer/utils.spec.ts | 50 +++++++++++++++++++++-
 lib/modules/manager/composer/utils.ts      |  5 ++-
 2 files changed, 53 insertions(+), 2 deletions(-)

diff --git a/lib/modules/manager/composer/utils.spec.ts b/lib/modules/manager/composer/utils.spec.ts
index 5cb4691186..4f2e0fd5ff 100644
--- a/lib/modules/manager/composer/utils.spec.ts
+++ b/lib/modules/manager/composer/utils.spec.ts
@@ -27,7 +27,55 @@ describe('modules/manager/composer/utils', () => {
           },
           {}
         )
-      ).toEqual({ composer: '1.*', php: '7.4.27' });
+      ).toEqual({ composer: '1.*', php: '<=7.4.27' });
+    });
+
+    it('returns platform 0 minor php version', () => {
+      expect(
+        extractConstraints(
+          {
+            config: { platform: { php: '7.0.5' } },
+            require: { php: '^7.0 || ~8.0' },
+          },
+          {}
+        )
+      ).toEqual({ composer: '1.*', php: '<=7.0.5' });
+    });
+
+    it('returns platform 0 patch php version', () => {
+      expect(
+        extractConstraints(
+          {
+            config: { platform: { php: '7.4.0' } },
+            require: { php: '^7.0 || ~8.0' },
+          },
+          {}
+        )
+      ).toEqual({ composer: '1.*', php: '<=7.4.0' });
+    });
+
+    it('returns platform lowest minor php version', () => {
+      expect(
+        extractConstraints(
+          {
+            config: { platform: { php: '7' } },
+            require: { php: '^7.0 || ~8.0' },
+          },
+          {}
+        )
+      ).toEqual({ composer: '1.*', php: '<=7.0.0' });
+    });
+
+    it('returns platform lowest patch php version', () => {
+      expect(
+        extractConstraints(
+          {
+            config: { platform: { php: '7.4' } },
+            require: { php: '~7.4 || ~8.0' },
+          },
+          {}
+        )
+      ).toEqual({ composer: '1.*', php: '<=7.4.0' });
     });
 
     it('returns from require-dev', () => {
diff --git a/lib/modules/manager/composer/utils.ts b/lib/modules/manager/composer/utils.ts
index 166d4c5ee7..3571196ad3 100644
--- a/lib/modules/manager/composer/utils.ts
+++ b/lib/modules/manager/composer/utils.ts
@@ -75,7 +75,10 @@ export function extractConstraints(
 
   // extract php
   if (composerJson.config?.platform?.php) {
-    res.php = composerJson.config.platform.php;
+    const major = api.getMajor(composerJson.config.platform.php);
+    const minor = api.getMinor(composerJson.config.platform.php) ?? 0;
+    const patch = api.getPatch(composerJson.config.platform.php) ?? 0;
+    res.php = `<=${major}.${minor}.${patch}`;
   } else if (composerJson.require?.php) {
     res.php = composerJson.require.php;
   }
-- 
GitLab