From 56308f75cc8a52c22da8109e099f9e5800d18bcf Mon Sep 17 00:00:00 2001 From: Haitao Pan Date: Sat, 6 Dec 2025 22:50:28 +0800 Subject: [PATCH] ci: unify DockerHub retag/push logic across base and service image workflows --- .github/workflows/build-base-images.yml | 29 ++++++++++------------ .github/workflows/build-service-images.yml | 29 ++++++++++------------ 2 files changed, 26 insertions(+), 32 deletions(-) diff --git a/.github/workflows/build-base-images.yml b/.github/workflows/build-base-images.yml index eccb13b..9770358 100644 --- a/.github/workflows/build-base-images.yml +++ b/.github/workflows/build-base-images.yml @@ -110,29 +110,26 @@ jobs: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - - name: Re-tag & Push image to Docker Hub + # ------------------------------------------------------------- + # Re-tag & Push service image to Docker Hub + # ------------------------------------------------------------- + - name: Re-tag & Push Image (Docker Hub) if: env.PUSH_IMAGES == 'true' env: - TARGET_NS: ${{ env.DOCKERHUB_NAMESPACE }} + TARGET_NS: ${{ inputs.dockerhub_namespace || github.event.inputs.dockerhub_namespace || 'manbuzhe2009' }} run: | - ORIGIN_IMG="${{ env.REGISTRY }}/${{ env.ORG }}/${{ matrix.service.name }}@${{ steps.build.outputs.digest }}" - TARGET_REPO="docker.io/${TARGET_NS}/${{ matrix.service.name }}" - TAGS="${{ steps.meta.outputs.tags }}" + set -euo pipefail - echo "Origin: $ORIGIN_IMG" - echo "Target Namespace: $TARGET_NS" - echo "Target Repo: $TARGET_REPO" + SERVICE="${{ matrix.image.name }}" + ORIGIN_IMG="${{ env.REGISTRY }}/${{ env.ORG }}/${SERVICE}@${{ steps.build.outputs.digest }}" + TARGET_REPO="docker.io/${TARGET_NS}/${SERVICE}" + TAG_NAMES="${{ steps.meta.outputs.tag-names }}" docker pull "$ORIGIN_IMG" - # 为所有 tag 逐个推送 - for TAG in $TAGS; do - SHORT_TAG=$(echo "$TAG" | sed -E 's|.*/||') # 提取 tag 名称 - echo "Tagging -> $TARGET_REPO:$SHORT_TAG" - docker tag "$ORIGIN_IMG" "$TARGET_REPO:$SHORT_TAG" - echo "Pushing -> $TARGET_REPO:$SHORT_TAG" - docker push "$TARGET_REPO:$SHORT_TAG" - echo "✓ Pushed: $TARGET_REPO:$SHORT_TAG" + for TAG in $TAG_NAMES; do + docker tag "$ORIGIN_IMG" "$TARGET_REPO:$TAG" + docker push "$TARGET_REPO:$TAG" done Security-service: diff --git a/.github/workflows/build-service-images.yml b/.github/workflows/build-service-images.yml index d8c9d8f..76a197d 100644 --- a/.github/workflows/build-service-images.yml +++ b/.github/workflows/build-service-images.yml @@ -145,29 +145,26 @@ jobs: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - - name: Re-tag & Push image to Docker Hub + # ------------------------------------------------------------- + # Re-tag & Push image to Docker Hub + # ------------------------------------------------------------- + - name: Re-tag & Push Service Image (Docker Hub) if: env.PUSH_IMAGES == 'true' env: - TARGET_NS: ${{ env.DOCKERHUB_NAMESPACE }} + TARGET_NS: ${{ inputs.dockerhub_namespace || github.event.inputs.dockerhub_namespace || 'manbuzhe2009' }} run: | - ORIGIN_IMG="${{ env.REGISTRY }}/${{ env.ORG }}/${{ matrix.service.name }}@${{ steps.build.outputs.digest }}" - TARGET_REPO="docker.io/${TARGET_NS}/${{ matrix.service.name }}" - TAGS="${{ steps.meta.outputs.tags }}" + set -euo pipefail - echo "Origin: $ORIGIN_IMG" - echo "Target Namespace: $TARGET_NS" - echo "Target Repo: $TARGET_REPO" + SERVICE="${{ matrix.service.name }}" + ORIGIN_IMG="${{ env.REGISTRY }}/${{ env.ORG }}/${SERVICE}@${{ steps.build.outputs.digest }}" + TARGET_REPO="docker.io/${TARGET_NS}/${SERVICE}" + TAG_NAMES="${{ steps.meta.outputs.tag-names }}" docker pull "$ORIGIN_IMG" - # 为所有 tag 逐个推送 - for TAG in $TAGS; do - SHORT_TAG=$(echo "$TAG" | sed -E 's|.*/||') # 提取 tag 名称 - echo "Tagging -> $TARGET_REPO:$SHORT_TAG" - docker tag "$ORIGIN_IMG" "$TARGET_REPO:$SHORT_TAG" - echo "Pushing -> $TARGET_REPO:$SHORT_TAG" - docker push "$TARGET_REPO:$SHORT_TAG" - echo "✓ Pushed: $TARGET_REPO:$SHORT_TAG" + for TAG in $TAG_NAMES; do + docker tag "$ORIGIN_IMG" "$TARGET_REPO:$TAG" + docker push "$TARGET_REPO:$TAG" done Security: