From b16fac0b6880a2fac903e286401436b93e48f40f Mon Sep 17 00:00:00 2001 From: CrazyMax <1951866+crazy-max@users.noreply.github.com> Date: Thu, 22 May 2025 16:12:57 +0200 Subject: [PATCH] github: support multiple refs with build URL for summary Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com> --- src/buildx/history.ts | 4 ++-- src/github.ts | 31 +++++++++++++++++++++---------- src/types/github.ts | 4 +++- 3 files changed, 26 insertions(+), 13 deletions(-) diff --git a/src/buildx/history.ts b/src/buildx/history.ts index 9465e9c..292bd87 100644 --- a/src/buildx/history.ts +++ b/src/buildx/history.ts @@ -284,10 +284,10 @@ export class History { return { dockerbuildFilename: dockerbuildPath, dockerbuildSize: dockerbuildStats.size, - summaries: summaries, builderName: builderName, nodeName: nodeName, - refs: refs + refs: refs, + summaries: summaries }; } diff --git a/src/github.ts b/src/github.ts index e839e15..f19a881 100644 --- a/src/github.ts +++ b/src/github.ts @@ -234,16 +234,20 @@ export class GitHub { }; const refsSize = Object.keys(opts.exportRes.refs).length; + const singleRef = refsSize === 1 ? Object.keys(opts.exportRes.refs)[0] : undefined; + const singleSummary = singleRef && opts.exportRes.summaries?.[singleRef]; + const dbcAccount = opts.driver === 'cloud' && opts.endpoint?.split('/')[0]; const sum = core.summary.addHeading('Docker Build summary', 2); - if (opts.buildURL) { + if (dbcAccount && singleRef && singleSummary) { + const buildURL = GitHub.formatDBCBuildURL(dbcAccount, singleRef, singleSummary.defaultPlatform); // prettier-ignore sum.addRaw(`

`) .addRaw(`For a detailed look at the build, you can check the results at:`) .addRaw('

') .addRaw(`

`) - .addRaw(`:whale: ${addLink(`${opts.buildURL}`, opts.buildURL)}`) + .addRaw(`:whale: ${addLink(`${buildURL}`, buildURL)}`) .addRaw(`

`); } @@ -256,7 +260,7 @@ export class GitHub { // https://github.com/docker/actions-toolkit/issues/367 const artifactRelativeURL = `./${GitHub.runId}/${opts.uploadRes.url.split('/').slice(-2).join('/')}`; - if (opts.buildURL) { + if (dbcAccount && refsSize === 1) { // prettier-ignore sum.addRaw(`

`) .addRaw(`You can also download the following build record archive and import it into Docker Desktop's Builds view. `) @@ -295,12 +299,14 @@ export class GitHub { // Preview sum.addRaw('

'); const summaryTableData: Array> = [ + // prettier-ignore [ {header: true, data: 'ID'}, {header: true, data: 'Name'}, {header: true, data: 'Status'}, {header: true, data: 'Cached'}, - {header: true, data: 'Duration'} + {header: true, data: 'Duration'}, + ...(dbcAccount && refsSize > 1 ? [{header: true, data: 'Build result URL'}] : []) ] ]; let buildError: string | undefined; @@ -309,12 +315,13 @@ export class GitHub { const summary = opts.exportRes.summaries[ref]; // prettier-ignore summaryTableData.push([ - {data: `${ref.substring(0, 6).toUpperCase()}`}, - {data: `${Util.stringToUnicodeEntities(summary.name)}`}, - {data: `${summary.status === 'completed' ? ':white_check_mark:' : summary.status === 'canceled' ? ':no_entry_sign:' : ':x:'} ${summary.status}`}, - {data: `${summary.numCachedSteps > 0 ? Math.round((summary.numCachedSteps / summary.numTotalSteps) * 100) : 0}%`}, - {data: summary.duration} - ]); + {data: `${ref.substring(0, 6).toUpperCase()}`}, + {data: `${Util.stringToUnicodeEntities(summary.name)}`}, + {data: `${summary.status === 'completed' ? ':white_check_mark:' : summary.status === 'canceled' ? ':no_entry_sign:' : ':x:'} ${summary.status}`}, + {data: `${summary.numCachedSteps > 0 ? Math.round((summary.numCachedSteps / summary.numTotalSteps) * 100) : 0}%`}, + {data: summary.duration}, + ...(dbcAccount && refsSize > 1 ? [{data: addLink(':whale: Open', GitHub.formatDBCBuildURL(dbcAccount, ref, summary.defaultPlatform))}] : []) + ]); if (summary.error) { buildError = summary.error; } @@ -369,4 +376,8 @@ export class GitHub { core.info(`Writing summary`); await sum.addSeparator().write(); } + + private static formatDBCBuildURL(account: string, ref: string, platform?: string): string { + return `https://app.docker.com/build/accounts/${account}/builds/${(platform ?? 'linux/amd64').replace('/', '-')}/${ref}`; + } } diff --git a/src/types/github.ts b/src/types/github.ts index 4e0eb24..c8e3ce6 100644 --- a/src/types/github.ts +++ b/src/types/github.ts @@ -59,8 +59,10 @@ export interface UploadArtifactResponse { export interface BuildSummaryOpts { exportRes: ExportResponse; uploadRes?: UploadArtifactResponse; - buildURL?: string; // eslint-disable-next-line @typescript-eslint/no-explicit-any inputs?: any; bakeDefinition?: BakeDefinition; + // builder options + driver?: string; + endpoint?: string; }