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${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;
}