From 4fd49a9584cdea379b82fc4e6daeee5a8da8cc64 Mon Sep 17 00:00:00 2001 From: Igor Rodionov <496956+goruha@users.noreply.github.com> Date: Thu, 19 Mar 2026 16:13:57 +0300 Subject: [PATCH 01/12] Refactor Docker image metadata handling Updated the way Docker image metadata is retrieved and formatted. --- action.yml | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/action.yml b/action.yml index b6b98d3..52adc3c 100644 --- a/action.yml +++ b/action.yml @@ -114,7 +114,7 @@ outputs: value: ${{ steps.tag.outputs.output }} metadata: description: "Docker image metadata" - value: ${{ steps.get-metadata.outputs.metadata }} + value: ${{ toJSON(steps.docker-build-push-action.outputs.metadata) }} runs: using: "composite" @@ -236,13 +236,8 @@ runs: id: get-metadata shell: bash env: - METADATA: ${{ toJSON(steps.docker-build-push-action.outputs.metadata) }} + METADATA: ${{ steps.docker-build-push-action.outputs.metadata }} run: | - { - echo "metadata<> $GITHUB_OUTPUT echo "## Docker Image Metadata" >> $GITHUB_STEP_SUMMARY echo '```json' >> $GITHUB_STEP_SUMMARY echo "$METADATA" | jq >> $GITHUB_STEP_SUMMARY From c5d128c8c1d2606c72ec448f5539b1169c0b116e Mon Sep 17 00:00:00 2001 From: Igor Rodionov <496956+goruha@users.noreply.github.com> Date: Thu, 19 Mar 2026 21:21:15 +0300 Subject: [PATCH 02/12] Remove 'Get Metadata' step from action.yml Removed the 'Get Metadata' step from the action configuration. --- action.yml | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/action.yml b/action.yml index 52adc3c..1f5d9c1 100644 --- a/action.yml +++ b/action.yml @@ -232,17 +232,6 @@ runs: secrets: ${{ inputs.secrets }} secret-files: ${{ inputs.secret-files }} - - name: Get Metadata - id: get-metadata - shell: bash - env: - METADATA: ${{ steps.docker-build-push-action.outputs.metadata }} - run: | - echo "## Docker Image Metadata" >> $GITHUB_STEP_SUMMARY - echo '```json' >> $GITHUB_STEP_SUMMARY - echo "$METADATA" | jq >> $GITHUB_STEP_SUMMARY - echo '```' >> $GITHUB_STEP_SUMMARY - - name: Docker Inspect id: inspect if: ${{ inputs.inspect }} == 'true' From efbd7073920c74ca5be9f3c681cee70c54edc17f Mon Sep 17 00:00:00 2001 From: Igor Rodionov <496956+goruha@users.noreply.github.com> Date: Thu, 19 Mar 2026 21:45:36 +0300 Subject: [PATCH 03/12] Enhance Docker image inspection summary output --- action.yml | 100 ++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 96 insertions(+), 4 deletions(-) diff --git a/action.yml b/action.yml index 1f5d9c1..310572a 100644 --- a/action.yml +++ b/action.yml @@ -241,7 +241,99 @@ runs: docker inspect "${{ inputs.registry }}/${{ steps.image_name.outputs.image_name }}:${{ steps.tag.outputs.output }}" > inspect.json metadata=$(jq -c < inspect.json) echo "metadata=$metadata" >> $GITHUB_OUTPUT - echo "## Docker Image Inspect" >> $GITHUB_STEP_SUMMARY - echo '```json' >> $GITHUB_STEP_SUMMARY - cat inspect.json >> $GITHUB_STEP_SUMMARY - echo '```' >> $GITHUB_STEP_SUMMARY + + # ── parse fields ──────────────────────────────────────────────────────── + IMAGE_NAME=$(jq -r '.[0].RepoTags[0] | split(":")[1]' inspect.json) + TAG=$(jq -r '.[0].RepoTags[0] | split(":")[1]' inspect.json) + DIGEST=$(jq -r '.[0].RepoDigests[0] | split("@")[1]' inspect.json) + IMAGE_ID=$(jq -r '.[0].Id' inspect.json) + REVISION=$(jq -r '.[0].Config.Labels["org.opencontainers.image.revision"] // "n/a"' inspect.json) + SOURCE=$(jq -r '.[0].Config.Labels["org.opencontainers.image.source"] // "n/a"' inspect.json) + LICENSE=$(jq -r '.[0].Config.Labels["org.opencontainers.image.licenses"] // "n/a"' inspect.json) + ARCH=$(jq -r '.[0].Architecture' inspect.json) + OS=$(jq -r '.[0].Os' inspect.json) + CREATED=$(jq -r '.[0].Config.Labels["org.opencontainers.image.created"] // "n/a"' inspect.json | cut -c1-10) + SIZE_BYTES=$(jq -r '.[0].Size' inspect.json) + SIZE_MB=$(echo "scale=1; $SIZE_BYTES / 1048576" | bc) + LAYER_COUNT=$(jq '.[0].RootFS.Layers | length' inspect.json) + PORTS=$(jq -r '.[0].Config.ExposedPorts // {} | keys | join(", ")' inspect.json) + ENTRYPOINT=$(jq -r '.[0].Config.Entrypoint | join(" ")' inspect.json) + CMD=$(jq -r '.[0].Config.Cmd | join(" ")' inspect.json) + STOP_SIGNAL=$(jq -r '.[0].Config.StopSignal // "n/a"' inspect.json) + DRIVER=$(jq -r '.[0].GraphDriver.Name' inspect.json) + + # ── summary ───────────────────────────────────────────────────────────── + { + echo "## 🐳 Docker image summary" + echo "" + echo "**${IMAGE_NAME}**   \`${LICENSE}\`   \`${ARCH}\`   \`${OS}\`" + echo "" + echo "| | |" + echo "|---|---|" + echo "| **Image size** | ${SIZE_MB} MB |" + echo "| **Layers** | ${LAYER_COUNT} |" + echo "| **Exposed ports** | \`${PORTS}\` |" + echo "| **Created** | ${CREATED} |" + echo "" + echo "---" + echo "" + + # identity (always visible) + echo "### 🏷️ Identity" + echo "" + echo "| Field | Value |" + echo "|---|---|" + echo "| Tag | \`${TAG}\` |" + echo "| Digest | \`${DIGEST}\` |" + echo "| Image ID | \`${IMAGE_ID}\` |" + echo "| Revision | \`${REVISION}\` |" + echo "| Source | ${SOURCE} |" + echo "" + + # runtime (collapsible) + echo "
" + echo "⚙️ Runtime" + echo "" + echo "| Field | Value |" + echo "|---|---|" + echo "| Entrypoint | \`${ENTRYPOINT}\` |" + echo "| Command | \`${CMD}\` |" + echo "| Stop signal | \`${STOP_SIGNAL}\` |" + echo "| Storage driver | \`${DRIVER}\` |" + echo "" + echo "
" + echo "" + + # env vars (collapsible) + echo "
" + echo "🌱 Environment variables" + echo "" + echo "| Variable | Value |" + echo "|---|---|" + jq -r '.[0].Config.Env[] | split("=") | "| `\(.[0])` | `\(.[1:] | join("="))` |"' inspect.json + echo "" + echo "
" + echo "" + + # layers (collapsible) + echo "
" + echo "📦 Layers (${LAYER_COUNT})" + echo "" + echo "| # | Digest |" + echo "|---|---|" + jq -r '.[0].RootFS.Layers | to_entries[] | "| \(.key + 1) | `\(.value)` |"' inspect.json + echo "" + echo "
" + echo "" + + # raw json (collapsible) + echo "
" + echo "📄 Raw JSON" + echo "" + echo '```json' + jq '.' inspect.json + echo '```' + echo "" + echo "
" + + } >> $GITHUB_STEP_SUMMARY From e9ccdbc1d3136d7d22062ad80246579da4714db9 Mon Sep 17 00:00:00 2001 From: Igor Rodionov <496956+goruha@users.noreply.github.com> Date: Thu, 19 Mar 2026 22:53:36 +0300 Subject: [PATCH 04/12] Update action.yml --- action.yml | 47 ++++++++++++++++++++++++++++++----------------- 1 file changed, 30 insertions(+), 17 deletions(-) diff --git a/action.yml b/action.yml index 310572a..5822f97 100644 --- a/action.yml +++ b/action.yml @@ -243,37 +243,39 @@ runs: echo "metadata=$metadata" >> $GITHUB_OUTPUT # ── parse fields ──────────────────────────────────────────────────────── - IMAGE_NAME=$(jq -r '.[0].RepoTags[0] | split(":")[1]' inspect.json) - TAG=$(jq -r '.[0].RepoTags[0] | split(":")[1]' inspect.json) - DIGEST=$(jq -r '.[0].RepoDigests[0] | split("@")[1]' inspect.json) - IMAGE_ID=$(jq -r '.[0].Id' inspect.json) + IMAGE_NAME=$(jq -r '.[0].RepoTags[0] | split(":")[0] | split("/")[-1]' inspect.json) + TAG=$(jq -r '.[0].RepoTags[0] | split(":")[1]' inspect.json) + DIGEST=$(jq -r '.[0].RepoDigests[0] | split("@")[1]' inspect.json) + IMAGE_ID=$(jq -r '.[0].Id' inspect.json) REVISION=$(jq -r '.[0].Config.Labels["org.opencontainers.image.revision"] // "n/a"' inspect.json) SOURCE=$(jq -r '.[0].Config.Labels["org.opencontainers.image.source"] // "n/a"' inspect.json) LICENSE=$(jq -r '.[0].Config.Labels["org.opencontainers.image.licenses"] // "n/a"' inspect.json) - ARCH=$(jq -r '.[0].Architecture' inspect.json) - OS=$(jq -r '.[0].Os' inspect.json) - CREATED=$(jq -r '.[0].Config.Labels["org.opencontainers.image.created"] // "n/a"' inspect.json | cut -c1-10) - SIZE_BYTES=$(jq -r '.[0].Size' inspect.json) + DESCRIPTION=$(jq -r '.[0].Config.Labels["org.opencontainers.image.description"] // ""' inspect.json) + ARCH=$(jq -r '.[0].Architecture' inspect.json) + OS=$(jq -r '.[0].Os' inspect.json) + SIZE_BYTES=$(jq -r '.[0].Size' inspect.json) SIZE_MB=$(echo "scale=1; $SIZE_BYTES / 1048576" | bc) - LAYER_COUNT=$(jq '.[0].RootFS.Layers | length' inspect.json) + LAYER_COUNT=$(jq '.[0].RootFS.Layers | length' inspect.json) PORTS=$(jq -r '.[0].Config.ExposedPorts // {} | keys | join(", ")' inspect.json) - ENTRYPOINT=$(jq -r '.[0].Config.Entrypoint | join(" ")' inspect.json) - CMD=$(jq -r '.[0].Config.Cmd | join(" ")' inspect.json) - STOP_SIGNAL=$(jq -r '.[0].Config.StopSignal // "n/a"' inspect.json) - DRIVER=$(jq -r '.[0].GraphDriver.Name' inspect.json) + ENTRYPOINT=$(jq -r '.[0].Config.Entrypoint | join(" ")' inspect.json) + CMD=$(jq -r '.[0].Config.Cmd | join(" ")' inspect.json) + STOP_SIGNAL=$(jq -r '.[0].Config.StopSignal // "n/a"' inspect.json) + DRIVER=$(jq -r '.[0].GraphDriver.Name' inspect.json) # ── summary ───────────────────────────────────────────────────────────── { - echo "## 🐳 Docker image summary" + echo "## 🐳 ${IMAGE_NAME}   \`${SIZE_MB} MB\`" echo "" - echo "**${IMAGE_NAME}**   \`${LICENSE}\`   \`${ARCH}\`   \`${OS}\`" + if [[ -n "${DESCRIPTION}" ]]; then + echo "${DESCRIPTION}" + echo "" + fi + echo "\`${LICENSE}\`   \`${ARCH}\`   \`${OS}\`" echo "" echo "| | |" echo "|---|---|" - echo "| **Image size** | ${SIZE_MB} MB |" echo "| **Layers** | ${LAYER_COUNT} |" echo "| **Exposed ports** | \`${PORTS}\` |" - echo "| **Created** | ${CREATED} |" echo "" echo "---" echo "" @@ -315,6 +317,17 @@ runs: echo "" echo "" + # labels (collapsible) + echo "
" + echo "🔖 Labels" + echo "" + echo "| Label | Value |" + echo "|---|---|" + jq -r '.[0].Config.Labels // {} | to_entries[] | "| `\(.key)` | `\(.value)` |"' inspect.json + echo "" + echo "
" + echo "" + # layers (collapsible) echo "
" echo "📦 Layers (${LAYER_COUNT})" From 9f8b6469af3f5c554c89c94f6125361b2fa88935 Mon Sep 17 00:00:00 2001 From: Igor Rodionov <496956+goruha@users.noreply.github.com> Date: Thu, 19 Mar 2026 22:59:32 +0300 Subject: [PATCH 05/12] Enhance summary output in action.yml Updated summary output to include license, architecture, and OS details. --- action.yml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/action.yml b/action.yml index 5822f97..8267906 100644 --- a/action.yml +++ b/action.yml @@ -264,17 +264,14 @@ runs: # ── summary ───────────────────────────────────────────────────────────── { - echo "## 🐳 ${IMAGE_NAME}   \`${SIZE_MB} MB\`" + echo "## 🐳 ${IMAGE_NAME}   \`${SIZE_MB} MB\`   \`${LICENSE}\`   \`${ARCH}\`   \`${OS}\`" echo "" if [[ -n "${DESCRIPTION}" ]]; then echo "${DESCRIPTION}" echo "" fi - echo "\`${LICENSE}\`   \`${ARCH}\`   \`${OS}\`" - echo "" echo "| | |" echo "|---|---|" - echo "| **Layers** | ${LAYER_COUNT} |" echo "| **Exposed ports** | \`${PORTS}\` |" echo "" echo "---" From e66bd6554350063254287ad21ce038b1c85e09c9 Mon Sep 17 00:00:00 2001 From: Igor Rodionov <496956+goruha@users.noreply.github.com> Date: Thu, 19 Mar 2026 23:11:30 +0300 Subject: [PATCH 06/12] Update action.yml --- action.yml | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/action.yml b/action.yml index 8267906..c7b36f1 100644 --- a/action.yml +++ b/action.yml @@ -98,9 +98,13 @@ inputs: required: false default: "false" inspect: - description: "Set to `true` will pull and inspect the image and output it to the step summary." + description: "Set to `true` will pull and inspect the image and output it." required: false default: "false" + summary: + description: "Set to `true` will create step summary." + required: false + default: "true" debug: description: "Enable debug mode" required: false @@ -115,6 +119,9 @@ outputs: metadata: description: "Docker image metadata" value: ${{ toJSON(steps.docker-build-push-action.outputs.metadata) }} + inspect: + description: "Docker image inspect metadata" + value: ${{ toJSON(steps.inspect.outputs.metadata) }} runs: using: "composite" @@ -211,6 +218,8 @@ runs: # https://github.com/docker/build-push-action/issues/1167 uses: docker/build-push-action@v7 id: docker-build-push-action + env: + DOCKER_BUILD_SUMMARY: {{ inputs.inspect && inputs.summary }} with: allow: ${{ inputs.allow }} network: ${{ inputs.network }} @@ -234,7 +243,7 @@ runs: - name: Docker Inspect id: inspect - if: ${{ inputs.inspect }} == 'true' + if: ${{ inputs.summary }} == 'true' shell: bash run: | docker pull "${{ inputs.registry }}/${{ steps.image_name.outputs.image_name }}:${{ steps.tag.outputs.output }}" @@ -270,16 +279,9 @@ runs: echo "${DESCRIPTION}" echo "" fi - echo "| | |" - echo "|---|---|" - echo "| **Exposed ports** | \`${PORTS}\` |" - echo "" echo "---" echo "" - # identity (always visible) - echo "### 🏷️ Identity" - echo "" echo "| Field | Value |" echo "|---|---|" echo "| Tag | \`${TAG}\` |" @@ -299,6 +301,7 @@ runs: echo "| Command | \`${CMD}\` |" echo "| Stop signal | \`${STOP_SIGNAL}\` |" echo "| Storage driver | \`${DRIVER}\` |" + echo "| Exposed ports | \`${PORTS}\` |" echo "" echo "
" echo "" From 3ad0086a8d104900c1e38c26b0c8c333982102d6 Mon Sep 17 00:00:00 2001 From: Igor Rodionov <496956+goruha@users.noreply.github.com> Date: Fri, 20 Mar 2026 00:53:29 +0300 Subject: [PATCH 07/12] Fix syntax for DOCKER_BUILD_SUMMARY variable --- action.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/action.yml b/action.yml index c7b36f1..a0f046b 100644 --- a/action.yml +++ b/action.yml @@ -219,7 +219,7 @@ runs: uses: docker/build-push-action@v7 id: docker-build-push-action env: - DOCKER_BUILD_SUMMARY: {{ inputs.inspect && inputs.summary }} + DOCKER_BUILD_SUMMARY: ${{ inputs.inspect && inputs.summary }} with: allow: ${{ inputs.allow }} network: ${{ inputs.network }} From 045712c34b10b0b62026fff17139e2b101db2bc9 Mon Sep 17 00:00:00 2001 From: Igor Rodionov <496956+goruha@users.noreply.github.com> Date: Fri, 20 Mar 2026 00:56:05 +0300 Subject: [PATCH 08/12] Change Docker build inspect option to false --- .github/workflows/test-docker-build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test-docker-build.yml b/.github/workflows/test-docker-build.yml index 942d452..db476ec 100644 --- a/.github/workflows/test-docker-build.yml +++ b/.github/workflows/test-docker-build.yml @@ -38,7 +38,7 @@ jobs: registry: registry.hub.docker.com login: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_PASSWORD }} - inspect: true + inspect: false tags: | type=sha,format=long,suffix=-single-platform,priority=1002 From 768ace98150433f4f0f2023389e438f0e4d16049 Mon Sep 17 00:00:00 2001 From: Igor Rodionov <496956+goruha@users.noreply.github.com> Date: Fri, 20 Mar 2026 02:09:49 +0300 Subject: [PATCH 09/12] Remove inspect option from Docker build workflow --- .github/workflows/test-docker-build-multi-platform.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/test-docker-build-multi-platform.yml b/.github/workflows/test-docker-build-multi-platform.yml index 3b20da6..b87902e 100644 --- a/.github/workflows/test-docker-build-multi-platform.yml +++ b/.github/workflows/test-docker-build-multi-platform.yml @@ -40,6 +40,7 @@ jobs: login: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_PASSWORD }} platforms: linux/amd64,linux/arm64 + inspect: false tags: | type=sha,format=long,suffix=-multi-platform,priority=1002 From 0781f9fdc3cff64194a6179180d3e008b978134c Mon Sep 17 00:00:00 2001 From: Igor Rodionov <496956+goruha@users.noreply.github.com> Date: Fri, 20 Mar 2026 02:11:31 +0300 Subject: [PATCH 10/12] Update action.yml --- action.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/action.yml b/action.yml index 530c5e1..f31fcbf 100644 --- a/action.yml +++ b/action.yml @@ -219,7 +219,7 @@ runs: uses: docker/build-push-action@v7 id: docker-build-push-action env: - DOCKER_BUILD_SUMMARY: ${{ inputs.inspect && inputs.summary }} + DOCKER_BUILD_SUMMARY: ${{ inputs.inspect == 'true' && inputs.summary == 'true' }} with: allow: ${{ inputs.allow }} network: ${{ inputs.network }} @@ -243,7 +243,7 @@ runs: - name: Docker Inspect id: inspect - if: ${{ inputs.summary }} == 'true' + if: ${{ inputs.summary == 'true' }} shell: bash run: | docker pull "${{ inputs.registry }}/${{ steps.image_name.outputs.image_name }}:${{ steps.tag.outputs.output }}" From e65ea61e4a1dde5db17c89bc7359333bf352e1d5 Mon Sep 17 00:00:00 2001 From: Igor Rodionov <496956+goruha@users.noreply.github.com> Date: Fri, 20 Mar 2026 02:17:32 +0300 Subject: [PATCH 11/12] Update image name and repository output in action.yml --- action.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/action.yml b/action.yml index f31fcbf..0094f2b 100644 --- a/action.yml +++ b/action.yml @@ -253,6 +253,7 @@ runs: # ── parse fields ──────────────────────────────────────────────────────── IMAGE_NAME=$(jq -r '.[0].RepoTags[0] | split(":")[0] | split("/")[-1]' inspect.json) + IMAGE_REPO=$(jq -r '.[0].RepoTags[0] | split(":")[0]' inspect.json) TAG=$(jq -r '.[0].RepoTags[0] | split(":")[1]' inspect.json) DIGEST=$(jq -r '.[0].RepoDigests[0] | split("@")[1]' inspect.json) IMAGE_ID=$(jq -r '.[0].Id' inspect.json) @@ -273,13 +274,15 @@ runs: # ── summary ───────────────────────────────────────────────────────────── { - echo "## 🐳 ${IMAGE_NAME}   \`${SIZE_MB} MB\`   \`${LICENSE}\`   \`${ARCH}\`   \`${OS}\`" + echo "## 🐳 ${IMAGE_REPO}" echo "" if [[ -n "${DESCRIPTION}" ]]; then echo "${DESCRIPTION}" echo "" fi echo "---" + echo "\`${SIZE_MB} MB\`   \`${LICENSE}\`   \`${ARCH}\`   \`${OS}\`" + echo "---" echo "" echo "| Field | Value |" From 794635dbd5ccefdc891a543431f2ce9e50e51afe Mon Sep 17 00:00:00 2001 From: Igor Rodionov <496956+goruha@users.noreply.github.com> Date: Fri, 20 Mar 2026 02:20:15 +0300 Subject: [PATCH 12/12] Enhance summary output in action.yml Update summary output to include image size, license, architecture, and OS. --- action.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/action.yml b/action.yml index 0094f2b..bc081b7 100644 --- a/action.yml +++ b/action.yml @@ -274,15 +274,13 @@ runs: # ── summary ───────────────────────────────────────────────────────────── { - echo "## 🐳 ${IMAGE_REPO}" + echo "## 🐳 ${IMAGE_REPO}   \`${SIZE_MB} MB\`   \`${LICENSE}\`   \`${ARCH}\`   \`${OS}\`" echo "" if [[ -n "${DESCRIPTION}" ]]; then echo "${DESCRIPTION}" echo "" fi echo "---" - echo "\`${SIZE_MB} MB\`   \`${LICENSE}\`   \`${ARCH}\`   \`${OS}\`" - echo "---" echo "" echo "| Field | Value |"