From 6268c9da9abbd1309c8a16a75f92a878715c3032 Mon Sep 17 00:00:00 2001 From: CrazyMax <1951866+crazy-max@users.noreply.github.com> Date: Mon, 31 Aug 2026 12:03:38 +0200 Subject: [PATCH] pull BuildKit image before builder creation Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com> --- src/main.ts | 40 ++++++++++++++++++++++++++++++++++++---- 1 file changed, 36 insertions(+), 4 deletions(-) diff --git a/src/main.ts b/src/main.ts index 320a14c..e747149 100644 --- a/src/main.ts +++ b/src/main.ts @@ -124,9 +124,33 @@ actionsToolkit.run( } } + let builderExists = false; + if (inputs.driver !== 'docker') { + builderExists = await toolkit.builder.exists(inputs.name); + } + + const appendNodes = inputs.append ? (yaml.load(inputs.append) as Node[]) : []; + + if (!standalone && inputs.driver == 'docker-container') { + const buildkitImages = new Set(); + if (!builderExists) { + buildkitImages.add(resolveBuildKitImage(inputs.driverOpts)); + } + for (const node of appendNodes) { + buildkitImages.add(resolveBuildKitImage(node['driver-opts'])); + } + if (buildkitImages.size > 0) { + await core.group(`Pulling BuildKit image(s)`, async () => { + for (const image of buildkitImages) { + await Docker.pull(image); + } + }); + } + } + if (inputs.driver !== 'docker') { await core.group(`Creating a new builder instance`, async () => { - if (await toolkit.builder.exists(inputs.name)) { + if (builderExists) { core.info(`Builder ${inputs.name} already exists, skipping creation`); } else { const certsDriverOpts = Buildx.resolveCertsDriverOpts(inputs.driver, inputs.endpoint, { @@ -149,11 +173,10 @@ actionsToolkit.run( }); } - if (inputs.append) { + if (appendNodes.length > 0) { await core.group(`Appending node(s) to builder`, async () => { let nodeIndex = 1; - const nodes = yaml.load(inputs.append) as Node[]; - for (const node of nodes) { + for (const node of appendNodes) { const certsDriverOpts = Buildx.resolveCertsDriverOpts(inputs.driver, `${node.endpoint}`, { cacert: process.env[`${context.builderNodeEnvPrefix}_${nodeIndex}_AUTH_TLS_CACERT`], cert: process.env[`${context.builderNodeEnvPrefix}_${nodeIndex}_AUTH_TLS_CERT`], @@ -274,3 +297,12 @@ actionsToolkit.run( } } ); + +function resolveBuildKitImage(driverOpts: string[] = []): string { + return ( + driverOpts + .find(driverOpt => driverOpt.trim().startsWith('image=')) + ?.trim() + .substring('image='.length) || 'moby/buildkit:buildx-stable-1' + ); +}