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  }