github.com/lkingland/gridd@v0.0.0-20230313082622-f3ae21fe9d22/cmd/gridctl/main.go (about) 1 package main 2 3 import ( 4 "flag" 5 "fmt" 6 "os" 7 "strconv" 8 "strings" 9 ) 10 11 var usage = `gridctl 12 13 Interact with the Grid. 14 ` 15 var ( 16 Version = flag.Bool("version", false, "Print version [$GRIDCTL_VERSION]") 17 Verbose = flag.Bool("verbose", false, "Print verbose logs [$GRIDCTL_VERBOSE]") 18 19 date string 20 vers string 21 hash string 22 ) 23 24 func parseEnv() { 25 parseBool("GRIDCTL_VERSION", Version) 26 parseBool("GRIDCTL_VERBOSE", Verbose) 27 } 28 29 func printCfg() { 30 fmt.Printf("GRIDCTL_VERSION=%v\n", *Version) 31 fmt.Printf("GRIDCTL_VERBOSE=%v\n", *Verbose) 32 } 33 34 func main() { 35 flag.Usage = func() { 36 fmt.Fprintln(os.Stderr, usage) 37 flag.PrintDefaults() 38 } 39 parseEnv() 40 flag.Parse() 41 42 if *Verbose { 43 printCfg() 44 } 45 46 if *Version || (len(os.Args) > 1 && os.Args[1] == "version") { 47 fmt.Println(version()) 48 return 49 } 50 51 if err := run(); err != nil { 52 fmt.Fprintln(os.Stderr, err) 53 os.Exit(1) 54 } 55 } 56 57 func run() (err error) { 58 fmt.Println("start", version()) 59 60 // TODO refactor as a CLI app with an instance of a Grid Client. 61 62 return nil 63 } 64 65 func parseBool(key string, value *bool) { 66 if val, ok := os.LookupEnv(key); ok { 67 b, err := strconv.ParseBool(val) 68 if err != nil { 69 panic(err) 70 } 71 *value = b 72 } 73 } 74 75 func version() string { 76 // If 'vers' is not a semver already, then the binary was built either 77 // from an untagged git commit or was built directly from source 78 // (set semver to v0.0.0) 79 80 var elements = []string{} 81 if strings.HasPrefix(vers, "v") { 82 elements = append(elements, vers) // built via make with a tagged commit 83 } else { 84 elements = append(elements, "v0.0.0") // from source or untagged commit 85 } 86 87 if date != "" { 88 elements = append(elements, date) 89 } 90 91 if hash != "" { 92 elements = append(elements, hash) 93 } 94 95 return strings.Join(elements, "-") 96 97 }