github.com/saucelabs/saucectl@v0.175.1/internal/cmd/apit/getvariable.go (about) 1 package apit 2 3 import ( 4 "context" 5 "errors" 6 "fmt" 7 8 cmds "github.com/saucelabs/saucectl/internal/cmd" 9 "github.com/saucelabs/saucectl/internal/http" 10 "github.com/saucelabs/saucectl/internal/segment" 11 "github.com/saucelabs/saucectl/internal/usage" 12 "github.com/spf13/cobra" 13 "golang.org/x/text/cases" 14 "golang.org/x/text/language" 15 ) 16 17 func GetVariableCommand() *cobra.Command { 18 cmd := &cobra.Command{ 19 Use: "get-variable NAME [--project PROJECT_NAME]", 20 Short: "Get a vault variable", 21 Long: `Get a variable value from a project's vault. 22 23 Use [--project] to specify the project by its name or run without [--project] to choose from a list of projects.`, 24 SilenceUsage: true, 25 Args: func(cmd *cobra.Command, args []string) error { 26 if len(args) == 0 || args[0] == "" { 27 return errors.New("no variable name specified") 28 } 29 return nil 30 }, 31 PreRunE: func(cmd *cobra.Command, args []string) error { 32 err := http.CheckProxy() 33 if err != nil { 34 return fmt.Errorf("invalid HTTP_PROXY value") 35 } 36 37 tracker := segment.DefaultTracker 38 39 go func() { 40 tracker.Collect( 41 cases.Title(language.English).String(cmds.FullName(cmd)), 42 usage.Properties{}.SetFlags(cmd.Flags()), 43 ) 44 _ = tracker.Close() 45 }() 46 return nil 47 }, 48 RunE: func(cmd *cobra.Command, args []string) error { 49 name := args[0] 50 51 vault, err := apitesterClient.GetVault(context.Background(), selectedProject.Hooks[0].Identifier) 52 if err != nil { 53 return err 54 } 55 56 for _, v := range vault.Variables { 57 if v.Name == name { 58 fmt.Println(v.Value) 59 return nil 60 } 61 } 62 63 return fmt.Errorf("project %q has no vault variable with name %q", selectedProject.ProjectMeta.Name, name) 64 }, 65 } 66 67 return cmd 68 }