package main import ( "errors" "fmt" "log" "os" "runtime" selfupdate "github.com/creativeprojects/go-selfupdate" ) //go:generate sh injectGitVars.sh var version = "v0.1.0" func main() { if len(os.Args) < 2 { fmt.Println("provide a command") os.Exit(1) } else if os.Args[1] == "upgrade" { fmt.Print("Trying Upgrade... ") update(gitTag) } else if os.Args[1] == "version" { fmt.Print("Version ") fmt.Println(gitTag) } else { fmt.Println("provide a valid command (version or upgrade)") } } func update(version string) error { latest, found, err := selfupdate.DetectLatest("lbsadmin/goselfupdatetest") if err != nil { return fmt.Errorf("error occurred while detecting version: %v", err) } if !found { return fmt.Errorf("latest version for %s/%s could not be found from github repository", runtime.GOOS, runtime.GOARCH) } if latest.LessOrEqual(version) { log.Printf("Current version (%s) is the latest", version) return nil } exe, err := os.Executable() if err != nil { return errors.New("could not locate executable path") } if err := selfupdate.UpdateTo(latest.AssetURL, latest.AssetName, exe); err != nil { return fmt.Errorf("error occurred while updating binary: %v", err) } log.Printf("Successfully updated to version %s", latest.Version()) return nil }