appselfupdater.HandleUpdate выполняет автоматическое обновление приложения:
проверяет последний релиз в GitHub (owner/repo)
сравнивает currentVersion с релизом (лексикографически, без префикса v)
ищет ассет для текущей ОС/архитектуры (findMatchingAsset)
скачивает архив во временный файл
распаковывает и заменяет исполняемый файл
удаляет временный файл (всегда)
параметры:
currentVersion: текущая версия (пример: "1.0.0")
owner: владелец репозитория (пример: "vasya")
repo: название репозитория (пример: "gocliapp")
использование:
package main
import (
"flag"
"github.com/imbecility/GoCliSelfUpdater"
)
var (
// версия встраивается при билде в релизе через ldflags, например:
// -ldflags="-s -w -X 'main.version=${APP_VERSION}'"
// ${APP_VERSION} берется в Github Actions при пуше тега
version = "0.0.0"
GithubOwner = "imbecility"
GithubRepo = "myapp"
)
func main() {
selfUpdate := flag.Bool("update", false, "автоматическое самообновление программы до последней версии с GitHub")
flag.Parse()
if *selfUpdate {
// удаляет бэкап предыдущей версии, обычно не требуется, выполняется автоматически:
// appselfupdater.CleanupOldVersion()
// самообновление:
appselfupdater.HandleUpdate(version, GithubOwner, GithubRepo)
}
}
HandleUpdate автоматически обновляет приложение до последней версии с GitHub
проверяет последний релиз в репозитории `owner/repo`: если версия релиза (без учета "v") новее, чем `currentVersion`,
она скачивает архив для текущей ОС и архитектуры, заменяет исполняемый файл и удаляет временные файлы.
после успешного обновления требуется перезапуск приложения.
параметры:
currentVersion: текущая версия приложения ("1.2.3" или "v1.2.3")
owner: владелец репозитория на GitHub
repo: название репозитория