feat(master): suggest newer version tags for third-party images (#11) (#31)
Docker Build / docker (push) Successful in 45s
Docker Build / docker (push) Successful in 45s
This commit was merged in pull request #31.
This commit is contained in:
@@ -12,6 +12,7 @@ import (
|
||||
"github.com/shcizo/package-updater/internal/master/jobs"
|
||||
"github.com/shcizo/package-updater/internal/master/model"
|
||||
"github.com/shcizo/package-updater/internal/master/poller"
|
||||
"github.com/shcizo/package-updater/internal/master/tagver"
|
||||
"github.com/shcizo/package-updater/internal/master/web/icons"
|
||||
"github.com/shcizo/package-updater/internal/protocol"
|
||||
)
|
||||
@@ -45,6 +46,7 @@ type serviceRow struct {
|
||||
Tag string // ":tag", or ""
|
||||
Digest string // "@sha256:<12 hex>…" when the image has no tag, else ""
|
||||
AvailableTag string // the tag of AvailableRef, or ""
|
||||
NewerTag string // the tag of NewerRef while it is still newer than the followed tag, or ""
|
||||
Icon string // Simple Icons slug; "" when there is no icon
|
||||
Letter string // shown instead of an icon
|
||||
LetterClass string // lc-0 .. lc-3
|
||||
@@ -66,6 +68,7 @@ func newServiceRow(s model.Service, autoBlocked string) serviceRow {
|
||||
}
|
||||
r.Repo, r.Tag, r.Digest = imageParts(s.ActualRef)
|
||||
r.AvailableTag = imageref.Parse(s.AvailableRef).Tag
|
||||
r.NewerTag = newerTag(s)
|
||||
r.Icon = icons.ForImage(s.ActualRef)
|
||||
r.Letter = "?"
|
||||
if first, _ := utf8.DecodeRuneInString(r.Name); first != utf8.RuneError {
|
||||
@@ -243,6 +246,26 @@ func followsNoTag(svc model.Service) bool {
|
||||
return jobs.FollowedRef(svc.ActualRef) == ""
|
||||
}
|
||||
|
||||
// newerTag returns the tag of the service's newer-tag suggestion, or "" when
|
||||
// there is none or it no longer holds. The poller writes the suggestion once
|
||||
// per cycle, so after the service moved to another tag the stored value can
|
||||
// be stale until the next cycle; checking again here hides it meanwhile. A
|
||||
// suggestion from another repo than the service follows now is hidden too.
|
||||
func newerTag(s model.Service) string {
|
||||
if s.RemovedAt != nil || s.NewerRef == "" {
|
||||
return ""
|
||||
}
|
||||
newer := imageref.Parse(s.NewerRef)
|
||||
repo, followed := poller.Followed(s)
|
||||
if newer.Repo != repo {
|
||||
return ""
|
||||
}
|
||||
if _, ok := tagver.Newer(followed, []string{newer.Tag}); !ok {
|
||||
return ""
|
||||
}
|
||||
return newer.Tag
|
||||
}
|
||||
|
||||
// versionRow is an image version as shown on the service page.
|
||||
type versionRow struct {
|
||||
model.ImageVersion
|
||||
|
||||
Reference in New Issue
Block a user