diff --git a/commands/bake.go b/commands/bake.go index 2b23032b6b98..39bea3c7cc71 100644 --- a/commands/bake.go +++ b/commands/bake.go @@ -25,7 +25,6 @@ import ( "github.com/docker/buildx/localstate" "github.com/docker/buildx/util/buildflags" "github.com/docker/buildx/util/cobrautil" - "github.com/docker/buildx/util/cobrautil/completion" "github.com/docker/buildx/util/confutil" "github.com/docker/buildx/util/desktop" "github.com/docker/buildx/util/dockerutil" @@ -510,7 +509,7 @@ func bakeCmd(dockerCli command.Cli, rootOpts *rootOptions) *cobra.Command { // Other common flags (noCache, pull and progress) are processed in runBake function. return runBake(cmd.Context(), dockerCli, args, options, cFlags, filesFromEnv) }, - ValidArgsFunction: completion.BakeTargets(options.files), + ValidArgsFunction: bakeTargetsCompletion(options.files), DisableFlagsInUseLine: true, } @@ -545,6 +544,29 @@ func bakeCmd(dockerCli command.Cli, rootOpts *rootOptions) *cobra.Command { return cmd } +func bakeTargetsCompletion(files []string) cobrautil.ValidArgsFn { + return func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { + f, err := bake.ReadLocalFiles(files, nil, nil) + if err != nil { + return nil, cobra.ShellCompDirectiveError + } + tgts, err := bake.ListTargets(f) + if err != nil { + return nil, cobra.ShellCompDirectiveError + } + var filtered []string + if toComplete == "" { + return tgts, cobra.ShellCompDirectiveNoFileComp + } + for _, tgt := range tgts { + if strings.HasPrefix(tgt, toComplete) { + filtered = append(filtered, tgt) + } + } + return filtered, cobra.ShellCompDirectiveNoFileComp + } +} + func bakeEnvFiles(lookup func(string string) (string, bool)) ([]string, error) { sep, _ := lookup(bakeEnvFileSeparator) if sep == "" { diff --git a/commands/create.go b/commands/create.go index 025a3750ff25..950e3ee53d52 100644 --- a/commands/create.go +++ b/commands/create.go @@ -10,7 +10,6 @@ import ( "github.com/docker/buildx/driver" "github.com/docker/buildx/store/storeutil" "github.com/docker/buildx/util/cobrautil" - "github.com/docker/buildx/util/cobrautil/completion" "github.com/docker/cli/cli" "github.com/docker/cli/cli/command" "github.com/spf13/cobra" @@ -101,7 +100,7 @@ func createCmd(dockerCli command.Cli) *cobra.Command { RunE: func(cmd *cobra.Command, args []string) error { return runCreate(cmd.Context(), dockerCli, options, args) }, - ValidArgsFunction: completion.Disable, + ValidArgsFunction: cobrautil.DisableCompletion, DisableFlagsInUseLine: true, } diff --git a/commands/diskusage.go b/commands/diskusage.go index 5bcc82231f7c..972b8d924552 100644 --- a/commands/diskusage.go +++ b/commands/diskusage.go @@ -8,7 +8,7 @@ import ( "time" "github.com/docker/buildx/builder" - "github.com/docker/buildx/util/cobrautil/completion" + "github.com/docker/buildx/util/cobrautil" "github.com/docker/cli/cli" "github.com/docker/cli/cli/command" "github.com/docker/cli/cli/command/formatter" @@ -196,7 +196,7 @@ func duCmd(dockerCli command.Cli, rootOpts *rootOptions) *cobra.Command { options.builder = rootOpts.builder return runDiskUsage(cmd.Context(), dockerCli, options) }, - ValidArgsFunction: completion.Disable, + ValidArgsFunction: cobrautil.DisableCompletion, DisableFlagsInUseLine: true, } diff --git a/commands/history/export.go b/commands/history/export.go index e313fdf626f2..6422225d98e8 100644 --- a/commands/history/export.go +++ b/commands/history/export.go @@ -10,7 +10,7 @@ import ( "github.com/containerd/platforms" "github.com/docker/buildx/builder" "github.com/docker/buildx/localstate" - "github.com/docker/buildx/util/cobrautil/completion" + "github.com/docker/buildx/util/cobrautil" "github.com/docker/buildx/util/confutil" "github.com/docker/buildx/util/desktop/bundle" "github.com/docker/cli/cli/command" @@ -160,7 +160,7 @@ func exportCmd(dockerCli command.Cli, rootOpts RootOptions) *cobra.Command { options.builder = *rootOpts.Builder return runExport(cmd.Context(), dockerCli, options) }, - ValidArgsFunction: completion.Disable, + ValidArgsFunction: cobrautil.DisableCompletion, DisableFlagsInUseLine: true, } diff --git a/commands/history/import.go b/commands/history/import.go index ff8700be4ac6..6be6f96ac155 100644 --- a/commands/history/import.go +++ b/commands/history/import.go @@ -11,7 +11,7 @@ import ( "strings" remoteutil "github.com/docker/buildx/driver/remote/util" - "github.com/docker/buildx/util/cobrautil/completion" + "github.com/docker/buildx/util/cobrautil" "github.com/docker/buildx/util/desktop" "github.com/docker/cli/cli/command" "github.com/pkg/browser" @@ -125,7 +125,7 @@ func importCmd(dockerCli command.Cli, _ RootOptions) *cobra.Command { RunE: func(cmd *cobra.Command, args []string) error { return runImport(cmd.Context(), dockerCli, options) }, - ValidArgsFunction: completion.Disable, + ValidArgsFunction: cobrautil.DisableCompletion, DisableFlagsInUseLine: true, } diff --git a/commands/history/inspect.go b/commands/history/inspect.go index 44f032bde5ca..76144a2028f4 100644 --- a/commands/history/inspect.go +++ b/commands/history/inspect.go @@ -21,7 +21,7 @@ import ( "github.com/containerd/containerd/v2/core/images" "github.com/containerd/platforms" "github.com/docker/buildx/localstate" - "github.com/docker/buildx/util/cobrautil/completion" + "github.com/docker/buildx/util/cobrautil" "github.com/docker/buildx/util/confutil" "github.com/docker/buildx/util/desktop" "github.com/docker/cli/cli/command" @@ -656,7 +656,7 @@ func inspectCmd(dockerCli command.Cli, rootOpts RootOptions) *cobra.Command { options.builder = *rootOpts.Builder return runInspect(cmd.Context(), dockerCli, options) }, - ValidArgsFunction: completion.Disable, + ValidArgsFunction: cobrautil.DisableCompletion, DisableFlagsInUseLine: true, } diff --git a/commands/history/inspect_attachment.go b/commands/history/inspect_attachment.go index 9de06693b538..43a86e5a2ea1 100644 --- a/commands/history/inspect_attachment.go +++ b/commands/history/inspect_attachment.go @@ -6,7 +6,7 @@ import ( "github.com/containerd/containerd/v2/core/content/proxy" "github.com/containerd/platforms" - "github.com/docker/buildx/util/cobrautil/completion" + "github.com/docker/buildx/util/cobrautil" "github.com/docker/cli/cli/command" intoto "github.com/in-toto/in-toto-golang/in_toto" slsa02 "github.com/in-toto/in-toto-golang/in_toto/slsa_provenance/v0.2" @@ -129,7 +129,7 @@ func attachmentCmd(dockerCli command.Cli, rootOpts RootOptions) *cobra.Command { options.builder = *rootOpts.Builder return runAttachment(cmd.Context(), dockerCli, options) }, - ValidArgsFunction: completion.Disable, + ValidArgsFunction: cobrautil.DisableCompletion, DisableFlagsInUseLine: true, } diff --git a/commands/history/logs.go b/commands/history/logs.go index 5604a9fa8267..013e565865db 100644 --- a/commands/history/logs.go +++ b/commands/history/logs.go @@ -5,7 +5,7 @@ import ( "io" "os" - "github.com/docker/buildx/util/cobrautil/completion" + "github.com/docker/buildx/util/cobrautil" "github.com/docker/buildx/util/progress" "github.com/docker/cli/cli/command" controlapi "github.com/moby/buildkit/api/services/control" @@ -96,7 +96,7 @@ func logsCmd(dockerCli command.Cli, rootOpts RootOptions) *cobra.Command { options.builder = *rootOpts.Builder return runLogs(cmd.Context(), dockerCli, options) }, - ValidArgsFunction: completion.Disable, + ValidArgsFunction: cobrautil.DisableCompletion, DisableFlagsInUseLine: true, } diff --git a/commands/history/ls.go b/commands/history/ls.go index 9153d8fca094..5313b74c9bc4 100644 --- a/commands/history/ls.go +++ b/commands/history/ls.go @@ -11,7 +11,7 @@ import ( "github.com/containerd/console" "github.com/docker/buildx/localstate" - "github.com/docker/buildx/util/cobrautil/completion" + "github.com/docker/buildx/util/cobrautil" "github.com/docker/buildx/util/confutil" "github.com/docker/buildx/util/desktop" "github.com/docker/buildx/util/gitutil" @@ -103,7 +103,7 @@ func lsCmd(dockerCli command.Cli, rootOpts RootOptions) *cobra.Command { options.builder = *rootOpts.Builder return runLs(cmd.Context(), dockerCli, options) }, - ValidArgsFunction: completion.Disable, + ValidArgsFunction: cobrautil.DisableCompletion, DisableFlagsInUseLine: true, } diff --git a/commands/history/open.go b/commands/history/open.go index 5e3f9dd35447..0ebe5bd9febf 100644 --- a/commands/history/open.go +++ b/commands/history/open.go @@ -4,7 +4,7 @@ import ( "context" "fmt" - "github.com/docker/buildx/util/cobrautil/completion" + "github.com/docker/buildx/util/cobrautil" "github.com/docker/buildx/util/desktop" "github.com/docker/cli/cli/command" "github.com/pkg/browser" @@ -55,7 +55,7 @@ func openCmd(dockerCli command.Cli, rootOpts RootOptions) *cobra.Command { options.builder = *rootOpts.Builder return runOpen(cmd.Context(), dockerCli, options) }, - ValidArgsFunction: completion.Disable, + ValidArgsFunction: cobrautil.DisableCompletion, DisableFlagsInUseLine: true, } diff --git a/commands/history/rm.go b/commands/history/rm.go index 066d31e94376..d3ce486cf6fd 100644 --- a/commands/history/rm.go +++ b/commands/history/rm.go @@ -5,7 +5,7 @@ import ( stderrors "errors" "io" - "github.com/docker/buildx/util/cobrautil/completion" + "github.com/docker/buildx/util/cobrautil" "github.com/docker/cli/cli/command" controlapi "github.com/moby/buildkit/api/services/control" "github.com/pkg/errors" @@ -121,7 +121,7 @@ func rmCmd(dockerCli command.Cli, rootOpts RootOptions) *cobra.Command { options.builder = *rootOpts.Builder return runRm(cmd.Context(), dockerCli, options) }, - ValidArgsFunction: completion.Disable, + ValidArgsFunction: cobrautil.DisableCompletion, DisableFlagsInUseLine: true, } diff --git a/commands/history/root.go b/commands/history/root.go index d04f071341ef..9e3fc9a7a761 100644 --- a/commands/history/root.go +++ b/commands/history/root.go @@ -1,7 +1,7 @@ package history import ( - "github.com/docker/buildx/util/cobrautil/completion" + "github.com/docker/buildx/util/cobrautil" "github.com/docker/cli/cli/command" "github.com/spf13/cobra" ) @@ -14,7 +14,7 @@ func RootCmd(rootcmd *cobra.Command, dockerCli command.Cli, opts RootOptions) *c cmd := &cobra.Command{ Use: "history", Short: "Commands to work on build records", - ValidArgsFunction: completion.Disable, + ValidArgsFunction: cobrautil.DisableCompletion, RunE: rootcmd.RunE, DisableFlagsInUseLine: true, diff --git a/commands/history/trace.go b/commands/history/trace.go index 1b2145dd8b71..d97aa9360207 100644 --- a/commands/history/trace.go +++ b/commands/history/trace.go @@ -13,7 +13,7 @@ import ( "github.com/containerd/console" "github.com/containerd/containerd/v2/core/content/proxy" "github.com/docker/buildx/builder" - "github.com/docker/buildx/util/cobrautil/completion" + "github.com/docker/buildx/util/cobrautil" "github.com/docker/buildx/util/otelutil" "github.com/docker/buildx/util/otelutil/jaeger" "github.com/docker/cli/cli/command" @@ -200,7 +200,7 @@ func traceCmd(dockerCli command.Cli, rootOpts RootOptions) *cobra.Command { options.builder = *rootOpts.Builder return runTrace(cmd.Context(), dockerCli, options) }, - ValidArgsFunction: completion.Disable, + ValidArgsFunction: cobrautil.DisableCompletion, DisableFlagsInUseLine: true, } diff --git a/commands/imagetools/create.go b/commands/imagetools/create.go index bd949c929c34..e7f9f7f15b69 100644 --- a/commands/imagetools/create.go +++ b/commands/imagetools/create.go @@ -13,7 +13,7 @@ import ( "github.com/distribution/reference" "github.com/docker/buildx/builder" "github.com/docker/buildx/util/buildflags" - "github.com/docker/buildx/util/cobrautil/completion" + "github.com/docker/buildx/util/cobrautil" "github.com/docker/buildx/util/imagetools" "github.com/docker/buildx/util/progress" "github.com/docker/cli/cli/command" @@ -353,7 +353,7 @@ func createCmd(dockerCli command.Cli, opts RootOptions) *cobra.Command { options.builder = *opts.Builder return runCreate(cmd.Context(), dockerCli, options, args) }, - ValidArgsFunction: completion.Disable, + ValidArgsFunction: cobrautil.DisableCompletion, DisableFlagsInUseLine: true, } diff --git a/commands/imagetools/inspect.go b/commands/imagetools/inspect.go index 9745e21872a2..4217d775866a 100644 --- a/commands/imagetools/inspect.go +++ b/commands/imagetools/inspect.go @@ -4,7 +4,7 @@ import ( "context" "github.com/docker/buildx/builder" - "github.com/docker/buildx/util/cobrautil/completion" + "github.com/docker/buildx/util/cobrautil" "github.com/docker/buildx/util/imagetools" "github.com/docker/cli-docs-tool/annotation" "github.com/docker/cli/cli" @@ -52,7 +52,7 @@ func inspectCmd(dockerCli command.Cli, rootOpts RootOptions) *cobra.Command { options.builder = *rootOpts.Builder return runInspect(cmd.Context(), dockerCli, options, args[0]) }, - ValidArgsFunction: completion.Disable, + ValidArgsFunction: cobrautil.DisableCompletion, DisableFlagsInUseLine: true, } diff --git a/commands/imagetools/root.go b/commands/imagetools/root.go index 031167776a43..ee40e9424949 100644 --- a/commands/imagetools/root.go +++ b/commands/imagetools/root.go @@ -1,7 +1,7 @@ package commands import ( - "github.com/docker/buildx/util/cobrautil/completion" + "github.com/docker/buildx/util/cobrautil" "github.com/docker/cli/cli/command" "github.com/spf13/cobra" ) @@ -14,7 +14,7 @@ func RootCmd(rootcmd *cobra.Command, dockerCli command.Cli, opts RootOptions) *c cmd := &cobra.Command{ Use: "imagetools", Short: "Commands to work on images in registry", - ValidArgsFunction: completion.Disable, + ValidArgsFunction: cobrautil.DisableCompletion, RunE: rootcmd.RunE, DisableFlagsInUseLine: true, } diff --git a/commands/inspect.go b/commands/inspect.go index 9e891217aeb5..4cbb7904b961 100644 --- a/commands/inspect.go +++ b/commands/inspect.go @@ -11,7 +11,6 @@ import ( "github.com/docker/buildx/builder" "github.com/docker/buildx/driver" - "github.com/docker/buildx/util/cobrautil/completion" "github.com/docker/buildx/util/platformutil" "github.com/docker/cli/cli" "github.com/docker/cli/cli/command" @@ -185,7 +184,7 @@ func inspectCmd(dockerCli command.Cli, rootOpts *rootOptions) *cobra.Command { } return runInspect(cmd.Context(), dockerCli, options) }, - ValidArgsFunction: completion.BuilderNames(dockerCli), + ValidArgsFunction: builderNamesCompletion(dockerCli), DisableFlagsInUseLine: true, } diff --git a/commands/install.go b/commands/install.go index fc334eb1d874..d3a4f7d89c26 100644 --- a/commands/install.go +++ b/commands/install.go @@ -4,7 +4,6 @@ import ( "os" "github.com/docker/buildx/util/cobrautil" - "github.com/docker/buildx/util/cobrautil/completion" "github.com/docker/cli/cli" "github.com/docker/cli/cli/command" "github.com/docker/cli/cli/config" @@ -49,7 +48,7 @@ func installCmd(dockerCli command.Cli) *cobra.Command { }, Deprecated: "use 'docker buildx' directly, without relying on the 'docker builder' alias", Hidden: true, - ValidArgsFunction: completion.Disable, + ValidArgsFunction: cobrautil.DisableCompletion, DisableFlagsInUseLine: true, } diff --git a/commands/ls.go b/commands/ls.go index 1791bda8d1df..f60e64a7affd 100644 --- a/commands/ls.go +++ b/commands/ls.go @@ -14,7 +14,6 @@ import ( "github.com/docker/buildx/store" "github.com/docker/buildx/store/storeutil" "github.com/docker/buildx/util/cobrautil" - "github.com/docker/buildx/util/cobrautil/completion" "github.com/docker/buildx/util/platformutil" "github.com/docker/cli/cli" "github.com/docker/cli/cli/command" @@ -110,7 +109,7 @@ func lsCmd(dockerCli command.Cli) *cobra.Command { RunE: func(cmd *cobra.Command, args []string) error { return runLs(cmd.Context(), dockerCli, options) }, - ValidArgsFunction: completion.Disable, + ValidArgsFunction: cobrautil.DisableCompletion, DisableFlagsInUseLine: true, } diff --git a/commands/prune.go b/commands/prune.go index fd8293b82624..82a639cd4139 100644 --- a/commands/prune.go +++ b/commands/prune.go @@ -12,7 +12,7 @@ import ( "time" "github.com/docker/buildx/builder" - "github.com/docker/buildx/util/cobrautil/completion" + "github.com/docker/buildx/util/cobrautil" "github.com/docker/cli/cli" "github.com/docker/cli/cli/command" "github.com/docker/cli/opts" @@ -177,7 +177,7 @@ func pruneCmd(dockerCli command.Cli, rootOpts *rootOptions) *cobra.Command { options.builder = rootOpts.builder return runPrune(cmd.Context(), dockerCli, options) }, - ValidArgsFunction: completion.Disable, + ValidArgsFunction: cobrautil.DisableCompletion, DisableFlagsInUseLine: true, } diff --git a/commands/rm.go b/commands/rm.go index f14c1d2500c6..69bf988f64d7 100644 --- a/commands/rm.go +++ b/commands/rm.go @@ -8,7 +8,6 @@ import ( "github.com/docker/buildx/builder" "github.com/docker/buildx/store" "github.com/docker/buildx/store/storeutil" - "github.com/docker/buildx/util/cobrautil/completion" "github.com/docker/cli/cli/command" "github.com/pkg/errors" "github.com/spf13/cobra" @@ -118,7 +117,7 @@ func rmCmd(dockerCli command.Cli, rootOpts *rootOptions) *cobra.Command { } return runRm(cmd.Context(), dockerCli, options) }, - ValidArgsFunction: completion.BuilderNames(dockerCli), + ValidArgsFunction: builderNamesCompletion(dockerCli), DisableFlagsInUseLine: true, } diff --git a/commands/root.go b/commands/root.go index ee658bbcbf74..13b23ebd3fd9 100644 --- a/commands/root.go +++ b/commands/root.go @@ -3,12 +3,15 @@ package commands import ( "fmt" "os" + "strings" "time" + "github.com/docker/buildx/builder" historycmd "github.com/docker/buildx/commands/history" imagetoolscmd "github.com/docker/buildx/commands/imagetools" policycmd "github.com/docker/buildx/commands/policy" - "github.com/docker/buildx/util/cobrautil/completion" + "github.com/docker/buildx/store/storeutil" + "github.com/docker/buildx/util/cobrautil" "github.com/docker/buildx/util/confutil" "github.com/docker/buildx/util/logutil" "github.com/docker/cli-docs-tool/annotation" @@ -135,7 +138,7 @@ func addCommands(cmd *cobra.Command, opts *rootOptions, dockerCli command.Cli) { cmd.RegisterFlagCompletionFunc( //nolint:errcheck "builder", - completion.BuilderNames(dockerCli), + builderNamesCompletion(dockerCli), ) } @@ -147,3 +150,24 @@ func rootFlags(options *rootOptions, flags *pflag.FlagSet) { func setBuilderStatusTimeoutFlag(flags *pflag.FlagSet, target *time.Duration) { flags.DurationVar(target, "timeout", 20*time.Second, "Override the default timeout for loading builder status") } + +func builderNamesCompletion(dockerCli command.Cli) cobrautil.ValidArgsFn { + return func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { + txn, release, err := storeutil.GetStore(dockerCli) + if err != nil { + return nil, cobra.ShellCompDirectiveError + } + defer release() + builders, err := builder.GetBuilders(dockerCli, txn) + if err != nil { + return nil, cobra.ShellCompDirectiveError + } + var filtered []string + for _, b := range builders { + if toComplete == "" || strings.HasPrefix(b.Name, toComplete) { + filtered = append(filtered, b.Name) + } + } + return filtered, cobra.ShellCompDirectiveNoFileComp + } +} diff --git a/commands/stop.go b/commands/stop.go index 89c48f2c7674..dcd0a236d33e 100644 --- a/commands/stop.go +++ b/commands/stop.go @@ -4,7 +4,6 @@ import ( "context" "github.com/docker/buildx/builder" - "github.com/docker/buildx/util/cobrautil/completion" "github.com/docker/cli/cli" "github.com/docker/cli/cli/command" "github.com/spf13/cobra" @@ -44,7 +43,7 @@ func stopCmd(dockerCli command.Cli, rootOpts *rootOptions) *cobra.Command { } return runStop(cmd.Context(), dockerCli, options) }, - ValidArgsFunction: completion.BuilderNames(dockerCli), + ValidArgsFunction: builderNamesCompletion(dockerCli), DisableFlagsInUseLine: true, } diff --git a/commands/uninstall.go b/commands/uninstall.go index 29b3dc32419e..423569c355fe 100644 --- a/commands/uninstall.go +++ b/commands/uninstall.go @@ -4,7 +4,6 @@ import ( "os" "github.com/docker/buildx/util/cobrautil" - "github.com/docker/buildx/util/cobrautil/completion" "github.com/docker/cli/cli" "github.com/docker/cli/cli/command" "github.com/docker/cli/cli/config" @@ -55,7 +54,7 @@ func uninstallCmd(dockerCli command.Cli) *cobra.Command { }, Deprecated: "use 'docker buildx' directly, without relying on the 'docker builder' alias", Hidden: true, - ValidArgsFunction: completion.Disable, + ValidArgsFunction: cobrautil.DisableCompletion, DisableFlagsInUseLine: true, } diff --git a/commands/use.go b/commands/use.go index 2a4a53681745..76aeb2915bc5 100644 --- a/commands/use.go +++ b/commands/use.go @@ -4,7 +4,6 @@ import ( "os" "github.com/docker/buildx/store/storeutil" - "github.com/docker/buildx/util/cobrautil/completion" "github.com/docker/buildx/util/dockerutil" "github.com/docker/cli/cli" "github.com/docker/cli/cli/command" @@ -71,7 +70,7 @@ func useCmd(dockerCli command.Cli, rootOpts *rootOptions) *cobra.Command { } return runUse(dockerCli, options) }, - ValidArgsFunction: completion.BuilderNames(dockerCli), + ValidArgsFunction: builderNamesCompletion(dockerCli), DisableFlagsInUseLine: true, } diff --git a/commands/version.go b/commands/version.go index fe6efd8a256e..83c46b721bf9 100644 --- a/commands/version.go +++ b/commands/version.go @@ -4,7 +4,6 @@ import ( "fmt" "github.com/docker/buildx/util/cobrautil" - "github.com/docker/buildx/util/cobrautil/completion" "github.com/docker/buildx/version" "github.com/docker/cli/cli" "github.com/docker/cli/cli/command" @@ -24,7 +23,7 @@ func versionCmd(dockerCli command.Cli) *cobra.Command { RunE: func(cmd *cobra.Command, args []string) error { return runVersion(dockerCli) }, - ValidArgsFunction: completion.Disable, + ValidArgsFunction: cobrautil.DisableCompletion, DisableFlagsInUseLine: true, } diff --git a/util/cobrautil/cobrautil.go b/util/cobrautil/cobrautil.go index 71633bb1d89d..94bbab07cc44 100644 --- a/util/cobrautil/cobrautil.go +++ b/util/cobrautil/cobrautil.go @@ -51,3 +51,10 @@ func MarkCommandExperimental(c *cobra.Command) { c.Annotations[annotationExperimentalCLI] = "" c.Short += " (EXPERIMENTAL)" } + +// ValidArgsFn defines a completion func to be returned to fetch completion options +type ValidArgsFn func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) + +func DisableCompletion(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { + return nil, cobra.ShellCompDirectiveNoSpace +} diff --git a/util/cobrautil/completion/completion.go b/util/cobrautil/completion/completion.go deleted file mode 100644 index 095cac521090..000000000000 --- a/util/cobrautil/completion/completion.go +++ /dev/null @@ -1,62 +0,0 @@ -package completion - -import ( - "strings" - - "github.com/docker/buildx/bake" - "github.com/docker/buildx/builder" - "github.com/docker/buildx/store/storeutil" - "github.com/docker/cli/cli/command" - "github.com/spf13/cobra" -) - -// ValidArgsFn defines a completion func to be returned to fetch completion options -type ValidArgsFn func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) - -func Disable(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { - return nil, cobra.ShellCompDirectiveNoSpace -} - -func BakeTargets(files []string) ValidArgsFn { - return func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { - f, err := bake.ReadLocalFiles(files, nil, nil) - if err != nil { - return nil, cobra.ShellCompDirectiveError - } - tgts, err := bake.ListTargets(f) - if err != nil { - return nil, cobra.ShellCompDirectiveError - } - var filtered []string - if toComplete == "" { - return tgts, cobra.ShellCompDirectiveNoFileComp - } - for _, tgt := range tgts { - if strings.HasPrefix(tgt, toComplete) { - filtered = append(filtered, tgt) - } - } - return filtered, cobra.ShellCompDirectiveNoFileComp - } -} - -func BuilderNames(dockerCli command.Cli) ValidArgsFn { - return func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { - txn, release, err := storeutil.GetStore(dockerCli) - if err != nil { - return nil, cobra.ShellCompDirectiveError - } - defer release() - builders, err := builder.GetBuilders(dockerCli, txn) - if err != nil { - return nil, cobra.ShellCompDirectiveError - } - var filtered []string - for _, b := range builders { - if toComplete == "" || strings.HasPrefix(b.Name, toComplete) { - filtered = append(filtered, b.Name) - } - } - return filtered, cobra.ShellCompDirectiveNoFileComp - } -}