github.com/pdmccormick/importable-docker-buildx@v0.0.0-20240426161518-e47091289030/util/cobrautil/completion/completion.go (about) 1 package completion 2 3 import ( 4 "strings" 5 6 "github.com/docker/buildx/bake" 7 "github.com/docker/buildx/builder" 8 "github.com/docker/buildx/store/storeutil" 9 "github.com/docker/cli/cli/command" 10 "github.com/spf13/cobra" 11 ) 12 13 // ValidArgsFn defines a completion func to be returned to fetch completion options 14 type ValidArgsFn func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) 15 16 func Disable(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { 17 return nil, cobra.ShellCompDirectiveNoSpace 18 } 19 20 func BakeTargets(files []string) ValidArgsFn { 21 return func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { 22 f, err := bake.ReadLocalFiles(files, nil, nil) 23 if err != nil { 24 return nil, cobra.ShellCompDirectiveError 25 } 26 tgts, err := bake.ListTargets(f) 27 if err != nil { 28 return nil, cobra.ShellCompDirectiveError 29 } 30 var filtered []string 31 if toComplete == "" { 32 return tgts, cobra.ShellCompDirectiveNoFileComp 33 } 34 for _, tgt := range tgts { 35 if strings.HasPrefix(tgt, toComplete) { 36 filtered = append(filtered, tgt) 37 } 38 } 39 return filtered, cobra.ShellCompDirectiveNoFileComp 40 } 41 } 42 43 func BuilderNames(dockerCli command.Cli) ValidArgsFn { 44 return func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { 45 txn, release, err := storeutil.GetStore(dockerCli) 46 if err != nil { 47 return nil, cobra.ShellCompDirectiveError 48 } 49 defer release() 50 builders, err := builder.GetBuilders(dockerCli, txn) 51 if err != nil { 52 return nil, cobra.ShellCompDirectiveError 53 } 54 var filtered []string 55 for _, b := range builders { 56 if toComplete == "" || strings.HasPrefix(b.Name, toComplete) { 57 filtered = append(filtered, b.Name) 58 } 59 } 60 return filtered, cobra.ShellCompDirectiveNoFileComp 61 } 62 }