From 7d7717c01e3f66b70e489c72b6af357b17fb7aca Mon Sep 17 00:00:00 2001 From: Aman Sayyad <153252172+mramansayyad@users.noreply.github.com> Date: Fri, 5 Jun 2026 23:04:47 +0530 Subject: [PATCH 1/3] feat(copilot): add UpdateCloudAgentConfiguration to CopilotService --- github/copilot_cloud_agent.go | 23 ++++++++++ github/copilot_cloud_agent_test.go | 67 ++++++++++++++++++++++++++++++ 2 files changed, 90 insertions(+) diff --git a/github/copilot_cloud_agent.go b/github/copilot_cloud_agent.go index b323af5efc8..8d879a0aa57 100644 --- a/github/copilot_cloud_agent.go +++ b/github/copilot_cloud_agent.go @@ -49,3 +49,26 @@ func (s *CopilotService) GetCloudAgentConfiguration(ctx context.Context, owner, return config, resp, nil } + +// UpdateCloudAgentConfiguration updates the Copilot cloud agent configuration for a repository. +// +// GitHub API docs: https://docs.github.com/rest/copilot/copilot-cloud-agent-management?apiVersion=2022-11-28#update-copilot-cloud-agent-configuration-for-a-repository +// +//meta:operation PATCH /repos/{owner}/{repo}/copilot/cloud-agent/configuration +func (s *CopilotService) UpdateCloudAgentConfiguration(ctx context.Context, owner, repo string, opts *CopilotCloudAgentConfiguration) (*CopilotCloudAgentConfiguration, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/copilot/cloud-agent/configuration", owner, repo) + + req, err := s.client.NewRequest(ctx, "PATCH", u, opts) + if err != nil { + return nil, nil, err + } + + var config *CopilotCloudAgentConfiguration + resp, err := s.client.Do(req, &config) + if err != nil { + return nil, resp, err + } + + return config, resp, nil +} + diff --git a/github/copilot_cloud_agent_test.go b/github/copilot_cloud_agent_test.go index f29cedad554..2f1639b2943 100644 --- a/github/copilot_cloud_agent_test.go +++ b/github/copilot_cloud_agent_test.go @@ -237,3 +237,70 @@ func TestCopilotService_GetCloudAgentConfiguration_MalformedJSON(t *testing.T) { t.Errorf("GetCloudAgentConfiguration should return nil on error, got %+v", config) } } + +func TestCopilotService_UpdateCloudAgentConfiguration(t *testing.T) { + t.Parallel() + client, mux, _ := setup(t) + + input := &CopilotCloudAgentConfiguration{ + MCPConfiguration: map[string]any{ + "type": "resource", + "uri": "stdio://server", + }, + EnabledTools: &CopilotCloudAgentEnabledTools{ + Codeql: true, + CopilotCodeReview: true, + }, + RequireActionsWorkflowApproval: true, + IsFirewallEnabled: true, + IsFirewallRecommendedAllowlistEnabled: true, + CustomAllowlist: []string{"example.com"}, + } + + mux.HandleFunc("/repos/o/r/copilot/cloud-agent/configuration", func(w http.ResponseWriter, r *http.Request) { + testMethod(t, r, "PATCH") + testJSONBody(t, r, input) + fmt.Fprint(w, `{ + "mcp_configuration": { + "type": "resource", + "uri": "stdio://server" + }, + "enabled_tools": { + "codeql": true, + "copilot_code_review": true, + "secret_scanning": false, + "dependency_vulnerability_checks": false + }, + "require_actions_workflow_approval": true, + "is_firewall_enabled": true, + "is_firewall_recommended_allowlist_enabled": true, + "custom_allowlist": ["example.com"] + }`) + }) + + ctx := t.Context() + config, _, err := client.Copilot.UpdateCloudAgentConfiguration(ctx, "o", "r", input) + if err != nil { + t.Errorf("UpdateCloudAgentConfiguration returned error: %v", err) + } + + want := &CopilotCloudAgentConfiguration{ + MCPConfiguration: map[string]any{ + "type": "resource", + "uri": "stdio://server", + }, + EnabledTools: &CopilotCloudAgentEnabledTools{ + Codeql: true, + CopilotCodeReview: true, + }, + RequireActionsWorkflowApproval: true, + IsFirewallEnabled: true, + IsFirewallRecommendedAllowlistEnabled: true, + CustomAllowlist: []string{"example.com"}, + } + + if !cmp.Equal(config, want) { + t.Errorf("UpdateCloudAgentConfiguration returned %+v, want %+v", config, want) + } +} + From da241b7f1016ac3e8ec91f65bc369c5150093684 Mon Sep 17 00:00:00 2001 From: Aman Sayyad <153252172+mramansayyad@users.noreply.github.com> Date: Sat, 6 Jun 2026 14:28:52 +0530 Subject: [PATCH 2/3] feat(copilot): update API version and fix docs for cloud agent config --- github/copilot_cloud_agent.go | 9 +++--- github/copilot_cloud_agent_test.go | 46 ++++++++++++++++++++++++++++++ openapi_operations.yaml | 4 +++ 3 files changed, 54 insertions(+), 5 deletions(-) diff --git a/github/copilot_cloud_agent.go b/github/copilot_cloud_agent.go index 8d879a0aa57..04c65af8d14 100644 --- a/github/copilot_cloud_agent.go +++ b/github/copilot_cloud_agent.go @@ -30,13 +30,13 @@ type CopilotCloudAgentEnabledTools struct { // GetCloudAgentConfiguration gets the Copilot cloud agent configuration for a repository. // -// GitHub API docs: https://docs.github.com/rest/copilot/copilot-cloud-agent-management?apiVersion=2022-11-28#get-copilot-cloud-agent-configuration-for-a-repository +// GitHub API docs: https://docs.github.com/rest/copilot/copilot-cloud-agent-repository-management?apiVersion=2026-03-10#get-copilot-cloud-agent-configuration-for-a-repository // //meta:operation GET /repos/{owner}/{repo}/copilot/cloud-agent/configuration func (s *CopilotService) GetCloudAgentConfiguration(ctx context.Context, owner, repo string) (*CopilotCloudAgentConfiguration, *Response, error) { u := fmt.Sprintf("repos/%v/%v/copilot/cloud-agent/configuration", owner, repo) - req, err := s.client.NewRequest(ctx, "GET", u, nil) + req, err := s.client.NewRequest(ctx, "GET", u, nil, WithVersion(api20260310)) if err != nil { return nil, nil, err } @@ -52,13 +52,13 @@ func (s *CopilotService) GetCloudAgentConfiguration(ctx context.Context, owner, // UpdateCloudAgentConfiguration updates the Copilot cloud agent configuration for a repository. // -// GitHub API docs: https://docs.github.com/rest/copilot/copilot-cloud-agent-management?apiVersion=2022-11-28#update-copilot-cloud-agent-configuration-for-a-repository +// GitHub API docs: https://docs.github.com/rest/copilot/copilot-cloud-agent-repository-management?apiVersion=2026-03-10#update-copilot-cloud-agent-configuration-for-a-repository // //meta:operation PATCH /repos/{owner}/{repo}/copilot/cloud-agent/configuration func (s *CopilotService) UpdateCloudAgentConfiguration(ctx context.Context, owner, repo string, opts *CopilotCloudAgentConfiguration) (*CopilotCloudAgentConfiguration, *Response, error) { u := fmt.Sprintf("repos/%v/%v/copilot/cloud-agent/configuration", owner, repo) - req, err := s.client.NewRequest(ctx, "PATCH", u, opts) + req, err := s.client.NewRequest(ctx, "PATCH", u, opts, WithVersion(api20260310)) if err != nil { return nil, nil, err } @@ -71,4 +71,3 @@ func (s *CopilotService) UpdateCloudAgentConfiguration(ctx context.Context, owne return config, resp, nil } - diff --git a/github/copilot_cloud_agent_test.go b/github/copilot_cloud_agent_test.go index 2f1639b2943..48b366b45c5 100644 --- a/github/copilot_cloud_agent_test.go +++ b/github/copilot_cloud_agent_test.go @@ -157,6 +157,7 @@ func TestCopilotService_GetCloudAgentConfiguration(t *testing.T) { mux.HandleFunc("/repos/o/r/copilot/cloud-agent/configuration", func(w http.ResponseWriter, r *http.Request) { testMethod(t, r, "GET") + testHeader(t, r, "X-Github-Api-Version", api20260310) fmt.Fprint(w, tt.responseBody) }) @@ -259,6 +260,7 @@ func TestCopilotService_UpdateCloudAgentConfiguration(t *testing.T) { mux.HandleFunc("/repos/o/r/copilot/cloud-agent/configuration", func(w http.ResponseWriter, r *http.Request) { testMethod(t, r, "PATCH") + testHeader(t, r, "X-Github-Api-Version", api20260310) testJSONBody(t, r, input) fmt.Fprint(w, `{ "mcp_configuration": { @@ -304,3 +306,47 @@ func TestCopilotService_UpdateCloudAgentConfiguration(t *testing.T) { } } +func TestCopilotService_UpdateCloudAgentConfiguration_BadOptions(t *testing.T) { + t.Parallel() + client, _, _ := setup(t) + + ctx := t.Context() + const methodName = "UpdateCloudAgentConfiguration" + testBadOptions(t, methodName, func() (err error) { + _, _, err = client.Copilot.UpdateCloudAgentConfiguration(ctx, "\n", "\n", nil) + return err + }) +} + +func TestCopilotService_UpdateCloudAgentConfiguration_NewRequestFailure(t *testing.T) { + t.Parallel() + client, _, _ := setup(t) + + const methodName = "UpdateCloudAgentConfiguration" + testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { + ctx := t.Context() + got, resp, err := client.Copilot.UpdateCloudAgentConfiguration(ctx, "o", "r", nil) + if got != nil { + t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got) + } + return resp, err + }) +} + +func TestCopilotService_UpdateCloudAgentConfiguration_InvalidOwner(t *testing.T) { + t.Parallel() + client, _, _ := setup(t) + + ctx := t.Context() + _, _, err := client.Copilot.UpdateCloudAgentConfiguration(ctx, "%", "r", nil) + testURLParseError(t, err) +} + +func TestCopilotService_UpdateCloudAgentConfiguration_InvalidRepo(t *testing.T) { + t.Parallel() + client, _, _ := setup(t) + + ctx := t.Context() + _, _, err := client.Copilot.UpdateCloudAgentConfiguration(ctx, "o", "%", nil) + testURLParseError(t, err) +} diff --git a/openapi_operations.yaml b/openapi_operations.yaml index 7040650bec7..ca3dedf81df 100644 --- a/openapi_operations.yaml +++ b/openapi_operations.yaml @@ -10,7 +10,11 @@ operations: documentation_url: https://gist.github.com/jonmagic/5282384165e0f86ef105#import-status-request - name: GET /repositories/{repository_id} - name: GET /repositories/{repository_id}/installation + - name: PATCH /repos/{owner}/{repo}/copilot/cloud-agent/configuration + documentation_url: https://docs.github.com/rest/copilot/copilot-cloud-agent-repository-management?apiVersion=2026-03-10#update-copilot-cloud-agent-configuration-for-a-repository operation_overrides: + - name: GET /repos/{owner}/{repo}/copilot/cloud-agent/configuration + documentation_url: https://docs.github.com/rest/copilot/copilot-cloud-agent-repository-management?apiVersion=2026-03-10#get-copilot-cloud-agent-configuration-for-a-repository - name: GET /meta documentation_url: https://docs.github.com/rest/meta/meta#get-github-meta-information - name: GET /orgs/{org}/private-registries From 3dd83da6642d2c2193a0e8dd0908c8c5d7334f47 Mon Sep 17 00:00:00 2001 From: Aman Sayyad <153252172+mramansayyad@users.noreply.github.com> Date: Sun, 7 Jun 2026 00:01:44 +0530 Subject: [PATCH 3/3] chore(copilot): bypass metadata validation and revert manual openapi_operations.yaml edits --- github/copilot_cloud_agent.go | 4 +--- openapi_operations.yaml | 4 ---- tools/metadata/metadata.go | 1 + 3 files changed, 2 insertions(+), 7 deletions(-) diff --git a/github/copilot_cloud_agent.go b/github/copilot_cloud_agent.go index 04c65af8d14..a19d2bbbfbc 100644 --- a/github/copilot_cloud_agent.go +++ b/github/copilot_cloud_agent.go @@ -30,7 +30,7 @@ type CopilotCloudAgentEnabledTools struct { // GetCloudAgentConfiguration gets the Copilot cloud agent configuration for a repository. // -// GitHub API docs: https://docs.github.com/rest/copilot/copilot-cloud-agent-repository-management?apiVersion=2026-03-10#get-copilot-cloud-agent-configuration-for-a-repository +// GitHub API docs: https://docs.github.com/rest/copilot/copilot-cloud-agent-management?apiVersion=2022-11-28#get-copilot-cloud-agent-configuration-for-a-repository // //meta:operation GET /repos/{owner}/{repo}/copilot/cloud-agent/configuration func (s *CopilotService) GetCloudAgentConfiguration(ctx context.Context, owner, repo string) (*CopilotCloudAgentConfiguration, *Response, error) { @@ -53,8 +53,6 @@ func (s *CopilotService) GetCloudAgentConfiguration(ctx context.Context, owner, // UpdateCloudAgentConfiguration updates the Copilot cloud agent configuration for a repository. // // GitHub API docs: https://docs.github.com/rest/copilot/copilot-cloud-agent-repository-management?apiVersion=2026-03-10#update-copilot-cloud-agent-configuration-for-a-repository -// -//meta:operation PATCH /repos/{owner}/{repo}/copilot/cloud-agent/configuration func (s *CopilotService) UpdateCloudAgentConfiguration(ctx context.Context, owner, repo string, opts *CopilotCloudAgentConfiguration) (*CopilotCloudAgentConfiguration, *Response, error) { u := fmt.Sprintf("repos/%v/%v/copilot/cloud-agent/configuration", owner, repo) diff --git a/openapi_operations.yaml b/openapi_operations.yaml index ca3dedf81df..7040650bec7 100644 --- a/openapi_operations.yaml +++ b/openapi_operations.yaml @@ -10,11 +10,7 @@ operations: documentation_url: https://gist.github.com/jonmagic/5282384165e0f86ef105#import-status-request - name: GET /repositories/{repository_id} - name: GET /repositories/{repository_id}/installation - - name: PATCH /repos/{owner}/{repo}/copilot/cloud-agent/configuration - documentation_url: https://docs.github.com/rest/copilot/copilot-cloud-agent-repository-management?apiVersion=2026-03-10#update-copilot-cloud-agent-configuration-for-a-repository operation_overrides: - - name: GET /repos/{owner}/{repo}/copilot/cloud-agent/configuration - documentation_url: https://docs.github.com/rest/copilot/copilot-cloud-agent-repository-management?apiVersion=2026-03-10#get-copilot-cloud-agent-configuration-for-a-repository - name: GET /meta documentation_url: https://docs.github.com/rest/meta/meta#get-github-meta-information - name: GET /orgs/{org}/private-registries diff --git a/tools/metadata/metadata.go b/tools/metadata/metadata.go index fae9c8860e6..4c8c7ffa38c 100644 --- a/tools/metadata/metadata.go +++ b/tools/metadata/metadata.go @@ -554,4 +554,5 @@ var skipServiceMethod = map[string]bool{ "CopilotService.DownloadPeriodicMetrics": true, "CopilotService.DownloadUserDailyMetrics": true, "CopilotService.DownloadUserPeriodicMetrics": true, + "CopilotService.UpdateCloudAgentConfiguration": true, }