From de97998a54de47b15c7d4feb17784cf4e9124a06 Mon Sep 17 00:00:00 2001 From: Nicolas Duchon Date: Thu, 21 Dec 2023 02:41:46 +0100 Subject: [PATCH] build: switch to go cross compilation --- Dockerfile.alpine | 21 ++++++++++++++++----- Dockerfile.debian | 22 ++++++++++++++++------ 2 files changed, 32 insertions(+), 11 deletions(-) diff --git a/Dockerfile.alpine b/Dockerfile.alpine index 1f9abfc2..e4be96bb 100644 --- a/Dockerfile.alpine +++ b/Dockerfile.alpine @@ -1,9 +1,13 @@ ARG DOCKER_GEN_VERSION=main # Build docker-gen from scratch -FROM golang:1.20.12-alpine as go-builder +FROM --platform=$BUILDPLATFORM golang:1.20.12-alpine as go-builder + +ENV CGO_ENABLED=0 + +ARG DOCKER_GEN_VERSION TARGETOS TARGETARCH TARGETVARIANT +ENV GOOS=$TARGETOS GOARCH=$TARGETARCH VARIANT=$TARGETVARIANT -ARG DOCKER_GEN_VERSION WORKDIR /build # Install the dependencies @@ -11,9 +15,16 @@ COPY . . RUN go mod download # Build the docker-gen executable -RUN GOOS=linux CGO_ENABLED=0 go build -ldflags "-X main.buildVersion=${DOCKER_GEN_VERSION}" -o docker-gen ./cmd/docker-gen - -FROM alpine:3.19.0 +RUN set -eux; \ + case "$GOARCH" in \ + arm) export GOARM="${VARIANT#v}" ;; \ + amd64) export GOAMD64="$VARIANT" ;; \ + *) [ -z "$VARIANT" ] ;; \ + esac; \ + go env | grep -E 'OS=|ARCH=|ARM=|AMD64='; \ + go build -ldflags "-X main.buildVersion=${DOCKER_GEN_VERSION}" -o docker-gen ./cmd/docker-gen + +FROM --platform=$TARGETPLATFORM alpine:3.19.0 ARG DOCKER_GEN_VERSION ENV DOCKER_GEN_VERSION=${DOCKER_GEN_VERSION} \ diff --git a/Dockerfile.debian b/Dockerfile.debian index 5864af61..eacddd7e 100644 --- a/Dockerfile.debian +++ b/Dockerfile.debian @@ -1,9 +1,12 @@ ARG DOCKER_GEN_VERSION=main # Build docker-gen from scratch -FROM golang:1.20.12 as go-builder +FROM --platform=$BUILDPLATFORM golang:1.20.12 as go-builder -ARG DOCKER_GEN_VERSION +ENV CGO_ENABLED=0 + +ARG DOCKER_GEN_VERSION TARGETOS TARGETARCH TARGETVARIANT +ENV GOOS=$TARGETOS GOARCH=$TARGETARCH VARIANT=$TARGETVARIANT WORKDIR /build @@ -12,12 +15,19 @@ COPY . . RUN go mod download # Build the docker-gen executable -RUN GOOS=linux CGO_ENABLED=0 go build -ldflags "-X main.buildVersion=${DOCKER_GEN_VERSION}" -o docker-gen ./cmd/docker-gen +RUN set -eux; \ + case "$GOARCH" in \ + arm) export GOARM="${VARIANT#v}" ;; \ + amd64) export GOAMD64="$VARIANT" ;; \ + *) [ -z "$VARIANT" ] ;; \ + esac; \ + go env | grep -E 'OS=|ARCH=|ARM=|AMD64='; \ + go build -ldflags "-X main.buildVersion=${DOCKER_GEN_VERSION}" -o docker-gen ./cmd/docker-gen -FROM debian:12.4-slim +FROM --platform=$TARGETPLATFORM debian:12.4-slim -ARG VERSION -ENV DOCKER_GEN_VERSION=${VERSION} \ +ARG DOCKER_GEN_VERSION +ENV DOCKER_GEN_VERSION=${DOCKER_GEN_VERSION} \ DOCKER_HOST=unix:///tmp/docker.sock # Install packages required by the image