@@ -39,51 +39,87 @@ jobs:
3939 echo "buildNo:${{ env.BUILD_NO }}"
4040 echo "preTag:${{ env.PRE_TAG }}"
4141
42- src_offline_package=harbor-offline-installer-${{ env.BASE_TAG }}-${{ env.BUILD_NO }}.tgz
43- src_online_package=harbor-online-installer-${{ env.BASE_TAG }}-${{ env.BUILD_NO }}.tgz
44- dst_offline_package=harbor-offline-installer-${{ env.CUR_TAG }}.tgz
45- dst_online_package=harbor-online-installer-${{ env.CUR_TAG }}.tgz
42+ base=${{ env.BASE_TAG }}
43+ cur=${{ env.CUR_TAG }}
44+ bucket=${{ secrets.HARBOR_RELEASE_BUILD }}
45+ branch=${{ env.BRANCH }}
46+ assets_path=$(pwd)/assets
47+ mkdir -p "$assets_path"
4648
47- aws s3 cp s3://${{ secrets.HARBOR_RELEASE_BUILD }}/${{ env.BRANCH }}/${src_offline_package} s3://${{ secrets.HARBOR_RELEASE_BUILD }}/${{ env.BRANCH }}/${dst_offline_package}
48- aws s3 cp s3://${{ secrets.HARBOR_RELEASE_BUILD }}/${{ env.BRANCH }}/${src_online_package} s3://${{ secrets.HARBOR_RELEASE_BUILD }}/${{ env.BRANCH }}/${dst_online_package}
49+ for arch in amd64 arm64; do
50+ src_offline=harbor-offline-installer-${base}-${{ env.BUILD_NO }}-${arch}.tgz
51+ dst_offline=harbor-offline-installer-${cur}-${arch}.tgz
52+ dst_online=
53+ aws s3 cp s3://${bucket}/${branch}/${src_offline} s3://${bucket}/${branch}/${dst_offline}
4954
50- assets_path=$(pwd)/assets
51- source tools/release/release_utils.sh && getAssets ${{ secrets.HARBOR_RELEASE_BUILD }} ${{ env.BRANCH }} $dst_offline_package $dst_online_package ${{ env.PRERELEASE }} $assets_path
52- echo "OFFLINE_PACKAGE_PATH=$assets_path/$dst_offline_package" >> $GITHUB_ENV
53- echo "ONLINE_PACKAGE_PATH=$assets_path/$dst_online_package" >> $GITHUB_ENV
55+ if [ "${{ env.PRERELEASE }}" = "false" ]; then
56+ src_online=harbor-online-installer-${base}-${{ env.BUILD_NO }}-${arch}.tgz
57+ dst_online=harbor-online-installer-${cur}-${arch}.tgz
58+ aws s3 cp s3://${bucket}/${branch}/${src_online} s3://${bucket}/${branch}/${dst_online}
59+ fi
60+ source tools/release/release_utils.sh && getAssets ${bucket} ${branch} ${dst_offline} ${dst_online} ${{ env.PRERELEASE }} ${assets_path}
61+ done
62+
63+ echo "ASSETS_DIR=$assets_path" >> $GITHUB_ENV
5464 echo "MD5SUM_PATH=$assets_path/md5sum" >> $GITHUB_ENV
5565 - name : Install Cosign
5666 uses : sigstore/cosign-installer@v4.0.0
5767 - name : Sign Release Artifacts
5868 run : |
59- cosign sign-blob --yes \
60- --bundle=./assets/harbor-offline-installer-${{ env.CUR_TAG }}.tgz.sigstore.json \
61- ${{ env.OFFLINE_PACKAGE_PATH }}
62-
63- if [ "${{ env.PRERELEASE }}" = "false" ]; then
69+ cur=${{ env.CUR_TAG }}
70+ for arch in amd64 arm64; do
6471 cosign sign-blob --yes \
65- --bundle=./assets/harbor-online-installer-${{ env.CUR_TAG }}.tgz.sigstore.json \
66- ${{ env.ONLINE_PACKAGE_PATH }}
67- fi
72+ --bundle=${{ env.ASSETS_DIR }}/harbor-offline-installer-${cur}-${arch}.tgz.sigstore.json \
73+ ${{ env.ASSETS_DIR }}/harbor-offline-installer-${cur}-${arch}.tgz
6874
69- echo "OFFLINE_SIGSTORE_PATH=./assets/harbor-offline-installer-${{ env.CUR_TAG }}.tgz.sigstore.json" >> $GITHUB_ENV
70-
71- if [ "${{ env.PRERELEASE }}" = "false" ]; then
72- echo "ONLINE_SIGSTORE_PATH=./assets/harbor-online-installer-${{ env.CUR_TAG }}.tgz.sigstore.json" >> $GITHUB_ENV
73- fi
75+ if [ "${{ env.PRERELEASE }}" = "false" ]; then
76+ cosign sign-blob --yes \
77+ --bundle=${{ env.ASSETS_DIR }}/harbor-online-installer-${cur}-${arch}.tgz.sigstore.json \
78+ ${{ env.ASSETS_DIR }}/harbor-online-installer-${cur}-${arch}.tgz
79+ fi
80+ done
7481 - name : Setup Docker
7582 uses : docker-practice/actions-setup-docker@master
7683 with :
7784 docker_version : 20.10
7885 docker_channel : stable
79- - name : Publish Images
86+ - name : Set up Docker Buildx
87+ uses : docker/setup-buildx-action@v3
88+ - name : Publish Images (amd64 + arm64)
89+ run : |
90+ set -euo pipefail
91+ base=${{ env.BASE_TAG }}
92+ cur=${{ env.CUR_TAG }}
93+ : > "$GITHUB_WORKSPACE/_images_all.txt"
94+
95+ for arch in amd64 arm64; do
96+ export ARCH="$arch"
97+ tar -zxf "${{ env.ASSETS_DIR }}/harbor-offline-installer-${cur}-${arch}.tgz"
98+ docker load -i ./harbor/harbor.${base}.tar.gz
99+ images="$(docker images --format "{{.Repository}}" --filter=reference="goharbor/*:${base}" | xargs)"
100+ echo "$images" | tr ' ' '\n' >> "$GITHUB_WORKSPACE/_images_all.txt"
101+ source tools/release/release_utils.sh
102+ publishImages "$cur" "$base" "${{ secrets.DOCKER_HUB_USERNAME }}" "${{ secrets.DOCKER_HUB_PASSWORD }}" $images
103+ publishPackages "$cur" "$base" "${{ github.actor }}" "${{ secrets.GITHUB_TOKEN }}" $images
104+ rm -rf harbor
105+ done
106+ - name : Create multi-arch manifests
80107 run : |
81- tar -zxf ${{ env.OFFLINE_PACKAGE_PATH }}
82- docker load -i ./harbor/harbor.${{ env.BASE_TAG }}.tar.gz
83- images="$(docker images --format "{{.Repository}}" --filter=reference='goharbor/*:${{ env.BASE_TAG }}' | xargs)"
84- source tools/release/release_utils.sh
85- publishImages ${{ env.CUR_TAG }} ${{ env.BASE_TAG }} "${{ secrets.DOCKER_HUB_USERNAME }}" "${{ secrets.DOCKER_HUB_PASSWORD }}" $images
86- publishPackages ${{ env.CUR_TAG }} ${{ env.BASE_TAG }} ${{ github.actor }} ${{ secrets.GITHUB_TOKEN }} $images
108+ set -euo pipefail
109+ cur=${{ env.CUR_TAG }}
110+ printf '%s\n' "${{ secrets.DOCKER_HUB_PASSWORD }}" | docker login -u "${{ secrets.DOCKER_HUB_USERNAME }}" --password-stdin
111+ printf '%s\n' "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u "${{ github.actor }}" --password-stdin
112+ sort -u "$GITHUB_WORKSPACE/_images_all.txt" | while IFS= read -r repo; do
113+ [ -z "$repo" ] && continue
114+ docker buildx imagetools create -t "${repo}:${cur}" \
115+ "${repo}:${cur}-amd64" \
116+ "${repo}:${cur}-arm64"
117+ docker buildx imagetools create -t "ghcr.io/${repo}:${cur}" \
118+ "ghcr.io/${repo}:${cur}-amd64" \
119+ "ghcr.io/${repo}:${cur}-arm64"
120+ done
121+ docker logout ghcr.io
122+ docker logout
87123 - name : Generate release notes
88124 run : |
89125 release_notes_path=$(pwd)/release-notes.txt
@@ -95,17 +131,23 @@ jobs:
95131 with :
96132 body_path : ${{ env.RELEASE_NOTES_PATH }}
97133 files : |
98- ${{ env.OFFLINE_PACKAGE_PATH }}
99- ${{ env.OFFLINE_SIGSTORE_PATH }}
134+ ${{ env.ASSETS_DIR }}/harbor-offline-installer-*-amd64.tgz
135+ ${{ env.ASSETS_DIR }}/harbor-offline-installer-*-amd64.tgz.sigstore.json
136+ ${{ env.ASSETS_DIR }}/harbor-offline-installer-*-arm64.tgz
137+ ${{ env.ASSETS_DIR }}/harbor-offline-installer-*-arm64.tgz.sigstore.json
100138 ${{ env.MD5SUM_PATH }}
101139 - name : GA Release
102140 uses : softprops/action-gh-release@v2
103141 if : ${{ env.PRERELEASE == 'false' }}
104142 with :
105143 body_path : ${{ env.RELEASE_NOTES_PATH }}
106144 files : |
107- ${{ env.OFFLINE_PACKAGE_PATH }}
108- ${{ env.OFFLINE_SIGSTORE_PATH }}
109- ${{ env.ONLINE_PACKAGE_PATH }}
110- ${{ env.ONLINE_SIGSTORE_PATH }}
145+ ${{ env.ASSETS_DIR }}/harbor-offline-installer-*-amd64.tgz
146+ ${{ env.ASSETS_DIR }}/harbor-offline-installer-*-amd64.tgz.sigstore.json
147+ ${{ env.ASSETS_DIR }}/harbor-offline-installer-*-arm64.tgz
148+ ${{ env.ASSETS_DIR }}/harbor-offline-installer-*-arm64.tgz.sigstore.json
149+ ${{ env.ASSETS_DIR }}/harbor-online-installer-*-amd64.tgz
150+ ${{ env.ASSETS_DIR }}/harbor-online-installer-*-amd64.tgz.sigstore.json
151+ ${{ env.ASSETS_DIR }}/harbor-online-installer-*-arm64.tgz
152+ ${{ env.ASSETS_DIR }}/harbor-online-installer-*-arm64.tgz.sigstore.json
111153 ${{ env.MD5SUM_PATH }}
0 commit comments