train-osource/pkg/autoupdate/autoupdate.go
wheelchairy b6ea0e0f59 upd2
2025-02-04 18:30:33 +03:00

58 lines
1.3 KiB
Go

package autoupdate
import (
"fmt"
"io/ioutil"
"net/http"
"os"
"os/exec"
)
func CheckForUpdates(updateURL string) (bool, string, error) {
resp, err := http.Get(updateURL)
if err != nil {
return false, "", err
}
defer resp.Body.Close()
data, err := ioutil.ReadAll(resp.Body)
if err != nil {
return false, "", err
}
latestVersion := string(data)
currentVersion := "1.0.0"
if latestVersion != currentVersion {
return true, latestVersion, nil
}
return false, currentVersion, nil
}
func AutoUpdate(updateURL string) error {
available, latest, err := CheckForUpdates(updateURL)
if err != nil {
return err
}
if available {
fmt.Printf("Доступна новая версия: %s. Запускаем обновление...\n", latest)
resp, err := http.Get(updateURL + "/binary") // предположим, что по этому URL лежит бинарник
if err != nil {
return err
}
defer resp.Body.Close()
data, err := ioutil.ReadAll(resp.Body)
if err != nil {
return err
}
tmpFile := "/tmp/train_new"
if err := ioutil.WriteFile(tmpFile, data, 0755); err != nil {
return err
}
cmd := exec.Command(tmpFile)
if err := cmd.Start(); err != nil {
return err
}
os.Exit(0)
} else {
fmt.Println("Обновлений не найдено.")
}
return nil
}