From f13698dc8ff1f53ac9a9edaa0c35d1a556a5b552 Mon Sep 17 00:00:00 2001 From: Joshua Sierles Date: Sun, 26 Sep 2021 14:04:36 +0200 Subject: [PATCH] Prevent local builds on Apple M1 devices --- internal/build/imgsrc/docker.go | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/internal/build/imgsrc/docker.go b/internal/build/imgsrc/docker.go index 992b7d22e0..84a182b98f 100644 --- a/internal/build/imgsrc/docker.go +++ b/internal/build/imgsrc/docker.go @@ -7,6 +7,7 @@ import ( "fmt" "os" "path/filepath" + "runtime" "time" "github.com/docker/docker/api/types" @@ -32,9 +33,12 @@ type dockerClientFactory struct { func newDockerClientFactory(daemonType DockerDaemonType, apiClient *api.Client, appName string, streams *iostreams.IOStreams) *dockerClientFactory { if daemonType.AllowLocal() { - terminal.Debug("trying local docker daemon") + terminal.Debug("Trying local docker daemon") c, err := newLocalDockerClient() - if c != nil && err == nil { + + if localBuildUnsupported() { + terminal.Warn("Local docker builds are not supported on Apple M1 devices.") + } else if c != nil && err == nil { return &dockerClientFactory{ mode: DockerDaemonTypeLocal, buildFn: func(ctx context.Context) (*dockerclient.Client, error) { @@ -49,7 +53,7 @@ func newDockerClientFactory(daemonType DockerDaemonType, apiClient *api.Client, } if daemonType.AllowRemote() { - terminal.Debug("trying remote docker daemon") + terminal.Debug("Trying remote docker daemon") var cachedDocker *dockerclient.Client return &dockerClientFactory{ @@ -105,6 +109,11 @@ const ( DockerDaemonTypeNone ) +func localBuildUnsupported() bool { + terminal.Debug("Running on OS " + runtime.GOOS + " with architecture " + runtime.GOARCH) + return (runtime.GOOS == "darwin" && runtime.GOARCH == "arm64") +} + func (t DockerDaemonType) AllowLocal() bool { return (t & DockerDaemonTypeLocal) != 0 }