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 }