From 9cac6c8ea04b693525a33651136a4114582823b6 Mon Sep 17 00:00:00 2001
From: CrazyMax <1951866+crazy-max@users.noreply.github.com>
Date: Mon, 24 Jun 2024 10:14:14 +0200
Subject: [PATCH] use default retention days for build export artifact

Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
---
 .github/workflows/ci.yml | 29 +++++++++++++++++++++++++++++
 README.md                |  7 ++++---
 src/main.ts              | 13 ++++++++++++-
 3 files changed, 45 insertions(+), 4 deletions(-)

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index fec87a0..e03d4fd 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -1367,3 +1367,32 @@ jobs:
           file: ./test/Dockerfile
         env:
           DOCKER_BUILD_NO_SUMMARY: true
+
+  export-retention-days:
+    runs-on: ubuntu-latest
+    strategy:
+      fail-fast: false
+      matrix:
+        days:
+          - 2
+          - 0
+    steps:
+      -
+        name: Checkout
+        uses: actions/checkout@v4
+        with:
+          path: action
+      -
+        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: ./action
+        with:
+          file: ./test/Dockerfile
+        env:
+          DOCKER_BUILD_EXPORT_RETENTION_DAYS: ${{ matrix.days }}
diff --git a/README.md b/README.md
index 6463d62..bf1ff44 100644
--- a/README.md
+++ b/README.md
@@ -259,9 +259,10 @@ The following outputs are available:
 
 ### environment variables
 
-| Name                      | Type | Description                                                                                                       |
-|---------------------------|------|-------------------------------------------------------------------------------------------------------------------|
-| `DOCKER_BUILD_NO_SUMMARY` | Bool | If `true`, [build summary](https://docs.docker.com/build/ci/github-actions/build-summary/) generation is disabled |
+| Name                                 | Type   | Description                                                                                                                                                                                                                                                        |
+|--------------------------------------|--------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| `DOCKER_BUILD_NO_SUMMARY`            | Bool   | If `true`, [build summary](https://docs.docker.com/build/ci/github-actions/build-summary/) generation 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` |
 
 ## Troubleshooting
 
diff --git a/src/main.ts b/src/main.ts
index b556eb4..c129220 100644
--- a/src/main.ts
+++ b/src/main.ts
@@ -151,6 +151,7 @@ actionsToolkit.run(
           return;
         }
         try {
+          const exportRetentionDays = buildExportRetentionDays();
           const buildxHistory = new BuildxHistory();
           const exportRes = await buildxHistory.export({
             refs: [stateHelper.buildRef]
@@ -159,7 +160,7 @@ actionsToolkit.run(
           const uploadRes = await GitHub.uploadArtifact({
             filename: exportRes.dockerbuildFilename,
             mimeType: 'application/gzip',
-            retentionDays: 90
+            retentionDays: exportRetentionDays
           });
           await GitHub.writeBuildSummary({
             exportRes: exportRes,
@@ -197,3 +198,13 @@ async function buildRef(toolkit: Toolkit, since: Date, builder?: string): Promis
   });
   return Object.keys(refs).length > 0 ? Object.keys(refs)[0] : '';
 }
+
+function buildExportRetentionDays(): number | undefined {
+  if (process.env.DOCKER_BUILD_EXPORT_RETENTION_DAYS) {
+    const res = parseInt(process.env.DOCKER_BUILD_EXPORT_RETENTION_DAYS);
+    if (isNaN(res)) {
+      throw Error(`Invalid build export retention days: ${process.env.DOCKER_BUILD_EXPORT_RETENTION_DAYS}`);
+    }
+    return res;
+  }
+}