diff --git a/Dockerfile b/Dockerfile index da76e751..aaeb015f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,13 +1,12 @@ -FROM golang:1.25 AS build-env +FROM --platform=$BUILDPLATFORM golang:1.25 AS build-env +ARG TARGETOS +ARG TARGETARCH ADD . /src -ENV CGO_ENABLED=0 -ENV GOOS=linux -ENV GOARCH=amd64 WORKDIR /src RUN go mod download RUN make init RUN make gen -RUN go build -o /app +RUN CGO_ENABLED=0 GOOS=${TARGETOS:-linux} GOARCH=${TARGETARCH:-amd64} go build -o /app FROM scratch COPY --from=build-env /app / diff --git a/Dockerfile.test b/Dockerfile.test index 3e875f8c..1c29a758 100644 --- a/Dockerfile.test +++ b/Dockerfile.test @@ -1,8 +1,6 @@ -FROM --platform=linux/amd64 golang:1.25 +FROM golang:1.25 ADD . /src ENV CGO_ENABLED=1 -ENV GOOS=linux -ENV GOARCH=amd64 ENV VS_HOST="" WORKDIR /src RUN make init diff --git a/Makefile b/Makefile index 7342c047..776a4398 100644 --- a/Makefile +++ b/Makefile @@ -3,8 +3,10 @@ SHELL = /bin/bash GIT_BRANCH:=$(shell git rev-parse --abbrev-ref HEAD | sed -e 's^/^-^g; s^[.]^-^g;' | tr '[:upper:]' '[:lower:]') GIT_COMMIT:=$(shell git rev-parse --short HEAD) IMG ?= perconalab/version-service:$(GIT_BRANCH)-$(GIT_COMMIT) +PLATFORMS ?= linux/amd64,linux/arm64 init: + mkdir -p bin go build -modfile=tools/go.mod -o bin/yq github.com/mikefarah/yq/v3 go build -modfile=tools/go.mod -o bin/protoc-gen-go google.golang.org/protobuf/cmd/protoc-gen-go go build -modfile=tools/go.mod -o bin/protoc-gen-go-grpc google.golang.org/grpc/cmd/protoc-gen-go-grpc @@ -14,7 +16,13 @@ init: curl -L "https://github.com/bufbuild/buf/releases/download/v1.34.0/buf-$(shell uname -s)-$(shell uname -m)" -o "./bin/buf" chmod +x ./bin/buf - curl -L https://github.com/go-swagger/go-swagger/releases/download/v0.31.0/swagger_$(shell uname | tr '[:upper:]' '[:lower:]')_amd64 -o ./bin/swagger + SWAGGER_ARCH=$$(uname -m); \ + case "$${SWAGGER_ARCH}" in \ + x86_64) SWAGGER_ARCH=amd64 ;; \ + aarch64|arm64) SWAGGER_ARCH=arm64 ;; \ + *) echo "unsupported swagger architecture: $${SWAGGER_ARCH}"; exit 1 ;; \ + esac; \ + curl -L "https://github.com/go-swagger/go-swagger/releases/download/v0.31.0/swagger_$(shell uname | tr '[:upper:]' '[:lower:]')_$${SWAGGER_ARCH}" -o ./bin/swagger chmod +x ./bin/swagger gen: @@ -53,9 +61,9 @@ build: run: build SERVE_HTTP=true ./bin/app -# Build and push docker image -docker-push: docker-build - docker push ${IMG} +# Build and push multi-arch docker image +docker-push: + docker buildx build --platform=$(PLATFORMS) -t ${IMG} $(if $(IMG_LATEST),-t $(IMG_LATEST)) --push . test: docker-compose -f docker-compose.test.yml up --build --abort-on-container-exit