From 634eb8f8e30c4bf48c4522f8a1a7b62899645e88 Mon Sep 17 00:00:00 2001
From: Rhys Arkins <rhys@arkins.net>
Date: Tue, 14 Feb 2023 10:38:53 +0200
Subject: [PATCH] fix(poetry): support fixed version constraint (#20381)

---
 lib/modules/manager/poetry/artifacts.spec.ts | 18 +++++++++++++++---
 lib/modules/manager/poetry/artifacts.ts      | 13 ++++++++-----
 2 files changed, 23 insertions(+), 8 deletions(-)

diff --git a/lib/modules/manager/poetry/artifacts.spec.ts b/lib/modules/manager/poetry/artifacts.spec.ts
index 4af0295f49..7ca281a043 100644
--- a/lib/modules/manager/poetry/artifacts.spec.ts
+++ b/lib/modules/manager/poetry/artifacts.spec.ts
@@ -240,6 +240,10 @@ describe('modules/manager/poetry/artifacts', () => {
     datasource.getPkgReleases.mockResolvedValueOnce({
       releases: [{ version: '2.7.5' }, { version: '3.4.2' }],
     });
+    // poetry
+    datasource.getPkgReleases.mockResolvedValueOnce({
+      releases: [{ version: '1.2.0' }],
+    });
     const updatedDeps = [{ depName: 'dep1' }];
     expect(
       await updateArtifacts({
@@ -278,7 +282,7 @@ describe('modules/manager/poetry/artifacts', () => {
           'bash -l -c "' +
           'install-tool python 3.4.2 ' +
           '&& ' +
-          "pip install --user 'poetry>=1.0' " +
+          'install-tool poetry 1.2.0 ' +
           '&& ' +
           'poetry update --lock --no-interaction dep1' +
           '"',
@@ -301,6 +305,10 @@ describe('modules/manager/poetry/artifacts', () => {
     datasource.getPkgReleases.mockResolvedValueOnce({
       releases: [{ version: '2.7.5' }, { version: '3.3.2' }],
     });
+    // poetry
+    datasource.getPkgReleases.mockResolvedValueOnce({
+      releases: [{ version: '1.0.0' }, { version: '1.2.0' }],
+    });
     const updatedDeps = [{ depName: 'dep1' }];
     expect(
       await updateArtifacts({
@@ -337,7 +345,7 @@ describe('modules/manager/poetry/artifacts', () => {
           'bash -l -c "' +
           'install-tool python 2.7.5 ' +
           '&& ' +
-          "pip install --user 'poetry>=1.0' " +
+          'install-tool poetry 1.2.0 ' +
           '&& ' +
           'poetry update --lock --no-interaction dep1' +
           '"',
@@ -358,6 +366,10 @@ describe('modules/manager/poetry/artifacts', () => {
     datasource.getPkgReleases.mockResolvedValueOnce({
       releases: [{ version: '2.7.5' }, { version: '3.3.2' }],
     });
+    // poetry
+    datasource.getPkgReleases.mockResolvedValueOnce({
+      releases: [{ version: '1.2.0' }],
+    });
     const updatedDeps = [{ depName: 'dep1' }];
     expect(
       await updateArtifacts({
@@ -381,7 +393,7 @@ describe('modules/manager/poetry/artifacts', () => {
 
     expect(execSnapshots).toMatchObject([
       { cmd: 'install-tool python 2.7.5' },
-      { cmd: "pip install --user 'poetry>=1.0'" },
+      { cmd: 'install-tool poetry 1.2.0' },
       { cmd: 'poetry update --lock --no-interaction dep1' },
     ]);
   });
diff --git a/lib/modules/manager/poetry/artifacts.ts b/lib/modules/manager/poetry/artifacts.ts
index 56a1dab6d2..bb2a1b42b6 100644
--- a/lib/modules/manager/poetry/artifacts.ts
+++ b/lib/modules/manager/poetry/artifacts.ts
@@ -173,8 +173,11 @@ export async function updateArtifacts({
           .join(' ')}`
       );
     }
-    const constraint = getPythonConstraint(existingLockFileContent, config);
-    const poetryVersion =
+    const pythonConstraint = getPythonConstraint(
+      existingLockFileContent,
+      config
+    );
+    const poetryConstraint =
       config.constraints?.poetry ?? getPoetryRequirement(newPackageFileContent);
     const extraEnv = {
       ...getSourceCredentialVars(newPackageFileContent, packageFileName),
@@ -185,9 +188,9 @@ export async function updateArtifacts({
       cwdFile: packageFileName,
       extraEnv,
       docker: {},
-      toolConstraints: [{ toolName: 'python', constraint }],
-      preCommands: [
-        `pip install --user ${quote(`poetry${poetryVersion ?? ''}`)}`,
+      toolConstraints: [
+        { toolName: 'python', constraint: pythonConstraint },
+        { toolName: 'poetry', constraint: poetryConstraint },
       ],
     };
     await exec(cmd, execOptions);
-- 
GitLab