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