From 806a2a461ff03b10f7d1933839c2c43dd1db06db Mon Sep 17 00:00:00 2001 From: CrazyMax <1951866+crazy-max@users.noreply.github.com> Date: Tue, 30 Jul 2024 17:48:59 +0200 Subject: [PATCH] generate GitHub annotations for build checks Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com> --- .github/workflows/ci.yml | 26 ++++++++++++++++++++++++++ src/main.ts | 24 +++++++++++++++++++++--- test/lint.Dockerfile | 12 ++++++++++++ 3 files changed, 59 insertions(+), 3 deletions(-) create mode 100644 test/lint.Dockerfile diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5d32ecb..6a8638c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1463,3 +1463,29 @@ jobs: file: ./test/Dockerfile env: DOCKER_BUILD_RECORD_RETENTION_DAYS: ${{ matrix.days }} + + checks: + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + buildx-version: + - latest + - v0.14.1 + steps: + - + name: Checkout + uses: actions/checkout@v4 + - + name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + with: + version: ${{ matrix.buildx-version }} + driver-opts: | + image=${{ inputs.buildkit-image || env.BUILDKIT_IMAGE }} + - + name: Build + uses: ./ + with: + context: ./test + file: ./test/lint.Dockerfile diff --git a/src/main.ts b/src/main.ts index d1e55f4..604115b 100644 --- a/src/main.ts +++ b/src/main.ts @@ -97,7 +97,12 @@ actionsToolkit.run( let err: Error | undefined; await Exec.getExecOutput(buildCmd.command, buildCmd.args, { - ignoreReturnCode: true + ignoreReturnCode: true, + env: Object.assign({}, process.env, { + BUILDX_METADATA_WARNINGS: 'true' + }) as { + [key: string]: string; + } }).then(res => { if (res.stderr.length > 0 && res.exitCode != 0) { err = Error(`buildx failed with: ${res.stderr.match(/(.*)\s*$/)?.[0]?.trim() ?? 'unknown error'}`); @@ -106,7 +111,7 @@ actionsToolkit.run( const imageID = toolkit.buildxBuild.resolveImageID(); const metadata = toolkit.buildxBuild.resolveMetadata(); - const digest = toolkit.buildxBuild.resolveDigest(); + const digest = toolkit.buildxBuild.resolveDigest(metadata); if (imageID) { await core.group(`ImageID`, async () => { core.info(imageID); @@ -127,7 +132,7 @@ actionsToolkit.run( }); } - let ref: string; + let ref: string | undefined; await core.group(`Reference`, async () => { ref = await buildRef(toolkit, startedTime, inputs.builder); if (ref) { @@ -138,6 +143,19 @@ actionsToolkit.run( } }); + const warnings = toolkit.buildxBuild.resolveWarnings(metadata); + if (ref && warnings && warnings.length > 0) { + const annotations = await Buildx.convertWarningsToGitHubAnnotations(warnings, [ref]); + core.debug(`annotations: ${JSON.stringify(annotations, null, 2)}`); + if (annotations && annotations.length > 0) { + await core.group(`Generating GitHub annotations (${annotations.length} build checks found)`, async () => { + for (const annotation of annotations) { + core.warning(annotation.message, annotation); + } + }); + } + } + await core.group(`Check build summary support`, async () => { if (!buildSummaryEnabled()) { core.info('Build summary disabled'); diff --git a/test/lint.Dockerfile b/test/lint.Dockerfile new file mode 100644 index 0000000..0d14d88 --- /dev/null +++ b/test/lint.Dockerfile @@ -0,0 +1,12 @@ +frOM busybox as base +cOpy lint.Dockerfile . + +from scratch +MAINTAINER moby@example.com +COPy --from=base \ + /lint.Dockerfile \ + / + +CMD [ "echo", "Hello, Norway!" ] +CMD [ "echo", "Hello, Sweden!" ] +ENTRYPOINT my-program start