From d82944c6620bfa8c5ea12a9d079cbfadf6684455 Mon Sep 17 00:00:00 2001 From: Jesus Date: Wed, 28 May 2025 21:11:14 +0200 Subject: [PATCH 1/5] if version.txt is not detected, skipping update --- backend/cmd/main.go | 162 +++++++++++++++++++++++--------------------- updater/main.go | 2 +- 2 files changed, 84 insertions(+), 80 deletions(-) diff --git a/backend/cmd/main.go b/backend/cmd/main.go index 944ecf952..d0bde21b4 100644 --- a/backend/cmd/main.go +++ b/backend/cmd/main.go @@ -86,14 +86,16 @@ var playbackFile = flag.String("playback", "", "") var currentVersion string func main() { + checkUpdate := true versionFile := "VERSION.txt" versionData, err := os.ReadFile(versionFile) if err != nil { - fmt.Fprintf(os.Stderr, "Error reading version file (%s): %v\n", versionFile, err) - os.Exit(1) + fmt.Fprintf(os.Stderr, "Warning: error reading version file (%s): %v\n", versionFile, err) + checkUpdate = false + } else { + currentVersion = strings.TrimSpace(string(versionData)) } - currentVersion = strings.TrimSpace(string(versionData)) versionFlag := flag.Bool("version", false, "Show the backend version") flag.Parse() @@ -106,7 +108,6 @@ func main() { defer traceFile.Close() pidPath := path.Join(os.TempDir(), "backendPid") - createPid(pidPath) defer RemovePid(pidPath) @@ -122,86 +123,62 @@ func main() { runtime.SetBlockProfileRate(*blockprofile) config := getConfig("./config.toml") - latestVersionStr, err := getLatestVersionFromGitHub() - if err != nil { - fmt.Println("Warning:", err) - fmt.Println("Skipping version check. Proceeding with the current version:", currentVersion) - } else { - current, err := version.NewVersion(currentVersion) - if err != nil { - fmt.Println("Invalid current version:", err) - return - } - latest, err := version.NewVersion(latestVersionStr) + var latestVersionStr string + if checkUpdate { + latestVersionStr, err = getLatestVersionFromGitHub() if err != nil { - fmt.Println("Invalid latest version:", err) - return + fmt.Println("Warning:", err) + fmt.Println("Skipping version check. Proceeding with the current version:", currentVersion) + checkUpdate = false } + } - if latest.GreaterThan(current) { - fmt.Printf("There is a new version available: %s (current version: %s)\n", latest, current) - fmt.Print("Do you want to update? (y/n): ") - - var response string - fmt.Scanln(&response) - - if strings.ToLower(response) == "y" { - fmt.Println("Launching updater to update the backend...") - - // Get the directory of the current executable - execPath, err := os.Executable() - if err != nil { - fmt.Fprintf(os.Stderr, "Error getting executable path: %v\n", err) - os.Exit(1) - } - execDir := filepath.Dir(execPath) - - backendPath := filepath.Join(execDir, "..", "..", "backend") - - if _, err := os.Stat(backendPath); err == nil { - - fmt.Println("Backend folder detected. Building and launching updater...") - - updaterPath := filepath.Join(execDir, "..", "..", "updater") - - cmd := exec.Command("go", "build", "-o", filepath.Join(updaterPath, "updater.exe"), updaterPath) - cmd.Stdout = os.Stdout - cmd.Stderr = os.Stderr - if err := cmd.Run(); err != nil { - fmt.Fprintf(os.Stderr, "Error building updater: %v\n", err) - os.Exit(1) - } - - updaterExe := filepath.Join(updaterPath, "updater.exe") - cmd = exec.Command(updaterExe) - cmd.Dir = updaterPath - cmd.Stdout = os.Stdout - cmd.Stderr = os.Stderr - if err := cmd.Run(); err != nil { - fmt.Fprintf(os.Stderr, "Error launching updater: %v\n", err) - os.Exit(1) - } - } else { - - fmt.Println("Backend folder not detected. Launching existing updater...") - + if checkUpdate { + current, err := version.NewVersion(currentVersion) + if err != nil { + fmt.Println("Invalid current version:", err) + fmt.Println("Skipping version check. Proceeding with the current version:", currentVersion) + } else { + latest, err := version.NewVersion(latestVersionStr) + if err != nil { + fmt.Println("Invalid latest version:", err) + fmt.Println("Skipping version check. Proceeding with the current version:", currentVersion) + } else if latest.GreaterThan(current) { + fmt.Printf("There is a new version available: %s (current version: %s)\n", latest, current) + fmt.Print("Do you want to update? (y/n): ") + var response string + fmt.Scanln(&response) + if strings.ToLower(response) == "y" { + fmt.Println("Launching updater to update the backend...") + + // Get the directory of the current executable execPath, err := os.Executable() if err != nil { fmt.Fprintf(os.Stderr, "Error getting executable path: %v\n", err) os.Exit(1) } execDir := filepath.Dir(execPath) - - updaterExe := filepath.Join(execDir, "updater") - // En Windows el ejecutable lleva extensión .exe - if runtime.GOOS == "windows" { - updaterExe += ".exe" - } - if _, err := os.Stat(updaterExe); err == nil { - cmd := exec.Command(updaterExe) - cmd.Dir = execDir + backendPath := filepath.Join(execDir, "..", "..", "backend") + + if _, err := os.Stat(backendPath); err == nil { + + fmt.Println("Backend folder detected. Building and launching updater...") + + updaterPath := filepath.Join(execDir, "..", "..", "updater") + + cmd := exec.Command("go", "build", "-o", filepath.Join(updaterPath, "updater.exe"), updaterPath) + cmd.Stdout = os.Stdout + cmd.Stderr = os.Stderr + if err := cmd.Run(); err != nil { + fmt.Fprintf(os.Stderr, "Error building updater: %v\n", err) + os.Exit(1) + } + + updaterExe := filepath.Join(updaterPath, "updater.exe") + cmd = exec.Command(updaterExe) + cmd.Dir = updaterPath cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr if err := cmd.Run(); err != nil { @@ -209,16 +186,43 @@ func main() { os.Exit(1) } } else { - fmt.Fprintf(os.Stderr, "Updater not found: %s\n", updaterExe) - fmt.Println("Skipping update. Proceeding with the current version.") + + fmt.Println("Backend folder not detected. Launching existing updater...") + + execPath, err := os.Executable() + if err != nil { + fmt.Fprintf(os.Stderr, "Error getting executable path: %v\n", err) + os.Exit(1) + } + execDir := filepath.Dir(execPath) + + updaterExe := filepath.Join(execDir, "updater") + // En Windows el ejecutable lleva extensión .exe + if runtime.GOOS == "windows" { + updaterExe += ".exe" + } + + if _, err := os.Stat(updaterExe); err == nil { + cmd := exec.Command(updaterExe) + cmd.Dir = execDir + cmd.Stdout = os.Stdout + cmd.Stderr = os.Stderr + if err := cmd.Run(); err != nil { + fmt.Fprintf(os.Stderr, "Error launching updater: %v\n", err) + os.Exit(1) + } + } else { + fmt.Fprintf(os.Stderr, "Updater not found: %s\n", updaterExe) + fmt.Println("Skipping update. Proceeding with the current version.") + } } - } + } else { + fmt.Println("Skipping update. Proceeding with the current version.") + } } else { - fmt.Println("Skipping update. Proceeding with the current version.") + fmt.Printf("You are using the latest version: %s\n", current) } - } else { - fmt.Printf("You are using the latest version: %s\n", current) } } diff --git a/updater/main.go b/updater/main.go index 8e456b5c5..df07ebf5e 100644 --- a/updater/main.go +++ b/updater/main.go @@ -203,7 +203,7 @@ func extractBinaryFromZip(zipPath, binaryName string) (string, error) { for _, f := range r.File { baseName := filepath.Base(f.Name) - if baseName == binaryName || baseName == "VERSION.md" { + if baseName == binaryName || baseName == "VERSION.txt" { rc, err := f.Open() if err != nil { return "", err From a81334eeccdfbb4567f529129e3255ee42107cd1 Mon Sep 17 00:00:00 2001 From: Jesus Date: Wed, 28 May 2025 21:11:42 +0200 Subject: [PATCH 2/5] warning Message --- backend/cmd/main.go | 1 + 1 file changed, 1 insertion(+) diff --git a/backend/cmd/main.go b/backend/cmd/main.go index d0bde21b4..36e10a2fe 100644 --- a/backend/cmd/main.go +++ b/backend/cmd/main.go @@ -93,6 +93,7 @@ func main() { if err != nil { fmt.Fprintf(os.Stderr, "Warning: error reading version file (%s): %v\n", versionFile, err) checkUpdate = false + fmt.Println("Skipping version check. Proceeding with the current version.", currentVersion) } else { currentVersion = strings.TrimSpace(string(versionData)) } From 2f3596976e49962f6dc0c6374acfcb4b18523f1e Mon Sep 17 00:00:00 2001 From: Jesus Date: Thu, 29 May 2025 21:37:56 +0200 Subject: [PATCH 3/5] changed logic checkUpdate --- backend/cmd/main.go | 167 +++++++++++++++++++------------------------- 1 file changed, 71 insertions(+), 96 deletions(-) diff --git a/backend/cmd/main.go b/backend/cmd/main.go index 36e10a2fe..f3b81afed 100644 --- a/backend/cmd/main.go +++ b/backend/cmd/main.go @@ -86,17 +86,14 @@ var playbackFile = flag.String("playback", "", "") var currentVersion string func main() { - checkUpdate := true versionFile := "VERSION.txt" versionData, err := os.ReadFile(versionFile) if err != nil { - fmt.Fprintf(os.Stderr, "Warning: error reading version file (%s): %v\n", versionFile, err) - checkUpdate = false - fmt.Println("Skipping version check. Proceeding with the current version.", currentVersion) - } else { - currentVersion = strings.TrimSpace(string(versionData)) + fmt.Fprintf(os.Stderr, "Error reading version file (%s): %v\n", versionFile, err) + } + currentVersion = strings.TrimSpace(string(versionData)) versionFlag := flag.Bool("version", false, "Show the backend version") flag.Parse() @@ -109,6 +106,7 @@ func main() { defer traceFile.Close() pidPath := path.Join(os.TempDir(), "backendPid") + createPid(pidPath) defer RemovePid(pidPath) @@ -125,105 +123,82 @@ func main() { config := getConfig("./config.toml") - var latestVersionStr string - if checkUpdate { - latestVersionStr, err = getLatestVersionFromGitHub() - if err != nil { - fmt.Println("Warning:", err) - fmt.Println("Skipping version check. Proceeding with the current version:", currentVersion) - checkUpdate = false - } + execPath, err := os.Executable() + if err != nil { + fmt.Fprintf(os.Stderr, "Error getting executable path: %v\n", err) + os.Exit(1) } - - if checkUpdate { - current, err := version.NewVersion(currentVersion) - if err != nil { - fmt.Println("Invalid current version:", err) - fmt.Println("Skipping version check. Proceeding with the current version:", currentVersion) + execDir := filepath.Dir(execPath) + + latestVersionStr, latestErr := getLatestVersionFromGitHub() + backendPath := filepath.Join(execDir, "..", "..", "backend") + _, statErr := os.Stat(backendPath) + backendExists := statErr == nil + + if backendExists { + fmt.Println("Backend folder detected.") + fmt.Print("Do you want to update? (y/n): ") + var response string + fmt.Scanln(&response) + if strings.ToLower(response) == "y" { + fmt.Println("Launching updater to update the backend...") + updaterPath := filepath.Join(execDir, "..", "..", "updater") + cmd := exec.Command("go", "build", "-o", filepath.Join(updaterPath, "updater.exe"), updaterPath) + cmd.Stdout = os.Stdout + cmd.Stderr = os.Stderr + if err := cmd.Run(); err != nil { + fmt.Fprintf(os.Stderr, "Error building updater: %v\n", err) + os.Exit(1) + } + updaterExe := filepath.Join(updaterPath, "updater.exe") + cmd = exec.Command(updaterExe) + cmd.Dir = updaterPath + cmd.Stdout = os.Stdout + cmd.Stderr = os.Stderr + if err := cmd.Run(); err != nil { + fmt.Fprintf(os.Stderr, "Error launching updater: %v\n", err) + os.Exit(1) + } + os.Exit(0) } else { - latest, err := version.NewVersion(latestVersionStr) - if err != nil { - fmt.Println("Invalid latest version:", err) - fmt.Println("Skipping version check. Proceeding with the current version:", currentVersion) - } else if latest.GreaterThan(current) { - fmt.Printf("There is a new version available: %s (current version: %s)\n", latest, current) - fmt.Print("Do you want to update? (y/n): ") - var response string - fmt.Scanln(&response) - if strings.ToLower(response) == "y" { - fmt.Println("Launching updater to update the backend...") - - // Get the directory of the current executable - execPath, err := os.Executable() - if err != nil { - fmt.Fprintf(os.Stderr, "Error getting executable path: %v\n", err) + fmt.Println("Skipping update. Proceeding with the current version.") + } + } else { + // Solo updatear si se tienen ambas versiones y latest > current + current, currErr := version.NewVersion(currentVersion) + latest, lastErr := version.NewVersion(latestVersionStr) + if currErr != nil || lastErr != nil || latestErr != nil { + fmt.Println("Warning: Could not determine versions. Skipping update. Proceeding with the current version:", currentVersion) + } else if latest.GreaterThan(current) { + fmt.Printf("There is a new version available: %s (current version: %s)\n", latest, current) + fmt.Print("Do you want to update? (y/n): ") + var response string + fmt.Scanln(&response) + if strings.ToLower(response) == "y" { + fmt.Println("Launching updater to update the backend...") + updaterExe := filepath.Join(execDir, "updater") + if runtime.GOOS == "windows" { + updaterExe += ".exe" + } + if _, err := os.Stat(updaterExe); err == nil { + cmd := exec.Command(updaterExe) + cmd.Dir = execDir + cmd.Stdout = os.Stdout + cmd.Stderr = os.Stderr + if err := cmd.Run(); err != nil { + fmt.Fprintf(os.Stderr, "Error launching updater: %v\n", err) os.Exit(1) } - execDir := filepath.Dir(execPath) - - backendPath := filepath.Join(execDir, "..", "..", "backend") - - if _, err := os.Stat(backendPath); err == nil { - - fmt.Println("Backend folder detected. Building and launching updater...") - - updaterPath := filepath.Join(execDir, "..", "..", "updater") - - cmd := exec.Command("go", "build", "-o", filepath.Join(updaterPath, "updater.exe"), updaterPath) - cmd.Stdout = os.Stdout - cmd.Stderr = os.Stderr - if err := cmd.Run(); err != nil { - fmt.Fprintf(os.Stderr, "Error building updater: %v\n", err) - os.Exit(1) - } - - updaterExe := filepath.Join(updaterPath, "updater.exe") - cmd = exec.Command(updaterExe) - cmd.Dir = updaterPath - cmd.Stdout = os.Stdout - cmd.Stderr = os.Stderr - if err := cmd.Run(); err != nil { - fmt.Fprintf(os.Stderr, "Error launching updater: %v\n", err) - os.Exit(1) - } - } else { - - fmt.Println("Backend folder not detected. Launching existing updater...") - - execPath, err := os.Executable() - if err != nil { - fmt.Fprintf(os.Stderr, "Error getting executable path: %v\n", err) - os.Exit(1) - } - execDir := filepath.Dir(execPath) - - updaterExe := filepath.Join(execDir, "updater") - // En Windows el ejecutable lleva extensión .exe - if runtime.GOOS == "windows" { - updaterExe += ".exe" - } - - if _, err := os.Stat(updaterExe); err == nil { - cmd := exec.Command(updaterExe) - cmd.Dir = execDir - cmd.Stdout = os.Stdout - cmd.Stderr = os.Stderr - if err := cmd.Run(); err != nil { - fmt.Fprintf(os.Stderr, "Error launching updater: %v\n", err) - os.Exit(1) - } - } else { - fmt.Fprintf(os.Stderr, "Updater not found: %s\n", updaterExe) - fmt.Println("Skipping update. Proceeding with the current version.") - } - } - + os.Exit(0) } else { + fmt.Fprintf(os.Stderr, "Updater not found: %s\n", updaterExe) fmt.Println("Skipping update. Proceeding with the current version.") } } else { - fmt.Printf("You are using the latest version: %s\n", current) + fmt.Println("Skipping update. Proceeding with the current version.") } + } else { + fmt.Printf("You are using the latest version: %s\n", current) } } From 2f0a13f1fe2731b6b8851ba69b95eef952627acf Mon Sep 17 00:00:00 2001 From: Jesus Date: Thu, 29 May 2025 21:39:07 +0200 Subject: [PATCH 4/5] obsolete function --- backend/cmd/main.go | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/backend/cmd/main.go b/backend/cmd/main.go index f3b81afed..f8dd24336 100644 --- a/backend/cmd/main.go +++ b/backend/cmd/main.go @@ -714,15 +714,3 @@ func getLatestVersionFromGitHub() (string, error) { version := strings.TrimPrefix(release.TagName, "v") return version, nil } -func detectOS() string { - switch runtime.GOOS { - case "windows": - return "updater.exe" - case "darwin", "linux": - return "updater" - default: - fmt.Fprintf(os.Stderr, "Unsupported operating system: %s\n", runtime.GOOS) - os.Exit(1) - return "" - } -} From f3274a15f616a47ce3d9d37a1c219034f2a156d5 Mon Sep 17 00:00:00 2001 From: Jesus Date: Thu, 29 May 2025 21:39:39 +0200 Subject: [PATCH 5/5] new path for the new structure release --- updater/main.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/updater/main.go b/updater/main.go index df07ebf5e..ba9f38f05 100644 --- a/updater/main.go +++ b/updater/main.go @@ -199,7 +199,7 @@ func extractBinaryFromZip(zipPath, binaryName string) (string, error) { defer r.Close() var binaryPath string - parentDir, _ := filepath.Abs(filepath.Join(".", "..")) + parentDir, _ := filepath.Abs(".") for _, f := range r.File { baseName := filepath.Base(f.Name)