From 9239ff461dd3303dcfa7c4e590052a6e02136ad7 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 | 37 +++++++++++++++++++++++++++++++++---- 1 file changed, 33 insertions(+), 4 deletions(-) diff --git a/src/main.ts b/src/main.ts index 320a14c..94b30d6 100644 --- a/src/main.ts +++ b/src/main.ts @@ -124,9 +124,20 @@ actionsToolkit.run( } } + let builderExists = false; + if (inputs.driver !== 'docker') { + builderExists = await toolkit.builder.exists(inputs.name); + } + + if (!standalone && !builderExists && inputs.driver == 'docker-container') { + await core.group(`Pulling BuildKit image`, async () => { + await Docker.pull(resolveBuildKitImage(inputs.driverOpts)); + }); + } + 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 +160,20 @@ actionsToolkit.run( }); } - if (inputs.append) { + const appendNodes = inputs.append ? (yaml.load(inputs.append) as Node[]) : []; + + if (appendNodes.length > 0) { + if (!standalone && inputs.driver == 'docker-container') { + await core.group(`Pulling BuildKit image for append node(s)`, async () => { + for (const node of appendNodes) { + await Docker.pull(resolveBuildKitImage(node['driver-opts'])); + } + }); + } + 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 +294,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' + ); +}