diff --git a/.github/workflows/build_packages.yaml b/.github/workflows/build_packages.yaml index 58d2581dc..dcde2bbea 100644 --- a/.github/workflows/build_packages.yaml +++ b/.github/workflows/build_packages.yaml @@ -588,6 +588,7 @@ jobs: docker push public.ecr.aws/emqx/emqx:${version#v} docker-push-multi-arch-manifest: + # note, we only run on amd64 if: github.event_name == 'release' needs: docker runs-on: ubuntu-latest @@ -614,6 +615,16 @@ jobs: - 24.1.5-3 # update to latest steps: + - uses: actions/download-artifact@v2 + if: matrix.arch == 'amd64' + with: + name: source + path: . + + - name: unzip source code + if: matrix.arch == 'amd64' + run: unzip -q source.zip + - uses: docker/login-action@v1 if: matrix.arch == 'amd64' with: @@ -638,32 +649,11 @@ jobs: org.opencontainers.image.otp.version=${{ matrix.otp }} - name: update manifest for multiarch image - # we only run on amd64 if: matrix.arch == 'amd64' run: | - set -xeu - img_amd64="${{ steps.meta.outputs.tags }}" - img_arm64=$(echo ${img_amd64} | sed 's/-amd64$/-arm64/g') - img_march=${img_amd64%-amd64} - docker pull "$img_amd64" - docker pull --platform linux/arm64 "$img_arm64" - img_amd64_digest=$(docker inspect --format='{{index .RepoDigests 0}}' "$img_amd64") - img_arm64_digest=$(docker inspect --format='{{index .RepoDigests 0}}' "$img_arm64") - echo "sha256 of amd64 is $img_amd64_digest" - echo "sha256 of arm64 is $img_arm64_digest" - docker manifest create "${img_march}" \ - --amend "$img_amd64_digest" \ - --amend "$img_arm64_digest" - docker manifest push "${img_march}" + IsPushLatest=${{ github.event_name == 'release' && !github.event.release.prerelease }}; + scripts/docker-create-push-manifest "${{ steps.meta.outputs.tags }}" "$IsPushLatest" - # PUSH latest if it is a release build - if ${{ github.event_name == 'release' && !github.event.release.prerelease }}; then - img_latest="${{ github.repository_owner }}/${{ matrix.profile }}:latest" - docker manifest create "${img_latest}" \ - --amend "$img_amd64_digest" \ - --amend "$img_arm64_digest" - docker manifest push "${img_latest}" - fi delete-artifact: runs-on: ubuntu-20.04 diff --git a/scripts/docker-create-push-manifests.sh b/scripts/docker-create-push-manifests.sh new file mode 100755 index 000000000..cb4643a13 --- /dev/null +++ b/scripts/docker-create-push-manifests.sh @@ -0,0 +1,28 @@ +##!/usr/bin/env bash +set -euo pipefail + +img_amd64=$1 +IsPushLatest=$2 + +img_arm64=$(echo ${img_amd64} | sed 's/-amd64$/-arm64/g') +img_march=${img_amd64%-amd64} +docker pull "$img_amd64" +docker pull --platform linux/arm64 "$img_arm64" +img_amd64_digest=$(docker inspect --format='{{index .RepoDigests 0}}' "$img_amd64") +img_arm64_digest=$(docker inspect --format='{{index .RepoDigests 0}}' "$img_arm64") +echo "sha256 of amd64 is $img_amd64_digest" +echo "sha256 of arm64 is $img_arm64_digest" +docker manifest create "${img_march}" \ + --amend "$img_amd64_digest" \ + --amend "$img_arm64_digest" +docker manifest push "${img_march}" + +# PUSH latest if it is a release build +if [ "$IsPushLatest" = "true" ]; then + + img_latest=$(echo "$img_arm64" | cut -d: -f 1):latest + docker manifest create "${img_latest}" \ + --amend "$img_amd64_digest" \ + --amend "$img_arm64_digest" + docker manifest push "${img_latest}" +fi