diff --git a/scripts/docker_push.sh b/scripts/docker_push.sh index b9f757f04..fffe426e4 100755 --- a/scripts/docker_push.sh +++ b/scripts/docker_push.sh @@ -41,6 +41,8 @@ get_current_arch() { echo $current_arch } +ALLARCH=("amd64" "arm64" "riscv64") + pushd $(cd "$(dirname "$0")"; pwd) > /dev/null readlink_mac $(basename "$0") cd "$(dirname "$REAL_PATH")" @@ -89,10 +91,8 @@ get_image_name() { local arch=$2 local is_all_arch=$3 local img_name="$REGISTRY/$component:$TAG" - if [[ -n "$arch" ]]; then - if [[ "$is_all_arch" == "true" || "$arch" != "$CURRENT_ARCH" ]]; then - img_name="${img_name}-$arch" - fi + if [[ -n "$arch" && "$is_all_arch" == "true" ]]; then + img_name="${img_name}-$arch" fi echo $img_name } @@ -113,15 +113,20 @@ build_process_with_buildx() { make_manifest_image() { local component=$1 + local arch=$2 local img_name=$(get_image_name $component "" "false") if [[ "$DRY_RUN" == "true" ]]; then echo "[$(readlink -f ${BASH_SOURCE}):${LINENO} ${FUNCNAME[0]}] return for DRY_RUN" return fi - docker buildx imagetools create -t $img_name \ - $img_name-amd64 \ - $img_name-arm64 \ - $img_name-riscv64 + CMD="docker buildx imagetools create -t ${img_name} " + for ac in "${ALLARCH[@]}"; do + if [[ "${arch}" == "all" || "${arch}" == *"$ac"* ]]; then + CMD="${CMD} ${img_name}-${ac}" + fi + done + echo "$CMD" + $CMD } show_update_cmd() { @@ -134,16 +139,18 @@ cd $SRC_DIR echo "Start to build for arch[$ARCH]" -case "$ARCH" in - all) - for arch in "arm64" "amd64" "riscv64"; do - build_process_with_buildx $arch "true" - done - make_manifest_image $image_keyword - ;; - *) +multiarch="" +for ac in "${ALLARCH[@]}"; do + if [[ "$ARCH" == "$ac" ]]; then + # single arch build_process_with_buildx $ARCH "false" - ;; -esac + elif [[ "$ARCH" == "all" || "$ARCH" == *"$ac"* ]]; then + multiarch="true" + build_process_with_buildx $ac "true" + fi +done +if [[ "$multiarch" == "true" ]]; then + make_manifest_image "sdnagent" $ARCH +fi show_update_cmd