From b07b9851e19008c19a3058f6e5bd5875f3030aef Mon Sep 17 00:00:00 2001 From: kvmw Date: Mon, 10 Feb 2025 13:07:54 +0100 Subject: [PATCH 1/2] Uses pagination to list all release assets Signed-off-by: kvmw --- github.go | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/github.go b/github.go index 5d263be..cb6a405 100644 --- a/github.go +++ b/github.go @@ -47,8 +47,8 @@ type GitHubClient struct { } func NewGitHubClient(source Source) (*GitHubClient, error) { - var httpClient = &http.Client{} - var ctx = context.TODO() + httpClient := &http.Client{} + ctx := context.TODO() if source.Insecure { httpClient.Transport = &http.Transport{ @@ -214,17 +214,24 @@ func (g *GitHubClient) UpdateRelease(release github.RepositoryRelease) (*github. func (g *GitHubClient) ListReleaseAssets(release github.RepositoryRelease) ([]*github.ReleaseAsset, error) { opt := &github.ListOptions{PerPage: 100} - assets, res, err := g.client.Repositories.ListReleaseAssets(context.TODO(), g.owner, g.repository, *release.ID, opt) - if err != nil { - return nil, err - } - - err = res.Body.Close() - if err != nil { - return nil, err + var allAssets []*github.ReleaseAsset + for { + assets, res, err := g.client.Repositories.ListReleaseAssets(context.TODO(), g.owner, g.repository, *release.ID, opt) + if err != nil { + return []*github.ReleaseAsset{}, err + } + allAssets = append(allAssets, assets...) + if res.NextPage == 0 { + err = res.Body.Close() + if err != nil { + return nil, err + } + break + } + opt.Page = res.NextPage } - return assets, nil + return allAssets, nil } func (g *GitHubClient) UploadReleaseAsset(release github.RepositoryRelease, name string, file *os.File) error { @@ -309,7 +316,6 @@ func (g *GitHubClient) GetZipballLink(tag string) (*url.URL, error) { func (g *GitHubClient) ResolveTagToCommitSHA(tagName string) (string, error) { ref, res, err := g.client.Git.GetRef(context.TODO(), g.owner, g.repository, "tags/"+tagName) - if err != nil { return "", err } @@ -328,7 +334,6 @@ func (g *GitHubClient) ResolveTagToCommitSHA(tagName string) (string, error) { // Resolve tag to commit sha tag, res, err := g.client.Git.GetTag(context.TODO(), g.owner, g.repository, *ref.Object.SHA) - if err != nil { return "", err } From 5eea65c91c3335abfd88a9c9a7d3d2a42a797497 Mon Sep 17 00:00:00 2001 From: Taylor Silva Date: Thu, 13 Mar 2025 12:16:16 -0400 Subject: [PATCH 2/2] ensure Body is always closed Signed-off-by: Taylor Silva --- github.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/github.go b/github.go index cb6a405..4cbffa1 100644 --- a/github.go +++ b/github.go @@ -229,6 +229,12 @@ func (g *GitHubClient) ListReleaseAssets(release github.RepositoryRelease) ([]*g break } opt.Page = res.NextPage + + err = res.Body.Close() + if err != nil { + return nil, err + } + break } return allAssets, nil