Bläddra i källkod

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

Hintay 2 månader sedan
förälder
incheckning
07eba99f2b
5 ändrade filer med 73 tillägg och 5 borttagningar
  1. 12 1
      cmd/version/generate.go
  2. 2 4
      internal/cmd/main.go
  3. 17 0
      internal/cmd/version.go
  4. 34 0
      internal/helper/serial.go
  5. 8 0
      internal/version/version.go

+ 12 - 1
cmd/version/generate.go

@@ -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)

+ 2 - 4
internal/cmd/main.go

@@ -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 - 0
internal/cmd/version.go

@@ -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 - 0
internal/helper/serial.go

@@ -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 - 0
internal/version/version.go

@@ -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 ""
+}