feat(cli): new version format with commit hash and go version

This commit is contained in:
Hintay 2025-02-05 14:25:50 +09:00
parent 071c22a881
commit 07eba99f2b
No known key found for this signature in database
GPG key ID: 120FC7FF121F2F2D
5 changed files with 73 additions and 5 deletions

View file

@ -8,8 +8,10 @@ import (
"io/fs"
"log"
"os"
"os/exec"
"path"
"runtime"
"strings"
)
type VersionInfo struct {
@ -59,6 +61,14 @@ func main() {
log.Fatalf("Failed to parse JSON: %v", err)
}
// get current git commit hash
cmd := exec.Command("git", "-C", basePath, "rev-parse", "HEAD")
commitHash, err := cmd.Output()
if err != nil {
log.Printf("Failed to get git commit hash: %v", err)
commitHash = []byte("")
}
// Generate the version.gen.go file content
genContent := fmt.Sprintf(`// Code generated by cmd/version/generate.go; DO NOT EDIT.
@ -68,8 +78,9 @@ func init() {
Version = "%s"
BuildId = %d
TotalBuild = %d
Hash = "%s"
}
`, versionInfo.Version, versionInfo.BuildId, versionInfo.TotalBuild)
`, versionInfo.Version, versionInfo.BuildId, versionInfo.TotalBuild, strings.TrimRight(string(commitHash), "\r\n"))
genPath := path.Join(basePath, "internal/version/version.gen.go")
err = os.WriteFile(genPath, []byte(genContent), 0644)

View file

@ -2,7 +2,6 @@ package cmd
import (
"context"
"fmt"
"log"
"os"
@ -37,9 +36,8 @@ func NewAppCmd() *cli.Command {
Version: version.Version,
}
cli.VersionPrinter = func(cmd *cli.Command) {
fmt.Printf("%s (%d)\n", cmd.Root().Version, version.BuildId)
}
// Set the version printer
cli.VersionPrinter = VersionPrinter
if err := cmd.Run(context.Background(), os.Args); err != nil {
log.Fatal(err)

17
internal/cmd/version.go Normal file
View file

@ -0,0 +1,17 @@
package cmd
import (
"fmt"
"runtime"
"github.com/0xJacky/Nginx-UI/internal/helper"
"github.com/0xJacky/Nginx-UI/internal/version"
"github.com/urfave/cli/v3"
)
func VersionPrinter(cmd *cli.Command) {
fmt.Println(helper.Concat(
cmd.Root().Name, " ", cmd.Root().Version, " ", version.BuildId, "(", version.TotalBuild, ") ",
version.GetShortHash(), " (", runtime.Version(), " ", runtime.GOOS, "/", runtime.GOARCH, ")"))
fmt.Println(cmd.Root().Usage)
}

34
internal/helper/serial.go Normal file
View file

@ -0,0 +1,34 @@
package helper
import (
"fmt"
"strings"
)
func ToString(v interface{}) string {
if v == nil {
return ""
}
switch value := v.(type) {
case string:
return value
case *string:
return *value
case fmt.Stringer:
return value.String()
case error:
return value.Error()
default:
return fmt.Sprintf("%+v", value)
}
}
// Concat concatenates all input into a single string.
func Concat(v ...interface{}) string {
builder := strings.Builder{}
for _, value := range v {
builder.WriteString(ToString(value))
}
return builder.String()
}

View file

@ -4,6 +4,7 @@ var (
Version = ""
BuildId = 0
TotalBuild = 0
Hash = ""
)
type Info struct {
@ -24,3 +25,10 @@ func GetVersionInfo() *Info {
}
return versionInfo
}
func GetShortHash() string {
if Hash != "" {
return Hash[:8]
}
return ""
}