56 lines
1.2 KiB
Go
56 lines
1.2 KiB
Go
package release
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"net/http"
|
|
|
|
"golang.org/x/mod/semver"
|
|
"github.com/google/go-github/v55/github"
|
|
"github.com/pkg/errors"
|
|
)
|
|
|
|
func GetAll(ctx context.Context) (ret []*github.RepositoryRelease, err error) {
|
|
c := github.NewClient(nil)
|
|
if c == nil {
|
|
return nil, fmt.Errorf("failed to obtain Github client")
|
|
}
|
|
|
|
list, resp, err := c.Repositories.ListReleases(ctx, "siderolabs", "talos", nil)
|
|
if err != nil {
|
|
return nil, errors.Wrap(err, "failed to list Talos releases")
|
|
}
|
|
|
|
if resp.StatusCode != http.StatusOK {
|
|
return nil, errors.Errorf("received non-200 response code (%d) from Github release list request", resp.StatusCode)
|
|
}
|
|
|
|
for _, r := range list {
|
|
if r.GetDraft() || r.GetPrerelease() {
|
|
continue
|
|
}
|
|
|
|
ret = append(ret, r)
|
|
}
|
|
|
|
return ret, nil
|
|
}
|
|
|
|
func GetAfter(ctx context.Context, referenceRelease string) (ret []*github.RepositoryRelease, err error) {
|
|
if !semver.IsValid(referenceRelease) {
|
|
return nil, errors.Wrap(err, "failed to parse reference release")
|
|
}
|
|
|
|
list, err := GetAll(ctx)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
for _, r := range list {
|
|
if semver.Compare(referenceRelease, r.GetName()) < 0 {
|
|
ret = append(ret, r)
|
|
}
|
|
}
|
|
|
|
return ret, nil
|
|
}
|