diff --git a/internal/pipe/docker/docker.go b/internal/pipe/docker/docker.go index 3c0bbf4d4..d8f155c6f 100644 --- a/internal/pipe/docker/docker.go +++ b/internal/pipe/docker/docker.go @@ -151,14 +151,9 @@ func process(ctx *context.Context, docker config.Docker, bin artifact.Artifact) return err } - if err := dockerBuild(ctx, tmp, images[0], buildFlags); err != nil { + if err := dockerBuild(ctx, tmp, images, buildFlags); err != nil { return err } - for _, img := range images[1:] { - if err := dockerTag(ctx, images[0], img); err != nil { - return err - } - } if docker.SkipPush { // TODO: this should also be better handled log.Warn(pipe.Skip("skip_push is set").Error()) @@ -249,10 +244,10 @@ func link(src, dest string) error { }) } -func dockerBuild(ctx *context.Context, root, image string, flags []string) error { - log.WithField("image", image).Info("building docker image") +func dockerBuild(ctx *context.Context, root string, images, flags []string) error { + log.WithField("image", images[0]).Info("building docker image") /* #nosec */ - var cmd = exec.CommandContext(ctx, "docker", buildCommand(image, flags)...) + var cmd = exec.CommandContext(ctx, "docker", buildCommand(images, flags)...) cmd.Dir = root log.WithField("cmd", cmd.Args).WithField("cwd", cmd.Dir).Debug("running") out, err := cmd.CombinedOutput() @@ -263,25 +258,15 @@ func dockerBuild(ctx *context.Context, root, image string, flags []string) error return nil } -func buildCommand(image string, flags []string) []string { - base := []string{"build", "-t", image, "."} +func buildCommand(images, flags []string) []string { + base := []string{"build", "."} + for _, image := range images { + base = append(base, "-t", image) + } base = append(base, flags...) return base } -func dockerTag(ctx *context.Context, image, tag string) error { - log.WithField("image", image).WithField("tag", tag).Info("tagging docker image") - /* #nosec */ - var cmd = exec.CommandContext(ctx, "docker", "tag", image, tag) - log.WithField("cmd", cmd.Args).Debug("running") - out, err := cmd.CombinedOutput() - if err != nil { - return errors.Wrapf(err, "failed to tag docker image: \n%s", string(out)) - } - log.Debugf("docker tag output: \n%s", string(out)) - return nil -} - func dockerPush(ctx *context.Context, image artifact.Artifact) error { log.WithField("image", image.Name).Info("pushing docker image") /* #nosec */ diff --git a/internal/pipe/docker/docker_test.go b/internal/pipe/docker/docker_test.go index df18b8eb1..d48586827 100644 --- a/internal/pipe/docker/docker_test.go +++ b/internal/pipe/docker/docker_test.go @@ -604,31 +604,32 @@ func TestRunPipe(t *testing.T) { } func TestBuildCommand(t *testing.T) { - image := "goreleaser/test_build_flag" + images := []string{"goreleaser/test_build_flag", "goreleaser/test_multiple_tags"} tests := []struct { name string + images []string flags []string expect []string }{ { name: "no flags", flags: []string{}, - expect: []string{"build", "-t", image, "."}, + expect: []string{"build", ".", "-t", images[0], "-t", images[1]}, }, { name: "single flag", flags: []string{"--label=foo"}, - expect: []string{"build", "-t", image, ".", "--label=foo"}, + expect: []string{"build", ".", "-t", images[0], "-t", images[1], "--label=foo"}, }, { name: "multiple flags", flags: []string{"--label=foo", "--build-arg=bar=baz"}, - expect: []string{"build", "-t", image, ".", "--label=foo", "--build-arg=bar=baz"}, + expect: []string{"build", ".", "-t", images[0], "-t", images[1], "--label=foo", "--build-arg=bar=baz"}, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - command := buildCommand(image, tt.flags) + command := buildCommand(images, tt.flags) assert.Equal(t, tt.expect, command) }) }