github.com/grafana/tanka@v0.26.1-0.20240506093700-c22cfc35c21a/cmd/tk/args.go (about) 1 package main 2 3 import ( 4 "errors" 5 "os" 6 "path/filepath" 7 8 "github.com/go-clix/cli" 9 "github.com/posener/complete" 10 11 "github.com/grafana/tanka/pkg/jsonnet/jpath" 12 "github.com/grafana/tanka/pkg/tanka" 13 ) 14 15 var workflowArgs = cli.Args{ 16 Validator: cli.ValidateExact(1), 17 Predictor: cli.PredictFunc(func(args complete.Args) []string { 18 pwd, err := os.Getwd() 19 if err != nil { 20 return nil 21 } 22 23 root, err := jpath.FindRoot(pwd) 24 if err != nil { 25 return nil 26 } 27 28 envs, err := tanka.FindEnvs(pwd, tanka.FindOpts{}) 29 if err != nil && !errors.As(err, &tanka.ErrParallel{}) { 30 return nil 31 } 32 33 var reldirs []string 34 for _, env := range envs { 35 path := filepath.Join(root, env.Metadata.Namespace) // namespace == path on disk 36 reldir, err := filepath.Rel(pwd, path) 37 if err == nil { 38 reldirs = append(reldirs, reldir) 39 } 40 } 41 42 if len(reldirs) != 0 { 43 return reldirs 44 } 45 46 return complete.PredictFiles("*").Predict(args) 47 }), 48 }