Skip to content

Commit

Permalink
feat(cli): new version format with commit hash and go version
Browse files Browse the repository at this point in the history
  • Loading branch information
Hintay committed Feb 5, 2025
1 parent b1ba719 commit 62f1371
Show file tree
Hide file tree
Showing 5 changed files with 73 additions and 5 deletions.
13 changes: 12 additions & 1 deletion cmd/version/generate.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,10 @@ import (
"io/fs"
"log"
"os"
"os/exec"
"path"
"runtime"
"strings"
)

type VersionInfo struct {
Expand Down Expand Up @@ -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.
Expand All @@ -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)
Expand Down
6 changes: 2 additions & 4 deletions internal/cmd/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package cmd

import (
"context"
"fmt"
"log"
"os"

Expand Down Expand Up @@ -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)
Expand Down
17 changes: 17 additions & 0 deletions internal/cmd/version.go
Original file line number Diff line number Diff line change
@@ -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 changes: 34 additions & 0 deletions internal/helper/serial.go
Original file line number Diff line number Diff line change
@@ -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()
}
8 changes: 8 additions & 0 deletions internal/version/version.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ var (
Version = ""
BuildId = 0
TotalBuild = 0
Hash = ""
)

type Info struct {
Expand All @@ -24,3 +25,10 @@ func GetVersionInfo() *Info {
}
return versionInfo
}

func GetShortHash() string {
if Hash != "" {
return Hash[:8]
}
return ""
}

0 comments on commit 62f1371

Please sign in to comment.