From 0003fb9392f01190fbe50c4b06ef06b5bb7d5383 Mon Sep 17 00:00:00 2001 From: pei711 <199601925+pei711@users.noreply.github.com> Date: Mon, 26 Oct 2026 01:26:10 +0800 Subject: [PATCH] fix: propagate repository completion errors --- pkg/github/repository_resource_completions.go | 15 ++++++-- .../repository_resource_completions_test.go | 38 +++++++++++++++++++ 2 files changed, 50 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..79a996695d 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,43 @@ func TestCompleteTag_MissingDependencies(t *testing.T) { assert.Nil(t, result) } +func TestRepositoryResourceCompletions_PropagateRepositoryErrors(t *testing.T) { + tests := []struct { + name string + endpoint EndpointPattern + complete CompleteHandler + }{ + { + name: "branch", + endpoint: GetReposBranchesByOwnerByRepo, + complete: completeBranch, + }, + { + name: "commit SHA", + endpoint: GetReposCommitsByOwnerByRepo, + complete: completeSHA, + }, + { + name: "tag", + endpoint: GetReposTagsByOwnerByRepo, + complete: completeTag, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + client := mustNewGHClient(t, NewMockedHTTPClient(WithRequestMatchHandler(tt.endpoint, func(w http.ResponseWriter, _ *http.Request) { + http.Error(w, `{"message":"rate limited"}`, http.StatusForbidden) + }))) + + values, err := tt.complete(t.Context(), client, map[string]string{"owner": "test", "repo": "repo"}, "") + + require.Error(t, err) + assert.Nil(t, values) + }) + } +} + func TestCompletePRNumber_MissingDependencies(t *testing.T) { ctx := t.Context()