diff --git a/.circleci/config.yml b/.circleci/config.yml index d7349fd21f..9eb02a0856 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -942,6 +942,10 @@ jobs: - run: | skip_docker_image_building=true core/files_artifacts_expander/scripts/build.sh "${skip_docker_image_building}" + - run: | + skip_docker_image_building=true + build_architecture=arm64 + core/files_artifacts_expander/scripts/build.sh "${skip_docker_image_building}" "${build_architecture}" - run: | set -euo pipefail source core/files_artifacts_expander/scripts/_constants.env @@ -980,6 +984,10 @@ jobs: - run: | skip_docker_image_building=true core/server/scripts/build.sh "${skip_docker_image_building}" + - run: | + skip_docker_image_building=true + build_architecture=arm64 + core/server/scripts/build.sh "${skip_docker_image_building}" "${build_architecture}" - run: | set -euo pipefail source core/server/scripts/_constants.env @@ -1019,6 +1027,10 @@ jobs: - run: | skip_docker_image_building=true engine/server/scripts/build.sh "${skip_docker_image_building}" + - run: | + skip_docker_image_building=true + build_architecture=arm64 + engine/server/scripts/build.sh "${skip_docker_image_building}" "${build_architecture}" - run: | set -euo pipefail source engine/server/scripts/_constants.env diff --git a/core/files_artifacts_expander/Dockerfile b/core/files_artifacts_expander/Dockerfile index 39fd2543c0..b66c5b17e7 100644 --- a/core/files_artifacts_expander/Dockerfile +++ b/core/files_artifacts_expander/Dockerfile @@ -2,8 +2,10 @@ FROM alpine:3.17 RUN apk update && apk add tar +ARG TARGETARCH + WORKDIR /run -COPY ./build/files-artifacts-expander ./ +COPY ./build/files-artifacts-expander.$TARGETARCH ./files-artifacts-expander CMD ./files-artifacts-expander diff --git a/core/files_artifacts_expander/scripts/build.sh b/core/files_artifacts_expander/scripts/build.sh index 764ee57fdb..ba8bfedc10 100755 --- a/core/files_artifacts_expander/scripts/build.sh +++ b/core/files_artifacts_expander/scripts/build.sh @@ -15,6 +15,7 @@ source "${script_dirpath}/_constants.env" BUILD_DIRNAME="build" DEFAULT_SKIP_DOCKER_IMAGE_BUILDING=false +DEFAULT_ARCHITECTURE_TO_BUILD=amd64 MAIN_GO_FILEPATH="${expander_root_dirpath}/main.go" MAIN_BINARY_OUTPUT_FILENAME="files-artifacts-expander" @@ -28,6 +29,11 @@ if [ "${skip_docker_image_building}" != "true" ] && [ "${skip_docker_image_build echo "Error: Invalid skip-docker-image-building arg '${skip_docker_image_building}'" >&2 fi +architecture_to_build="${2:-"${DEFAULT_ARCHITECTURE_TO_BUILD}"}" +if [ "${architecture_to_build}" != "amd64" ] && [ "${architecture_to_build}" != "arm64" ]; then + echo "Error: Invalid architecture-to-build arg '${architecture_to_build}'" >&2 +fi + # Checks if dockerignore file is in the root path if ! [ -f "${expander_root_dirpath}"/.dockerignore ]; then echo "Error: No .dockerignore file found in files artifacts expander root '${expander_root_dirpath}'; this is required so Docker caching is enabled and the image builds remain quick" >&2 @@ -48,7 +54,7 @@ echo "Tests succeeded" # Build binary for packaging inside an Alpine Linux image echo "Building files artifacts expander main.go '${MAIN_GO_FILEPATH}'..." -if ! CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o "${MAIN_BINARY_OUTPUT_FILEPATH}" "${MAIN_GO_FILEPATH}"; then +if ! CGO_ENABLED=0 GOOS=linux GOARCH=${architecture_to_build} go build -o "${MAIN_BINARY_OUTPUT_FILEPATH}.${architecture_to_build}" "${MAIN_GO_FILEPATH}"; then echo "Error: An error occurred building the files artifacts expander code" >&2 exit 1 fi diff --git a/core/server/Dockerfile b/core/server/Dockerfile index bff81f60f0..df50957179 100644 --- a/core/server/Dockerfile +++ b/core/server/Dockerfile @@ -3,8 +3,10 @@ FROM alpine:3.17 # We need protobut-dev to run protobuf compiler against startosis .proto files RUN apk update && apk add --no-cache bash protobuf-dev +ARG TARGETARCH + WORKDIR /run -COPY ./build/api-container ./ +COPY ./build/api-container.$TARGETARCH ./api-container CMD ./api-container \ No newline at end of file diff --git a/core/server/scripts/build.sh b/core/server/scripts/build.sh index 233c6f1f5b..4c85ba2f0e 100755 --- a/core/server/scripts/build.sh +++ b/core/server/scripts/build.sh @@ -13,6 +13,7 @@ source "${script_dirpath}/_constants.env" BUILD_DIRNAME="build" DEFAULT_SKIP_DOCKER_IMAGE_BUILDING=false +DEFAULT_ARCHITECTURE_TO_BUILD=amd64 MAIN_DIRNAME="api_container" MAIN_GO_FILEPATH="${server_root_dirpath}/${MAIN_DIRNAME}/main.go" @@ -27,6 +28,11 @@ if [ "${skip_docker_image_building}" != "true" ] && [ "${skip_docker_image_build echo "Error: Invalid skip-docker-image-building arg '${skip_docker_image_building}'" >&2 fi +architecture_to_build="${2:-"${DEFAULT_ARCHITECTURE_TO_BUILD}"}" +if [ "${architecture_to_build}" != "amd64" ] && [ "${architecture_to_build}" != "arm64" ]; then + echo "Error: Invalid architecture-to-build arg '${architecture_to_build}'" >&2 +fi + # Checks if dockerignore file is in the root path if ! [ -f "${server_root_dirpath}"/.dockerignore ]; then echo "Error: No .dockerignore file found in server root '${server_root_dirpath}'; this is required so Docker caching is enabled and the image builds remain quick" >&2 @@ -47,7 +53,7 @@ echo "Tests succeeded" # Build binary for packaging inside an Alpine Linux image echo "Building server main.go '${MAIN_GO_FILEPATH}'..." -if ! CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o "${MAIN_BINARY_OUTPUT_FILEPATH}" "${MAIN_GO_FILEPATH}"; then +if ! CGO_ENABLED=0 GOOS=linux GOARCH=${architecture_to_build} go build -o "${MAIN_BINARY_OUTPUT_FILEPATH}.${architecture_to_build}" "${MAIN_GO_FILEPATH}"; then echo "Error: An error occurred building the server code" >&2 exit 1 fi diff --git a/engine/server/Dockerfile b/engine/server/Dockerfile index e33283019a..bef34baf77 100644 --- a/engine/server/Dockerfile +++ b/engine/server/Dockerfile @@ -2,10 +2,12 @@ FROM alpine:3.17 RUN apk update && apk add bash +ARG TARGETARCH + WORKDIR /run ADD ./webapp ./webapp -COPY ./build/kurtosis-engine ./ +COPY ./build/kurtosis-engine.$TARGETARCH ./kurtosis-engine CMD ./kurtosis-engine diff --git a/engine/server/scripts/build.sh b/engine/server/scripts/build.sh index b985b300f3..b4b0ee5e6d 100755 --- a/engine/server/scripts/build.sh +++ b/engine/server/scripts/build.sh @@ -14,6 +14,7 @@ source "${script_dirpath}/_constants.env" BUILD_DIRNAME="build" DEFAULT_SKIP_DOCKER_IMAGE_BUILDING=false +DEFAULT_ARCHITECTURE_TO_BUILD=amd64 MAIN_DIRNAME="engine" MAIN_GO_FILEPATH="${engine_root_dirpath}/${MAIN_DIRNAME}/main.go" @@ -28,6 +29,11 @@ if [ "${skip_docker_image_building}" != "true" ] && [ "${skip_docker_image_build echo "Error: Invalid skip-docker-image-building arg '${skip_docker_image_building}'" >&2 fi +architecture_to_build="${2:-"${DEFAULT_ARCHITECTURE_TO_BUILD}"}" +if [ "${architecture_to_build}" != "amd64" ] && [ "${architecture_to_build}" != "arm64" ]; then + echo "Error: Invalid architecture-to-build arg '${architecture_to_build}'" >&2 +fi + # Checks if dockerignore file is in the root path if ! [ -f "${engine_root_dirpath}"/.dockerignore ]; then echo "Error: No .dockerignore file found in server root '${engine_root_dirpath}'; this is required so Docker caching is enabled and the image builds remain quick" >&2 @@ -48,7 +54,7 @@ echo "Tests succeeded" # Build binary for packaging inside an Alpine Linux image echo "Building server main.go '${MAIN_GO_FILEPATH}'..." -if ! CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o "${MAIN_BINARY_OUTPUT_FILEPATH}" "${MAIN_GO_FILEPATH}"; then +if ! CGO_ENABLED=0 GOOS=linux GOARCH=${architecture_to_build} go build -o "${MAIN_BINARY_OUTPUT_FILEPATH}.${architecture_to_build}" "${MAIN_GO_FILEPATH}"; then echo "Error: An error occurred building the server code" >&2 exit 1 fi