From db3d5443876d21eade0a4ca1cab67b437d9464dc Mon Sep 17 00:00:00 2001 From: Sergio Zharinov <zharinov@users.noreply.github.com> Date: Wed, 15 Jan 2020 14:37:52 +0400 Subject: [PATCH] fix(poetry): Use docker options (#5144) Co-authored-by: Rhys Arkins <rhys@arkins.net> --- lib/manager/poetry/artifacts.ts | 29 +++++++------------ .../__snapshots__/artifacts.spec.ts.snap | 2 +- test/manager/poetry/artifacts.spec.ts | 8 ++++- 3 files changed, 19 insertions(+), 20 deletions(-) diff --git a/lib/manager/poetry/artifacts.ts b/lib/manager/poetry/artifacts.ts index 7c0ea5d348..fb86ed2706 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 ecd64a4f2e..ccb843e4cd 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 5ad9d3a09d..fdae175f1c 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']; -- GitLab