From 9e1c50bbd55fad06ce3890a3498be902fecb2514 Mon Sep 17 00:00:00 2001 From: kxue43 Date: Sat, 9 Aug 2025 11:21:15 -0400 Subject: [PATCH 1/3] feat: Add `--version` flag to `toolkit` command. --- cmd/toolkit/main.go | 5 ++++- version/version.go | 40 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 version/version.go diff --git a/cmd/toolkit/main.go b/cmd/toolkit/main.go index 4501ac0..a70d91d 100644 --- a/cmd/toolkit/main.go +++ b/cmd/toolkit/main.go @@ -4,6 +4,7 @@ import ( "github.com/alecthomas/kong" "github.com/kxue43/cli-toolkit/scaffold" + "github.com/kxue43/cli-toolkit/version" ) func main() { @@ -11,14 +12,16 @@ func main() { StartTsCdkProject scaffold.TsCdkProjectCmd `cmd:"" name:"start-ts-cdk-project" help:"Start a TypeScript CDK project in the current directory."` StartPythonProject scaffold.PythonProjectCmd `cmd:"" name:"start-python-project" help:"Start a Python project in the current directory."` StartGoProject scaffold.GoProjectCmd `cmd:"" name:"start-go-project" help:"Start a Go project in the current directory."` + Version kong.VersionFlag `name:"version" short:"v" help:"Show version information and quit."` } ctx := kong.Parse( &cli, kong.Name("toolkit"), - kong.Description("Personal CLI toolkit."), + kong.Description("Create starter files for Go, Python or AWS CDK projects."), kong.UsageOnError(), kong.ConfigureHelp(kong.HelpOptions{Compact: true}), + kong.Vars{"version": version.FromBuildInfo()}, ) err := ctx.Run() diff --git a/version/version.go b/version/version.go new file mode 100644 index 0000000..b87262d --- /dev/null +++ b/version/version.go @@ -0,0 +1,40 @@ +package version + +import ( + "fmt" + "runtime/debug" +) + +func FromBuildInfo() (version string) { + version = "unavailable" + + info, ok := debug.ReadBuildInfo() + if !ok { + return version + } + + var vcs, revision, ts string + + for i := range info.Settings { + switch info.Settings[i].Key { + case "vcs": + vcs = info.Settings[i].Value + case "vcs.revision": + revision = info.Settings[i].Value + case "vcs.time": + ts = info.Settings[i].Value + default: + continue + } + } + + if revision == "" { + return version + } + + if ts == "" { + return fmt.Sprintf("built from %s revision %s", vcs, revision) + } + + return fmt.Sprintf("built from %s revision %s at %s", vcs, revision, ts) +} From f7572f4700a5c7d742132fa7b9ca3aad606faaf6 Mon Sep 17 00:00:00 2001 From: kxue43 Date: Sat, 9 Aug 2025 11:45:51 -0400 Subject: [PATCH 2/3] feat: Add `-version` flag to three more commands. --- cmd/toolkit-assume-role/main.go | 15 +++++++++++++-- cmd/toolkit-serve-static/main.go | 16 ++++++++++++++-- cmd/toolkit-show-md/main.go | 17 +++++++++++++++-- 3 files changed, 42 insertions(+), 6 deletions(-) diff --git a/cmd/toolkit-assume-role/main.go b/cmd/toolkit-assume-role/main.go index 1e2b70d..9bf8d91 100644 --- a/cmd/toolkit-assume-role/main.go +++ b/cmd/toolkit-assume-role/main.go @@ -7,17 +7,21 @@ import ( "os" "github.com/kxue43/cli-toolkit/auth" + "github.com/kxue43/cli-toolkit/version" ) var ( - logger = log.New(os.Stderr, "toolkit-assume-role: ", 0) + logger = log.New(os.Stderr, "toolkit-assume-role: ", 0) + roleArn string mfaSerial string profile string region string roleSessionName string durationSeconds int - helpMsg = `Usage: %s -mfa-serial=STRING -profile=STRING [flags] + showVersion bool + + helpMsg = `Usage: %s -mfa-serial=STRING -profile=STRING [flags] Run AWS CLI credential process by assuming a role. @@ -34,6 +38,7 @@ func registerFlagsAndHelp() { flag.StringVar(®ion, "region", "us-east-1", "The regional STS service endpoint to call.") flag.StringVar(&roleSessionName, "role-session-name", "ToolkitCLI", "Role session name.") flag.IntVar(&durationSeconds, "duration-seconds", 3600, "Role session duration seconds.") + flag.BoolVar(&showVersion, "version", false, "Show version information and quit.") flag.Usage = func() { _, _ = fmt.Fprintf(flag.CommandLine.Output(), helpMsg, os.Args[0]) @@ -67,6 +72,12 @@ func main() { flag.Parse() + if showVersion { + _, _ = fmt.Fprintln(flag.CommandLine.Output(), version.FromBuildInfo()) + + os.Exit(0) + } + validateInputs() tty, err := os.OpenFile("/dev/tty", os.O_RDWR|os.O_SYNC, 0600) diff --git a/cmd/toolkit-serve-static/main.go b/cmd/toolkit-serve-static/main.go index 4abd1db..ba6134d 100644 --- a/cmd/toolkit-serve-static/main.go +++ b/cmd/toolkit-serve-static/main.go @@ -6,11 +6,16 @@ import ( "log" "net/http" "os" + + "github.com/kxue43/cli-toolkit/version" ) var ( - port string - logger = log.New(os.Stderr, "toolkit-serve-static: ", 0) + logger = log.New(os.Stderr, "toolkit-serve-static: ", 0) + + port string + showVersion bool + helpMsg = `Usage: %s [flags] Serve static contents from the folder. @@ -24,6 +29,7 @@ Flags: func main() { flag.StringVar(&port, "port", "8090", "HTTP port of the local static files server.") + flag.BoolVar(&showVersion, "version", false, "Show version information and quit.") flag.Usage = func() { _, _ = fmt.Fprintf(flag.CommandLine.Output(), helpMsg, os.Args[0]) @@ -32,6 +38,12 @@ func main() { flag.Parse() + if showVersion { + _, _ = fmt.Fprintln(flag.CommandLine.Output(), version.FromBuildInfo()) + + os.Exit(0) + } + args := flag.Args() if len(args) == 0 { logger.Fatalf("The argument is required.") diff --git a/cmd/toolkit-show-md/main.go b/cmd/toolkit-show-md/main.go index b766d6b..c04193e 100644 --- a/cmd/toolkit-show-md/main.go +++ b/cmd/toolkit-show-md/main.go @@ -13,11 +13,18 @@ import ( "github.com/pkg/browser" "github.com/yuin/goldmark" "github.com/yuin/goldmark/extension" + + "github.com/kxue43/cli-toolkit/version" ) var ( logger = log.New(os.Stderr, "toolkit-show-md: ", 0) + //go:embed .github.style.tmplt + gitHubMarkdownTemplate []byte + + showVersion bool + helpMsg = `Usage: %s Convert Markdown file to GitHub style HTML and display HTML in the default browser. @@ -25,8 +32,6 @@ Convert Markdown file to GitHub style HTML and display HTML in the default brows Arguments: Path to the Markdown file to convert. ` - //go:embed .github.style.tmplt - gitHubMarkdownTemplate []byte ) func main() { @@ -34,12 +39,20 @@ func main() { var err error + flag.BoolVar(&showVersion, "version", false, "Show version information and quit.") + flag.Usage = func() { _, _ = fmt.Fprintf(flag.CommandLine.Output(), helpMsg, os.Args[0]) } flag.Parse() + if showVersion { + _, _ = fmt.Fprintln(flag.CommandLine.Output(), version.FromBuildInfo()) + + os.Exit(0) + } + args := flag.Args() if len(args) != 1 { logger.Fatalln("Exactly one argument is permitted and it is .") From 670736603bf6b49d6c83cba4b496d48bc466bfa0 Mon Sep 17 00:00:00 2001 From: kxue43 Date: Sat, 9 Aug 2025 11:49:57 -0400 Subject: [PATCH 3/3] fix: `toolkit-show-md` now prints flag help msg. --- cmd/toolkit-show-md/main.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/cmd/toolkit-show-md/main.go b/cmd/toolkit-show-md/main.go index c04193e..aec6371 100644 --- a/cmd/toolkit-show-md/main.go +++ b/cmd/toolkit-show-md/main.go @@ -31,6 +31,8 @@ Convert Markdown file to GitHub style HTML and display HTML in the default brows Arguments: Path to the Markdown file to convert. + +Flags: ` ) @@ -43,6 +45,7 @@ func main() { flag.Usage = func() { _, _ = fmt.Fprintf(flag.CommandLine.Output(), helpMsg, os.Args[0]) + flag.PrintDefaults() } flag.Parse()