move GetVersion to provider_github.go
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
This commit is contained in:
parent
5cfad7a4e7
commit
60c358a151
28
main.go
28
main.go
|
|
@ -1,9 +1,7 @@
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/http"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type Version interface {
|
type Version interface {
|
||||||
|
|
@ -14,32 +12,6 @@ type VersionProvider interface {
|
||||||
GetVersion() (Version, error)
|
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() {
|
func main() {
|
||||||
v := GitHubVersionProvider{Repository: "OpenSMTPD/OpenSMTPD"}
|
v := GitHubVersionProvider{Repository: "OpenSMTPD/OpenSMTPD"}
|
||||||
latest, err := v.GetVersion()
|
latest, err := v.GetVersion()
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,11 @@
|
||||||
package main
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"net/http"
|
||||||
|
)
|
||||||
|
|
||||||
type GitHubVersionProvider struct {
|
type GitHubVersionProvider struct {
|
||||||
Repository string
|
Repository string
|
||||||
IncludeDrafts bool
|
IncludeDrafts bool
|
||||||
|
|
@ -14,6 +20,29 @@ type GitHubRelease struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g GitHubRelease) String() string { return g.TagName }
|
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)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue