From b5f091b9749db5c843d770c3eba321fcc90cb13e Mon Sep 17 00:00:00 2001 From: "exe.dev user" Date: Tue, 21 Apr 2026 14:56:41 +0000 Subject: [PATCH] Add -version flag to CLI and wish binaries Co-authored-by: Shelley --- cmd/wish/main.go | 30 ++++++++++++++++++++++++++++++ main.go | 27 +++++++++++++++++++++++++++ 2 files changed, 57 insertions(+) diff --git a/cmd/wish/main.go b/cmd/wish/main.go index ab5f013..8590c6f 100644 --- a/cmd/wish/main.go +++ b/cmd/wish/main.go @@ -2,10 +2,14 @@ package main import ( "context" + "encoding/json" "errors" + "flag" + "fmt" "net" "os" "os/signal" + "runtime/debug" "syscall" "time" @@ -27,6 +31,32 @@ const ( ) func main() { + version := flag.Bool("version", false, "Display tool version info (JSON)") + flag.Parse() + + if *version { + info, ok := debug.ReadBuildInfo() + if !ok { + fmt.Println("Error reading build info") + os.Exit(1) + } + settings := make(map[string]string, len(info.Settings)) + for _, pair := range info.Settings { + settings[pair.Key] = pair.Value + } + b, err := json.MarshalIndent(map[string]any{ + "go": info.GoVersion, + "path": info.Path, + "settings": settings, + }, "", "\t") + if err != nil { + fmt.Printf("Error marshaling build info: %v\n", err) + os.Exit(1) + } + fmt.Println(string(b)) + os.Exit(0) + } + // Key is coupled to fly.toml. hostKeyPath, ok := os.LookupEnv("SSH_KEY_PATH") if !ok { diff --git a/main.go b/main.go index 3d8cfd6..ca2e968 100644 --- a/main.go +++ b/main.go @@ -1,8 +1,11 @@ package main import ( + "encoding/json" "flag" "fmt" + "os" + "runtime/debug" "sort" "time" @@ -31,6 +34,7 @@ The following options are available: ` func main() { + version := flag.Bool("version", false, "Display tool version info (JSON)") var filenameFlag = flag.String("file", "", ".boggle file to configure game") var boardFlag = flag.String("board", "", "serialized board string") var boardUrlFlag = flag.String("url", "", "web URL of a public .boggle file to configure game") @@ -45,6 +49,29 @@ func main() { } flag.Parse() + if *version { + info, ok := debug.ReadBuildInfo() + if !ok { + fmt.Println("Error reading build info") + os.Exit(1) + } + settings := make(map[string]string, len(info.Settings)) + for _, pair := range info.Settings { + settings[pair.Key] = pair.Value + } + b, err := json.MarshalIndent(map[string]any{ + "go": info.GoVersion, + "path": info.Path, + "settings": settings, + }, "", "\t") + if err != nil { + fmt.Printf("Error marshaling build info: %v\n", err) + os.Exit(1) + } + fmt.Println(string(b)) + return + } + dice := boggle.ClassicDice if *newFlag { dice = boggle.NewDice