Skip to content

Commit 1d282c0

Browse files
committed
fix: report module version for go install
1 parent 59b7f62 commit 1d282c0

2 files changed

Lines changed: 43 additions & 1 deletion

File tree

internal/cli/root.go

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"fmt"
77
"io"
88
"os"
9+
"runtime/debug"
910
"strings"
1011
"time"
1112

@@ -43,7 +44,7 @@ func newRootCommand(stdout, stderr io.Writer) *cobra.Command {
4344
root := &cobra.Command{
4445
Use: "heybox",
4546
Short: "搜索小黑盒社区内容",
46-
Version: version,
47+
Version: buildVersion(),
4748
SilenceUsage: true,
4849
SilenceErrors: true,
4950
}
@@ -54,6 +55,24 @@ func newRootCommand(stdout, stderr io.Writer) *cobra.Command {
5455
return root
5556
}
5657

58+
func buildVersion() string {
59+
info, ok := debug.ReadBuildInfo()
60+
if !ok {
61+
return version
62+
}
63+
return resolveVersion(version, info)
64+
}
65+
66+
func resolveVersion(injected string, info *debug.BuildInfo) string {
67+
if injected != "dev" {
68+
return injected
69+
}
70+
if info != nil && info.Main.Version != "" && info.Main.Version != "(devel)" {
71+
return strings.TrimPrefix(info.Main.Version, "v")
72+
}
73+
return injected
74+
}
75+
5776
func newCompletionCommand(root *cobra.Command, stdout io.Writer) *cobra.Command {
5877
return &cobra.Command{
5978
Use: "completion [bash|zsh|fish|powershell]",

internal/cli/root_test.go

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,33 @@ package cli
22

33
import (
44
"bytes"
5+
"runtime/debug"
56
"strings"
67
"testing"
78
)
89

10+
func TestResolveVersion(t *testing.T) {
11+
t.Parallel()
12+
tests := []struct {
13+
name string
14+
injected string
15+
info *debug.BuildInfo
16+
want string
17+
}{
18+
{name: "release injection wins", injected: "1.2.3", info: &debug.BuildInfo{Main: debug.Module{Version: "v9.9.9"}}, want: "1.2.3"},
19+
{name: "go install module version", injected: "dev", info: &debug.BuildInfo{Main: debug.Module{Version: "v1.2.3"}}, want: "1.2.3"},
20+
{name: "local build", injected: "dev", info: &debug.BuildInfo{Main: debug.Module{Version: "(devel)"}}, want: "dev"},
21+
}
22+
for _, test := range tests {
23+
t.Run(test.name, func(t *testing.T) {
24+
t.Parallel()
25+
if got := resolveVersion(test.injected, test.info); got != test.want {
26+
t.Fatalf("resolveVersion() = %q, want %q", got, test.want)
27+
}
28+
})
29+
}
30+
}
31+
932
func TestHelp(t *testing.T) {
1033
t.Parallel()
1134
var stdout, stderr bytes.Buffer

0 commit comments

Comments
 (0)