diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0f496eb..c9e2c06 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -590,6 +590,29 @@ jobs: ./test/config.hcl targets: app + record-upload-disable: + runs-on: ubuntu-latest + steps: + - + name: Checkout + uses: actions/checkout@v4 + - + name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + with: + version: ${{ inputs.buildx-version || env.BUILDX_VERSION }} + driver-opts: | + image=${{ inputs.buildkit-image || env.BUILDKIT_IMAGE }} + - + name: Build + uses: ./ + with: + files: | + ./test/config.hcl + targets: app + env: + DOCKER_BUILD_RECORD_UPLOAD: false + export-retention-days: runs-on: ubuntu-latest strategy: diff --git a/README.md b/README.md index 8d6940d..3f8ed0d 100644 --- a/README.md +++ b/README.md @@ -282,6 +282,7 @@ The following outputs are available | Name | Type | Default | Description | |--------------------------------------|--------|---------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | `DOCKER_BUILD_SUMMARY` | Bool | `true` | If `false`, [build summary](https://docs.docker.com/build/ci/github-actions/build-summary/) generation is disabled | +| `DOCKER_BUILD_RECORD_UPLOAD` | Bool | `true` | If `false`, build record upload as [GitHub artifact](https://docs.github.com/en/actions/using-workflows/storing-workflow-data-as-artifacts) is disabled | | `DOCKER_BUILD_EXPORT_RETENTION_DAYS` | Number | | Duration after which build export artifact will expire in days. Defaults to repository/org [retention settings](https://docs.github.com/en/actions/learn-github-actions/usage-limits-billing-and-administration#artifact-and-log-retention-policy) if unset or `0` | ## Contributing diff --git a/src/main.ts b/src/main.ts index 9ffd667..dbc7754 100644 --- a/src/main.ts +++ b/src/main.ts @@ -15,6 +15,7 @@ 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 {UploadArtifactResponse} from '@docker/actions-toolkit/lib/types/github'; import * as context from './context'; import * as stateHelper from './state-helper'; @@ -189,17 +190,27 @@ actionsToolkit.run( if (stateHelper.isSummarySupported) { await core.group(`Generating build summary`, async () => { try { - const exportRetentionDays = buildExportRetentionDays(); + const recordUploadEnabled = buildRecordUploadEnabled(); + let exportRetentionDays: number | undefined; + if (recordUploadEnabled) { + exportRetentionDays = buildExportRetentionDays(); + } + const buildxHistory = new BuildxHistory(); const exportRes = await buildxHistory.export({ refs: stateHelper.buildRefs }); - core.info(`Build records exported to ${exportRes.dockerbuildFilename} (${Util.formatFileSize(exportRes.dockerbuildSize)})`); - const uploadRes = await GitHub.uploadArtifact({ - filename: exportRes.dockerbuildFilename, - mimeType: 'application/gzip', - retentionDays: exportRetentionDays - }); + core.info(`Build records written to ${exportRes.dockerbuildFilename} (${Util.formatFileSize(exportRes.dockerbuildSize)})`); + + let uploadRes: UploadArtifactResponse | undefined; + if (recordUploadEnabled) { + uploadRes = await GitHub.uploadArtifact({ + filename: exportRes.dockerbuildFilename, + mimeType: 'application/gzip', + retentionDays: exportRetentionDays + }); + } + await GitHub.writeBuildSummary({ exportRes: exportRes, uploadRes: uploadRes, @@ -254,6 +265,13 @@ function buildSummaryEnabled(): boolean { return true; } +function buildRecordUploadEnabled(): boolean { + if (process.env.DOCKER_BUILD_RECORD_UPLOAD) { + return Util.parseBool(process.env.DOCKER_BUILD_RECORD_UPLOAD); + } + return true; +} + function buildExportRetentionDays(): number | undefined { if (process.env.DOCKER_BUILD_EXPORT_RETENTION_DAYS) { const res = parseInt(process.env.DOCKER_BUILD_EXPORT_RETENTION_DAYS);