diff --git a/go.work b/go.work index ce1770c8e..f44d8ff1d 100644 --- a/go.work +++ b/go.work @@ -1,4 +1,4 @@ -go 1.20 +go 1.21.0 use ( . @@ -7,5 +7,6 @@ use ( ./tools/imctl ./tools/infra ./tools/ncpu + ./tools/versionchecker ./tools/yamlfmt ) diff --git a/tools/versionchecker/go.mod b/tools/versionchecker/go.mod new file mode 100644 index 000000000..4f1509de1 --- /dev/null +++ b/tools/versionchecker/go.mod @@ -0,0 +1,3 @@ +module github.com/OpenIMSDK/Open-IM-Server/tools/versionchecker + +go 1.21.0 diff --git a/tools/versionchecker/versionchecker.go b/tools/versionchecker/versionchecker.go new file mode 100644 index 000000000..ac1b5d2c9 --- /dev/null +++ b/tools/versionchecker/versionchecker.go @@ -0,0 +1,101 @@ +package main + +import ( + "bytes" + "fmt" + "os/exec" + "runtime" + "time" +) + +func executeCommand(cmdName string, args ...string) (string, error) { + cmd := exec.Command(cmdName, args...) + var out bytes.Buffer + var stderr bytes.Buffer + cmd.Stdout = &out + cmd.Stderr = &stderr + + err := cmd.Run() + if err != nil { + return "", fmt.Errorf("Error executing %s: %v", cmdName, err) + } + return out.String(), nil +} + +func printTime() string { + currentTime := time.Now() + + // 使用 Format 函数以优雅的方式格式化日期和时间 + // 2006-01-02 15:04:05 是 Go 中的标准时间格式 + formattedTime := currentTime.Format("2006-01-02 15:04:05") + + return fmt.Sprintf("Current Date & Time:", formattedTime) +} + +func getGoVersion() string { + version := runtime.Version() + goos := runtime.GOOS + goarch := runtime.GOARCH + return fmt.Sprintf("Go Version: %s\nOS: %s\nArchitecture: %s", version, goos, goarch) +} + +func getDockerVersion() string { + version, err := executeCommand("docker", "--version") + if err != nil { + return "Docker is not installed. Please install it to get the version." + } + return version +} + +func getDockerComposeVersion() string { + version, err := executeCommand("docker-compose", "--version") + if err != nil { + return "Docker Compose is not installed. Please install it to get the version." + } + return version +} + +func getKubernetesVersion() string { + version, err := executeCommand("kubectl", "version", "--client", "--short") + if err != nil { + return "Kubernetes is not installed. Please install it to get the version." + } + return version +} + +func getGitVersion() string { + version, err := executeCommand("git", "branch", "--show-current") + if err != nil { + return "Git is not installed. Please install it to get the version." + } + return version +} + +// NOTE: You'll need to provide appropriate commands for OpenIM versions. +func getOpenIMServerVersion() string { + // Placeholder + return "OpenIM Server: v3.2" +} + +func getOpenIMClientVersion() string { + // Placeholder + return "OpenIM Client: v3.2" +} + +func main() { + fmt.Println(printTime()) + fmt.Println("# Diagnostic Tool Result\n") + fmt.Println("## Go Version") + fmt.Println(getGoVersion()) + fmt.Println("## Branch Type") + fmt.Println(getGitVersion()) + fmt.Println("## Docker Version") + fmt.Println(getDockerVersion()) + fmt.Println("## Docker Compose Version") + fmt.Println(getDockerComposeVersion()) + fmt.Println("## Kubernetes Version") + fmt.Println(getKubernetesVersion()) + fmt.Println("## OpenIM Versions") + fmt.Println(getOpenIMServerVersion()) + fmt.Println(getOpenIMClientVersion()) +}