Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion cmd/docker/builder.go
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,8 @@ func processBuilder(dockerCli command.Cli, cmd *cobra.Command, args, osargs []st
// is not being set in the command line or in the environment before
// setting the default context and keep "buildx install" behavior if being
// set (builder alias).
if forwarded && !useAlias && !hasBuilderName(args, os.Environ()) {
isBake := len(args) > 0 && args[0] == "bake"
if forwarded && !isBake && !useAlias && !hasBuilderName(args, os.Environ()) {
envs = append([]string{"BUILDX_BUILDER=" + dockerCli.CurrentContext()}, envs...)
}

Expand Down
36 changes: 28 additions & 8 deletions cmd/docker/builder_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,39 +21,55 @@ import (

var pluginFilename = "docker-buildx"

func TestBuildWithBuilder(t *testing.T) {
func TestForwardedCommandWithBuilder(t *testing.T) {
ctx := t.Context()

testcases := []struct {
name string
args []string
expectedArgs []string
context string
builder string
alias bool
expectedEnvs []string
}{
{
name: "default",
args: []string{"build", "."},
expectedArgs: []string{builderDefaultPlugin, "build", "."},
context: "default",
alias: false,
expectedEnvs: []string{"BUILDX_BUILDER=default"},
},
{
name: "custom context",
args: []string{"build", "."},
expectedArgs: []string{builderDefaultPlugin, "build", "."},
context: "foo",
alias: false,
expectedEnvs: []string{"BUILDX_BUILDER=foo"},
},
{
name: "custom builder name",
args: []string{"build", "."},
expectedArgs: []string{builderDefaultPlugin, "build", "."},
builder: "mybuilder",
alias: false,
expectedEnvs: nil,
},
{
name: "buildx install",
args: []string{"build", "."},
expectedArgs: []string{builderDefaultPlugin, "build", "."},
alias: true,
expectedEnvs: nil,
},
{
name: "bake with custom context",
args: []string{"bake", "app"},
expectedArgs: []string{builderDefaultPlugin, "bake", "app"},
context: "foo",
expectedEnvs: nil,
},
}

dir := fs.NewDir(t, t.Name(),
Expand All @@ -67,9 +83,7 @@ echo '{"SchemaVersion":"0.1.0","Vendor":"Docker Inc.","Version":"v0.6.3","ShortD
ctx2, cancel2 := context.WithCancel(ctx)
defer cancel2()

if tc.builder != "" {
t.Setenv("BUILDX_BUILDER", tc.builder)
}
t.Setenv("BUILDX_BUILDER", tc.builder)

var b bytes.Buffer
dockerCli, err := command.NewDockerCli(
Expand Down Expand Up @@ -103,19 +117,25 @@ echo '{"SchemaVersion":"0.1.0","Vendor":"Docker Inc.","Version":"v0.6.3","ShortD
}

tcmd := newDockerCommand(dockerCli)
tcmd.SetArgs([]string{"build", "."})
tcmd.SetArgs(tc.args)

cmd, args, err := tcmd.HandleGlobalFlags()
assert.NilError(t, err)

var envs []string
args, os.Args, envs, err = processBuilder(dockerCli, cmd, args, os.Args)
assert.NilError(t, err)
assert.DeepEqual(t, []string{builderDefaultPlugin, "build", "."}, args)
assert.DeepEqual(t, tc.expectedArgs, args)

if tc.expectedEnvs != nil {
assert.DeepEqual(t, tc.expectedEnvs, envs)
} else {
assert.Check(t, len(envs) == 0)
assert.Check(
t,
len(envs) == 0,
"unexpected environment variables: %v",
envs,
)
}
})
}
Expand Down