Skip to content

Commit e7405a0

Browse files
committed
use buildx to build arm64/amd64 in one go
1 parent 771aa5c commit e7405a0

File tree

2 files changed

+33
-25
lines changed

2 files changed

+33
-25
lines changed

scripts/build-all.sh

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ is_valid_mina_release() {
4444
while [[ $# -gt 0 ]]; do
4545
case $1 in
4646
--archs)
47-
IFS=',' read -r -a ARCHS <<< "$2"
47+
ARCHS="$2"
4848
shift 2
4949
;;
5050
--archive-api-version)
@@ -117,7 +117,7 @@ START=$(date +%s)
117117

118118
function build-image() {
119119
local branch_name="$1"
120-
local arch="$2"
120+
local archs="$2"
121121

122122
if [[ -z "$branch_name" ]]; then
123123
local branch_name_arg=""
@@ -131,7 +131,7 @@ function build-image() {
131131

132132
# shellcheck disable=SC2046
133133
SKIP_ARG=$(if [[ $PUSH -eq 1 ]]; then echo ""; else echo "--skip-push"; fi)
134-
"${DOCKER_IMAGE_BUILDING_SCRIPTS_REPO_DIR}scripts/build-image.sh" --arch "${arch}" \
134+
"${DOCKER_IMAGE_BUILDING_SCRIPTS_REPO_DIR}scripts/build-image.sh" --archs "${archs}" \
135135
--mina-release "${MINA_RELEASE}" \
136136
--archive-api-version "${ARCHIVE_NODE_API_VERSION}" \
137137
--proof-level full \
@@ -147,7 +147,7 @@ function build-image() {
147147
echo "[INFO] For Lightnet dune profile..."
148148
echo ""
149149

150-
"${DOCKER_IMAGE_BUILDING_SCRIPTS_REPO_DIR}scripts/build-image.sh" --arch "${arch}" \
150+
"${DOCKER_IMAGE_BUILDING_SCRIPTS_REPO_DIR}scripts/build-image.sh" --archs "${archs}" \
151151
--mina-release "${MINA_RELEASE}" \
152152
--archive-api-version "${ARCHIVE_NODE_API_VERSION}" \
153153
--proof-level none \
@@ -189,16 +189,13 @@ done
189189

190190
CURRENT_DIR=$PWD
191191

192-
for ARCH in "${ARCHS[@]}"; do
193-
if [[ "$MINA_RELEASE" == "nightly" ]]; then
194-
for branch in "${TARGET_BRANCHES[@]}"; do
195-
196-
build-image "$branch" "$ARCH"
197-
done
198-
else
199-
build-image "" "$ARCH"
200-
fi
201-
done
192+
if [[ "$MINA_RELEASE" == "nightly" ]]; then
193+
for branch in "${TARGET_BRANCHES[@]}"; do
194+
build-image "$branch" "${ARCHS[@]}"
195+
done
196+
else
197+
build-image "" "${ARCHS[@]}"
198+
fi
202199

203200
echo ""
204201
echo "Cleaning up..."

scripts/build-image.sh

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
set -euo pipefail
44

55
# Default values
6-
ARCH=""
6+
ARCHS=""
77
MINA_RELEASE="stable"
88
MINA_BRANCH=""
99
ARCHIVE_NODE_API_VERSION="1.0.0"
@@ -18,7 +18,7 @@ usage() {
1818
echo "Usage: $0 [OPTIONS]"
1919
echo ""
2020
echo "Options:"
21-
echo " -a, --arch ARCH Architecture (required)"
21+
echo " -a, --archs ARCHS Architecture (required)"
2222
echo " -m, --mina-release VERSION Mina release (required)"
2323
echo " -b, --mina-branch BRANCH Mina branch (optional)"
2424
echo " -n, --archive-api-version PATH Archive-Node-API version (required)"
@@ -30,14 +30,14 @@ usage() {
3030
echo " -h, --help Display this help message"
3131
echo ""
3232
echo "Example:"
33-
echo " $0 --arch amd64 --mina-version 3.3.0* --archive-api-version v1.0.0 --proof-level full --accounts-manager-version 1.0.0 --docker-user myuser --tag latest"
33+
echo " $0 --archs arm64,amd64 --mina-version 3.3.0* --archive-api-version v1.0.0 --proof-level full --accounts-manager-version 1.0.0 --docker-user myuser --tag latest"
3434
}
3535

3636
# Parse command line arguments
3737
while [[ $# -gt 0 ]]; do
3838
case $1 in
39-
-a|--arch)
40-
ARCH="$2"
39+
-a|--archs)
40+
ARCHS="$2"
4141
shift 2
4242
;;
4343
-m|--mina-release)
@@ -87,8 +87,8 @@ while [[ $# -gt 0 ]]; do
8787
done
8888

8989
# Validate required parameters
90-
if [[ -z "$ARCH" ]]; then
91-
echo "Error: Architecture (-a/--arch) is required"
90+
if [[ -z "$ARCHS" ]]; then
91+
echo "Error: Architectures (-a/--archs) are required"
9292
usage
9393
exit 1
9494
fi
@@ -151,19 +151,30 @@ case $MINA_RELEASE in
151151
;;
152152
esac
153153

154+
# Convert ARCHS to platform format (linux/{arch})
155+
PLATFORMS=""
156+
IFS=',' read -ra ARCH_ARRAY <<< "$ARCHS"
157+
for arch in "${ARCH_ARRAY[@]}"; do
158+
if [[ -z "$PLATFORMS" ]]; then
159+
PLATFORMS="linux/${arch}"
160+
else
161+
PLATFORMS="${PLATFORMS},linux/${arch}"
162+
fi
163+
done
164+
154165
echo ""
155166
echo "Building the Docker image..."
156167
echo ""
157-
docker rmi -f ${DOCKER_HUB_USER_NAME}/mina-local-network:${DOCKER_HUB_IMAGE_TAG}-${ARCH} || true
168+
docker rmi -f ${DOCKER_HUB_USER_NAME}/mina-local-network:${DOCKER_HUB_IMAGE_TAG} || true
158169
docker rmi -f mina-local-network || true
159-
docker build --platform linux/${ARCH} -t mina-local-network:${DOCKER_HUB_IMAGE_TAG}-${ARCH} --build-arg="MINA_PROFILE=${MINA_PROFILE}" --build-arg="MINA_REPO=${MINA_REPO}" --build-arg="MINA_BRANCH=${MINA_BRANCH}" --build-arg="ARCHIVE_NODE_API_TAG=${ARCHIVE_NODE_API_VERSION}" --build-arg="MINA_ACCOUNTS_MANAGER_VERSION=${ACCOUNTS_MANAGER_VERSION}" --build-arg="PROOF_LEVEL=${PROOF_LEVEL}" . -f configuration/Dockerfile
170+
docker buildx build --platform ${PLATFORMS} -t mina-local-network:${DOCKER_HUB_IMAGE_TAG} --build-arg="MINA_PROFILE=${MINA_PROFILE}" --build-arg="MINA_REPO=${MINA_REPO}" --build-arg="MINA_BRANCH=${MINA_BRANCH}" --build-arg="ARCHIVE_NODE_API_TAG=${ARCHIVE_NODE_API_VERSION}" --build-arg="MINA_ACCOUNTS_MANAGER_VERSION=${ACCOUNTS_MANAGER_VERSION}" --build-arg="PROOF_LEVEL=${PROOF_LEVEL}" . -f configuration/Dockerfile
160171

161172

162173
if [[ $PUSH -eq 1 ]]; then
163174
echo ""
164175
echo "Publishing the Docker image..."
165-
docker tag mina-local-network ${DOCKER_HUB_USER_NAME}/mina-local-network:${DOCKER_HUB_IMAGE_TAG}-${ARCH}
166-
docker push ${DOCKER_HUB_USER_NAME}/mina-local-network:${DOCKER_HUB_IMAGE_TAG}-${ARCH}
176+
docker tag mina-local-network ${DOCKER_HUB_USER_NAME}/mina-local-network:${DOCKER_HUB_IMAGE_TAG}
177+
docker push ${DOCKER_HUB_USER_NAME}/mina-local-network:${DOCKER_HUB_IMAGE_TAG}
167178

168179
else
169180
echo ""

0 commit comments

Comments
 (0)