Skip to content

Commit a10f036

Browse files
committed
chore: don't break plugins but keep context for cobra cli
Signed-off-by: Alano Terblanche <18033717+Benehiko@users.noreply.github.com>
1 parent 0c8869f commit a10f036

9 files changed

Lines changed: 26 additions & 35 deletions

File tree

cli-plugins/examples/helloworld/main.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,7 @@ import (
1212
)
1313

1414
func main() {
15-
ctx := context.Background()
16-
plugin.Run(ctx, func(dockerCli command.Cli) *cobra.Command {
15+
plugin.Run(func(dockerCli command.Cli) *cobra.Command {
1716
goodbye := &cobra.Command{
1817
Use: "goodbye",
1918
Short: "Say Goodbye instead of Hello",

cli-plugins/plugin/plugin.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@ import (
2929
var PersistentPreRunE func(*cobra.Command, []string) error
3030

3131
// RunPlugin executes the specified plugin command
32-
func RunPlugin(ctx context.Context, dockerCli *command.DockerCli, plugin *cobra.Command, meta manager.Metadata) error {
33-
tcmd := newPluginCommand(ctx, dockerCli, plugin, meta)
32+
func RunPlugin(dockerCli *command.DockerCli, plugin *cobra.Command, meta manager.Metadata) error {
33+
tcmd := newPluginCommand(dockerCli, plugin, meta)
3434

3535
var persistentPreRunOnce sync.Once
3636
PersistentPreRunE = func(cmd *cobra.Command, _ []string) error {
@@ -61,18 +61,18 @@ func RunPlugin(ctx context.Context, dockerCli *command.DockerCli, plugin *cobra.
6161
}
6262

6363
// Run is the top-level entry point to the CLI plugin framework. It should be called from your plugin's `main()` function.
64-
func Run(ctx context.Context, makeCmd func(command.Cli) *cobra.Command, meta manager.Metadata) {
64+
func Run(makeCmd func(command.Cli) *cobra.Command, meta manager.Metadata) {
6565
otel.SetErrorHandler(debug.OTELErrorHandler)
6666

67-
dockerCli, err := command.NewDockerCli(command.WithBaseContext(ctx))
67+
dockerCli, err := command.NewDockerCli()
6868
if err != nil {
6969
fmt.Fprintln(os.Stderr, err)
7070
os.Exit(1)
7171
}
7272

7373
plugin := makeCmd(dockerCli)
7474

75-
if err := RunPlugin(ctx, dockerCli, plugin, meta); err != nil {
75+
if err := RunPlugin(dockerCli, plugin, meta); err != nil {
7676
if sterr, ok := err.(cli.StatusError); ok {
7777
if sterr.Status != "" {
7878
fmt.Fprintln(dockerCli.Err(), sterr.Status)
@@ -121,7 +121,7 @@ func withPluginClientConn(name string) command.CLIOption {
121121
})
122122
}
123123

124-
func newPluginCommand(ctx context.Context, dockerCli *command.DockerCli, plugin *cobra.Command, meta manager.Metadata) *cli.TopLevelCommand {
124+
func newPluginCommand(dockerCli *command.DockerCli, plugin *cobra.Command, meta manager.Metadata) *cli.TopLevelCommand {
125125
name := plugin.Name()
126126
fullname := manager.NamePrefix + name
127127

@@ -142,7 +142,7 @@ func newPluginCommand(ctx context.Context, dockerCli *command.DockerCli, plugin
142142
DisableDescriptions: true,
143143
},
144144
}
145-
opts, _ := cli.SetupPluginRootCommand(ctx, cmd)
145+
opts, _ := cli.SetupPluginRootCommand(cmd)
146146

147147
cmd.SetIn(dockerCli.In())
148148
cmd.SetOut(dockerCli.Out())

cli/cobra.go

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package cli
22

33
import (
4-
"context"
54
"fmt"
65
"os"
76
"path/filepath"
@@ -23,8 +22,7 @@ import (
2322

2423
// setupCommonRootCommand contains the setup common to
2524
// SetupRootCommand and SetupPluginRootCommand.
26-
func setupCommonRootCommand(ctx context.Context, rootCmd *cobra.Command) (*cliflags.ClientOptions, *cobra.Command) {
27-
rootCmd.SetContext(ctx)
25+
func setupCommonRootCommand(rootCmd *cobra.Command) (*cliflags.ClientOptions, *cobra.Command) {
2826
opts := cliflags.NewClientOptions()
2927
opts.InstallFlags(rootCmd.Flags())
3028

@@ -76,14 +74,14 @@ func setupCommonRootCommand(ctx context.Context, rootCmd *cobra.Command) (*clifl
7674

7775
// SetupRootCommand sets default usage, help, and error handling for the
7876
// root command.
79-
func SetupRootCommand(ctx context.Context, rootCmd *cobra.Command) (opts *cliflags.ClientOptions, helpCmd *cobra.Command) {
77+
func SetupRootCommand(rootCmd *cobra.Command) (opts *cliflags.ClientOptions, helpCmd *cobra.Command) {
8078
rootCmd.SetVersionTemplate("Docker version {{.Version}}\n")
81-
return setupCommonRootCommand(ctx, rootCmd)
79+
return setupCommonRootCommand(rootCmd)
8280
}
8381

8482
// SetupPluginRootCommand sets default usage, help and error handling for a plugin root command.
85-
func SetupPluginRootCommand(ctx context.Context, rootCmd *cobra.Command) (*cliflags.ClientOptions, *pflag.FlagSet) {
86-
opts, _ := setupCommonRootCommand(ctx, rootCmd)
83+
func SetupPluginRootCommand(rootCmd *cobra.Command) (*cliflags.ClientOptions, *pflag.FlagSet) {
84+
opts, _ := setupCommonRootCommand(rootCmd)
8785
return opts, rootCmd.Flags()
8886
}
8987

cmd/docker/builder_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ echo '{"SchemaVersion":"0.1.0","Vendor":"Docker Inc.","Version":"v0.6.3","ShortD
105105
dockerCli.ConfigFile().Aliases = map[string]string{"builder": "buildx"}
106106
}
107107

108-
tcmd := newDockerCommand(ctx2, dockerCli)
108+
tcmd := newDockerCommand(dockerCli)
109109
tcmd.SetArgs([]string{"build", "."})
110110

111111
cmd, args, err := tcmd.HandleGlobalFlags()
@@ -155,7 +155,7 @@ func TestBuildkitDisabled(t *testing.T) {
155155
assert.NilError(t, dockerCli.Initialize(flags.NewClientOptions()))
156156
dockerCli.ConfigFile().CLIPluginsExtraDirs = []string{dir.Path()}
157157

158-
tcmd := newDockerCommand(ctx, dockerCli)
158+
tcmd := newDockerCommand(dockerCli)
159159
tcmd.SetArgs([]string{"build", "."})
160160

161161
cmd, args, err := tcmd.HandleGlobalFlags()
@@ -194,7 +194,7 @@ func TestBuilderBroken(t *testing.T) {
194194
assert.NilError(t, dockerCli.Initialize(flags.NewClientOptions()))
195195
dockerCli.ConfigFile().CLIPluginsExtraDirs = []string{dir.Path()}
196196

197-
tcmd := newDockerCommand(ctx, dockerCli)
197+
tcmd := newDockerCommand(dockerCli)
198198
tcmd.SetArgs([]string{"build", "."})
199199

200200
cmd, args, err := tcmd.HandleGlobalFlags()
@@ -234,7 +234,7 @@ func TestBuilderBrokenEnforced(t *testing.T) {
234234
assert.NilError(t, dockerCli.Initialize(flags.NewClientOptions()))
235235
dockerCli.ConfigFile().CLIPluginsExtraDirs = []string{dir.Path()}
236236

237-
tcmd := newDockerCommand(ctx, dockerCli)
237+
tcmd := newDockerCommand(dockerCli)
238238
tcmd.SetArgs([]string{"build", "."})
239239

240240
cmd, args, err := tcmd.HandleGlobalFlags()

cmd/docker/docker.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ func main() {
5858
}
5959
}
6060

61-
func newDockerCommand(ctx context.Context, dockerCli *command.DockerCli) *cli.TopLevelCommand {
61+
func newDockerCommand(dockerCli *command.DockerCli) *cli.TopLevelCommand {
6262
var (
6363
opts *cliflags.ClientOptions
6464
helpCmd *cobra.Command
@@ -91,7 +91,7 @@ func newDockerCommand(ctx context.Context, dockerCli *command.DockerCli) *cli.To
9191
cmd.SetOut(dockerCli.Out())
9292
cmd.SetErr(dockerCli.Err())
9393

94-
opts, helpCmd = cli.SetupRootCommand(ctx, cmd)
94+
opts, helpCmd = cli.SetupRootCommand(cmd)
9595
_ = registerCompletionFuncForGlobalFlags(dockerCli.ContextStore(), cmd)
9696
cmd.Flags().BoolP("version", "v", false, "Print version information and quit")
9797
setFlagErrorFunc(dockerCli, cmd)
@@ -297,7 +297,7 @@ func tryPluginRun(dockerCli command.Cli, cmd *cobra.Command, subcommand string,
297297

298298
//nolint:gocyclo
299299
func runDocker(ctx context.Context, dockerCli *command.DockerCli) error {
300-
tcmd := newDockerCommand(ctx, dockerCli)
300+
tcmd := newDockerCommand(dockerCli)
301301

302302
cmd, args, err := tcmd.HandleGlobalFlags()
303303
if err != nil {
@@ -353,7 +353,7 @@ func runDocker(ctx context.Context, dockerCli *command.DockerCli) error {
353353
// We've parsed global args already, so reset args to those
354354
// which remain.
355355
cmd.SetArgs(args)
356-
err = cmd.Execute()
356+
err = cmd.ExecuteContext(ctx)
357357
if err != nil {
358358
return err
359359
}

cmd/docker/docker_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ func TestClientDebugEnabled(t *testing.T) {
2121

2222
cli, err := command.NewDockerCli(command.WithBaseContext(ctx))
2323
assert.NilError(t, err)
24-
tcmd := newDockerCommand(ctx, cli)
24+
tcmd := newDockerCommand(cli)
2525
tcmd.SetFlag("debug", "true")
2626
cmd, _, err := tcmd.HandleGlobalFlags()
2727
assert.NilError(t, err)
@@ -50,7 +50,7 @@ func runCliCommand(t *testing.T, r io.ReadCloser, w io.Writer, args ...string) e
5050
command.WithInputStream(r),
5151
command.WithCombinedStreams(w))
5252
assert.NilError(t, err)
53-
tcmd := newDockerCommand(ctx, cli)
53+
tcmd := newDockerCommand(cli)
5454

5555
tcmd.SetArgs(args)
5656
cmd, _, err := tcmd.HandleGlobalFlags()

docs/generate/generate.go

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
package main
77

88
import (
9-
"context"
109
"log"
1110
"os"
1211

@@ -39,8 +38,7 @@ func gen(opts *options) error {
3938
Short: "The base command for the Docker CLI.",
4039
}
4140

42-
ctx := context.Background()
43-
clientOpts, _ := cli.SetupRootCommand(ctx, cmd)
41+
clientOpts, _ := cli.SetupRootCommand(cmd)
4442
if err := dockerCLI.Initialize(clientOpts); err != nil {
4543
return err
4644
}

e2e/cli-plugins/plugins/nopersistentprerun/main.go

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package main
22

33
import (
4-
"context"
54
"fmt"
65

76
"github.com/docker/cli/cli-plugins/manager"
@@ -11,8 +10,7 @@ import (
1110
)
1211

1312
func main() {
14-
ctx := context.Background()
15-
plugin.Run(ctx, func(dockerCli command.Cli) *cobra.Command {
13+
plugin.Run(func(dockerCli command.Cli) *cobra.Command {
1614
return &cobra.Command{
1715
Use: "nopersistentprerun",
1816
Short: "Testing without PersistentPreRun hooks",

e2e/cli-plugins/plugins/presocket/main.go

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package main
22

33
import (
4-
"context"
54
"fmt"
65
"os"
76
"os/signal"
@@ -15,8 +14,7 @@ import (
1514
)
1615

1716
func main() {
18-
ctx := context.Background()
19-
plugin.Run(ctx, RootCmd, manager.Metadata{
17+
plugin.Run(RootCmd, manager.Metadata{
2018
SchemaVersion: "0.1.0",
2119
Vendor: "Docker Inc.",
2220
Version: "test",

0 commit comments

Comments
 (0)