From aab8154139b1176d7137801b280f80a5b7a40393 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9sar=20Arroba?= <19954079+cesararroba@users.noreply.github.com> Date: Tue, 4 Aug 2026 10:25:31 +0200 Subject: [PATCH] ci(workflows): align container build-push workflows across api, ui, mcp and sdk (#12310) --- .../workflows/api-container-build-push.yml | 19 ++++++-- .../workflows/mcp-container-build-push.yml | 25 +++++----- .../workflows/sdk-container-build-push.yml | 46 +++++++++++-------- .github/workflows/ui-container-build-push.yml | 31 +++++++++---- 4 files changed, 78 insertions(+), 43 deletions(-) diff --git a/.github/workflows/api-container-build-push.yml b/.github/workflows/api-container-build-push.yml index 79217455c1..fabfef17fd 100644 --- a/.github/workflows/api-container-build-push.yml +++ b/.github/workflows/api-container-build-push.yml @@ -42,6 +42,7 @@ jobs: timeout-minutes: 5 outputs: short-sha: ${{ steps.set-short-sha.outputs.short-sha }} + created: ${{ steps.set-short-sha.outputs.created }} permissions: contents: read steps: @@ -52,7 +53,9 @@ jobs: - name: Calculate short SHA id: set-short-sha - run: echo "short-sha=${GITHUB_SHA::7}" >> $GITHUB_OUTPUT + run: | + echo "short-sha=${GITHUB_SHA::7}" >> "${GITHUB_OUTPUT}" + echo "created=$(date -u +%Y-%m-%dT%H:%M:%SZ)" >> "${GITHUB_OUTPUT}" notify-release-started: if: github.repository == 'prowler-cloud/prowler' && (github.event_name == 'release' || github.event_name == 'workflow_dispatch') @@ -162,6 +165,14 @@ jobs: platforms: ${{ matrix.platform }} tags: | ${{ env.PROWLERCLOUD_DOCKERHUB_REPOSITORY }}/${{ env.PROWLERCLOUD_DOCKERHUB_IMAGE }}:${{ needs.setup.outputs.short-sha }}-${{ matrix.arch }} + labels: | + org.opencontainers.image.title=Prowler Local Server API + org.opencontainers.image.description=API for Prowler Local Server (Django/DRF) + org.opencontainers.image.vendor=ProwlerPro, Inc. + org.opencontainers.image.source=https://github.com/${{ github.repository }} + org.opencontainers.image.revision=${{ github.sha }} + org.opencontainers.image.created=${{ needs.setup.outputs.created }} + ${{ (github.event_name == 'release' || github.event_name == 'workflow_dispatch') && format('org.opencontainers.image.version={0}', env.RELEASE_TAG) || '' }} cache-from: type=gha,scope=${{ matrix.arch }} cache-to: type=gha,mode=${{ github.event_name == 'pull_request' && 'min' || 'max' }},scope=${{ matrix.arch }} @@ -179,12 +190,12 @@ jobs: with: egress-policy: block allowed-endpoints: > - github.com:443 - release-assets.githubusercontent.com:443 - registry-1.docker.io:443 auth.docker.io:443 + github.com:443 production.cloudflare.docker.com:443 production.cloudfront.docker.com:443 + registry-1.docker.io:443 + release-assets.githubusercontent.com:443 - name: Login to DockerHub uses: docker/login-action@4907a6ddec9925e35a0a9e82d7399ccc52663121 # v4.1.0 with: diff --git a/.github/workflows/mcp-container-build-push.yml b/.github/workflows/mcp-container-build-push.yml index 59994f8319..614c33c7be 100644 --- a/.github/workflows/mcp-container-build-push.yml +++ b/.github/workflows/mcp-container-build-push.yml @@ -41,6 +41,7 @@ jobs: timeout-minutes: 5 outputs: short-sha: ${{ steps.set-short-sha.outputs.short-sha }} + created: ${{ steps.set-short-sha.outputs.created }} permissions: contents: read steps: @@ -51,7 +52,9 @@ jobs: - name: Calculate short SHA id: set-short-sha - run: echo "short-sha=${GITHUB_SHA::7}" >> $GITHUB_OUTPUT + run: | + echo "short-sha=${GITHUB_SHA::7}" >> "${GITHUB_OUTPUT}" + echo "created=$(date -u +%Y-%m-%dT%H:%M:%SZ)" >> "${GITHUB_OUTPUT}" notify-release-started: if: github.repository == 'prowler-cloud/prowler' && (github.event_name == 'release' || github.event_name == 'workflow_dispatch') @@ -110,15 +113,15 @@ jobs: with: egress-policy: block allowed-endpoints: > - github.com:443 - registry-1.docker.io:443 auth.docker.io:443 + files.pythonhosted.org:443 + ghcr.io:443 + github.com:443 + pkg-containers.githubusercontent.com:443 production.cloudflare.docker.com:443 production.cloudfront.docker.com:443 - ghcr.io:443 - pkg-containers.githubusercontent.com:443 - files.pythonhosted.org:443 pypi.org:443 + registry-1.docker.io:443 - name: Checkout repository uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 @@ -145,13 +148,13 @@ jobs: tags: | ${{ env.PROWLERCLOUD_DOCKERHUB_REPOSITORY }}/${{ env.PROWLERCLOUD_DOCKERHUB_IMAGE }}:${{ needs.setup.outputs.short-sha }}-${{ matrix.arch }} labels: | - org.opencontainers.image.title=Prowler MCP Server + org.opencontainers.image.title=Prowler MCP org.opencontainers.image.description=Model Context Protocol server for Prowler org.opencontainers.image.vendor=ProwlerPro, Inc. org.opencontainers.image.source=https://github.com/${{ github.repository }} org.opencontainers.image.revision=${{ github.sha }} - org.opencontainers.image.created=${{ github.event_name == 'release' && github.event.release.published_at || github.event.head_commit.timestamp }} - ${{ github.event_name == 'release' && format('org.opencontainers.image.version={0}', env.RELEASE_TAG) || '' }} + org.opencontainers.image.created=${{ needs.setup.outputs.created }} + ${{ (github.event_name == 'release' || github.event_name == 'workflow_dispatch') && format('org.opencontainers.image.version={0}', env.RELEASE_TAG) || '' }} cache-from: type=gha,scope=${{ matrix.arch }} cache-to: type=gha,mode=${{ github.event_name == 'pull_request' && 'min' || 'max' }},scope=${{ matrix.arch }} @@ -169,11 +172,11 @@ jobs: with: egress-policy: block allowed-endpoints: > - registry-1.docker.io:443 auth.docker.io:443 + github.com:443 production.cloudflare.docker.com:443 production.cloudfront.docker.com:443 - github.com:443 + registry-1.docker.io:443 release-assets.githubusercontent.com:443 - name: Login to DockerHub diff --git a/.github/workflows/sdk-container-build-push.yml b/.github/workflows/sdk-container-build-push.yml index bbe85ab2c5..2f516bd093 100644 --- a/.github/workflows/sdk-container-build-push.yml +++ b/.github/workflows/sdk-container-build-push.yml @@ -54,6 +54,7 @@ jobs: timeout-minutes: 5 outputs: prowler_version: ${{ steps.get-prowler-version.outputs.prowler_version }} + created: ${{ steps.get-prowler-version.outputs.created }} latest_tag: ${{ steps.get-prowler-version.outputs.latest_tag }} stable_tag: ${{ steps.get-prowler-version.outputs.stable_tag }} permissions: @@ -64,9 +65,9 @@ jobs: with: egress-policy: block allowed-endpoints: > + files.pythonhosted.org:443 github.com:443 pypi.org:443 - files.pythonhosted.org:443 - name: Checkout repository uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 @@ -86,6 +87,7 @@ jobs: fi echo "latest_tag=latest" >> "${GITHUB_OUTPUT}" echo "stable_tag=stable" >> "${GITHUB_OUTPUT}" + echo "created=$(date -u +%Y-%m-%dT%H:%M:%SZ)" >> "${GITHUB_OUTPUT}" notify-release-started: if: github.repository == 'prowler-cloud/prowler' && (github.event_name == 'release' || github.event_name == 'workflow_dispatch') @@ -146,24 +148,24 @@ jobs: with: egress-policy: block allowed-endpoints: > + _http._tcp.deb.debian.org:443 + aka.ms:443 api.ecr-public.us-east-1.amazonaws.com:443 - public.ecr.aws:443 - sts.amazonaws.com:443 - sts.us-east-1.amazonaws.com:443 - registry-1.docker.io:443 + auth.docker.io:443 + cdn.powershellgallery.com:443 + debian.map.fastlydns.net:80 + files.pythonhosted.org:443 + github.com:443 + powershellinfraartifacts-gkhedzdeaghdezhr.z01.azurefd.net:443 production.cloudflare.docker.com:443 production.cloudfront.docker.com:443 - auth.docker.io:443 - debian.map.fastlydns.net:80 - github.com:443 - release-assets.githubusercontent.com:443 + public.ecr.aws:443 pypi.org:443 - files.pythonhosted.org:443 + registry-1.docker.io:443 + release-assets.githubusercontent.com:443 + sts.amazonaws.com:443 + sts.us-east-1.amazonaws.com:443 www.powershellgallery.com:443 - aka.ms:443 - cdn.powershellgallery.com:443 - _http._tcp.deb.debian.org:443 - powershellinfraartifacts-gkhedzdeaghdezhr.z01.azurefd.net:443 - name: Checkout repository uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 @@ -201,6 +203,14 @@ jobs: platforms: ${{ matrix.platform }} tags: | ${{ env.PROWLERCLOUD_DOCKERHUB_REPOSITORY }}/${{ env.PROWLERCLOUD_DOCKERHUB_IMAGE }}:${{ needs.setup.outputs.latest_tag }}-${{ matrix.arch }} + labels: | + org.opencontainers.image.title=Prowler CLI + org.opencontainers.image.description=Open Source security tool for cloud security assessments, audits, incident response, continuous monitoring, hardening and forensics readiness + org.opencontainers.image.vendor=ProwlerPro, Inc. + org.opencontainers.image.source=https://github.com/${{ github.repository }} + org.opencontainers.image.revision=${{ github.sha }} + org.opencontainers.image.created=${{ needs.setup.outputs.created }} + org.opencontainers.image.version=${{ needs.setup.outputs.prowler_version }} cache-from: type=gha,scope=${{ matrix.arch }} cache-to: type=gha,mode=${{ github.event_name == 'pull_request' && 'min' || 'max' }},scope=${{ matrix.arch }} @@ -219,14 +229,14 @@ jobs: with: egress-policy: block allowed-endpoints: > - registry-1.docker.io:443 + api.ecr-public.us-east-1.amazonaws.com:443 auth.docker.io:443 - public.ecr.aws:443 + github.com:443 production.cloudflare.docker.com:443 production.cloudfront.docker.com:443 - github.com:443 + public.ecr.aws:443 + registry-1.docker.io:443 release-assets.githubusercontent.com:443 - api.ecr-public.us-east-1.amazonaws.com:443 sts.amazonaws.com:443 sts.us-east-1.amazonaws.com:443 diff --git a/.github/workflows/ui-container-build-push.yml b/.github/workflows/ui-container-build-push.yml index 124db7b78b..9c869fde13 100644 --- a/.github/workflows/ui-container-build-push.yml +++ b/.github/workflows/ui-container-build-push.yml @@ -41,17 +41,20 @@ jobs: timeout-minutes: 5 outputs: short-sha: ${{ steps.set-short-sha.outputs.short-sha }} + created: ${{ steps.set-short-sha.outputs.created }} permissions: contents: read steps: - - name: Harden the runner (Audit all outbound calls) + - name: Harden Runner uses: step-security/harden-runner@bf7454d06d71f1098171f2acdf0cd4708d7b5920 # v2.20.0 with: - egress-policy: audit + egress-policy: block - name: Calculate short SHA id: set-short-sha - run: echo "short-sha=${GITHUB_SHA::7}" >> $GITHUB_OUTPUT + run: | + echo "short-sha=${GITHUB_SHA::7}" >> "${GITHUB_OUTPUT}" + echo "created=$(date -u +%Y-%m-%dT%H:%M:%SZ)" >> "${GITHUB_OUTPUT}" notify-release-started: if: github.repository == 'prowler-cloud/prowler' && (github.event_name == 'release' || github.event_name == 'workflow_dispatch') @@ -111,15 +114,15 @@ jobs: with: egress-policy: block allowed-endpoints: > - registry-1.docker.io:443 - production.cloudflare.docker.com:443 - production.cloudfront.docker.com:443 auth.docker.io:443 - registry.npmjs.org:443 dl-cdn.alpinelinux.org:443 fonts.googleapis.com:443 fonts.gstatic.com:443 github.com:443 + production.cloudflare.docker.com:443 + production.cloudfront.docker.com:443 + registry-1.docker.io:443 + registry.npmjs.org:443 - name: Checkout repository uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 @@ -147,6 +150,14 @@ jobs: platforms: ${{ matrix.platform }} tags: | ${{ env.PROWLERCLOUD_DOCKERHUB_REPOSITORY }}/${{ env.PROWLERCLOUD_DOCKERHUB_IMAGE }}:${{ needs.setup.outputs.short-sha }}-${{ matrix.arch }} + labels: | + org.opencontainers.image.title=Prowler Local Server UI + org.opencontainers.image.description=Web UI for Prowler Local Server (Next.js) + org.opencontainers.image.vendor=ProwlerPro, Inc. + org.opencontainers.image.source=https://github.com/${{ github.repository }} + org.opencontainers.image.revision=${{ github.sha }} + org.opencontainers.image.created=${{ needs.setup.outputs.created }} + ${{ (github.event_name == 'release' || github.event_name == 'workflow_dispatch') && format('org.opencontainers.image.version={0}', env.RELEASE_TAG) || '' }} cache-from: type=gha,scope=${{ matrix.arch }} cache-to: type=gha,mode=${{ github.event_name == 'pull_request' && 'min' || 'max' }},scope=${{ matrix.arch }} @@ -164,12 +175,12 @@ jobs: with: egress-policy: block allowed-endpoints: > - github.com:443 - release-assets.githubusercontent.com:443 - registry-1.docker.io:443 auth.docker.io:443 + github.com:443 production.cloudflare.docker.com:443 production.cloudfront.docker.com:443 + registry-1.docker.io:443 + release-assets.githubusercontent.com:443 - name: Login to DockerHub uses: docker/login-action@4907a6ddec9925e35a0a9e82d7399ccc52663121 # v4.1.0