move GetVersion to provider_github.go
continuous-integration/drone/push Build is passing Details

This commit is contained in:
Wojciech Kwolek 2021-09-29 23:55:07 +02:00
parent 5cfad7a4e7
commit 60c358a151
2 changed files with 31 additions and 30 deletions

28
main.go
View File

@ -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()

View File

@ -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)
}