From a44accf12f4320adf0825c5a0f3a6b446f7c4ed9 Mon Sep 17 00:00:00 2001 From: krakenhavoc Date: Mon, 13 Apr 2026 12:23:19 +0000 Subject: [PATCH] chore: migrate from stdlib flag to pflag for POSIX-style double-dash flags Replace Go's standard library flag package with spf13/pflag so all subcommand flags use the conventional --double-dash syntax instead of single-dash. This aligns the CLI with POSIX/GNU conventions used by tools like gh, docker, and kubectl. --- cmd/krakenkey/main.go | 16 +++++++++------- go.mod | 2 ++ go.sum | 2 ++ 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/cmd/krakenkey/main.go b/cmd/krakenkey/main.go index 44e948b..67a75a6 100644 --- a/cmd/krakenkey/main.go +++ b/cmd/krakenkey/main.go @@ -4,7 +4,6 @@ import ( "bufio" "context" "errors" - "flag" "fmt" "os" "runtime" @@ -12,6 +11,8 @@ import ( "strings" "time" + flag "github.com/spf13/pflag" + "github.com/krakenkey/cli/internal/api" "github.com/krakenkey/cli/internal/account" "github.com/krakenkey/cli/internal/auth" @@ -49,6 +50,7 @@ func run() int { // Global flags. globalFS := flag.NewFlagSet("krakenkey", flag.ContinueOnError) globalFS.SetOutput(os.Stderr) + globalFS.SetInterspersed(false) var ( apiURL string apiKey string @@ -71,11 +73,9 @@ func run() int { } // --version flag. - if v, _ := globalFS.Lookup("version").Value.(interface{ IsBoolFlag() bool }); v != nil { - if globalFS.Lookup("version").Value.String() == "true" { - fmt.Printf("krakenkey-cli %s\n", version) - return 0 - } + if versionFlag, _ := globalFS.GetBool("version"); versionFlag { + fmt.Printf("krakenkey-cli %s\n", version) + return 0 } remaining := globalFS.Args() @@ -166,8 +166,9 @@ func mustInt(fs *flag.FlagSet, s, name string) (int, bool) { // stringsFlag accumulates repeated flag values (e.g. --san a --san b). type stringsFlag []string -func (f *stringsFlag) String() string { return strings.Join(*f, ",") } +func (f *stringsFlag) String() string { return strings.Join(*f, ",") } func (f *stringsFlag) Set(v string) error { *f = append(*f, v); return nil } +func (f *stringsFlag) Type() string { return "value" } // triBoolFlag is a *bool flag that is nil when not specified. type triBoolFlag struct{ val *bool } @@ -187,6 +188,7 @@ func (f *triBoolFlag) Set(s string) error { return nil } func (f *triBoolFlag) IsBoolFlag() bool { return true } +func (f *triBoolFlag) Type() string { return "bool" } // ── auth ───────────────────────────────────────────────────────────────────── diff --git a/go.mod b/go.mod index 0a05b5d..a91a776 100644 --- a/go.mod +++ b/go.mod @@ -3,3 +3,5 @@ module github.com/krakenkey/cli go 1.26 require gopkg.in/yaml.v3 v3.0.1 + +require github.com/spf13/pflag v1.0.10 // indirect diff --git a/go.sum b/go.sum index a62c313..bea0ee8 100644 --- a/go.sum +++ b/go.sum @@ -1,3 +1,5 @@ +github.com/spf13/pflag v1.0.10 h1:4EBh2KAYBwaONj6b2Ye1GiHfwjqyROoF4RwYO+vPwFk= +github.com/spf13/pflag v1.0.10/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=