From e946f387aff7367125e8939b65762db5872db3cc Mon Sep 17 00:00:00 2001 From: Ben Burke Date: Tue, 28 Dec 2021 02:37:17 +0000 Subject: [PATCH] Add context-subdir input Adds a `context-subdir` input which gets appended to the context URL. This new input is ignored (with a warning) if the user gives a non-default `context` input such as a path. Signed-off-by: actualben --- __tests__/context.test.ts | 37 +++++++++++++++++++++++++++++++++++++ action.yml | 3 +++ dist/index.js | 12 +++++++++++- src/context.ts | 12 +++++++++++- 4 files changed, 62 insertions(+), 2 deletions(-) diff --git a/__tests__/context.test.ts b/__tests__/context.test.ts index 7b6c16409..dde6a5043 100644 --- a/__tests__/context.test.ts +++ b/__tests__/context.test.ts @@ -491,6 +491,43 @@ nproc=3`], '.' ] ], + [ + 15, + '0.7.0', + new Map([ + ['context-subdir', 'test'], + ['load', 'false'], + ['no-cache', 'false'], + ['pull', 'false'], + ['push', 'false'], + ]), + [ + 'buildx', + 'build', + '--iidfile', '/tmp/.docker-build-push-jest/iidfile', + '--metadata-file', '/tmp/.docker-build-push-jest/metadata-file', + 'https://github.com/docker/build-push-action.git#refs/heads/test-jest:test' + ] + ], + [ + 16, + '0.7.0', + new Map([ + ['context', './test'], + ['context-subdir', 'should-be-ignored'], + ['load', 'false'], + ['no-cache', 'false'], + ['pull', 'false'], + ['push', 'false'], + ]), + [ + 'buildx', + 'build', + '--iidfile', '/tmp/.docker-build-push-jest/iidfile', + '--metadata-file', '/tmp/.docker-build-push-jest/metadata-file', + './test' + ] + ], ])( '[%d] given %p with %p as inputs, returns %p', async (num: number, buildxVersion: string, inputs: Map, expected: Array) => { diff --git a/action.yml b/action.yml index 9f94b261a..b61ae45d8 100644 --- a/action.yml +++ b/action.yml @@ -28,6 +28,9 @@ inputs: context: description: "Build's context is the set of files located in the specified PATH or URL" required: false + context-subdir: + description: "Subdirectory of the git repo to use as the docker build context (when using a URL-based context)" + required: false file: description: "Path to the Dockerfile" required: false diff --git a/dist/index.js b/dist/index.js index af2cd489a..d9851fc62 100644 --- a/dist/index.js +++ b/dist/index.js @@ -276,6 +276,7 @@ function getInputs(defaultContext) { cacheTo: yield getInputList('cache-to', true), cgroupParent: core.getInput('cgroup-parent'), context: core.getInput('context') || defaultContext, + contextSubdir: core.getInput('context-subdir'), file: core.getInput('file'), labels: yield getInputList('labels', true), load: core.getBooleanInput('load'), @@ -302,7 +303,16 @@ function getArgs(inputs, defaultContext, buildxVersion) { let args = ['buildx']; args.push.apply(args, yield getBuildArgs(inputs, defaultContext, buildxVersion)); args.push.apply(args, yield getCommonArgs(inputs, buildxVersion)); - args.push(inputs.context); + let context = inputs.context; + if (inputs.contextSubdir) { + if (context == defaultContext) { + context = `${context}:${inputs.contextSubdir}`; + } + else { + core.warning('"context-subdir" input is ignored when a "context" input is present'); + } + } + args.push(context); return args; }); } diff --git a/src/context.ts b/src/context.ts index e538ac719..8e451f4a4 100644 --- a/src/context.ts +++ b/src/context.ts @@ -20,6 +20,7 @@ export interface Inputs { cacheTo: string[]; cgroupParent: string; context: string; + contextSubdir: string; file: string; labels: string[]; load: boolean; @@ -73,6 +74,7 @@ export async function getInputs(defaultContext: string): Promise { cacheTo: await getInputList('cache-to', true), cgroupParent: core.getInput('cgroup-parent'), context: core.getInput('context') || defaultContext, + contextSubdir: core.getInput('context-subdir'), file: core.getInput('file'), labels: await getInputList('labels', true), load: core.getBooleanInput('load'), @@ -97,7 +99,15 @@ export async function getArgs(inputs: Inputs, defaultContext: string, buildxVers let args: Array = ['buildx']; args.push.apply(args, await getBuildArgs(inputs, defaultContext, buildxVersion)); args.push.apply(args, await getCommonArgs(inputs, buildxVersion)); - args.push(inputs.context); + let context: string = inputs.context; + if (inputs.contextSubdir) { + if (context == defaultContext) { + context = `${context}:${inputs.contextSubdir}`; + } else { + core.warning('"context-subdir" input is ignored when a "context" input is present'); + } + } + args.push(context); return args; }