diff --git a/Dockerfile b/Dockerfile index 4c29b53..400f84b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,17 +1,21 @@ -FROM gliderlabs/logspout:latest AS builder +FROM --platform=${BUILDPLATFORM:-linux/amd64} gliderlabs/logspout:latest AS builder + RUN apk add --no-cache --update go build-base git mercurial ca-certificates RUN mkdir -p /go/src/github.com/gliderlabs && \ cp -r /src /go/src/github.com/gliderlabs/logspout WORKDIR /go/src/github.com/gliderlabs/logspout -ARG ARCH=amd64 -ARG OS=linux -ENV GOARCH=${ARCH} -ENV GOOS=${OS} -ENV GOPATH=/go -ENV CGO_ENABLED=0 -RUN go get -RUN go build -ldflags "-X main.Version=$(cat VERSION)-logdna" -o /bin/logspout +ARG TARGETPLATFORM +ARG BUILDPLATFORM +ARG TARGETOS +ARG TARGETARCH + +RUN go get +RUN CGO_ENABLED=0 \ + GOOS=${TARGETOS} \ + GOARCH=${TARGETARCH} \ + go build \ + -ldflags="-w -s -X main.Version=$(cat VERSION)-logdna" -o /bin/logspout FROM scratch COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ diff --git a/Makefile b/Makefile index f3ca5bc..4a611b9 100644 --- a/Makefile +++ b/Makefile @@ -2,31 +2,24 @@ TAG = $(if $(CIRCLE_TAG),$(CIRCLE_TAG),PRTEST) REPO = ${USERNAME} NAME = logspout IMAGE = $(REPO)/$(NAME) -IMAGE_AMD64 = $(IMAGE):$(TAG)-amd64 -IMAGE_ARM64 = $(IMAGE):$(TAG)-arm64 -# Enable 'docker manifest' commands (still experimental in Docker v20.10.5) -export DOCKER_CLI_EXPERIMENTAL = enabled +.DEFAULT_GOAL := default +export DOCKER_CLI_EXPERIMENTAL=enabled + +.PHONY: build # Build the container image build: - docker build --pull -t $(IMAGE_AMD64) \ - --build-arg ARCH=amd64 \ - --build-arg OS=linux \ - -f Dockerfile . - docker build --pull -t $(IMAGE_ARM64) \ - --build-arg ARCH=arm64 \ - --build-arg OS=linux \ - -f Dockerfile . - docker save -o image.tar $(IMAGE_AMD64) $(IMAGE_ARM64) + @docker buildx create --use --name=crossplat --node=crossplat && \ + docker buildx build \ + --output "type=docker,push=false" \ + --tag $(IMAGE) \ + . +.PHONY: publish # Push the image to the remote registry publish: - docker login --username ${USERNAME} --password ${PASSWORD} - docker load -i ./image.tar - docker push $(IMAGE_AMD64) - docker push $(IMAGE_ARM64) - docker manifest create $(IMAGE):$(TAG) $(IMAGE_AMD64) $(IMAGE_ARM64) - docker manifest annotate $(IMAGE):$(TAG) $(IMAGE_ARM64) --arch arm64 --os linux - docker manifest push --purge $(IMAGE):$(TAG) - docker manifest create $(IMAGE):latest $(IMAGE_AMD64) $(IMAGE_ARM64) - docker manifest annotate $(IMAGE):latest $(IMAGE_ARM64) --arch arm64 --os linux - docker manifest push --purge $(IMAGE):latest + @docker buildx create --use --name=crossplat --node=crossplat && \ + docker buildx build \ + --platform linux/386,linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64,linux/ppc64le,linux/s390x \ + --output "type=image,push=true" \ + --tag $(IMAGE) \ + . \ No newline at end of file