63 lines
1.1 KiB
Go
63 lines
1.1 KiB
Go
package resource
|
|
|
|
import (
|
|
"errors"
|
|
|
|
"github.com/google/go-github/github"
|
|
)
|
|
|
|
type CheckCommand struct {
|
|
github GitHub
|
|
}
|
|
|
|
func NewCheckCommand(github GitHub) *CheckCommand {
|
|
return &CheckCommand{
|
|
github: github,
|
|
}
|
|
}
|
|
|
|
func (c *CheckCommand) Run(request CheckRequest) ([]Version, error) {
|
|
releases, err := c.github.ListReleases()
|
|
if err != nil {
|
|
return []Version{}, err
|
|
}
|
|
|
|
if len(releases) == 0 {
|
|
return []Version{}, errors.New("repository had no releases")
|
|
}
|
|
|
|
latestVersion := *releases[0].TagName
|
|
|
|
if request.Version.Tag == "" {
|
|
return []Version{
|
|
{Tag: latestVersion},
|
|
}, nil
|
|
}
|
|
|
|
if latestVersion == request.Version.Tag {
|
|
return []Version{}, nil
|
|
}
|
|
|
|
upToLatest := false
|
|
reversedVersions := []Version{}
|
|
for _, release := range reverse(releases) {
|
|
version := *release.TagName
|
|
|
|
if upToLatest {
|
|
reversedVersions = append(reversedVersions, Version{Tag: version})
|
|
} else {
|
|
upToLatest = request.Version.Tag == version
|
|
}
|
|
}
|
|
|
|
return reversedVersions, nil
|
|
}
|
|
|
|
func reverse(s []github.RepositoryRelease) []github.RepositoryRelease {
|
|
for i, j := 0, len(s)-1; i < j; i, j = i+1, j-1 {
|
|
s[i], s[j] = s[j], s[i]
|
|
}
|
|
|
|
return s
|
|
}
|