talos-upgrade/pkg/release/release.go
2023-10-20 17:28:58 -04:00

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
}