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
}