From b976ed0e115a5a227a038e6b64f89aab0ac2c8d9 Mon Sep 17 00:00:00 2001 From: CrazyMax <1951866+crazy-max@users.noreply.github.com> Date: Thu, 27 Jun 2024 14:21:23 +0200 Subject: [PATCH] move summary support check right after build Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com> --- .github/workflows/ci.yml | 23 +++++++++++++++++++++- src/main.ts | 41 ++++++++++++++++++++++++++-------------- src/state-helper.ts | 11 +++++------ 3 files changed, 54 insertions(+), 21 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6c3d857..27dd1ee 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -523,7 +523,7 @@ jobs: run: | docker image inspect localhost:5000/name/app:latest - disable-summary: + summary-disable: runs-on: ubuntu-latest steps: - @@ -546,6 +546,27 @@ jobs: env: DOCKER_BUILD_NO_SUMMARY: true + summary-not-supported: + runs-on: ubuntu-latest + steps: + - + name: Checkout + uses: actions/checkout@v4 + - + name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + with: + version: v0.12.1 + driver-opts: | + image=${{ inputs.buildkit-image || env.BUILDKIT_IMAGE }} + - + name: Build + uses: ./ + with: + files: | + ./test/config.hcl + targets: app + export-retention-days: runs-on: ubuntu-latest strategy: diff --git a/src/main.ts b/src/main.ts index 4ffc9d3..493deb4 100644 --- a/src/main.ts +++ b/src/main.ts @@ -13,6 +13,7 @@ import {Toolkit} from '@docker/actions-toolkit/lib/toolkit'; import {Util} from '@docker/actions-toolkit/lib/util'; import {BakeDefinition} from '@docker/actions-toolkit/lib/types/buildx/bake'; +import {BuilderInfo} from '@docker/actions-toolkit/lib/types/buildx/builder'; import {ConfigFile} from '@docker/actions-toolkit/lib/types/docker/docker'; import * as context from './context'; @@ -83,10 +84,10 @@ actionsToolkit.run( await toolkit.buildx.printVersion(); }); + let builder: BuilderInfo; await core.group(`Builder info`, async () => { - const builder = await toolkit.builder.inspect(inputs.builder); + builder = await toolkit.builder.inspect(inputs.builder); core.info(JSON.stringify(builder, null, 2)); - stateHelper.setBuilder(builder); }); let definition: BakeDefinition | undefined; @@ -148,33 +149,45 @@ actionsToolkit.run( core.setOutput('metadata', metadatadt); }); } + + let refs: Array = []; await core.group(`Build references`, async () => { - const refs = await buildRefs(toolkit, startedTime, inputs.builder); - if (refs) { + refs = await buildRefs(toolkit, startedTime, inputs.builder); + if (refs.length > 0) { for (const ref of refs) { core.info(ref); } stateHelper.setBuildRefs(refs); } else { - core.warning('No build refs found'); + core.info('No build references found'); } }); + + await core.group(`Check build summary support`, async () => { + if (process.env.DOCKER_BUILD_NO_SUMMARY && Util.parseBool(process.env.DOCKER_BUILD_NO_SUMMARY)) { + core.info('Build summary disabled'); + } else if (GitHub.isGHES) { + core.warning('Build summary is not yet supported on GHES'); + } else if (!(await toolkit.buildx.versionSatisfies('>=0.13.0'))) { + core.warning('Build summary requires Buildx >= 0.13.0'); + } else if (builder && builder.driver === 'cloud') { + core.warning('Build summary is not yet supported with Docker Build Cloud'); + } else if (refs.length == 0) { + core.warning('Build summary requires at least one build reference'); + } else { + core.info('Build summary supported!'); + stateHelper.setSummarySupported(); + } + }); + if (err) { throw err; } }, // post async () => { - if (stateHelper.buildRefs.length > 0) { + if (stateHelper.isSummarySupported) { await core.group(`Generating build summary`, async () => { - if (process.env.DOCKER_BUILD_NO_SUMMARY && Util.parseBool(process.env.DOCKER_BUILD_NO_SUMMARY)) { - core.info('Summary disabled'); - return; - } - if (stateHelper.builder && stateHelper.builder.driver === 'cloud') { - core.info('Summary is not yet supported with Docker Build Cloud'); - return; - } try { const exportRetentionDays = buildExportRetentionDays(); const buildxHistory = new BuildxHistory(); diff --git a/src/state-helper.ts b/src/state-helper.ts index 66cf263..0a3eb3a 100644 --- a/src/state-helper.ts +++ b/src/state-helper.ts @@ -1,15 +1,14 @@ import * as core from '@actions/core'; import {BakeDefinition} from '@docker/actions-toolkit/lib/types/buildx/bake'; -import {BuilderInfo} from '@docker/actions-toolkit/lib/types/buildx/builder'; import {Inputs, sanitizeInputs} from './context'; export const tmpDir = process.env['STATE_tmpDir'] || ''; export const inputs = process.env['STATE_inputs'] ? JSON.parse(process.env['STATE_inputs']) : undefined; -export const builder = process.env['STATE_builder'] ? JSON.parse(process.env['STATE_builder']) : undefined; export const bakeDefinition = process.env['STATE_bakeDefinition'] ? JSON.parse(process.env['STATE_bakeDefinition']) : undefined; export const buildRefs = process.env['STATE_buildRefs'] ? process.env['STATE_buildRefs'].split(',') : []; +export const isSummarySupported = !!process.env['STATE_isSummarySupported']; export function setTmpDir(tmpDir: string) { core.saveState('tmpDir', tmpDir); @@ -19,10 +18,6 @@ export function setInputs(inputs: Inputs) { core.saveState('inputs', JSON.stringify(sanitizeInputs(inputs))); } -export function setBuilder(builder: BuilderInfo) { - core.saveState('builder', JSON.stringify(builder)); -} - export function setBakeDefinition(bakeDefinition: BakeDefinition) { core.saveState('bakeDefinition', JSON.stringify(bakeDefinition)); } @@ -30,3 +25,7 @@ export function setBakeDefinition(bakeDefinition: BakeDefinition) { export function setBuildRefs(buildRefs: Array) { core.saveState('buildRefs', buildRefs.join(',')); } + +export function setSummarySupported() { + core.saveState('isSummarySupported', 'true'); +}