From 3f2a0efe01b792eed310d0089fc1739acde14b20 Mon Sep 17 00:00:00 2001 From: Himanshu Mishra Date: Mon, 8 Mar 2021 14:00:17 +0100 Subject: [PATCH] backend-common: Use Record for envVars in runDockerContainer Signed-off-by: Himanshu Mishra --- packages/backend-common/src/util/docker.test.ts | 5 +++-- packages/backend-common/src/util/docker.ts | 14 ++++++++++---- .../src/stages/generate/techdocs.ts | 2 +- .../scaffolder/stages/templater/cookiecutter.ts | 2 +- .../src/scaffolder/stages/templater/cra/index.ts | 2 +- 5 files changed, 16 insertions(+), 9 deletions(-) diff --git a/packages/backend-common/src/util/docker.test.ts b/packages/backend-common/src/util/docker.test.ts index a6cc9889fe..2ec14494da 100644 --- a/packages/backend-common/src/util/docker.test.ts +++ b/packages/backend-common/src/util/docker.test.ts @@ -62,7 +62,8 @@ describe('runDockerContainer', () => { [path.join(rootDir, 'output')]: '/output', }; const workingDir = path.join(rootDir, 'input'); - const envVars = ['HOME=/tmp', 'LOG_LEVEL=debug']; + const envVars = { HOME: '/tmp', LOG_LEVEL: 'debug' }; + const envVarsArray = ['HOME=/tmp', 'LOG_LEVEL=debug']; it('should pull the docker container', async () => { await runDockerContainer({ @@ -95,7 +96,7 @@ describe('runDockerContainer', () => { args, expect.any(Stream), expect.objectContaining({ - Env: envVars, + Env: envVarsArray, WorkingDir: workingDir, HostConfig: { Binds: expect.arrayContaining([ diff --git a/packages/backend-common/src/util/docker.ts b/packages/backend-common/src/util/docker.ts index 4e143a6d1b..356d645465 100644 --- a/packages/backend-common/src/util/docker.ts +++ b/packages/backend-common/src/util/docker.ts @@ -29,7 +29,7 @@ export type RunDockerContainerOptions = { dockerClient: Docker; mountDirs?: Record; workingDir?: string; - envVars?: string[]; + envVars?: Record; createOptions?: Docker.ContainerCreateOptions; }; @@ -43,7 +43,7 @@ export type RunDockerContainerOptions = { * @param options.mountDirs A map of host directories to mount on the container. * Object Key: Path on host machine, Value: Path on Docker container * @param options.workingDir Working dir in the container - * @param options.envVars Environment variables to set in the container. e.g. ['HOME=/tmp'] + * @param options.envVars Environment variables to set in the container. e.g. {'HOME': '/tmp'} */ export const runDockerContainer = async ({ imageName, @@ -52,7 +52,7 @@ export const runDockerContainer = async ({ dockerClient, mountDirs = {}, workingDir, - envVars = [], + envVars = {}, createOptions = {}, }: RunDockerContainerOptions) => { // Show a better error message when Docker is unavailable. @@ -99,6 +99,12 @@ export const runDockerContainer = async ({ Binds.push(`${realHostDir}:${containerDir}`); } + // Create docker environment variables array + const Env = []; + for (const [key, value] of Object.entries(envVars)) { + Env.push(`${key}=${value}`); + } + const [{ Error: error, StatusCode: statusCode }] = await dockerClient.run( imageName, args, @@ -109,7 +115,7 @@ export const runDockerContainer = async ({ Binds, }, ...(workingDir ? { WorkingDir: workingDir } : {}), - Env: envVars, + Env, ...userOptions, ...createOptions, }, diff --git a/packages/techdocs-common/src/stages/generate/techdocs.ts b/packages/techdocs-common/src/stages/generate/techdocs.ts index a17ab94a2a..0dfa952a17 100644 --- a/packages/techdocs-common/src/stages/generate/techdocs.ts +++ b/packages/techdocs-common/src/stages/generate/techdocs.ts @@ -108,7 +108,7 @@ export class TechdocsGenerator implements GeneratorBase { workingDir: '/input', // Set the home directory inside the container as something that applications can // write to, otherwise they will just fail trying to write to / - envVars: ['HOME=/tmp'], + envVars: { HOME: '/tmp' }, dockerClient, }); this.logger.info( diff --git a/plugins/scaffolder-backend/src/scaffolder/stages/templater/cookiecutter.ts b/plugins/scaffolder-backend/src/scaffolder/stages/templater/cookiecutter.ts index 73822b150e..b534610a39 100644 --- a/plugins/scaffolder-backend/src/scaffolder/stages/templater/cookiecutter.ts +++ b/plugins/scaffolder-backend/src/scaffolder/stages/templater/cookiecutter.ts @@ -86,7 +86,7 @@ export class CookieCutter implements TemplaterBase { workingDir: '/input', // Set the home directory inside the container as something that applications can // write to, otherwise they will just fail trying to write to / - envVars: ['HOME=/tmp'], + envVars: { HOME: '/tmp' }, logStream, dockerClient, }); diff --git a/plugins/scaffolder-backend/src/scaffolder/stages/templater/cra/index.ts b/plugins/scaffolder-backend/src/scaffolder/stages/templater/cra/index.ts index 3006b924d5..96050a14f9 100644 --- a/plugins/scaffolder-backend/src/scaffolder/stages/templater/cra/index.ts +++ b/plugins/scaffolder-backend/src/scaffolder/stages/templater/cra/index.ts @@ -57,7 +57,7 @@ export class CreateReactAppTemplater implements TemplaterBase { dockerClient: dockerClient, // Set the home directory inside the container as something that applications can // write to, otherwise they will just fail trying to write to / - envVars: ['HOME=/tmp'], + envVars: { HOME: '/tmp' }, createOptions: { Entrypoint: ['npx'], WorkingDir: '/result',