@@ -66,21 +66,15 @@ func closeOnCLISocketClose(cancel func()) {
6666}
6767
6868// RunPlugin executes the specified plugin command
69- func RunPlugin (dockerCli * command.DockerCli , plugin * cobra.Command , meta manager.Metadata ) error {
70- tcmd := newPluginCommand (dockerCli , plugin , meta )
69+ func RunPlugin (ctx context. Context , dockerCli * command.DockerCli , plugin * cobra.Command , meta manager.Metadata ) error {
70+ tcmd := newPluginCommand (ctx , dockerCli , plugin , meta )
7171
7272 var persistentPreRunOnce sync.Once
7373 PersistentPreRunE = func (cmd * cobra.Command , _ []string ) error {
7474 var err error
7575 persistentPreRunOnce .Do (func () {
76- cmdContext := cmd .Context ()
77- // TODO: revisit and make sure this check makes sense
78- // see: https://github.com/docker/cli/pull/4599#discussion_r1422487271
79- if cmdContext == nil {
80- cmdContext = context .TODO ()
81- }
82- ctx , cancel := context .WithCancel (cmdContext )
83- cmd .SetContext (ctx )
76+ ctx2 , cancel := context .WithCancel (cmd .Context ())
77+ cmd .SetContext (ctx2 )
8478 closeOnCLISocketClose (cancel )
8579
8680 var opts []command.CLIOption
@@ -103,16 +97,16 @@ func RunPlugin(dockerCli *command.DockerCli, plugin *cobra.Command, meta manager
10397}
10498
10599// Run is the top-level entry point to the CLI plugin framework. It should be called from your plugin's `main()` function.
106- func Run (makeCmd func (command.Cli ) * cobra.Command , meta manager.Metadata ) {
107- dockerCli , err := command .NewDockerCli ()
100+ func Run (ctx context. Context , makeCmd func (command.Cli ) * cobra.Command , meta manager.Metadata ) {
101+ dockerCli , err := command .NewDockerCli (command . WithBaseContext ( ctx ) )
108102 if err != nil {
109103 fmt .Fprintln (os .Stderr , err )
110104 os .Exit (1 )
111105 }
112106
113107 plugin := makeCmd (dockerCli )
114108
115- if err := RunPlugin (dockerCli , plugin , meta ); err != nil {
109+ if err := RunPlugin (ctx , dockerCli , plugin , meta ); err != nil {
116110 if sterr , ok := err .(cli.StatusError ); ok {
117111 if sterr .Status != "" {
118112 fmt .Fprintln (dockerCli .Err (), sterr .Status )
@@ -161,7 +155,7 @@ func withPluginClientConn(name string) command.CLIOption {
161155 })
162156}
163157
164- func newPluginCommand (dockerCli * command.DockerCli , plugin * cobra.Command , meta manager.Metadata ) * cli.TopLevelCommand {
158+ func newPluginCommand (ctx context. Context , dockerCli * command.DockerCli , plugin * cobra.Command , meta manager.Metadata ) * cli.TopLevelCommand {
165159 name := plugin .Name ()
166160 fullname := manager .NamePrefix + name
167161
@@ -182,7 +176,7 @@ func newPluginCommand(dockerCli *command.DockerCli, plugin *cobra.Command, meta
182176 DisableDescriptions : true ,
183177 },
184178 }
185- opts , _ := cli .SetupPluginRootCommand (cmd )
179+ opts , _ := cli .SetupPluginRootCommand (ctx , cmd )
186180
187181 cmd .SetIn (dockerCli .In ())
188182 cmd .SetOut (dockerCli .Out ())
0 commit comments