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  }