From 5a1d99989fa32be1684b9290b4a58e8418b7b92d Mon Sep 17 00:00:00 2001
From: shenwc <spd260@126.com>
Date: 星期二, 26 十一月 2024 17:57:50 +0800
Subject: [PATCH] 11111
---
stores/gitee/gitee.go | 139 ++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 139 insertions(+), 0 deletions(-)
diff --git a/stores/gitee/gitee.go b/stores/gitee/gitee.go
new file mode 100755
index 0000000..4ed5121
--- /dev/null
+++ b/stores/gitee/gitee.go
@@ -0,0 +1,139 @@
+package gitee
+
+import (
+ "context"
+ "fmt"
+ "os"
+ "runtime"
+ "strings"
+
+ "github.com/mamh-mixed/go-gitee/gitee"
+ update "github.com/zan8in/goupdate"
+ "github.com/zan8in/goupdate/progress"
+ "golang.org/x/oauth2"
+)
+
+//https://gitee.com/api/v5/swagger#/getV5ReposOwnerRepoStargazers?ex=no
+
+type Store struct {
+ Owner string
+ Repo string
+ Version string
+}
+
+type GiteeResult struct {
+ Status int // update success = 1; have latest version = 2;
+ LatestVersion string
+}
+
+// 更新最新版本
+// owner = zan8in
+// repo = afrog
+// version = 2.8.8 当前版本
+func Update(owner, repo, version string) (*GiteeResult, error) {
+ var (
+ result = &GiteeResult{}
+ err error
+ )
+
+ var command string
+ switch runtime.GOOS {
+ case "windows":
+ command = repo + ".exe"
+ default:
+ command = repo
+ }
+
+ s := &Store{
+ Owner: owner,
+ Repo: repo,
+ Version: version,
+ }
+
+ m := update.Manager{
+ Command: command,
+ }
+
+ asset, err := s.LatestGitReleases()
+ if err != nil {
+ if strings.Contains(err.Error(), update.LatestVersionTips) {
+ result.LatestVersion = asset.LatestVersion
+ result.Status = 2
+ return result, nil
+ }
+ return nil, err
+ }
+
+ // download tarball to a tmp dir
+ tarball, err := asset.DownloadProxy(progress.Reader)
+ if err != nil {
+ return nil, fmt.Errorf("error downloading: %s", err)
+ }
+
+ // install it
+ if err := m.Install(tarball); err != nil {
+ return nil, fmt.Errorf("error installing: %s", err)
+ }
+
+ // gologger.Info().Msgf("Successfully updated to %s %s\n", command, s.Version)
+ result.LatestVersion = asset.LatestVersion
+ result.Status = 1
+ return result, nil
+}
+
+// LatestReleases returns releases newer than Version, or nil.
+func (s *Store) LatestGitReleases() (up *update.Asset, err error) {
+
+ token := os.Getenv("")
+
+ ctx := context.Background()
+ ts := oauth2.StaticTokenSource(
+ &oauth2.Token{AccessToken: token},
+ )
+
+ tc := oauth2.NewClient(ctx, ts)
+ client := gitee.NewClient(tc)
+
+ owner := s.Owner
+ repo := s.Repo
+
+ var currentOS string
+ switch runtime.GOOS {
+ case "darwin":
+ currentOS = "macOS"
+ default:
+ currentOS = runtime.GOOS
+ }
+
+ releases, _, err := client.Repositories.GetLatestRelease(ctx, owner, repo)
+ if err != nil {
+ return nil, err
+ }
+
+ version := (*releases.TagName)[1:]
+
+ if s.Version == version {
+ return &update.Asset{
+ LatestVersion: version,
+ }, fmt.Errorf("%s %s", s.Repo, update.LatestVersionTips)
+ }
+
+ zipName := fmt.Sprintf("%s_%s_%s_%s.zip", repo, version, currentOS, runtime.GOARCH)
+
+ downloadURL := ""
+ for _, asset := range releases.Assets {
+ if strings.HasSuffix(*asset.BrowserDownloadURL, zipName) {
+ downloadURL = *asset.BrowserDownloadURL
+ break
+ }
+ }
+
+ if len(downloadURL) == 0 {
+ return nil, fmt.Errorf("no release found for %s %s", s.Owner, s.Repo)
+ }
+
+ return &update.Asset{
+ URL: downloadURL,
+ LatestVersion: version,
+ }, nil
+}
--
Gitblit v1.8.0