From a66f2156f14be7dedec6e6d16a62cb337698eb10 Mon Sep 17 00:00:00 2001 From: ArvinLovegood Date: Tue, 8 Jul 2025 18:45:49 +0800 Subject: [PATCH] =?UTF-8?q?feat(update):=E5=AE=9E=E7=8E=B0=E8=BD=AF?= =?UTF-8?q?=E4=BB=B6=E8=87=AA=E5=8A=A8=E6=9B=B4=E6=96=B0=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增自动检查和下载最新版本的功能 - 使用 go-update 库进行软件更新 - 增加新版本推送通知和更新结果通知 - 优化错误处理和日志记录 --- README.md | 1 + app.go | 47 +++++++++++++++++++++++++++++++++++++++++++++-- go.mod | 1 + go.sum | 2 ++ 4 files changed, 49 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index e427716..df39e52 100644 --- a/README.md +++ b/README.md @@ -57,6 +57,7 @@ | 不再强制依赖Chrome浏览器 | ✅ | 默认使用edge浏览器抓取新闻资讯 | ## 👀 更新日志 +### 2025.07.08 实现软件自动更新功能 ### 2025.07.07 卡片添加迷你分时图 ### 2025.07.05 MacOs支持 ### 2025.07.01 AI分析集成工具函数,AI分析将更加智能 diff --git a/app.go b/app.go index a0d3692..bf0bb2b 100644 --- a/app.go +++ b/app.go @@ -1,9 +1,11 @@ package main import ( + "bytes" "context" "encoding/base64" "fmt" + "github.com/inconshreveable/go-update" "go-stock/backend/data" "go-stock/backend/db" "go-stock/backend/logger" @@ -111,6 +113,13 @@ func (a *App) CheckUpdate() { } logger.SugaredLogger.Infof("releaseVersion:%+v", releaseVersion.TagName) if releaseVersion.TagName != Version { + go runtime.EventsEmit(a.ctx, "newsPush", map[string]any{ + "time": "发现新版本:" + releaseVersion.TagName, + "isRed": false, + "source": "go-stock", + "content": fmt.Sprintf("当前版本:%s, 最新版本:%s,开始下载...", Version, releaseVersion.TagName), + }) + tag := &models.Tag{} _, err = resty.New().R(). SetResult(tag). @@ -118,6 +127,7 @@ func (a *App) CheckUpdate() { if err == nil { releaseVersion.Tag = *tag } + commit := &models.Commit{} _, err = resty.New().R(). SetResult(commit). @@ -125,8 +135,41 @@ func (a *App) CheckUpdate() { if err == nil { releaseVersion.Commit = *commit } - - go runtime.EventsEmit(a.ctx, "updateVersion", releaseVersion) + //sha:= commit.Sha + resp, err := resty.New().R().Get(fmt.Sprintf("https://github.com/ArvinLovegood/go-stock/releases/download/%s/go-stock-windows-amd64.exe", releaseVersion.TagName)) + if err != nil { + go runtime.EventsEmit(a.ctx, "newsPush", map[string]any{ + "time": "新版本:" + releaseVersion.TagName, + "isRed": true, + "source": "go-stock", + "content": "新版本下载失败,请前往 https://github.com/ArvinLovegood/go-stock/releases 手动下载替换文件。", + }) + return + } + body := resp.Body() + // 验证下载文件的哈希值 + //hash := sha256.Sum256(body) + //actualSHA256 := hex.EncodeToString(hash[:]) + //logger.SugaredLogger.Infof("actualSHA256: %s", actualSHA256) + //if actualSHA256 != releaseVersion.Commit.Sha { + // logger.SugaredLogger.Errorf("下载文件sha256校验失败") + // logger.SugaredLogger.Errorf("actualSHA256: %s Commit-Sha:%s", actualSHA256, releaseVersion.Commit.Sha) + // return + //} + // 使用go-update库进行更新 + err = update.Apply(bytes.NewReader(body), update.Options{}) + if err != nil { + logger.SugaredLogger.Error("更新失败: ", err.Error()) + go runtime.EventsEmit(a.ctx, "updateVersion", releaseVersion) + return + } else { + go runtime.EventsEmit(a.ctx, "newsPush", map[string]any{ + "time": "新版本:" + releaseVersion.TagName, + "isRed": true, + "source": "go-stock", + "content": "版本更新完成,下次重启软件生效.", + }) + } } } diff --git a/go.mod b/go.mod index 8e07268..1444d3d 100644 --- a/go.mod +++ b/go.mod @@ -13,6 +13,7 @@ require ( github.com/go-ego/gse v0.80.3 github.com/go-resty/resty/v2 v2.16.2 github.com/go-toast/toast v0.0.0-20190211030409-01e6764cf0a4 + github.com/inconshreveable/go-update v0.0.0-20160112193335-8152e7eb6ccf github.com/robertkrimen/otto v0.5.1 github.com/robfig/cron/v3 v3.0.1 github.com/samber/lo v1.49.1 diff --git a/go.sum b/go.sum index bbc8d75..be20971 100644 --- a/go.sum +++ b/go.sum @@ -57,6 +57,8 @@ github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26 h1:Xim43kblpZXfIBQsbu github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26/go.mod h1:dDKJzRmX4S37WGHujM7tX//fmj1uioxKzKxz3lo4HJo= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/inconshreveable/go-update v0.0.0-20160112193335-8152e7eb6ccf h1:WfD7VjIE6z8dIvMsI4/s+1qr5EL+zoIGev1BQj1eoJ8= +github.com/inconshreveable/go-update v0.0.0-20160112193335-8152e7eb6ccf/go.mod h1:hyb9oH7vZsitZCiBt0ZvifOrB+qc8PS5IiilCIb87rg= github.com/jackmordaunt/icns/v3 v3.0.1 h1:xxot6aNuGrU+lNgxz5I5H0qSeCjNKp8uTXB1j8D4S3o= github.com/jackmordaunt/icns/v3 v3.0.1/go.mod h1:5sHL59nqTd2ynTnowxB/MDQFhKNqkK8X687uKNygaSQ= github.com/jchv/go-winloader v0.0.0-20210711035445-715c2860da7e h1:Q3+PugElBCf4PFpxhErSzU3/PY5sFL5Z6rfv4AbGAck=