From cb1a91b8d914a23eae69998e51be51202b858805 Mon Sep 17 00:00:00 2001 From: zeinab Date: Thu, 29 Jan 2026 14:25:11 +0000 Subject: [PATCH 1/6] feat: implement buildArgs option using tool kit env yaml tag --- plugins/docker/.toolkitrc.yml | 3 +++ plugins/docker/src/image-info.ts | 4 ---- plugins/docker/src/tasks/build.ts | 10 ++++------ 3 files changed, 7 insertions(+), 10 deletions(-) diff --git a/plugins/docker/.toolkitrc.yml b/plugins/docker/.toolkitrc.yml index 0a2ec5784..cf6e8cb36 100644 --- a/plugins/docker/.toolkitrc.yml +++ b/plugins/docker/.toolkitrc.yml @@ -5,4 +5,7 @@ tasks: optionsSchema: './lib/schema' +options: + buildArgs: !toolkit/env + version: 2 diff --git a/plugins/docker/src/image-info.ts b/plugins/docker/src/image-info.ts index e0031cf35..ad16df5c1 100644 --- a/plugins/docker/src/image-info.ts +++ b/plugins/docker/src/image-info.ts @@ -32,10 +32,6 @@ export function generateImageLabels(systemCode: string): ImageLabels { } } -export function getCommitHash(ciState: CIState | null): string { - return ciState?.version || '' -} - export function getDeployTag(ciState: CIState | null): string { return ciState?.buildNumber ? `ci-${ciState.buildNumber}` diff --git a/plugins/docker/src/tasks/build.ts b/plugins/docker/src/tasks/build.ts index b4bd13fa1..049b0bd53 100644 --- a/plugins/docker/src/tasks/build.ts +++ b/plugins/docker/src/tasks/build.ts @@ -1,4 +1,4 @@ -import { buildImageName, generateImageLabels, getCommitHash, getDeployTag } from '../image-info' +import { buildImageName, generateImageLabels, getDeployTag } from '../image-info' import DockerSchema from '../schema' import * as z from 'zod' @@ -16,7 +16,8 @@ const DockerBuildSchema = z .default(false) .describe( "whether to forward host's SSH agent, see https://docs.docker.com/reference/cli/docker/buildx/build/#ssh" - ) + ), + buildArgs: z.record(z.string(), z.string()).describe('BuildArgs key/value pair') }) .describe('Run `docker build` to create Docker images.') export { DockerBuildSchema as schema } @@ -52,14 +53,11 @@ export default class DockerBuild extends Task<{ return ['--label', `${label}=${value}`] }) - const commitHash = getCommitHash(readState('ci')) - const childBuild = spawn('docker', [ 'buildx', 'build', '--load', // Without this, the image is not stored and so we can't push it later - '--build-arg', - `GIT_COMMIT=${commitHash}`, + '--build-args', '--platform', imageOptions.platform, ...(this.options.ssh ? ['--ssh', 'default'] : []), From 3e1040ce055c77110ff4e3b13430f84d713f4ed0 Mon Sep 17 00:00:00 2001 From: zeinab Date: Thu, 29 Jan 2026 14:25:54 +0000 Subject: [PATCH 2/6] docs: automatically regenerate schema docs --- plugins/docker/readme.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/plugins/docker/readme.md b/plugins/docker/readme.md index 70bbf6e73..01bc8ca57 100644 --- a/plugins/docker/readme.md +++ b/plugins/docker/readme.md @@ -24,11 +24,12 @@ plugins: Run `docker build` to create Docker images. #### Task options -| Property | Description | Type | Default | -| :------- | :------------------------------------------------------------------------------------------------------ | :-------- | :------ | -| `ssh` | whether to forward host's SSH agent, see https://docs.docker.com/reference/cli/docker/buildx/build/#ssh | `boolean` | `false` | +| Property | Description | Type | Default | +| :------------------- | :------------------------------------------------------------------------------------------------------ | :----------------------- | :------ | +| `ssh` | whether to forward host's SSH agent, see https://docs.docker.com/reference/cli/docker/buildx/build/#ssh | `boolean` | `false` | +| **`buildArgs`** (\*) | BuildArgs key/value pair | `Record` | | -_All properties are optional._ +_(\*) Required._ ## Plugin-wide options From a51932cadd17427fd282f1cd015757c440f5ed2e Mon Sep 17 00:00:00 2001 From: zeinab Date: Thu, 29 Jan 2026 14:29:30 +0000 Subject: [PATCH 3/6] fix: make build args optional --- plugins/docker/src/tasks/build.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/docker/src/tasks/build.ts b/plugins/docker/src/tasks/build.ts index 049b0bd53..2e0e202a5 100644 --- a/plugins/docker/src/tasks/build.ts +++ b/plugins/docker/src/tasks/build.ts @@ -17,7 +17,7 @@ const DockerBuildSchema = z .describe( "whether to forward host's SSH agent, see https://docs.docker.com/reference/cli/docker/buildx/build/#ssh" ), - buildArgs: z.record(z.string(), z.string()).describe('BuildArgs key/value pair') + buildArgs: z.record(z.string(), z.string()).default(false).describe('BuildArgs key/value pair') }) .describe('Run `docker build` to create Docker images.') export { DockerBuildSchema as schema } From 4233a6a9ada17c37b9199f66833ab28237d9b086 Mon Sep 17 00:00:00 2001 From: zeinab Date: Fri, 30 Jan 2026 11:31:50 +0000 Subject: [PATCH 4/6] feat: add buildArgs to docker --- plugins/docker/.toolkitrc.yml | 3 ++- plugins/docker/src/tasks/build.ts | 13 +++++++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/plugins/docker/.toolkitrc.yml b/plugins/docker/.toolkitrc.yml index cf6e8cb36..4a68f53fa 100644 --- a/plugins/docker/.toolkitrc.yml +++ b/plugins/docker/.toolkitrc.yml @@ -6,6 +6,7 @@ tasks: optionsSchema: './lib/schema' options: - buildArgs: !toolkit/env + buildArgs: + GIT_COMMIT: !toolkit/env 'GIT_COMMIT' version: 2 diff --git a/plugins/docker/src/tasks/build.ts b/plugins/docker/src/tasks/build.ts index 2e0e202a5..69020c570 100644 --- a/plugins/docker/src/tasks/build.ts +++ b/plugins/docker/src/tasks/build.ts @@ -17,7 +17,12 @@ const DockerBuildSchema = z .describe( "whether to forward host's SSH agent, see https://docs.docker.com/reference/cli/docker/buildx/build/#ssh" ), - buildArgs: z.record(z.string(), z.string()).default(false).describe('BuildArgs key/value pair') + buildArgs: z + .record(z.string(), z.string()) + .default({}) + .describe( + 'An object of Docker [build variables](https://docs.docker.com/build/building/variables/) to include when building the image. To use values from Tool Kit\'s environment (since we usually build Docker images on CircleCI, this would be the CI environment), you can use the `!toolkit/env` tag, e.g. `buildArgs: { GIT_COMMIT: !toolkit/env "GIT_COMMIT" }`' + ) }) .describe('Run `docker build` to create Docker images.') export { DockerBuildSchema as schema } @@ -53,11 +58,15 @@ export default class DockerBuild extends Task<{ return ['--label', `${label}=${value}`] }) + const buildArgs = Object.entries(this.options.buildArgs).flatMap(([key, value]) => { + return ['--build-arg', `${key}=${value}`] + }) + const childBuild = spawn('docker', [ 'buildx', 'build', '--load', // Without this, the image is not stored and so we can't push it later - '--build-args', + ...buildArgs, '--platform', imageOptions.platform, ...(this.options.ssh ? ['--ssh', 'default'] : []), From efcff797d58ca5f3886ca9ef83d61f682f588ce7 Mon Sep 17 00:00:00 2001 From: zeinab Date: Fri, 30 Jan 2026 11:34:00 +0000 Subject: [PATCH 5/6] docs: automatically regenerate schema docs --- plugins/docker/readme.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/plugins/docker/readme.md b/plugins/docker/readme.md index 01bc8ca57..c09b07b92 100644 --- a/plugins/docker/readme.md +++ b/plugins/docker/readme.md @@ -24,12 +24,12 @@ plugins: Run `docker build` to create Docker images. #### Task options -| Property | Description | Type | Default | -| :------------------- | :------------------------------------------------------------------------------------------------------ | :----------------------- | :------ | -| `ssh` | whether to forward host's SSH agent, see https://docs.docker.com/reference/cli/docker/buildx/build/#ssh | `boolean` | `false` | -| **`buildArgs`** (\*) | BuildArgs key/value pair | `Record` | | +| Property | Description | Type | Default | +| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------------------- | :------ | +| `ssh` | whether to forward host's SSH agent, see https://docs.docker.com/reference/cli/docker/buildx/build/#ssh | `boolean` | `false` | +| `buildArgs` | An object of Docker [build variables](https://docs.docker.com/build/building/variables/) to include when building the image. To use values from Tool Kit's environment (since we usually build Docker images on CircleCI, this would be the CI environment), you can use the `!toolkit/env` tag, e.g. `buildArgs: { GIT_COMMIT: !toolkit/env "GIT_COMMIT" }` | `Record` | `{}` | -_(\*) Required._ +_All properties are optional._ ## Plugin-wide options From 06e8d7e179205779c42e7e95d8817409b5f25c67 Mon Sep 17 00:00:00 2001 From: Zeinab <129793281+zeinaaabbb@users.noreply.github.com> Date: Thu, 5 Feb 2026 12:34:13 +0000 Subject: [PATCH 6/6] fix: update toolkitrc.yml in how buildArgs are referenced under options Co-authored-by: Kara Brightwell --- plugins/docker/.toolkitrc.yml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/plugins/docker/.toolkitrc.yml b/plugins/docker/.toolkitrc.yml index 4a68f53fa..a8c614761 100644 --- a/plugins/docker/.toolkitrc.yml +++ b/plugins/docker/.toolkitrc.yml @@ -6,7 +6,8 @@ tasks: optionsSchema: './lib/schema' options: - buildArgs: - GIT_COMMIT: !toolkit/env 'GIT_COMMIT' - + tasks: + DockerBuild: + buildArgs: + GIT_COMMIT: !toolkit/env 'GIT_COMMIT' version: 2