From 60c358a151ac9e939bfdcf5a87b81294be9dea80 Mon Sep 17 00:00:00 2001 From: Wojciech Kwolek Date: Wed, 29 Sep 2021 23:55:07 +0200 Subject: [PATCH] move GetVersion to provider_github.go --- main.go | 28 ---------------------------- provider_github.go | 33 +++++++++++++++++++++++++++++++-- 2 files changed, 31 insertions(+), 30 deletions(-) diff --git a/main.go b/main.go index ccebfb1..6dd9be5 100644 --- a/main.go +++ b/main.go @@ -1,9 +1,7 @@ package main import ( - "encoding/json" "fmt" - "net/http" ) type Version interface { @@ -14,32 +12,6 @@ type VersionProvider interface { GetVersion() (Version, error) } -func (g *GitHubVersionProvider) GetVersion() (Version, error) { - url := fmt.Sprintf("https://api.github.com/repos/%s/releases", g.Repository) - r, err := http.Get(url) - if err != nil { - return nil, fmt.Errorf("couldn't fetch release list for %s from GitHub: %w", g.Repository, err) - } - defer r.Body.Close() - - var releases []GitHubRelease - err = json.NewDecoder(r.Body).Decode(&releases) - if err != nil { - return nil, fmt.Errorf("couldn't parse json: %w", err) - } - - for _, release := range releases { - if release.Draft && !g.IncludeDrafts { - continue - } - if release.Prerelease && !g.IncludePrereleases { - continue - } - return &release, nil - } - return nil, fmt.Errorf("couldn't find any suitable release on GitHub for project %s", g.Repository) -} - func main() { v := GitHubVersionProvider{Repository: "OpenSMTPD/OpenSMTPD"} latest, err := v.GetVersion() diff --git a/provider_github.go b/provider_github.go index b97e254..861c2fa 100644 --- a/provider_github.go +++ b/provider_github.go @@ -1,5 +1,11 @@ package main +import ( + "encoding/json" + "fmt" + "net/http" +) + type GitHubVersionProvider struct { Repository string IncludeDrafts bool @@ -14,6 +20,29 @@ type GitHubRelease struct { } func (g GitHubRelease) String() string { return g.TagName } -func (g GitHubRelease) Compare() int { - return 0 // TODO + +func (g *GitHubVersionProvider) GetVersion() (Version, error) { + url := fmt.Sprintf("https://api.github.com/repos/%s/releases", g.Repository) + r, err := http.Get(url) + if err != nil { + return nil, fmt.Errorf("couldn't fetch release list for %s from GitHub: %w", g.Repository, err) + } + defer r.Body.Close() + + var releases []GitHubRelease + err = json.NewDecoder(r.Body).Decode(&releases) + if err != nil { + return nil, fmt.Errorf("couldn't parse json: %w", err) + } + + for _, release := range releases { + if release.Draft && !g.IncludeDrafts { + continue + } + if release.Prerelease && !g.IncludePrereleases { + continue + } + return &release, nil + } + return nil, fmt.Errorf("couldn't find any suitable release on GitHub for project %s", g.Repository) }