backend/update/selfupdate.go (78 lines of code) (raw):

package update import ( "bytes" "github.com/blang/semver" "github.com/rhysd/go-github-selfupdate/selfupdate" "log" "os" "os/exec" "path/filepath" "strings" ) func DoSelfUpdate(currentVersion string) bool { v := semver.MustParse(currentVersion) latest, err := selfupdate.UpdateSelf(v, "annikovk/IntelliJ-Log-Analyzer") if err != nil { log.Println("Binary update failed:", err) return false } if latest.Version.Equals(v) { // latest version is the same as current version. It means current binary is up to date. log.Println("Current binary is the latest version", currentVersion) return true } else { log.Println("Successfully updated to version", latest.Version) log.Println("Release note:\n", latest.ReleaseNotes) return true } } func DoSelfUpdateMac() bool { latest, found, _ := selfupdate.DetectLatest("annikovk/IntelliJ-Log-Analyzer") if found { homeDir, _ := os.UserHomeDir() downloadPath := filepath.Join(homeDir, "Downloads", "IntelliJ-Log-Analyzer.zip") err := exec.Command("curl", "-L", latest.AssetURL, "-o", downloadPath).Run() if err != nil { log.Println("curl error:", err) return false } var appPath string cmdPath, err := os.Executable() appPath = strings.TrimSuffix(cmdPath, "IntelliJ Log Analyzer.app/Contents/MacOS/IntelliJ Log Analyzer") if err != nil { appPath = "/Applications/" } cmd := exec.Command("ditto", "-xk", downloadPath, appPath) var out bytes.Buffer var stderr bytes.Buffer cmd.Stdout = &out cmd.Stderr = &stderr err = cmd.Run() if err != nil { log.Printf("ditto error: %s\n ouput: %s, error: %s", err, out.String(), stderr.String()) log.Printf("downloadPath: %s \n appPath %s", downloadPath, appPath) return false } err = exec.Command("rm", downloadPath).Run() if err != nil { log.Println("removing error:", err) log.Printf("downloadPath: %s", downloadPath) return false } return true } else { return false } } func CheckForUpdate(currentVersion string) (bool, string, string) { latest, found, err := selfupdate.DetectLatest("annikovk/IntelliJ-Log-Analyzer") if err != nil { log.Println("Error occurred while detecting version:", err) return false, "", "" } v := semver.MustParse(currentVersion) if !found || latest.Version.LTE(v) { log.Println("Current version is the latest") return false, "", "" } return true, latest.Version.String(), latest.ReleaseNotes }