diff --git a/lib/manager/poetry/artifacts.ts b/lib/manager/poetry/artifacts.ts index 7c0ea5d3481dc4ac00382e5bcbc8ae22502dd582..fb86ed27062267d18c558a454fac5bf0d6db981c 100644 --- a/lib/manager/poetry/artifacts.ts +++ b/lib/manager/poetry/artifacts.ts @@ -1,7 +1,6 @@ import { parse, join } from 'upath'; import { outputFile, readFile } from 'fs-extra'; -import { exec } from '../../util/exec'; -import { getChildProcessEnv } from '../../util/exec/env'; +import { exec, ExecOptions } from '../../util/exec'; import { logger } from '../../logger'; import { UpdateArtifactsConfig, UpdateArtifactsResult } from '../common'; import { platform } from '../../platform'; @@ -37,30 +36,24 @@ export async function updateArtifacts( try { await outputFile(localPackageFileName, newPackageFileContent); logger.debug(`Updating ${lockFileName}`); - const cwd = join(config.localDir, subDirectory); - const env = getChildProcessEnv(); - let cmd: string; + + let cmd = 'poetry'; + const execOptions: ExecOptions = { + cwd: join(config.localDir, subDirectory), + }; + if (config.binarySource === 'docker') { logger.info('Running poetry via docker'); - cmd = `docker run --rm `; - if (config.dockerUser) { - cmd += `--user=${config.dockerUser} `; - } - const volumes = [cwd]; - cmd += volumes.map(v => `-v "${v}":"${v}" `).join(''); - cmd += `-w "${cwd}" `; - cmd += `renovate/poetry poetry`; + execOptions.docker = { + image: 'renovate/poetry', + }; } else { logger.info('Running poetry via global poetry'); - cmd = 'poetry'; } for (let i = 0; i < updatedDeps.length; i += 1) { const dep = updatedDeps[i]; cmd += ` update --lock --no-interaction ${dep}`; - await exec(cmd, { - cwd, - env, - }); + await exec(cmd, execOptions); } const newPoetryLockContent = await readFile(localLockFileName, 'utf8'); if (existingLockFileContent === newPoetryLockContent) { diff --git a/test/manager/poetry/__snapshots__/artifacts.spec.ts.snap b/test/manager/poetry/__snapshots__/artifacts.spec.ts.snap index ecd64a4f2edd2136af275265f2a1b9a6d49daa99..ccb843e4cde8487121c89c1d35a0849995531f28 100644 --- a/test/manager/poetry/__snapshots__/artifacts.spec.ts.snap +++ b/test/manager/poetry/__snapshots__/artifacts.spec.ts.snap @@ -53,7 +53,7 @@ Array [ exports[`.updateArtifacts() returns updated poetry.lock using docker 1`] = ` Array [ Object { - "cmd": "docker run --rm --user=foobar -v \\"/tmp/github/some/repo\\":\\"/tmp/github/some/repo\\" -w \\"/tmp/github/some/repo\\" renovate/poetry poetry update --lock --no-interaction dep1", + "cmd": "docker run --rm --user=foobar -v \\"/tmp/github/some/repo\\":\\"/tmp/github/some/repo\\" -w \\"/tmp/github/some/repo\\" renovate/poetry bash -l -c \\"poetry update --lock --no-interaction dep1\\"", "options": Object { "cwd": "/tmp/github/some/repo", "encoding": "utf-8", diff --git a/test/manager/poetry/artifacts.spec.ts b/test/manager/poetry/artifacts.spec.ts index 5ad9d3a09d8fb4f17189c801562fddfa9effe08e..fdae175f1c02178c857670b316ed8520e05fdca6 100644 --- a/test/manager/poetry/artifacts.spec.ts +++ b/test/manager/poetry/artifacts.spec.ts @@ -1,3 +1,4 @@ +import { join } from 'upath'; import _fs from 'fs-extra'; import { exec as _exec } from 'child_process'; import { updateArtifacts } from '../../../lib/manager/poetry/artifacts'; @@ -5,6 +6,7 @@ import { platform as _platform } from '../../../lib/platform'; import { mocked } from '../../util'; import { envMock, mockExecAll } from '../../execUtil'; import * as _env from '../../../lib/util/exec/env'; +import { setDockerConfig } from '../../../lib/util/exec/docker'; jest.mock('fs-extra'); jest.mock('child_process'); @@ -16,13 +18,17 @@ const env = mocked(_env); const platform = mocked(_platform); const config = { - localDir: '/tmp/github/some/repo', + localDir: join('/tmp/github/some/repo'), }; describe('.updateArtifacts()', () => { beforeEach(() => { jest.resetAllMocks(); env.getChildProcessEnv.mockReturnValue(envMock.basic); + setDockerConfig({ + ...config, + dockerUser: 'foobar', + }); }); it('returns null if no poetry.lock found', async () => { const updatedDeps = ['dep1'];