From 5a691ae1e4d98430be39c30a12796a63a9933b03 Mon Sep 17 00:00:00 2001 From: "Marcelo E. Magallon" Date: Wed, 1 Jun 2022 17:21:08 -0600 Subject: [PATCH] Add support for docker --platform flag Add a --platform flag so that the user can specify a value for the corresponding flag passed to docker. This is useful in the context of multi-arch builds and buildkit (DOCKER_BUILDKIT=1 in the environment). Signed-off-by: Marcelo E. Magallon --- cmd/drone-docker/main.go | 6 ++++++ docker.go | 4 ++++ docker_test.go | 21 +++++++++++++++++++++ 3 files changed, 31 insertions(+) diff --git a/cmd/drone-docker/main.go b/cmd/drone-docker/main.go index d467591d..a2156c32 100644 --- a/cmd/drone-docker/main.go +++ b/cmd/drone-docker/main.go @@ -269,6 +269,11 @@ func main() { Usage: "card path location to write to", EnvVar: "DRONE_CARD_PATH", }, + cli.StringFlag{ + Name: "platform", + Usage: "platform value to pass to docker", + EnvVar: "PLUGIN_PLATFORM", + }, } if err := app.Run(os.Args); err != nil { @@ -312,6 +317,7 @@ func run(c *cli.Context) error { SecretFiles: c.StringSlice("secrets-from-file"), AddHost: c.StringSlice("add-host"), Quiet: c.Bool("quiet"), + Platform: c.String("platform"), }, Daemon: docker.Daemon{ Registry: c.String("docker.registry"), diff --git a/docker.go b/docker.go index 236065de..a19f51e2 100644 --- a/docker.go +++ b/docker.go @@ -63,6 +63,7 @@ type ( SecretFiles []string // Docker build secrets with file as source AddHost []string // Docker build add-host Quiet bool // Docker build quiet + Platform string // Docker build platform } // Plugin defines the Docker plugin parameters. @@ -324,6 +325,9 @@ func commandBuild(build Build) *exec.Cmd { if build.Quiet { args = append(args, "--quiet") } + if build.Platform != "" { + args = append(args, "--platform", build.Platform) + } if build.AutoLabel { labelSchema := []string{ diff --git a/docker_test.go b/docker_test.go index ea90181d..d10cc52f 100644 --- a/docker_test.go +++ b/docker_test.go @@ -114,6 +114,27 @@ func TestCommandBuild(t *testing.T) { ".", ), }, + { + name: "platform argument", + build: Build{ + Name: "plugins/drone-docker:latest", + Dockerfile: "Dockerfile", + Context: ".", + Platform: "test/platform", + }, + want: exec.Command( + dockerExe, + "build", + "--rm=true", + "-f", + "Dockerfile", + "-t", + "plugins/drone-docker:latest", + ".", + "--platform", + "test/platform", + ), + }, } for _, tc := range tcs {