diff --git a/Dockerfile b/Dockerfile index 25b1821c6..ff0be9703 100644 --- a/Dockerfile +++ b/Dockerfile @@ -10,13 +10,17 @@ WORKDIR /workspace/$SERVICE_NAME RUN mkdir -p /workspace/build # Pre-copy/cache go.mod for pre-downloading dependencies and only redownloading COPY $SERVICE_NAME/go.mod $SERVICE_NAME/go.sum ./ -RUN go mod download && go mod verify +RUN --mount=type=cache,target=/go/pkg \ + go mod download && go mod verify # Copy rest of source code COPY $SERVICE_NAME/ . # Build for target architecture ARG TARGETARCH RUN go mod tidy -RUN CGO_ENABLED=0 GOARCH=$TARGETARCH go build -a -o /workspace/build/$SERVICE_NAME main.go +RUN --mount=type=cache,target=/root/.cache/go-build \ + --mount=type=cache,target=/go/pkg \ + CGO_ENABLED=0 GOARCH=$TARGETARCH \ + go build -a -o /workspace/build/$SERVICE_NAME main.go # Use distroless as minimal base image to package the manager binary # Refer to https://github.com/GoogleContainerTools/distroless for more details diff --git a/odiglet/Dockerfile b/odiglet/Dockerfile index fdf265dc9..c774caa58 100644 --- a/odiglet/Dockerfile +++ b/odiglet/Dockerfile @@ -22,15 +22,20 @@ COPY common/ common/ COPY procdiscovery/ procdiscovery/ WORKDIR /go/src/github.com/keyval-dev/odigos/odiglet # Pre-copy/cache go.mod for pre-downloading dependencies and only redownloading +# them in subsequent builds if they change COPY odiglet/go.mod odiglet/go.sum ./ -RUN go mod download +RUN --mount=type=cache,target=/go/pkg \ + go mod download && go mod verify # Copy rest of source code COPY odiglet/ . ARG TARGETARCH # Go does not call go generate on dependencies, so we need to do it manually -RUN cd $(go list -m -f '{{.Dir}}' "go.opentelemetry.io/auto") && make generate -RUN GOOS=linux GOARCH=$TARGETARCH go build -o odiglet cmd/main.go +RUN --mount=type=cache,target=/go/pkg \ + cd $(go list -m -f '{{.Dir}}' "go.opentelemetry.io/auto") && make generate +RUN --mount=type=cache,target=/root/.cache/go-build \ + --mount=type=cache,target=/go/pkg \ + GOOS=linux GOARCH=$TARGETARCH go build -o odiglet cmd/main.go WORKDIR /instrumentations diff --git a/odiglet/debug.Dockerfile b/odiglet/debug.Dockerfile index 6d1e83095..6806b1831 100644 --- a/odiglet/debug.Dockerfile +++ b/odiglet/debug.Dockerfile @@ -18,10 +18,15 @@ FROM keyval/odiglet-base:v1.0 as builder WORKDIR /go/src/github.com/keyval-dev/odigos COPY . . WORKDIR ./odiglet/ -RUN go mod download +RUN --mount=type=cache,target=/go/pkg \ + go mod download && go mod verify # Go does not call go generate on dependencies, so we need to do it manually -RUN cd $(go list -m -f '{{.Dir}}' "go.opentelemetry.io/auto") && make generate -RUN GOOS=linux go build -gcflags "all=-N -l" -o odiglet cmd/main.go +RUN --mount=type=cache,target=/root/.cache/go-build \ + --mount=type=cache,target=/go/pkg \ + bash -c 'cd $(go list -m -f "{{.Dir}}" "go.opentelemetry.io/auto") && make generate' +RUN --mount=type=cache,target=/root/.cache/go-build \ + --mount=type=cache,target=/go/pkg \ + GOOS=linux go build -gcflags "all=-N -l" -o odiglet cmd/main.go # Install delve RUN go install github.com/go-delve/delve/cmd/dlv@latest