diff --git a/scripts/lib_build_antithesis_images.sh b/scripts/lib_build_antithesis_images.sh index 0ab36a0bcdf3..bb7640807944 100644 --- a/scripts/lib_build_antithesis_images.sh +++ b/scripts/lib_build_antithesis_images.sh @@ -16,6 +16,7 @@ function build_antithesis_builder_image { local image_name=$2 local avalanchego_path=$3 local target_path=$4 + local module_path=${5:-} local base_dockerfile="${avalanchego_path}/tests/antithesis/Dockerfile" local builder_dockerfile="${base_dockerfile}.builder-instrumented" @@ -25,7 +26,14 @@ function build_antithesis_builder_image { builder_dockerfile="${base_dockerfile}.builder-uninstrumented" fi - docker buildx build --build-arg GO_VERSION="${go_version}" -t "${image_name}" -f "${builder_dockerfile}" "${target_path}" + BUILD_ARGS="--build-arg GO_VERSION=${go_version}" + if [[ -n "${module_path}" ]]; then + # Only set the module path if it is provided + BUILD_ARGS="${BUILD_ARGS} --build-arg MODULE_PATH=${module_path}" + fi + + # shellcheck disable=SC2086 + docker buildx build ${BUILD_ARGS} -t "${image_name}" -f "${builder_dockerfile}" "${target_path}" } # Build the antithesis node, workload, and config images. diff --git a/tests/antithesis/Dockerfile.builder-instrumented b/tests/antithesis/Dockerfile.builder-instrumented index f9e4b2d054e1..e49db5948219 100644 --- a/tests/antithesis/Dockerfile.builder-instrumented +++ b/tests/antithesis/Dockerfile.builder-instrumented @@ -9,14 +9,19 @@ FROM docker.io/antithesishq/go-instrumentor AS instrumentor FROM golang:$GO_VERSION-bullseye WORKDIR /build -# Copy and download dependencies using go mod -COPY go.mod . -COPY go.sum . -RUN go mod download # Copy the code into the container COPY . . +# Providing a non-empty MODULE_PATH supports the case where the target module is +# not at the root of the repo but its go.mod references other modules in the repo +# (including the root). +ARG MODULE_PATH=. + +# Download dependencies for the specified go module if a path was provided, +# otherwise download dependencies for the current directory. +RUN cd $MODULE_PATH && go mod download + # Ensure pre-existing builds are not available for inclusion in the final image RUN [ -d ./build ] && rm -rf ./build/* || true @@ -38,7 +43,7 @@ RUN cp -r .git /opt/tmp/ RUN /opt/antithesis/bin/goinstrumentor \ -stderrthreshold=INFO \ -antithesis /opt/antithesis/instrumentation \ - . \ + $MODULE_PATH \ /instrumented WORKDIR /instrumented/customer diff --git a/tests/antithesis/Dockerfile.builder-uninstrumented b/tests/antithesis/Dockerfile.builder-uninstrumented index 4ff06603d96c..0bf1321fe54a 100644 --- a/tests/antithesis/Dockerfile.builder-uninstrumented +++ b/tests/antithesis/Dockerfile.builder-uninstrumented @@ -5,13 +5,18 @@ ARG GO_VERSION FROM golang:$GO_VERSION-bullseye WORKDIR /build -# Copy and download dependencies using go mod -COPY go.mod . -COPY go.sum . -RUN go mod download # Copy the code into the container COPY . . +# Providing a non-empty MODULE_PATH supports the case where the target module is +# not at the root of the repo but its go.mod references other modules in the repo +# (including the root). +ARG MODULE_PATH=. + +# Download dependencies for the specified go module if a path was provided, +# otherwise download dependencies for the current directory. +RUN cd $MODULE_PATH && go mod download + # Ensure pre-existing builds are not available for inclusion in the final image RUN [ -d ./build ] && rm -rf ./build/* || true