diff --git a/commands/bake.go b/commands/bake.go index fde988cc..9b3ee5c9 100644 --- a/commands/bake.go +++ b/commands/bake.go @@ -72,11 +72,9 @@ func runBake(ctx context.Context, dockerCli command.Cli, targets []string, in ba overrides := in.overrides if in.exportPush { - if in.exportLoad { - return errors.Errorf("push and load may not be set together at the moment") - } - overrides = append(overrides, "*.push=true") - } else if in.exportLoad { + overrides = append(overrides, "*.output=type=registry") + } + if in.exportLoad { overrides = append(overrides, "*.output=type=docker") } if cFlags.noCache != nil { diff --git a/controller/build/build.go b/controller/build/build.go index 3629982b..75a17d81 100644 --- a/controller/build/build.go +++ b/controller/build/build.go @@ -99,38 +99,38 @@ func RunBuild(ctx context.Context, dockerCli command.Cli, in controllerapi.Build return nil, nil, err } if in.ExportPush { - if in.ExportLoad { - return nil, nil, errors.Errorf("push and load may not be set together at the moment") + var pushUsed bool + for i := range outputs { + if outputs[i].Type == client.ExporterImage { + outputs[i].Attrs["push"] = "true" + pushUsed = true + } } - if len(outputs) == 0 { - outputs = []client.ExportEntry{{ - Type: "image", + if !pushUsed { + outputs = append(outputs, client.ExportEntry{ + Type: client.ExporterImage, Attrs: map[string]string{ "push": "true", }, - }} - } else { - switch outputs[0].Type { - case "image": - outputs[0].Attrs["push"] = "true" - default: - return nil, nil, errors.Errorf("push and %q output can't be used together", outputs[0].Type) - } + }) } } if in.ExportLoad { - if len(outputs) == 0 { - outputs = []client.ExportEntry{{ - Type: "docker", - Attrs: map[string]string{}, - }} - } else { - switch outputs[0].Type { - case "docker": - default: - return nil, nil, errors.Errorf("load and %q output can't be used together", outputs[0].Type) + var loadUsed bool + for i := range outputs { + if outputs[i].Type == client.ExporterDocker { + if _, ok := outputs[i].Attrs["dest"]; !ok { + loadUsed = true + break + } } } + if !loadUsed { + outputs = append(outputs, client.ExportEntry{ + Type: client.ExporterDocker, + Attrs: map[string]string{}, + }) + } } annotations, err := buildflags.ParseAnnotations(in.Annotations)