From efc956fc130028b2781187a6f891116f837179f0 Mon Sep 17 00:00:00 2001 From: Chris Banks Date: Tue, 14 May 2024 12:48:27 +0100 Subject: [PATCH 1/2] Run arm64 builds natively. In principle we could just cross-build from a single runner, but it's less hassle to just do the same thing we do for the Ruby builds where we don't cross-compile. --- Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index a167fb5..6858fce 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,7 +3,7 @@ ARG go_version=1.22 ARG go_tag_suffix=-alpine -FROM ${go_registry}golang:${go_version}${go_tag_suffix} AS builder +FROM --platform=$TARGETPLATFORM ${go_registry}golang:${go_version}${go_tag_suffix} AS builder ARG TARGETARCH TARGETOS ARG GOARCH=$TARGETARCH GOOS=$TARGETOS ARG CGO_ENABLED=0 @@ -16,7 +16,7 @@ COPY . ./ RUN go build -o /bin/govuk-exporter main.go -FROM scratch +FROM --platform=$TARGETPLATFORM scratch COPY --from=builder /bin/govuk-exporter /bin/govuk-exporter COPY --from=builder /usr/share/ca-certificates /usr/share/ca-certificates COPY --from=builder /etc/ssl /etc/ssl From b1797bcef2e888e4e465427899c102932b28f229 Mon Sep 17 00:00:00 2001 From: Chris Banks Date: Tue, 14 May 2024 15:04:33 +0100 Subject: [PATCH 2/2] Fix compiler and linker flags. - `ARG x y` is poorly defined, so let's avoid it. - Set ldflags for a release build (strip, omit full paths to source files from host system, etc.) --- Dockerfile | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index 6858fce..97c2dba 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,16 +4,20 @@ ARG go_tag_suffix=-alpine FROM --platform=$TARGETPLATFORM ${go_registry}golang:${go_version}${go_tag_suffix} AS builder -ARG TARGETARCH TARGETOS -ARG GOARCH=$TARGETARCH GOOS=$TARGETOS +ARG TARGETARCH +ARG TARGETOS +ARG GOARCH=$TARGETARCH +ARG GOOS=$TARGETOS ARG CGO_ENABLED=0 +ARG GOFLAGS="-trimpath" +ARG go_ldflags="-s -w" WORKDIR /src COPY go.mod go.sum ./ RUN go mod download COPY . ./ -RUN go build -o /bin/govuk-exporter main.go +RUN go build -o /bin/govuk-exporter -ldflags="$go_ldflags" main.go FROM --platform=$TARGETPLATFORM scratch