From 36f79af1e58044163f74623700c0ffa745712c17 Mon Sep 17 00:00:00 2001 From: pei711 <199601925+pei711@users.noreply.github.com> Date: Mon, 26 Oct 2026 01:23:40 +0800 Subject: [PATCH] fix: propagate repository completion API errors --- pkg/github/repository_resource_completions.go | 15 +++++++-- .../repository_resource_completions_test.go | 31 +++++++++++++++++++ 2 files changed, 43 insertions(+), 3 deletions(-) diff --git a/pkg/github/repository_resource_completions.go b/pkg/github/repository_resource_completions.go index 9f4edc7b40..988d39756b 100644 --- a/pkg/github/repository_resource_completions.go +++ b/pkg/github/repository_resource_completions.go @@ -154,7 +154,10 @@ func completeBranch(ctx context.Context, client *github.Client, resolved map[str if owner == "" || repo == "" { return values, errors.New("owner or repo not specified") } - branches, _, _ := client.Repositories.ListBranches(ctx, owner, repo, nil) + branches, _, err := client.Repositories.ListBranches(ctx, owner, repo, nil) + if err != nil { + return nil, err + } for _, branch := range branches { if argValue == "" || strings.HasPrefix(branch.GetName(), argValue) { @@ -174,7 +177,10 @@ func completeSHA(ctx context.Context, client *github.Client, resolved map[string if owner == "" || repo == "" { return values, errors.New("owner or repo not specified") } - commits, _, _ := client.Repositories.ListCommits(ctx, owner, repo, nil) + commits, _, err := client.Repositories.ListCommits(ctx, owner, repo, nil) + if err != nil { + return nil, err + } for _, commit := range commits { sha := commit.GetSHA() @@ -194,7 +200,10 @@ func completeTag(ctx context.Context, client *github.Client, resolved map[string if owner == "" || repo == "" { return nil, errors.New("owner or repo not specified") } - tags, _, _ := client.Repositories.ListTags(ctx, owner, repo, nil) + tags, _, err := client.Repositories.ListTags(ctx, owner, repo, nil) + if err != nil { + return nil, err + } var values []string for _, tag := range tags { if argValue == "" || strings.Contains(tag.GetName(), argValue) { diff --git a/pkg/github/repository_resource_completions_test.go b/pkg/github/repository_resource_completions_test.go index 7d20d1e1db..e622380173 100644 --- a/pkg/github/repository_resource_completions_test.go +++ b/pkg/github/repository_resource_completions_test.go @@ -4,6 +4,7 @@ import ( "context" "errors" "fmt" + "net/http" "testing" "github.com/google/go-github/v92/github" @@ -169,6 +170,36 @@ func TestCompleteTag_MissingDependencies(t *testing.T) { assert.Nil(t, result) } +func TestCompleteRepositoryRefs_PropagatesListErrors(t *testing.T) { + tests := []struct { + name string + endpoint EndpointPattern + complete CompleteHandler + }{ + {name: "branch", endpoint: GetReposBranchesByOwnerByRepo, complete: completeBranch}, + {name: "commit", endpoint: GetReposCommitsByOwnerByRepo, complete: completeSHA}, + {name: "tag", endpoint: GetReposTagsByOwnerByRepo, complete: completeTag}, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + httpClient := NewMockedHTTPClient(WithRequestMatchHandler(tt.endpoint, func(w http.ResponseWriter, r *http.Request) { + mockResponse(t, http.StatusForbidden, map[string]string{"message": "rate limited"})(w, r) + })) + client := mustNewGHClient(t, httpClient) + + values, err := tt.complete(t.Context(), client, map[string]string{ + "owner": "octocat", + "repo": "hello-world", + }, "") + + require.Error(t, err) + assert.Nil(t, values) + assert.Contains(t, err.Error(), "rate limited") + }) + } +} + func TestCompletePRNumber_MissingDependencies(t *testing.T) { ctx := t.Context()