github.com/lkingland/gridd@v0.0.0-20230313082622-f3ae21fe9d22/cmd/gridd/main.go (about)

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