Browse Source

Merge pull request #11333 from milas/hack-user-agent

feat(cli): report more useful User-Agent on engine API requests
Guillaume Lours 1 year ago
parent
commit
dbe7819fd4
1 changed files with 20 additions and 0 deletions
  1. 20 0
      cmd/main.go

+ 20 - 0
cmd/main.go

@@ -24,6 +24,7 @@ import (
 	"github.com/docker/cli/cli-plugins/plugin"
 	"github.com/docker/cli/cli/command"
 	"github.com/docker/compose/v2/cmd/cmdtrace"
+	"github.com/docker/docker/client"
 	"github.com/spf13/cobra"
 
 	"github.com/docker/compose/v2/cmd/compatibility"
@@ -42,6 +43,9 @@ func pluginMain() {
 			if err := plugin.PersistentPreRunE(cmd, args); err != nil {
 				return err
 			}
+			// compose-specific initialization
+			dockerCliPostInitialize(dockerCli)
+
 			// TODO(milas): add an env var to enable logging from the
 			// OTel components for debugging purposes
 			_ = cmdtrace.Setup(cmd, dockerCli, os.Args[1:])
@@ -67,6 +71,22 @@ func pluginMain() {
 		})
 }
 
+// dockerCliPostInitialize performs Compose-specific configuration for the
+// command.Cli instance provided by the plugin.Run() initialization.
+//
+// NOTE: This must be called AFTER plugin.PersistentPreRunE.
+func dockerCliPostInitialize(dockerCli command.Cli) {
+	// HACK(milas): remove once docker/cli#4574 is merged; for now,
+	// set it in a rather roundabout way by grabbing the underlying
+	// concrete client and manually invoking an option on it
+	_ = dockerCli.Apply(func(cli *command.DockerCli) error {
+		if mobyClient, ok := cli.Client().(*client.Client); ok {
+			_ = client.WithUserAgent("compose/" + internal.Version)(mobyClient)
+		}
+		return nil
+	})
+}
+
 func main() {
 	if plugin.RunningStandalone() {
 		os.Args = append([]string{"docker"}, compatibility.Convert(os.Args[1:])...)