appselfupdater

package module
v0.0.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 8, 2025 License: MIT Imports: 17 Imported by: 0

README

appselfupdater

appselfupdater.HandleUpdate выполняет автоматическое обновление приложения:

  1. проверяет последний релиз в GitHub (owner/repo)
  2. сравнивает currentVersion с релизом (лексикографически, без префикса v)
  3. ищет ассет для текущей ОС/архитектуры (findMatchingAsset)
  4. скачивает архив во временный файл
  5. распаковывает и заменяет исполняемый файл
  6. удаляет временный файл (всегда)

параметры:

  • 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)

	}

}

условия работы:

  1. публичный репозиторий GitHub
  2. настроены релизы (используется latest release)
  3. теги в формате версий (пример: v1.0.0)
  4. ассеты именуются шаблоном: appname-1.0.0-osname-architecture.archiveExtention, например:
    • appname-0.0.1-darwin-amd64.tar.gz
    • appname-0.0.1-darwin-arm64.tar.gz
    • appname-0.0.1-linux-amd64.tar.gz
    • appname-0.0.1-linux-arm64.tar.gz
    • appname-0.0.1-windows-amd64.zip
    • appname-0.0.1-windows-arm64.zip
  5. права на запись в директорию исполняемого файла

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func CleanupOldVersion

func CleanupOldVersion()

CleanupOldVersion проверяет наличие старой версии (.old) и удаляет ее

func HandleUpdate

func HandleUpdate(currentVersion, owner, repo string)

HandleUpdate автоматически обновляет приложение до последней версии с GitHub

проверяет последний релиз в репозитории `owner/repo`: если версия релиза (без учета "v") новее, чем `currentVersion`, она скачивает архив для текущей ОС и архитектуры, заменяет исполняемый файл и удаляет временные файлы.

после успешного обновления требуется перезапуск приложения.

параметры:

currentVersion: текущая версия приложения ("1.2.3" или "v1.2.3")
owner:          владелец репозитория на GitHub
repo:           название репозитория

Types

type Asset

type Asset struct {
	Name               string `json:"name"`
	BrowserDownloadURL string `json:"browser_download_url"`
}

type GitHubRelease

type GitHubRelease struct {
	TagName string  `json:"tag_name"`
	Assets  []Asset `json:"assets"`
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL