From 8b1bbbf06c1c679e7ed66a94cf250297d4866e1f Mon Sep 17 00:00:00 2001
From: Marcus Noble <github@marcusnoble.co.uk>
Date: Fri, 11 Sep 2020 22:17:27 +0100
Subject: [PATCH] Multi-arch builds

---
 Dockerfile | 15 +++++++++++----
 Makefile   | 16 ++++++++++++++--
 2 files changed, 25 insertions(+), 6 deletions(-)

diff --git a/Dockerfile b/Dockerfile
index 1fd134d..b035c85 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,8 +1,15 @@
-FROM ubuntu:19.10
+FROM --platform=${BUILDPLATFORM:-linux/amd64} ubuntu:19.10
 
-RUN apt-get update && apt-get install -y curl
-RUN curl -o megacmd-xUbuntu_19.10_amd64.deb https://mega.nz/linux/MEGAsync/xUbuntu_19.10/amd64/megacmd-xUbuntu_19.10_amd64.deb
-RUN apt install -y ./megacmd-xUbuntu_19.10_amd64.deb
+ARG BUILDPLATFORM
+ARG TARGETPLATFORM
+ARG TARGETOS
+ARG TARGETARCH
+
+RUN apt-get update && apt-get install -y curl ca-certificates
+RUN export URL="https://mega.nz/linux/MEGAsync/Raspbian_10.0/armhf/megacmd-Raspbian_10.0_armhf.deb" && \
+    if [ "${TARGETARCH}" = "amd64" ] ; then export URL="https://mega.nz/linux/MEGAsync/xUbuntu_19.10/amd64/megacmd-xUbuntu_19.10_amd64.deb" ; fi && \
+    curl -k -o megacmd.deb $URL
+RUN apt install -y ./megacmd.deb
 
 ADD entrypoint.sh /
 RUN chmod +x /entrypoint.sh
diff --git a/Makefile b/Makefile
index 7010890..0366280 100644
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,9 @@
 .DEFAULT_GOAL := default
 
 IMAGE ?= docker.cluster.fun/averagemarcus/megasync:latest
+PLATFORMS ?= linux/amd64,linux/arm/v7
+
+export DOCKER_CLI_EXPERIMENTAL=enabled
 
 .PHONY: test # Run all tests, linting and format checks
 test: lint check-format run-tests
@@ -31,11 +34,20 @@ build: lint check-format fetch-deps
 
 .PHONY: docker-build # Build the docker image
 docker-build:
-	@docker build -t $(IMAGE) .
+	@docker buildx create --use --name=crossplat --node=crossplat && \
+	docker buildx build \
+		--output "type=docker,push=false" \
+		--tag $(IMAGE) \
+		.
 
 .PHONY: docker-publish # Push the docker image to the remote registry
 docker-publish:
-	@docker push $(IMAGE)
+	@docker buildx create --use --name=crossplat --node=crossplat && \
+	docker buildx build \
+		--platform $(PLATFORMS) \
+		--output "type=image,push=true" \
+		--tag $(IMAGE) \
+		.
 
 .PHONY: run # Run the application
 run: