11package cmd
22
33import (
4+ "errors"
5+ "fmt"
46 "os"
57
8+ errs "ld-cli/internal/errors"
9+
610 "github.com/spf13/cobra"
711 "github.com/spf13/viper"
812
913 "ld-cli/cmd/projects"
1014)
1115
1216var rootCmd = & cobra.Command {
13- Use : "ldcli" ,
14- Short : "LaunchDarkly CLI" ,
15- Long : "LaunchDarkly CLI to control your feature flags" ,
17+ Use : "ldcli" ,
18+ Short : "LaunchDarkly CLI" ,
19+ Long : "LaunchDarkly CLI to control your feature flags" ,
20+ Version : "0.0.1" , // TODO: set this based on release or use `cmd.SetVersionTemplate(s string)`
21+
22+ // Handle errors differently based on type.
23+ // We don't want to show the usage if the user has the right structure but invalid data such as
24+ // the wrong key.
25+ SilenceUsage : true ,
26+ SilenceErrors : true ,
1627}
1728
1829func Execute () {
1930 err := rootCmd .Execute ()
2031 if err != nil {
21- os .Exit (1 )
32+ switch {
33+ case errors .Is (err , errs .ErrInvalidBaseURI ):
34+ fmt .Fprintln (os .Stderr , err .Error ())
35+ case errors .Is (err , errs .ErrUnauthorized ):
36+ fmt .Fprintln (os .Stderr , err .Error ())
37+ default :
38+ fmt .Println (rootCmd .ErrPrefix (), err .Error ())
39+ fmt .Println (rootCmd .UsageString ())
40+ }
2241 }
2342}
2443
@@ -35,22 +54,29 @@ func init() {
3554 "" ,
3655 "LaunchDarkly personal access token" ,
3756 )
38- err := viper .BindPFlag ("accessToken" , rootCmd .PersistentFlags ().Lookup ("accessToken" ))
57+ err := rootCmd .MarkPersistentFlagRequired ("accessToken" )
58+ if err != nil {
59+ panic (err )
60+ }
61+ err = viper .BindPFlag ("accessToken" , rootCmd .PersistentFlags ().Lookup ("accessToken" ))
3962 if err != nil {
40- os . Exit ( 1 )
63+ panic ( err )
4164 }
65+
4266 rootCmd .PersistentFlags ().StringVarP (
4367 & baseURI ,
4468 "baseUri" ,
4569 "u" ,
46- "http ://localhost:3000 " ,
70+ "https ://app.launchdarkly.com " ,
4771 "LaunchDarkly base URI" ,
4872 )
4973 err = viper .BindPFlag ("baseUri" , rootCmd .PersistentFlags ().Lookup ("baseUri" ))
5074 if err != nil {
51- os . Exit ( 1 )
75+ panic ( err )
5276 }
5377
78+ rootCmd .SetErrPrefix ("" )
79+
5480 rootCmd .AddCommand (projects .NewProjectsCmd ())
5581 rootCmd .AddCommand (setupCmd )
5682}
0 commit comments