From b539e14bf6f938576cdd157ac3af5d0b2c8b513f Mon Sep 17 00:00:00 2001
From: Curtis Vogt <curtis.vogt@gmail.com>
Date: Wed, 15 Jan 2025 10:35:27 -0600
Subject: [PATCH] Add `DOCKER_METADATA_SET_OUTPUT_ENV`

Signed-off-by: Curtis Vogt <curtis.vogt@gmail.com>
---
 .github/workflows/ci.yml | 26 ++++++++++++++++++++++++++
 README.md                |  3 ++-
 src/main.ts              |  4 +++-
 3 files changed, 31 insertions(+), 2 deletions(-)

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index f2a8c96..3a30a63 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -472,6 +472,32 @@ jobs:
             DOCKER_METADATA_OUTPUT_ANNOTATIONS
             DOCKER_METADATA_OUTPUT_JSON
 
+  no-output-env:
+    runs-on: ubuntu-latest
+    env:
+      DOCKER_METADATA_SET_OUTPUT_ENV: false
+    steps:
+      -
+        name: Checkout
+        uses: actions/checkout@v4
+      -
+        name: Docker meta
+        id: meta
+        uses: ./
+        with:
+          images: |
+            ${{ env.DOCKER_IMAGE }}
+            ghcr.io/name/app
+          labels: |
+            maintainer=CrazyMax
+          annotations: |
+            maintainer=Foo
+      -
+        name: No output environment variables set
+        shell: bash
+        run: |
+          [[ "$(printenv | grep "^DOCKER_METADATA_OUTPUT_" | wc -l)" -eq 0 ]] || exit 1
+
   bake-annotations:
     runs-on: ubuntu-latest
     steps:
diff --git a/README.md b/README.md
index 379bfa6..52bd57a 100644
--- a/README.md
+++ b/README.md
@@ -319,7 +319,7 @@ The following outputs are available:
 | `bake-file-labels`      | File   | [Bake file definition](https://docs.docker.com/build/bake/reference/) path with labels                                                                          |
 | `bake-file-annotations` | File   | [Bake file definition](https://docs.docker.com/build/bake/reference/) path with [annotations](https://github.com/moby/buildkit/blob/master/docs/annotations.md) |
 
-Alternatively, each output is also exported as an environment variable:
+Alternatively, each output is also exported as an environment variable when `DOCKER_METADATA_SET_OUTPUT_ENV` is `true`:
 
 * `DOCKER_METADATA_OUTPUT_VERSION`
 * `DOCKER_METADATA_OUTPUT_TAGS`
@@ -346,6 +346,7 @@ So it can be used with our [Docker Build Push action](https://github.com/docker/
 | `DOCKER_METADATA_PR_HEAD_SHA`        | Bool   | If `true`, set associated head SHA instead of commit SHA that triggered the workflow on pull request event                                   |
 | `DOCKER_METADATA_SHORT_SHA_LENGTH`   | Number | Specifies the length of the [short commit SHA](#typesha) to ensure uniqueness. Default is `7`, but can be increased for larger repositories. |
 | `DOCKER_METADATA_ANNOTATIONS_LEVELS` | String | Comma separated list of annotations levels to set for annotations output separated (default `manifest`)                                      |
+| `DOCKER_METADATA_SET_OUTPUT_ENV`     | Bool   | If `true`, sets each output as an environmental variable (default `true`)                                                                    |
 
 ## `context` input
 
diff --git a/src/main.ts b/src/main.ts
index 9d341a2..7fda700 100644
--- a/src/main.ts
+++ b/src/main.ts
@@ -13,6 +13,8 @@ actionsToolkit.run(
     const toolkit = new Toolkit({githubToken: inputs.githubToken});
     const context = await getContext(inputs.context, toolkit);
     const repo = await toolkit.github.repoData();
+    const outputEnv = (process.env.DOCKER_METADATA_SET_OUTPUT_ENV || 'true') === 'true';
+    const setOutput = outputEnv ? setOutputAndEnv : core.setOutput;
 
     await core.group(`Context info`, async () => {
       core.info(`eventName: ${context.eventName}`);
@@ -105,7 +107,7 @@ actionsToolkit.run(
   }
 );
 
-function setOutput(name: string, value: string) {
+function setOutputAndEnv(name: string, value: string) {
   core.setOutput(name, value);
   core.exportVariable(`DOCKER_METADATA_OUTPUT_${name.replace(/\W/g, '_').toUpperCase()}`, value);
 }