update

package
v0.1.2 Latest Latest
Warning

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

Go to latest
Published: Sep 14, 2026 License: GPL-2.0, GPL-3.0 Imports: 18 Imported by: 0

Documentation

Index

Constants

View Source
const (

	// 升级阶段
	StageIdle        = "idle"
	StageDownloading = "downloading"
	StageVerifying   = "verifying"
	StageInstalling  = "installing"
	StageRestarting  = "restarting"
	StageUpstaging   = "upstaging"
	StageFailed      = "failed"
)
View Source
const (
	CmpLT = -1 // cur < latest(存在新版本)
	CmpEQ = 0  // 相等
	CmpGT = 1  // cur > latest
)

语义化版本比较结果

Variables

This section is empty.

Functions

func CompareVersions

func CompareVersions(cur, latest string) int

CompareVersions 比较当前运行版本与目标(latest)版本。 规则:主版本号逐段比较;主版本相同时,稳定版(无预发布后缀)高于预发布版(SNAPSHOT/beta 等)。 返回 CmpLT 表示 latest 比 cur 新(存在更新)。

Types

type Asset

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

Asset 描述一个 Release 附件。

func FindAsset

func FindAsset(rel *Release, name string) *Asset

FindAsset 按文件名查找附件(用于定位 SHA256SUMS)。

type Checker

type Checker struct {
	// contains filtered or unexported fields
}

Checker 负责查询 GitHub Releases 并挑选当前平台可用的升级归档。

func NewChecker

func NewChecker(apiBase string) *Checker

NewChecker 构造 GitHub 更新检查器。apiBase 为空时使用官方 API。

func (*Checker) ArchiveAsset

func (c *Checker) ArchiveAsset(rel *Release, targetVersion string) (*Asset, error)

ArchiveAsset 依据当前平台挑选可升级的 tar.gz 归档。 归档命名见 .goreleaser.yml archives.name_template:

edgeCore-{{.RawVersion}}-{{.Os}}-{{.Arch}}[{{.Arm}}].tar.gz

func (*Checker) FetchLatest

func (c *Checker) FetchLatest(ctx context.Context) (*Release, error)

FetchLatest 获取仓库最新(非 Draft/Pre-release)Release。

func (*Checker) SetClient

func (c *Checker) SetClient(cl httpDoer)

SetClient 允许注入自定义 HTTP 客户端(测试用)。

type LocalPackage

type LocalPackage struct {
	FileName   string `json:"file_name"` // 原文件名
	Format     string `json:"format"`    // tar.gz | deb | rpm
	Version    string `json:"version"`
	Arch       string `json:"arch"` // 安装包声明的架构(amd64/arm64/arm7/arm)
	Size       int64  `json:"size"`
	Compatible bool   `json:"compatible"` // 是否与当前运行平台匹配
	Reason     string `json:"reason,omitempty"`
	Path       string `json:"path"` // 服务端暂存路径(仅校验通过时返回)
}

LocalPackage 描述一个上传的本地安装包。

type Manager

type Manager struct {
	// contains filtered or unexported fields
}

Manager 编排一键自动升级:下载→校验→备份→替换→重启→健康检查/失败回滚。

func NewManager

func NewManager(installDir, serviceName string, checker *Checker) *Manager

NewManager 构造升级管理器。installDir 默认 /usr/local/bin/edgeCore。

func (*Manager) Checker

func (m *Manager) Checker() *Checker

Checker 暴露底层的版本检查器(供 handler 查询)。

func (*Manager) IsRunning

func (m *Manager) IsRunning() bool

IsRunning 报告是否已有升级在推进中。

func (*Manager) Start

func (m *Manager) Start(ctx context.Context, targetVersion string) error

Start 以异步方式启动升级到 targetVersion(由调用方先经 check/compare 确认)。

func (*Manager) StartLocal

func (m *Manager) StartLocal(ctx context.Context, localPath string) error

StartLocal 以异步方式执行本地安装包升级/降级(指定文件,不限版本高低)。

func (*Manager) Status

func (m *Manager) Status() State

Status 返回当前升级状态(线程安全)。

func (*Manager) ValidateLocal

func (m *Manager) ValidateLocal(localPath string) (LocalPackage, error)

ValidateLocal 校验本地安装包:解析文件名 → 架构兼容 → 深度校验内容。 校验通过且平台兼容时返回 Compatible=true,Path 为该文件的暂存路径。

type Release

type Release struct {
	TagName     string  `json:"tag_name"`
	Name        string  `json:"name"`
	Body        string  `json:"body"`
	HTMLURL     string  `json:"html_url"`
	PublishedAt string  `json:"published_at"`
	Draft       bool    `json:"draft"`
	Prerelease  bool    `json:"prerelease"`
	Assets      []Asset `json:"assets"`
}

Release 描述一个 GitHub Release(取自 /releases/latest)。

type State

type State struct {
	Stage         string    `json:"stage"`
	TargetVersion string    `json:"target_version,omitempty"`
	StartedAt     time.Time `json:"started_at,omitempty"`
	Error         string    `json:"error,omitempty"`
}

State 返回给前端的升级进度。

Jump to

Keyboard shortcuts

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