-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathvercheck.go
More file actions
94 lines (77 loc) · 2.47 KB
/
vercheck.go
File metadata and controls
94 lines (77 loc) · 2.47 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
package main
import (
"context"
"fmt"
"time"
"github.com/go-git/go-git/v5"
"github.com/go-git/go-git/v5/plumbing"
"github.com/go-git/go-git/v5/plumbing/object"
"github.com/google/go-github/v53/github"
)
const versionCheckTimeout = time.Second * 10
func versionCheckGetLatestTagFromRepository(repository *git.Repository) (string, error) {
tagRefs, err := repository.Tags()
if err != nil {
return "", err
}
var latestTagCommit *object.Commit
var latestTagName string
err = tagRefs.ForEach(func(tagRef *plumbing.Reference) error {
revision := plumbing.Revision(tagRef.Name().String())
tagCommitHash, err := repository.ResolveRevision(revision)
if err != nil {
return err
}
commit, err := repository.CommitObject(*tagCommitHash)
if err != nil {
return err
}
if latestTagCommit == nil {
latestTagCommit = commit
latestTagName = tagRef.Name().Short()
}
if commit.Committer.When.After(latestTagCommit.Committer.When) {
latestTagCommit = commit
latestTagName = tagRef.Name().Short()
}
return nil
})
if err != nil {
return "", err
}
return latestTagName, nil
}
func versionCheck(ctx context.Context) (latestVersion, currentVersion string, err error) {
client := github.NewClient(nil)
release, _, err := client.Repositories.GetLatestRelease(ctx, "AUTOMATIC1111", "stable-diffusion-webui")
if err != nil {
return "", "", fmt.Errorf("getting latest stable diffusion version: %w", err)
}
latestVersion = release.GetTagName()
repo, err := git.PlainOpen(params.StableDiffusionPath)
if err != nil {
return "", "", fmt.Errorf("getting current stable diffusion version: %w", err)
}
currentVersion, err = versionCheckGetLatestTagFromRepository(repo)
if err != nil {
return "", "", fmt.Errorf("getting current stable diffusion version: %w", err)
}
return latestVersion, currentVersion, nil
}
func versionCheckGetStr(ctx context.Context) (res string, updateNeededOrError bool) {
verCheckCtx, verCheckCtxCancel := context.WithTimeout(ctx, versionCheckTimeout)
defer verCheckCtxCancel()
var latestVersion, currentVersion string
var err error
if latestVersion, currentVersion, err = versionCheck(verCheckCtx); err != nil {
return errorStr + ": " + err.Error(), true
}
updateNeededOrError = currentVersion != latestVersion
res = "Stable Diffusion WebUI version: " + currentVersion
if updateNeededOrError {
res = "📢 " + res + " 📢 Update needed! Latest version is " + latestVersion + " 📢"
} else {
res += " (up to date)"
}
return
}