From 6ea9fac2eb6e62f23eac5d3b4ccf1f048794ee16 Mon Sep 17 00:00:00 2001 From: abhishek Date: Tue, 21 Apr 2026 18:38:20 +0530 Subject: [PATCH 1/2] feat: Add Copilot coding agent and content exclusion org endpoints Implement support for two Copilot organization management endpoints under the CopilotService. - Add ListCopilotCodingAgentRepositories for GET /orgs/{org}/copilot/coding-agent/permissions/repositories. - Add GetCopilotOrganizationContentExclusionDetails for GET /orgs/{org}/copilot/content_exclusion. - Add tests covering both endpoints, JSON round-trip tests for the new types, and regenerate accessors and iterators. API docs: - https://docs.github.com/rest/copilot/copilot-coding-agent-management#list-repositories-enabled-for-copilot-coding-agent-in-an-organization - https://docs.github.com/rest/copilot/copilot-content-exclusion-management#get-copilot-content-exclusion-rules-for-an-organization Fixes: #4175 --- github/copilot.go | 60 ++++++++++++++++ github/copilot_test.go | 124 ++++++++++++++++++++++++++++++++ github/github-accessors.go | 16 +++++ github/github-accessors_test.go | 19 +++++ github/github-iterators.go | 35 +++++++++ github/github-iterators_test.go | 72 +++++++++++++++++++ 6 files changed, 326 insertions(+) diff --git a/github/copilot.go b/github/copilot.go index dc29d52dbc4..cd46ab6bd70 100644 --- a/github/copilot.go +++ b/github/copilot.go @@ -356,6 +356,66 @@ func (s *CopilotService) ListCopilotEnterpriseSeats(ctx context.Context, enterpr return copilotSeats, resp, nil } +// ListCopilotCodingAgentRepositoriesResponse represents the response from listing +// repositories enabled for the Copilot coding agent in an organization. +type ListCopilotCodingAgentRepositoriesResponse struct { + TotalCount int `json:"total_count"` + Repositories []*Repository `json:"repositories"` +} + +// ListCopilotCodingAgentRepositories lists repositories enabled for the Copilot coding agent in an organization. +// +// GitHub API docs: https://docs.github.com/rest/copilot/copilot-coding-agent-management?apiVersion=2022-11-28#list-repositories-enabled-for-copilot-coding-agent-in-an-organization +// +//meta:operation GET /orgs/{org}/copilot/coding-agent/permissions/repositories +func (s *CopilotService) ListCopilotCodingAgentRepositories(ctx context.Context, org string, opts *ListOptions) (*ListCopilotCodingAgentRepositoriesResponse, *Response, error) { + u := fmt.Sprintf("orgs/%v/copilot/coding-agent/permissions/repositories", org) + u, err := addOptions(u, opts) + if err != nil { + return nil, nil, err + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + var result *ListCopilotCodingAgentRepositoriesResponse + resp, err := s.client.Do(ctx, req, &result) + if err != nil { + return nil, resp, err + } + + return result, resp, nil +} + +// CopilotOrganizationContentExclusionDetails lists all Copilot content exclusion +// rules for an organization, keyed by repository full name. Each value is the +// list of file paths excluded from Copilot for that repository. +type CopilotOrganizationContentExclusionDetails map[string][]string + +// GetCopilotOrganizationContentExclusionDetails gets the Copilot content exclusion rules for an organization. +// +// GitHub API docs: https://docs.github.com/rest/copilot/copilot-content-exclusion-management?apiVersion=2022-11-28#get-copilot-content-exclusion-rules-for-an-organization +// +//meta:operation GET /orgs/{org}/copilot/content_exclusion +func (s *CopilotService) GetCopilotOrganizationContentExclusionDetails(ctx context.Context, org string) (CopilotOrganizationContentExclusionDetails, *Response, error) { + u := fmt.Sprintf("orgs/%v/copilot/content_exclusion", org) + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + details := CopilotOrganizationContentExclusionDetails{} + resp, err := s.client.Do(ctx, req, &details) + if err != nil { + return nil, resp, err + } + + return details, resp, nil +} + // AddCopilotTeams adds teams to the Copilot for Business subscription for an organization. // // GitHub API docs: https://docs.github.com/rest/copilot/copilot-user-management?apiVersion=2022-11-28#add-teams-to-the-copilot-subscription-for-an-organization diff --git a/github/copilot_test.go b/github/copilot_test.go index 90e13a110c3..ce7f36739b1 100644 --- a/github/copilot_test.go +++ b/github/copilot_test.go @@ -776,6 +776,130 @@ func TestCopilotService_ListCopilotEnterpriseSeats(t *testing.T) { }) } +func TestCopilotService_ListCopilotCodingAgentRepositories(t *testing.T) { + t.Parallel() + client, mux, _ := setup(t) + + mux.HandleFunc("/orgs/o/copilot/coding-agent/permissions/repositories", func(w http.ResponseWriter, r *http.Request) { + testMethod(t, r, "GET") + testFormValues(t, r, values{ + "per_page": "100", + "page": "1", + }) + fmt.Fprint(w, `{ + "total_count": 2, + "repositories": [ + {"id": 1, "name": "Hello-World", "full_name": "octocat/Hello-World"}, + {"id": 2, "name": "Hello-World-2", "full_name": "octocat/Hello-World-2"} + ] + }`) + }) + + ctx := t.Context() + opts := &ListOptions{Page: 1, PerPage: 100} + got, _, err := client.Copilot.ListCopilotCodingAgentRepositories(ctx, "o", opts) + if err != nil { + t.Errorf("Copilot.ListCopilotCodingAgentRepositories returned error: %v", err) + } + + want := &ListCopilotCodingAgentRepositoriesResponse{ + TotalCount: 2, + Repositories: []*Repository{ + {ID: Ptr(int64(1)), Name: Ptr("Hello-World"), FullName: Ptr("octocat/Hello-World")}, + {ID: Ptr(int64(2)), Name: Ptr("Hello-World-2"), FullName: Ptr("octocat/Hello-World-2")}, + }, + } + if !cmp.Equal(got, want) { + t.Errorf("Copilot.ListCopilotCodingAgentRepositories returned %+v, want %+v", got, want) + } + + const methodName = "ListCopilotCodingAgentRepositories" + + testBadOptions(t, methodName, func() (err error) { + _, _, err = client.Copilot.ListCopilotCodingAgentRepositories(ctx, "\n", opts) + return err + }) + + testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { + got, resp, err := client.Copilot.ListCopilotCodingAgentRepositories(ctx, "o", opts) + if got != nil { + t.Errorf("Copilot.ListCopilotCodingAgentRepositories returned %+v, want nil", got) + } + return resp, err + }) +} + +func TestCopilotService_GetCopilotOrganizationContentExclusionDetails(t *testing.T) { + t.Parallel() + client, mux, _ := setup(t) + + mux.HandleFunc("/orgs/o/copilot/content_exclusion", func(w http.ResponseWriter, r *http.Request) { + testMethod(t, r, "GET") + fmt.Fprint(w, `{ + "octo-repo": ["/src/some-dir/kernel.rs"], + "octo-repo-2": ["/docs/secret.md", "**/*.env"] + }`) + }) + + ctx := t.Context() + got, _, err := client.Copilot.GetCopilotOrganizationContentExclusionDetails(ctx, "o") + if err != nil { + t.Errorf("Copilot.GetCopilotOrganizationContentExclusionDetails returned error: %v", err) + } + + want := CopilotOrganizationContentExclusionDetails{ + "octo-repo": {"/src/some-dir/kernel.rs"}, + "octo-repo-2": {"/docs/secret.md", "**/*.env"}, + } + if !cmp.Equal(got, want) { + t.Errorf("Copilot.GetCopilotOrganizationContentExclusionDetails returned %+v, want %+v", got, want) + } + + const methodName = "GetCopilotOrganizationContentExclusionDetails" + + testBadOptions(t, methodName, func() (err error) { + _, _, err = client.Copilot.GetCopilotOrganizationContentExclusionDetails(ctx, "\n") + return err + }) + + testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { + got, resp, err := client.Copilot.GetCopilotOrganizationContentExclusionDetails(ctx, "o") + if got != nil { + t.Errorf("Copilot.GetCopilotOrganizationContentExclusionDetails returned %+v, want nil", got) + } + return resp, err + }) +} + +func TestListCopilotCodingAgentRepositoriesResponse_Marshal(t *testing.T) { + t.Parallel() + testJSONMarshal(t, &ListCopilotCodingAgentRepositoriesResponse{}, `{"total_count":0,"repositories":null}`) + + r := &ListCopilotCodingAgentRepositoriesResponse{ + TotalCount: 1, + Repositories: []*Repository{ + {ID: Ptr(int64(1)), Name: Ptr("Hello-World"), FullName: Ptr("octocat/Hello-World")}, + }, + } + want := `{ + "total_count": 1, + "repositories": [ + {"id": 1, "name": "Hello-World", "full_name": "octocat/Hello-World"} + ] + }` + testJSONMarshal(t, r, want) +} + +func TestCopilotOrganizationContentExclusionDetails_Marshal(t *testing.T) { + t.Parallel() + testJSONMarshal(t, CopilotOrganizationContentExclusionDetails{}, `{}`) + + d := CopilotOrganizationContentExclusionDetails{ + "octo-repo": {"/src/some-dir/kernel.rs"}, + } + testJSONMarshal(t, d, `{"octo-repo":["/src/some-dir/kernel.rs"]}`) +} + func TestCopilotService_AddCopilotTeams(t *testing.T) { t.Parallel() client, mux, _ := setup(t) diff --git a/github/github-accessors.go b/github/github-accessors.go index e8387d6f06c..e5fd4dfe8f6 100644 --- a/github/github-accessors.go +++ b/github/github-accessors.go @@ -19886,6 +19886,22 @@ func (l *ListContributorsOptions) GetAnon() string { return l.Anon } +// GetRepositories returns the Repositories slice if it's non-nil, nil otherwise. +func (l *ListCopilotCodingAgentRepositoriesResponse) GetRepositories() []*Repository { + if l == nil || l.Repositories == nil { + return nil + } + return l.Repositories +} + +// GetTotalCount returns the TotalCount field. +func (l *ListCopilotCodingAgentRepositoriesResponse) GetTotalCount() int { + if l == nil { + return 0 + } + return l.TotalCount +} + // GetSeats returns the Seats slice if it's non-nil, nil otherwise. func (l *ListCopilotSeatsResponse) GetSeats() []*CopilotSeatDetails { if l == nil || l.Seats == nil { diff --git a/github/github-accessors_test.go b/github/github-accessors_test.go index fd65a63a20f..d0a4d027a55 100644 --- a/github/github-accessors_test.go +++ b/github/github-accessors_test.go @@ -25140,6 +25140,25 @@ func TestListContributorsOptions_GetAnon(tt *testing.T) { l.GetAnon() } +func TestListCopilotCodingAgentRepositoriesResponse_GetRepositories(tt *testing.T) { + tt.Parallel() + zeroValue := []*Repository{} + l := &ListCopilotCodingAgentRepositoriesResponse{Repositories: zeroValue} + l.GetRepositories() + l = &ListCopilotCodingAgentRepositoriesResponse{} + l.GetRepositories() + l = nil + l.GetRepositories() +} + +func TestListCopilotCodingAgentRepositoriesResponse_GetTotalCount(tt *testing.T) { + tt.Parallel() + l := &ListCopilotCodingAgentRepositoriesResponse{} + l.GetTotalCount() + l = nil + l.GetTotalCount() +} + func TestListCopilotSeatsResponse_GetSeats(tt *testing.T) { tt.Parallel() zeroValue := []*CopilotSeatDetails{} diff --git a/github/github-iterators.go b/github/github-iterators.go index 5568ca79236..cc9e11efb69 100644 --- a/github/github-iterators.go +++ b/github/github-iterators.go @@ -2397,6 +2397,41 @@ func (s *CodespacesService) ListUserSecretsIter(ctx context.Context, opts *ListO } } +// ListCopilotCodingAgentRepositoriesIter returns an iterator that paginates through all results of ListCopilotCodingAgentRepositories. +func (s *CopilotService) ListCopilotCodingAgentRepositoriesIter(ctx context.Context, org string, opts *ListOptions) iter.Seq2[*Repository, error] { + return func(yield func(*Repository, error) bool) { + // Create a copy of opts to avoid mutating the caller's struct + if opts == nil { + opts = &ListOptions{} + } else { + opts = Ptr(*opts) + } + + for { + results, resp, err := s.ListCopilotCodingAgentRepositories(ctx, org, opts) + if err != nil { + yield(nil, err) + return + } + + var iterItems []*Repository + if results != nil { + iterItems = results.Repositories + } + for _, item := range iterItems { + if !yield(item, nil) { + return + } + } + + if resp.NextPage == 0 { + break + } + opts.Page = resp.NextPage + } + } +} + // ListCopilotEnterpriseSeatsIter returns an iterator that paginates through all results of ListCopilotEnterpriseSeats. func (s *CopilotService) ListCopilotEnterpriseSeatsIter(ctx context.Context, enterprise string, opts *ListOptions) iter.Seq2[*CopilotSeatDetails, error] { return func(yield func(*CopilotSeatDetails, error) bool) { diff --git a/github/github-iterators_test.go b/github/github-iterators_test.go index f64e39c9fde..ebee3c85c30 100644 --- a/github/github-iterators_test.go +++ b/github/github-iterators_test.go @@ -5127,6 +5127,78 @@ func TestCodespacesService_ListUserSecretsIter(t *testing.T) { } } +func TestCopilotService_ListCopilotCodingAgentRepositoriesIter(t *testing.T) { + t.Parallel() + client, mux, _ := setup(t) + var callNum int + mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { + callNum++ + switch callNum { + case 1: + w.Header().Set("Link", `; rel="next"`) + fmt.Fprint(w, `{"repositories": [{},{},{}]}`) + case 2: + fmt.Fprint(w, `{"repositories": [{},{},{},{}]}`) + case 3: + fmt.Fprint(w, `{"repositories": [{},{}]}`) + case 4: + w.WriteHeader(http.StatusNotFound) + case 5: + fmt.Fprint(w, `{"repositories": [{},{}]}`) + } + }) + + iter := client.Copilot.ListCopilotCodingAgentRepositoriesIter(t.Context(), "", nil) + var gotItems int + for _, err := range iter { + gotItems++ + if err != nil { + t.Errorf("Unexpected error: %v", err) + } + } + if want := 7; gotItems != want { + t.Errorf("client.Copilot.ListCopilotCodingAgentRepositoriesIter call 1 got %v items; want %v", gotItems, want) + } + + opts := &ListOptions{} + iter = client.Copilot.ListCopilotCodingAgentRepositoriesIter(t.Context(), "", opts) + gotItems = 0 + for _, err := range iter { + gotItems++ + if err != nil { + t.Errorf("Unexpected error: %v", err) + } + } + if want := 2; gotItems != want { + t.Errorf("client.Copilot.ListCopilotCodingAgentRepositoriesIter call 2 got %v items; want %v", gotItems, want) + } + + iter = client.Copilot.ListCopilotCodingAgentRepositoriesIter(t.Context(), "", nil) + gotItems = 0 + for _, err := range iter { + gotItems++ + if err == nil { + t.Error("expected error; got nil") + } + } + if gotItems != 1 { + t.Errorf("client.Copilot.ListCopilotCodingAgentRepositoriesIter call 3 got %v items; want 1 (an error)", gotItems) + } + + iter = client.Copilot.ListCopilotCodingAgentRepositoriesIter(t.Context(), "", nil) + gotItems = 0 + iter(func(item *Repository, err error) bool { + gotItems++ + if err != nil { + t.Errorf("Unexpected error: %v", err) + } + return false + }) + if gotItems != 1 { + t.Errorf("client.Copilot.ListCopilotCodingAgentRepositoriesIter call 4 got %v items; want 1 (an error)", gotItems) + } +} + func TestCopilotService_ListCopilotEnterpriseSeatsIter(t *testing.T) { t.Parallel() client, mux, _ := setup(t) From 7dcd0649fd009d3b511863a125217d9b80342360 Mon Sep 17 00:00:00 2001 From: abhishek Date: Wed, 22 Apr 2026 15:07:20 +0530 Subject: [PATCH 2/2] Renamed APIs Signed-off-by: abhishek --- github/copilot.go | 14 +++---- github/copilot_test.go | 40 +++++++++--------- github/github-accessors.go | 32 +++++++------- github/github-accessors_test.go | 38 ++++++++--------- github/github-iterators.go | 30 ++++++------- github/github-iterators_test.go | 74 ++++++++++++++++----------------- 6 files changed, 114 insertions(+), 114 deletions(-) diff --git a/github/copilot.go b/github/copilot.go index cd46ab6bd70..af36c29354b 100644 --- a/github/copilot.go +++ b/github/copilot.go @@ -356,19 +356,19 @@ func (s *CopilotService) ListCopilotEnterpriseSeats(ctx context.Context, enterpr return copilotSeats, resp, nil } -// ListCopilotCodingAgentRepositoriesResponse represents the response from listing +// ListOrganizationCopilotCodingAgentRepositoriesResponse represents the response from listing // repositories enabled for the Copilot coding agent in an organization. -type ListCopilotCodingAgentRepositoriesResponse struct { +type ListOrganizationCopilotCodingAgentRepositoriesResponse struct { TotalCount int `json:"total_count"` Repositories []*Repository `json:"repositories"` } -// ListCopilotCodingAgentRepositories lists repositories enabled for the Copilot coding agent in an organization. +// ListOrganizationCodingAgentRepositories lists repositories enabled for the Copilot coding agent in an organization. // // GitHub API docs: https://docs.github.com/rest/copilot/copilot-coding-agent-management?apiVersion=2022-11-28#list-repositories-enabled-for-copilot-coding-agent-in-an-organization // //meta:operation GET /orgs/{org}/copilot/coding-agent/permissions/repositories -func (s *CopilotService) ListCopilotCodingAgentRepositories(ctx context.Context, org string, opts *ListOptions) (*ListCopilotCodingAgentRepositoriesResponse, *Response, error) { +func (s *CopilotService) ListOrganizationCodingAgentRepositories(ctx context.Context, org string, opts *ListOptions) (*ListOrganizationCopilotCodingAgentRepositoriesResponse, *Response, error) { u := fmt.Sprintf("orgs/%v/copilot/coding-agent/permissions/repositories", org) u, err := addOptions(u, opts) if err != nil { @@ -380,7 +380,7 @@ func (s *CopilotService) ListCopilotCodingAgentRepositories(ctx context.Context, return nil, nil, err } - var result *ListCopilotCodingAgentRepositoriesResponse + var result *ListOrganizationCopilotCodingAgentRepositoriesResponse resp, err := s.client.Do(ctx, req, &result) if err != nil { return nil, resp, err @@ -394,12 +394,12 @@ func (s *CopilotService) ListCopilotCodingAgentRepositories(ctx context.Context, // list of file paths excluded from Copilot for that repository. type CopilotOrganizationContentExclusionDetails map[string][]string -// GetCopilotOrganizationContentExclusionDetails gets the Copilot content exclusion rules for an organization. +// GetOrganizationContentExclusionDetails gets the Copilot content exclusion rules for an organization. // // GitHub API docs: https://docs.github.com/rest/copilot/copilot-content-exclusion-management?apiVersion=2022-11-28#get-copilot-content-exclusion-rules-for-an-organization // //meta:operation GET /orgs/{org}/copilot/content_exclusion -func (s *CopilotService) GetCopilotOrganizationContentExclusionDetails(ctx context.Context, org string) (CopilotOrganizationContentExclusionDetails, *Response, error) { +func (s *CopilotService) GetOrganizationContentExclusionDetails(ctx context.Context, org string) (CopilotOrganizationContentExclusionDetails, *Response, error) { u := fmt.Sprintf("orgs/%v/copilot/content_exclusion", org) req, err := s.client.NewRequest("GET", u, nil) diff --git a/github/copilot_test.go b/github/copilot_test.go index ce7f36739b1..aa4e085363c 100644 --- a/github/copilot_test.go +++ b/github/copilot_test.go @@ -776,7 +776,7 @@ func TestCopilotService_ListCopilotEnterpriseSeats(t *testing.T) { }) } -func TestCopilotService_ListCopilotCodingAgentRepositories(t *testing.T) { +func TestCopilotService_ListOrganizationCodingAgentRepositories(t *testing.T) { t.Parallel() client, mux, _ := setup(t) @@ -797,12 +797,12 @@ func TestCopilotService_ListCopilotCodingAgentRepositories(t *testing.T) { ctx := t.Context() opts := &ListOptions{Page: 1, PerPage: 100} - got, _, err := client.Copilot.ListCopilotCodingAgentRepositories(ctx, "o", opts) + got, _, err := client.Copilot.ListOrganizationCodingAgentRepositories(ctx, "o", opts) if err != nil { - t.Errorf("Copilot.ListCopilotCodingAgentRepositories returned error: %v", err) + t.Errorf("Copilot.ListOrganizationCodingAgentRepositories returned error: %v", err) } - want := &ListCopilotCodingAgentRepositoriesResponse{ + want := &ListOrganizationCopilotCodingAgentRepositoriesResponse{ TotalCount: 2, Repositories: []*Repository{ {ID: Ptr(int64(1)), Name: Ptr("Hello-World"), FullName: Ptr("octocat/Hello-World")}, @@ -810,26 +810,26 @@ func TestCopilotService_ListCopilotCodingAgentRepositories(t *testing.T) { }, } if !cmp.Equal(got, want) { - t.Errorf("Copilot.ListCopilotCodingAgentRepositories returned %+v, want %+v", got, want) + t.Errorf("Copilot.ListOrganizationCodingAgentRepositories returned %+v, want %+v", got, want) } - const methodName = "ListCopilotCodingAgentRepositories" + const methodName = "ListOrganizationCodingAgentRepositories" testBadOptions(t, methodName, func() (err error) { - _, _, err = client.Copilot.ListCopilotCodingAgentRepositories(ctx, "\n", opts) + _, _, err = client.Copilot.ListOrganizationCodingAgentRepositories(ctx, "\n", opts) return err }) testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { - got, resp, err := client.Copilot.ListCopilotCodingAgentRepositories(ctx, "o", opts) + got, resp, err := client.Copilot.ListOrganizationCodingAgentRepositories(ctx, "o", opts) if got != nil { - t.Errorf("Copilot.ListCopilotCodingAgentRepositories returned %+v, want nil", got) + t.Errorf("Copilot.ListOrganizationCodingAgentRepositories returned %+v, want nil", got) } return resp, err }) } -func TestCopilotService_GetCopilotOrganizationContentExclusionDetails(t *testing.T) { +func TestCopilotService_GetOrganizationContentExclusionDetails(t *testing.T) { t.Parallel() client, mux, _ := setup(t) @@ -842,9 +842,9 @@ func TestCopilotService_GetCopilotOrganizationContentExclusionDetails(t *testing }) ctx := t.Context() - got, _, err := client.Copilot.GetCopilotOrganizationContentExclusionDetails(ctx, "o") + got, _, err := client.Copilot.GetOrganizationContentExclusionDetails(ctx, "o") if err != nil { - t.Errorf("Copilot.GetCopilotOrganizationContentExclusionDetails returned error: %v", err) + t.Errorf("Copilot.GetOrganizationContentExclusionDetails returned error: %v", err) } want := CopilotOrganizationContentExclusionDetails{ @@ -852,30 +852,30 @@ func TestCopilotService_GetCopilotOrganizationContentExclusionDetails(t *testing "octo-repo-2": {"/docs/secret.md", "**/*.env"}, } if !cmp.Equal(got, want) { - t.Errorf("Copilot.GetCopilotOrganizationContentExclusionDetails returned %+v, want %+v", got, want) + t.Errorf("Copilot.GetOrganizationContentExclusionDetails returned %+v, want %+v", got, want) } - const methodName = "GetCopilotOrganizationContentExclusionDetails" + const methodName = "GetOrganizationContentExclusionDetails" testBadOptions(t, methodName, func() (err error) { - _, _, err = client.Copilot.GetCopilotOrganizationContentExclusionDetails(ctx, "\n") + _, _, err = client.Copilot.GetOrganizationContentExclusionDetails(ctx, "\n") return err }) testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { - got, resp, err := client.Copilot.GetCopilotOrganizationContentExclusionDetails(ctx, "o") + got, resp, err := client.Copilot.GetOrganizationContentExclusionDetails(ctx, "o") if got != nil { - t.Errorf("Copilot.GetCopilotOrganizationContentExclusionDetails returned %+v, want nil", got) + t.Errorf("Copilot.GetOrganizationContentExclusionDetails returned %+v, want nil", got) } return resp, err }) } -func TestListCopilotCodingAgentRepositoriesResponse_Marshal(t *testing.T) { +func TestListOrganizationCopilotCodingAgentRepositoriesResponse_Marshal(t *testing.T) { t.Parallel() - testJSONMarshal(t, &ListCopilotCodingAgentRepositoriesResponse{}, `{"total_count":0,"repositories":null}`) + testJSONMarshal(t, &ListOrganizationCopilotCodingAgentRepositoriesResponse{}, `{"total_count":0,"repositories":null}`) - r := &ListCopilotCodingAgentRepositoriesResponse{ + r := &ListOrganizationCopilotCodingAgentRepositoriesResponse{ TotalCount: 1, Repositories: []*Repository{ {ID: Ptr(int64(1)), Name: Ptr("Hello-World"), FullName: Ptr("octocat/Hello-World")}, diff --git a/github/github-accessors.go b/github/github-accessors.go index e5fd4dfe8f6..ba2ef29fdbb 100644 --- a/github/github-accessors.go +++ b/github/github-accessors.go @@ -19886,22 +19886,6 @@ func (l *ListContributorsOptions) GetAnon() string { return l.Anon } -// GetRepositories returns the Repositories slice if it's non-nil, nil otherwise. -func (l *ListCopilotCodingAgentRepositoriesResponse) GetRepositories() []*Repository { - if l == nil || l.Repositories == nil { - return nil - } - return l.Repositories -} - -// GetTotalCount returns the TotalCount field. -func (l *ListCopilotCodingAgentRepositoriesResponse) GetTotalCount() int { - if l == nil { - return 0 - } - return l.TotalCount -} - // GetSeats returns the Seats slice if it's non-nil, nil otherwise. func (l *ListCopilotSeatsResponse) GetSeats() []*CopilotSeatDetails { if l == nil || l.Seats == nil { @@ -20270,6 +20254,22 @@ func (l *ListOptions) GetPerPage() int { return l.PerPage } +// GetRepositories returns the Repositories slice if it's non-nil, nil otherwise. +func (l *ListOrganizationCopilotCodingAgentRepositoriesResponse) GetRepositories() []*Repository { + if l == nil || l.Repositories == nil { + return nil + } + return l.Repositories +} + +// GetTotalCount returns the TotalCount field. +func (l *ListOrganizationCopilotCodingAgentRepositoriesResponse) GetTotalCount() int { + if l == nil { + return 0 + } + return l.TotalCount +} + // GetOrganizations returns the Organizations slice if it's non-nil, nil otherwise. func (l *ListOrganizations) GetOrganizations() []*Organization { if l == nil || l.Organizations == nil { diff --git a/github/github-accessors_test.go b/github/github-accessors_test.go index d0a4d027a55..a69f5336871 100644 --- a/github/github-accessors_test.go +++ b/github/github-accessors_test.go @@ -25140,25 +25140,6 @@ func TestListContributorsOptions_GetAnon(tt *testing.T) { l.GetAnon() } -func TestListCopilotCodingAgentRepositoriesResponse_GetRepositories(tt *testing.T) { - tt.Parallel() - zeroValue := []*Repository{} - l := &ListCopilotCodingAgentRepositoriesResponse{Repositories: zeroValue} - l.GetRepositories() - l = &ListCopilotCodingAgentRepositoriesResponse{} - l.GetRepositories() - l = nil - l.GetRepositories() -} - -func TestListCopilotCodingAgentRepositoriesResponse_GetTotalCount(tt *testing.T) { - tt.Parallel() - l := &ListCopilotCodingAgentRepositoriesResponse{} - l.GetTotalCount() - l = nil - l.GetTotalCount() -} - func TestListCopilotSeatsResponse_GetSeats(tt *testing.T) { tt.Parallel() zeroValue := []*CopilotSeatDetails{} @@ -25590,6 +25571,25 @@ func TestListOptions_GetPerPage(tt *testing.T) { l.GetPerPage() } +func TestListOrganizationCopilotCodingAgentRepositoriesResponse_GetRepositories(tt *testing.T) { + tt.Parallel() + zeroValue := []*Repository{} + l := &ListOrganizationCopilotCodingAgentRepositoriesResponse{Repositories: zeroValue} + l.GetRepositories() + l = &ListOrganizationCopilotCodingAgentRepositoriesResponse{} + l.GetRepositories() + l = nil + l.GetRepositories() +} + +func TestListOrganizationCopilotCodingAgentRepositoriesResponse_GetTotalCount(tt *testing.T) { + tt.Parallel() + l := &ListOrganizationCopilotCodingAgentRepositoriesResponse{} + l.GetTotalCount() + l = nil + l.GetTotalCount() +} + func TestListOrganizations_GetOrganizations(tt *testing.T) { tt.Parallel() zeroValue := []*Organization{} diff --git a/github/github-iterators.go b/github/github-iterators.go index cc9e11efb69..384d4718cd8 100644 --- a/github/github-iterators.go +++ b/github/github-iterators.go @@ -2397,9 +2397,9 @@ func (s *CodespacesService) ListUserSecretsIter(ctx context.Context, opts *ListO } } -// ListCopilotCodingAgentRepositoriesIter returns an iterator that paginates through all results of ListCopilotCodingAgentRepositories. -func (s *CopilotService) ListCopilotCodingAgentRepositoriesIter(ctx context.Context, org string, opts *ListOptions) iter.Seq2[*Repository, error] { - return func(yield func(*Repository, error) bool) { +// ListCopilotEnterpriseSeatsIter returns an iterator that paginates through all results of ListCopilotEnterpriseSeats. +func (s *CopilotService) ListCopilotEnterpriseSeatsIter(ctx context.Context, enterprise string, opts *ListOptions) iter.Seq2[*CopilotSeatDetails, error] { + return func(yield func(*CopilotSeatDetails, error) bool) { // Create a copy of opts to avoid mutating the caller's struct if opts == nil { opts = &ListOptions{} @@ -2408,15 +2408,15 @@ func (s *CopilotService) ListCopilotCodingAgentRepositoriesIter(ctx context.Cont } for { - results, resp, err := s.ListCopilotCodingAgentRepositories(ctx, org, opts) + results, resp, err := s.ListCopilotEnterpriseSeats(ctx, enterprise, opts) if err != nil { yield(nil, err) return } - var iterItems []*Repository + var iterItems []*CopilotSeatDetails if results != nil { - iterItems = results.Repositories + iterItems = results.Seats } for _, item := range iterItems { if !yield(item, nil) { @@ -2432,8 +2432,8 @@ func (s *CopilotService) ListCopilotCodingAgentRepositoriesIter(ctx context.Cont } } -// ListCopilotEnterpriseSeatsIter returns an iterator that paginates through all results of ListCopilotEnterpriseSeats. -func (s *CopilotService) ListCopilotEnterpriseSeatsIter(ctx context.Context, enterprise string, opts *ListOptions) iter.Seq2[*CopilotSeatDetails, error] { +// ListCopilotSeatsIter returns an iterator that paginates through all results of ListCopilotSeats. +func (s *CopilotService) ListCopilotSeatsIter(ctx context.Context, org string, opts *ListOptions) iter.Seq2[*CopilotSeatDetails, error] { return func(yield func(*CopilotSeatDetails, error) bool) { // Create a copy of opts to avoid mutating the caller's struct if opts == nil { @@ -2443,7 +2443,7 @@ func (s *CopilotService) ListCopilotEnterpriseSeatsIter(ctx context.Context, ent } for { - results, resp, err := s.ListCopilotEnterpriseSeats(ctx, enterprise, opts) + results, resp, err := s.ListCopilotSeats(ctx, org, opts) if err != nil { yield(nil, err) return @@ -2467,9 +2467,9 @@ func (s *CopilotService) ListCopilotEnterpriseSeatsIter(ctx context.Context, ent } } -// ListCopilotSeatsIter returns an iterator that paginates through all results of ListCopilotSeats. -func (s *CopilotService) ListCopilotSeatsIter(ctx context.Context, org string, opts *ListOptions) iter.Seq2[*CopilotSeatDetails, error] { - return func(yield func(*CopilotSeatDetails, error) bool) { +// ListOrganizationCodingAgentRepositoriesIter returns an iterator that paginates through all results of ListOrganizationCodingAgentRepositories. +func (s *CopilotService) ListOrganizationCodingAgentRepositoriesIter(ctx context.Context, org string, opts *ListOptions) iter.Seq2[*Repository, error] { + return func(yield func(*Repository, error) bool) { // Create a copy of opts to avoid mutating the caller's struct if opts == nil { opts = &ListOptions{} @@ -2478,15 +2478,15 @@ func (s *CopilotService) ListCopilotSeatsIter(ctx context.Context, org string, o } for { - results, resp, err := s.ListCopilotSeats(ctx, org, opts) + results, resp, err := s.ListOrganizationCodingAgentRepositories(ctx, org, opts) if err != nil { yield(nil, err) return } - var iterItems []*CopilotSeatDetails + var iterItems []*Repository if results != nil { - iterItems = results.Seats + iterItems = results.Repositories } for _, item := range iterItems { if !yield(item, nil) { diff --git a/github/github-iterators_test.go b/github/github-iterators_test.go index ebee3c85c30..ca1fb8d76c8 100644 --- a/github/github-iterators_test.go +++ b/github/github-iterators_test.go @@ -5127,7 +5127,7 @@ func TestCodespacesService_ListUserSecretsIter(t *testing.T) { } } -func TestCopilotService_ListCopilotCodingAgentRepositoriesIter(t *testing.T) { +func TestCopilotService_ListCopilotEnterpriseSeatsIter(t *testing.T) { t.Parallel() client, mux, _ := setup(t) var callNum int @@ -5136,19 +5136,19 @@ func TestCopilotService_ListCopilotCodingAgentRepositoriesIter(t *testing.T) { switch callNum { case 1: w.Header().Set("Link", `; rel="next"`) - fmt.Fprint(w, `{"repositories": [{},{},{}]}`) + fmt.Fprint(w, `{"seats": [{},{},{}]}`) case 2: - fmt.Fprint(w, `{"repositories": [{},{},{},{}]}`) + fmt.Fprint(w, `{"seats": [{},{},{},{}]}`) case 3: - fmt.Fprint(w, `{"repositories": [{},{}]}`) + fmt.Fprint(w, `{"seats": [{},{}]}`) case 4: w.WriteHeader(http.StatusNotFound) case 5: - fmt.Fprint(w, `{"repositories": [{},{}]}`) + fmt.Fprint(w, `{"seats": [{},{}]}`) } }) - iter := client.Copilot.ListCopilotCodingAgentRepositoriesIter(t.Context(), "", nil) + iter := client.Copilot.ListCopilotEnterpriseSeatsIter(t.Context(), "", nil) var gotItems int for _, err := range iter { gotItems++ @@ -5157,11 +5157,11 @@ func TestCopilotService_ListCopilotCodingAgentRepositoriesIter(t *testing.T) { } } if want := 7; gotItems != want { - t.Errorf("client.Copilot.ListCopilotCodingAgentRepositoriesIter call 1 got %v items; want %v", gotItems, want) + t.Errorf("client.Copilot.ListCopilotEnterpriseSeatsIter call 1 got %v items; want %v", gotItems, want) } opts := &ListOptions{} - iter = client.Copilot.ListCopilotCodingAgentRepositoriesIter(t.Context(), "", opts) + iter = client.Copilot.ListCopilotEnterpriseSeatsIter(t.Context(), "", opts) gotItems = 0 for _, err := range iter { gotItems++ @@ -5170,10 +5170,10 @@ func TestCopilotService_ListCopilotCodingAgentRepositoriesIter(t *testing.T) { } } if want := 2; gotItems != want { - t.Errorf("client.Copilot.ListCopilotCodingAgentRepositoriesIter call 2 got %v items; want %v", gotItems, want) + t.Errorf("client.Copilot.ListCopilotEnterpriseSeatsIter call 2 got %v items; want %v", gotItems, want) } - iter = client.Copilot.ListCopilotCodingAgentRepositoriesIter(t.Context(), "", nil) + iter = client.Copilot.ListCopilotEnterpriseSeatsIter(t.Context(), "", nil) gotItems = 0 for _, err := range iter { gotItems++ @@ -5182,12 +5182,12 @@ func TestCopilotService_ListCopilotCodingAgentRepositoriesIter(t *testing.T) { } } if gotItems != 1 { - t.Errorf("client.Copilot.ListCopilotCodingAgentRepositoriesIter call 3 got %v items; want 1 (an error)", gotItems) + t.Errorf("client.Copilot.ListCopilotEnterpriseSeatsIter call 3 got %v items; want 1 (an error)", gotItems) } - iter = client.Copilot.ListCopilotCodingAgentRepositoriesIter(t.Context(), "", nil) + iter = client.Copilot.ListCopilotEnterpriseSeatsIter(t.Context(), "", nil) gotItems = 0 - iter(func(item *Repository, err error) bool { + iter(func(item *CopilotSeatDetails, err error) bool { gotItems++ if err != nil { t.Errorf("Unexpected error: %v", err) @@ -5195,11 +5195,11 @@ func TestCopilotService_ListCopilotCodingAgentRepositoriesIter(t *testing.T) { return false }) if gotItems != 1 { - t.Errorf("client.Copilot.ListCopilotCodingAgentRepositoriesIter call 4 got %v items; want 1 (an error)", gotItems) + t.Errorf("client.Copilot.ListCopilotEnterpriseSeatsIter call 4 got %v items; want 1 (an error)", gotItems) } } -func TestCopilotService_ListCopilotEnterpriseSeatsIter(t *testing.T) { +func TestCopilotService_ListCopilotSeatsIter(t *testing.T) { t.Parallel() client, mux, _ := setup(t) var callNum int @@ -5220,7 +5220,7 @@ func TestCopilotService_ListCopilotEnterpriseSeatsIter(t *testing.T) { } }) - iter := client.Copilot.ListCopilotEnterpriseSeatsIter(t.Context(), "", nil) + iter := client.Copilot.ListCopilotSeatsIter(t.Context(), "", nil) var gotItems int for _, err := range iter { gotItems++ @@ -5229,11 +5229,11 @@ func TestCopilotService_ListCopilotEnterpriseSeatsIter(t *testing.T) { } } if want := 7; gotItems != want { - t.Errorf("client.Copilot.ListCopilotEnterpriseSeatsIter call 1 got %v items; want %v", gotItems, want) + t.Errorf("client.Copilot.ListCopilotSeatsIter call 1 got %v items; want %v", gotItems, want) } opts := &ListOptions{} - iter = client.Copilot.ListCopilotEnterpriseSeatsIter(t.Context(), "", opts) + iter = client.Copilot.ListCopilotSeatsIter(t.Context(), "", opts) gotItems = 0 for _, err := range iter { gotItems++ @@ -5242,10 +5242,10 @@ func TestCopilotService_ListCopilotEnterpriseSeatsIter(t *testing.T) { } } if want := 2; gotItems != want { - t.Errorf("client.Copilot.ListCopilotEnterpriseSeatsIter call 2 got %v items; want %v", gotItems, want) + t.Errorf("client.Copilot.ListCopilotSeatsIter call 2 got %v items; want %v", gotItems, want) } - iter = client.Copilot.ListCopilotEnterpriseSeatsIter(t.Context(), "", nil) + iter = client.Copilot.ListCopilotSeatsIter(t.Context(), "", nil) gotItems = 0 for _, err := range iter { gotItems++ @@ -5254,10 +5254,10 @@ func TestCopilotService_ListCopilotEnterpriseSeatsIter(t *testing.T) { } } if gotItems != 1 { - t.Errorf("client.Copilot.ListCopilotEnterpriseSeatsIter call 3 got %v items; want 1 (an error)", gotItems) + t.Errorf("client.Copilot.ListCopilotSeatsIter call 3 got %v items; want 1 (an error)", gotItems) } - iter = client.Copilot.ListCopilotEnterpriseSeatsIter(t.Context(), "", nil) + iter = client.Copilot.ListCopilotSeatsIter(t.Context(), "", nil) gotItems = 0 iter(func(item *CopilotSeatDetails, err error) bool { gotItems++ @@ -5267,11 +5267,11 @@ func TestCopilotService_ListCopilotEnterpriseSeatsIter(t *testing.T) { return false }) if gotItems != 1 { - t.Errorf("client.Copilot.ListCopilotEnterpriseSeatsIter call 4 got %v items; want 1 (an error)", gotItems) + t.Errorf("client.Copilot.ListCopilotSeatsIter call 4 got %v items; want 1 (an error)", gotItems) } } -func TestCopilotService_ListCopilotSeatsIter(t *testing.T) { +func TestCopilotService_ListOrganizationCodingAgentRepositoriesIter(t *testing.T) { t.Parallel() client, mux, _ := setup(t) var callNum int @@ -5280,19 +5280,19 @@ func TestCopilotService_ListCopilotSeatsIter(t *testing.T) { switch callNum { case 1: w.Header().Set("Link", `; rel="next"`) - fmt.Fprint(w, `{"seats": [{},{},{}]}`) + fmt.Fprint(w, `{"repositories": [{},{},{}]}`) case 2: - fmt.Fprint(w, `{"seats": [{},{},{},{}]}`) + fmt.Fprint(w, `{"repositories": [{},{},{},{}]}`) case 3: - fmt.Fprint(w, `{"seats": [{},{}]}`) + fmt.Fprint(w, `{"repositories": [{},{}]}`) case 4: w.WriteHeader(http.StatusNotFound) case 5: - fmt.Fprint(w, `{"seats": [{},{}]}`) + fmt.Fprint(w, `{"repositories": [{},{}]}`) } }) - iter := client.Copilot.ListCopilotSeatsIter(t.Context(), "", nil) + iter := client.Copilot.ListOrganizationCodingAgentRepositoriesIter(t.Context(), "", nil) var gotItems int for _, err := range iter { gotItems++ @@ -5301,11 +5301,11 @@ func TestCopilotService_ListCopilotSeatsIter(t *testing.T) { } } if want := 7; gotItems != want { - t.Errorf("client.Copilot.ListCopilotSeatsIter call 1 got %v items; want %v", gotItems, want) + t.Errorf("client.Copilot.ListOrganizationCodingAgentRepositoriesIter call 1 got %v items; want %v", gotItems, want) } opts := &ListOptions{} - iter = client.Copilot.ListCopilotSeatsIter(t.Context(), "", opts) + iter = client.Copilot.ListOrganizationCodingAgentRepositoriesIter(t.Context(), "", opts) gotItems = 0 for _, err := range iter { gotItems++ @@ -5314,10 +5314,10 @@ func TestCopilotService_ListCopilotSeatsIter(t *testing.T) { } } if want := 2; gotItems != want { - t.Errorf("client.Copilot.ListCopilotSeatsIter call 2 got %v items; want %v", gotItems, want) + t.Errorf("client.Copilot.ListOrganizationCodingAgentRepositoriesIter call 2 got %v items; want %v", gotItems, want) } - iter = client.Copilot.ListCopilotSeatsIter(t.Context(), "", nil) + iter = client.Copilot.ListOrganizationCodingAgentRepositoriesIter(t.Context(), "", nil) gotItems = 0 for _, err := range iter { gotItems++ @@ -5326,12 +5326,12 @@ func TestCopilotService_ListCopilotSeatsIter(t *testing.T) { } } if gotItems != 1 { - t.Errorf("client.Copilot.ListCopilotSeatsIter call 3 got %v items; want 1 (an error)", gotItems) + t.Errorf("client.Copilot.ListOrganizationCodingAgentRepositoriesIter call 3 got %v items; want 1 (an error)", gotItems) } - iter = client.Copilot.ListCopilotSeatsIter(t.Context(), "", nil) + iter = client.Copilot.ListOrganizationCodingAgentRepositoriesIter(t.Context(), "", nil) gotItems = 0 - iter(func(item *CopilotSeatDetails, err error) bool { + iter(func(item *Repository, err error) bool { gotItems++ if err != nil { t.Errorf("Unexpected error: %v", err) @@ -5339,7 +5339,7 @@ func TestCopilotService_ListCopilotSeatsIter(t *testing.T) { return false }) if gotItems != 1 { - t.Errorf("client.Copilot.ListCopilotSeatsIter call 4 got %v items; want 1 (an error)", gotItems) + t.Errorf("client.Copilot.ListOrganizationCodingAgentRepositoriesIter call 4 got %v items; want 1 (an error)", gotItems) } }