From 537f534f13c4b637206b2e0acd31f7911f00066c Mon Sep 17 00:00:00 2001 From: Rhys Arkins <rhys@arkins.net> Date: Sun, 7 Mar 2021 09:17:45 +0100 Subject: [PATCH] fix(poetry): poetry install constraints quoting (#9012) * fix(poetry): extract poetry.core.masonry.api * fix(poetry): quote install requirements individually --- lib/manager/poetry/__fixtures__/pyproject.2.toml | 4 ++++ lib/manager/poetry/__fixtures__/pyproject.4.toml | 4 ++++ lib/manager/poetry/__snapshots__/artifacts.spec.ts.snap | 2 +- lib/manager/poetry/__snapshots__/extract.spec.ts.snap | 8 ++++++-- lib/manager/poetry/artifacts.spec.ts | 5 ++++- lib/manager/poetry/artifacts.ts | 3 ++- lib/manager/poetry/extract.ts | 4 +++- 7 files changed, 24 insertions(+), 6 deletions(-) diff --git a/lib/manager/poetry/__fixtures__/pyproject.2.toml b/lib/manager/poetry/__fixtures__/pyproject.2.toml index 906c83920b..615286f223 100644 --- a/lib/manager/poetry/__fixtures__/pyproject.2.toml +++ b/lib/manager/poetry/__fixtures__/pyproject.2.toml @@ -14,3 +14,7 @@ dep4 = { path = "/some/path/" } extra_dep1 = "^0.8.3" extra_dep2 = "^0.9.4" extra_dep3 = '^0.4.0' + +[build-system] +requires = ["poetry>=1.0", "wheel"] +build-backend = "poetry.core.masonry.api" diff --git a/lib/manager/poetry/__fixtures__/pyproject.4.toml b/lib/manager/poetry/__fixtures__/pyproject.4.toml index 0ae8e12d56..bcbc4a05c5 100644 --- a/lib/manager/poetry/__fixtures__/pyproject.4.toml +++ b/lib/manager/poetry/__fixtures__/pyproject.4.toml @@ -9,3 +9,7 @@ foo = [ {version = "<=1.9", python = "^2.7"}, {version = "^2.0", python = "^3.4"} ] + +[build-system] +requires = ["poetry>=1.1.2", "setuptools", "poetry-dynamic-versioning"] +build-backend = "poetry.masonry.api" diff --git a/lib/manager/poetry/__snapshots__/artifacts.spec.ts.snap b/lib/manager/poetry/__snapshots__/artifacts.spec.ts.snap index 145316feda..0ac8920c45 100644 --- a/lib/manager/poetry/__snapshots__/artifacts.spec.ts.snap +++ b/lib/manager/poetry/__snapshots__/artifacts.spec.ts.snap @@ -135,7 +135,7 @@ Array [ }, }, Object { - "cmd": "docker run --rm --name=renovate_python --label=renovate_child -v \\"/tmp/github/some/repo\\":\\"/tmp/github/some/repo\\" -w \\"/tmp/github/some/repo\\" renovate/python:3.4.2 bash -l -c \\"pip install poetry && poetry update --lock --no-interaction dep1\\"", + "cmd": "docker run --rm --name=renovate_python --label=renovate_child -v \\"/tmp/github/some/repo\\":\\"/tmp/github/some/repo\\" -w \\"/tmp/github/some/repo\\" renovate/python:3.4.2 bash -l -c \\"pip install 'poetry>=1.1.2' setuptools 'poetry-dynamic-versioning>1' && poetry update --lock --no-interaction dep1\\"", "options": Object { "cwd": "/tmp/github/some/repo", "encoding": "utf-8", diff --git a/lib/manager/poetry/__snapshots__/extract.spec.ts.snap b/lib/manager/poetry/__snapshots__/extract.spec.ts.snap index e71f6593a5..4f7984056b 100644 --- a/lib/manager/poetry/__snapshots__/extract.spec.ts.snap +++ b/lib/manager/poetry/__snapshots__/extract.spec.ts.snap @@ -358,7 +358,9 @@ Object { exports[`lib/manager/poetry/extract extractPackageFile() extracts multiple dependencies (with dep = {version = "1.2.3"} case) 1`] = ` Object { - "constraints": Object {}, + "constraints": Object { + "poetry": "poetry>=1.0 wheel", + }, "deps": Array [ Object { "currentValue": "*", @@ -540,7 +542,9 @@ Array [ exports[`lib/manager/poetry/extract extractPackageFile() handles multiple constraint dependencies 1`] = ` Object { - "constraints": Object {}, + "constraints": Object { + "poetry": "poetry>=1.1.2 setuptools poetry-dynamic-versioning", + }, "deps": Array [ Object { "currentValue": "", diff --git a/lib/manager/poetry/artifacts.spec.ts b/lib/manager/poetry/artifacts.spec.ts index f08480e771..c8a8aa9cb8 100644 --- a/lib/manager/poetry/artifacts.spec.ts +++ b/lib/manager/poetry/artifacts.spec.ts @@ -150,7 +150,10 @@ describe('.updateArtifacts()', () => { newPackageFileContent: '{}', config: { ...config, - constraints: { python: '~2.7 || ^3.4' }, + constraints: { + python: '~2.7 || ^3.4', + poetry: 'poetry>=1.1.2 setuptools poetry-dynamic-versioning>1', + }, }, }) ).not.toBeNull(); diff --git a/lib/manager/poetry/artifacts.ts b/lib/manager/poetry/artifacts.ts index 1a7a3eb7d6..c55f9c2afd 100644 --- a/lib/manager/poetry/artifacts.ts +++ b/lib/manager/poetry/artifacts.ts @@ -122,7 +122,8 @@ export async function updateArtifacts({ } const tagConstraint = getPythonConstraint(existingLockFileContent, config); const poetryRequirement = config.constraints?.poetry || 'poetry'; - const poetryInstall = 'pip install ' + quote(poetryRequirement); + const poetryInstall = + 'pip install ' + poetryRequirement.split(' ').map(quote).join(' '); const extraEnv = getSourceCredentialVars( newPackageFileContent, packageFileName diff --git a/lib/manager/poetry/extract.ts b/lib/manager/poetry/extract.ts index d57ad2c9c5..c74a695fce 100644 --- a/lib/manager/poetry/extract.ts +++ b/lib/manager/poetry/extract.ts @@ -151,7 +151,9 @@ export async function extractPackageFile( // https://python-poetry.org/docs/pyproject/#poetry-and-pep-517 if ( - pyprojectfile['build-system']?.['build-backend'] === 'poetry.masonry.api' + pyprojectfile['build-system']?.['build-backend'] === 'poetry.masonry.api' || + pyprojectfile['build-system']?.['build-backend'] === + 'poetry.core.masonry.api' ) { constraints.poetry = pyprojectfile['build-system']?.requires.join(' '); } -- GitLab