diff --git a/cmd/mbf/main.go b/cmd/mbf/main.go index 8d9a232..8c25394 100644 --- a/cmd/mbf/main.go +++ b/cmd/mbf/main.go @@ -173,9 +173,11 @@ func main() { if v, err := meta.GetVersions(ctx); err != nil { return err - } else if current := rosa.Std.Version(p); v.Latest != current { + } else if current, latest := + rosa.Std.Version(p), + meta.GetLatest(v); current != latest { n++ - log.Printf("%s %s < %s", meta.Name, current, v.Latest) + log.Printf("%s %s < %s", meta.Name, current, latest) } else { msg.Verbosef("%s is up to date", meta.Name) } diff --git a/internal/rosa/all.go b/internal/rosa/all.go index a550b7b..ddaa1b0 100644 --- a/internal/rosa/all.go +++ b/internal/rosa/all.go @@ -166,6 +166,17 @@ type Metadata struct { // // [Anitya]: https://release-monitoring.org/ ID int `json:"-"` + + // Optional custom version checking behaviour. + latest func(v *Versions) string +} + +// GetLatest returns the latest version described by v. +func (meta *Metadata) GetLatest(v *Versions) string { + if meta.latest != nil { + return meta.latest(v) + } + return v.Latest } // Unversioned denotes an unversioned [PArtifact]. @@ -188,6 +199,14 @@ type Versions struct { All []string `json:"versions"` } +// getStable returns the first Stable version, or Latest if that is unavailable. +func (v *Versions) getStable() string { + if len(v.Stable) == 0 { + return v.Latest + } + return v.Stable[0] +} + // GetVersions returns versions fetched from Anitya. func (meta *Metadata) GetVersions(ctx context.Context) (*Versions, error) { if meta.ID == 0 {