From 110c09cb1c9b286568bcab25c4a9b49f6d8eaf3d Mon Sep 17 00:00:00 2001 From: Dhananjay Mishra Date: Sat, 15 Nov 2025 14:31:40 +0000 Subject: [PATCH 01/10] add five endpoints for managing organization GitHub app installations --- github/enterprise_app_installation.go | 158 ++++++++++++++++ github/enterprise_app_installation_test.go | 198 +++++++++++++++++++++ github/github-accessors.go | 40 +++++ github/github-accessors_test.go | 55 ++++++ 4 files changed, 451 insertions(+) create mode 100644 github/enterprise_app_installation.go create mode 100644 github/enterprise_app_installation_test.go diff --git a/github/enterprise_app_installation.go b/github/enterprise_app_installation.go new file mode 100644 index 00000000000..40ede68d30b --- /dev/null +++ b/github/enterprise_app_installation.go @@ -0,0 +1,158 @@ +// Copyright 2025 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github + +import ( + "context" + "fmt" +) + +// InstallableOrganization represents an organization in an enterprise in which a GitHub app can be installed. +type InstallableOrganization struct { + ID *int64 `json:"id,omitempty"` + Login *string `json:"login,omitempty"` +} + +// AccessibleRepository represents a repository that can be made accessible to a GitHub app. +type AccessibleRepository struct { + ID *int64 `json:"id,omitempty"` + Name *string `json:"name,omitempty"` + FullName *string `json:"full_name,omitempty"` +} + +// AppInstallationRequest represents the request to install a GitHub app on an enterprise-owned organization. +type AppInstallationRequest struct { + // The Client ID of the GitHub App to install. + ClientID string `json:"client_id"` + // The selection of repositories that the GitHub app can access. + // Can be one of: all, selected, none + RepositorySelection string `json:"repository_selection"` + // A list of repository names that the GitHub App can access, if the repository_selection is set to selected. + Repository []string `json:"repository,omitempty"` +} + +// ListInstallableEnterpriseOrgs lists the organizations in an enterprise that are installable for an app. +// +// GitHub API docs: https://docs.github.com/enterprise-cloud@latest/rest/enterprise-admin/organization-installations#get-enterprise-owned-organizations-that-can-have-github-apps-installed +// +//meta:operation GET /enterprises/{enterprise}/apps/installable_organizations +func (s *EnterpriseService) ListInstallableEnterpriseOrgs(ctx context.Context, enterprise string, opts *ListOptions) ([]*InstallableOrganization, *Response, error) { + u := fmt.Sprintf("enterprises/%v/apps/installable_organizations", enterprise) + + 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 orgs []*InstallableOrganization + resp, err := s.client.Do(ctx, req, &orgs) + if err != nil { + return nil, resp, err + } + + return orgs, resp, nil +} + +// ListEnterpriseOrgAccessibleRepositories lists the repositories accessible to an app in an enterprise-owned organization. +// +// GitHub API docs: https://docs.github.com/enterprise-cloud@latest/rest/enterprise-admin/organization-installations#get-repositories-belonging-to-an-enterprise-owned-organization +// +//meta:operation GET /enterprises/{enterprise}/apps/installable_organizations/{org}/accessible_repositories +func (s *EnterpriseService) ListEnterpriseOrgAccessibleRepositories(ctx context.Context, enterprise, org string, opts *ListOptions) ([]*AccessibleRepository, *Response, error) { + u := fmt.Sprintf("enterprises/%v/apps/installable_organizations/%v/accessible_repositories", enterprise, 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 repos []*AccessibleRepository + resp, err := s.client.Do(ctx, req, &repos) + if err != nil { + return nil, resp, err + } + + return repos, resp, nil +} + +// ListEnterpriseAppInstallationForOrg lists the GitHub app installations associated with the given enterprise-owned organization. +// +// GitHub API docs: https://docs.github.com/enterprise-cloud@latest/rest/enterprise-admin/organization-installations#list-github-apps-installed-on-an-enterprise-owned-organization +// +//meta:operation GET /enterprises/{enterprise}/apps/organizations/{org}/installations +func (s *EnterpriseService) ListEnterpriseAppInstallationForOrg(ctx context.Context, enterprise, org string, opts *ListOptions) ([]*Installation, *Response, error) { + u := fmt.Sprintf("enterprises/%v/apps/organizations/%v/installations", enterprise, 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 installation []*Installation + resp, err := s.client.Do(ctx, req, &installation) + if err != nil { + return nil, resp, err + } + + return installation, resp, nil +} + +// InstallEnterpriseOrgApp installs any valid GitHub app on the specified organization owned by the enterprise. +// If the app is already installed on the organization, and is suspended, it will be unsuspended. If the app has a pending installation request, they will all be approved. +// +// GitHub API docs: https://docs.github.com/enterprise-cloud@latest/rest/enterprise-admin/organization-installations#install-a-github-app-on-an-enterprise-owned-organization +// +//meta:operation POST /enterprises/{enterprise}/apps/organizations/{org}/installations +func (s *EnterpriseService) InstallEnterpriseOrgApp(ctx context.Context, enterprise, org string, request AppInstallationRequest) (*Installation, *Response, error) { + u := fmt.Sprintf("enterprises/%v/apps/organizations/%v/installations", enterprise, org) + req, err := s.client.NewRequest("POST", u, request) + if err != nil { + return nil, nil, err + } + + var installation *Installation + resp, err := s.client.Do(ctx, req, &installation) + if err != nil { + return nil, resp, err + } + + return installation, resp, nil +} + +// UninstallEnterpriseOrgApp uninstalls a GitHub app from an organization. Any app installed on the organization can be removed. +// +// GitHub API docs: https://docs.github.com/enterprise-cloud@latest/rest/enterprise-admin/organization-installations#uninstall-a-github-app-from-an-enterprise-owned-organization +// +//meta:operation DELETE /enterprises/{enterprise}/apps/organizations/{org}/installations/{installation_id} +func (s *EnterpriseService) UninstallEnterpriseOrgApp(ctx context.Context, enterprise, org string, installationID int64) (*Response, error) { + u := fmt.Sprintf("enterprises/%v/apps/organizations/%v/installations/%v", enterprise, org, installationID) + req, err := s.client.NewRequest("DELETE", u, nil) + if err != nil { + return nil, err + } + + resp, err := s.client.Do(ctx, req, nil) + if err != nil { + return resp, err + } + + return resp, nil +} diff --git a/github/enterprise_app_installation_test.go b/github/enterprise_app_installation_test.go new file mode 100644 index 00000000000..0c4f9b6786e --- /dev/null +++ b/github/enterprise_app_installation_test.go @@ -0,0 +1,198 @@ +// Copyright 2025 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github + +import ( + "fmt" + "net/http" + "testing" + + "github.com/google/go-cmp/cmp" +) + +func TestEnterpriseService_ListInstallableEnterpriseOrgs(t *testing.T) { + t.Parallel() + client, mux, _ := setup(t) + + mux.HandleFunc("/enterprises/e/apps/installable_organizations", func(w http.ResponseWriter, r *http.Request) { + testMethod(t, r, "GET") + fmt.Fprint(w, `[{"id":1, "login":"org1"}]`) + }) + + ctx := t.Context() + opts := &ListOptions{Page: 1, PerPage: 10} + got, _, err := client.Enterprise.ListInstallableEnterpriseOrgs(ctx, "e", opts) + if err != nil { + t.Fatalf("Enterprise.ListInstallableEnterpriseOrgs returned error: %v", err) + } + + want := []*InstallableOrganization{ + {ID: Ptr(int64(1)), Login: Ptr("org1")}, + } + + if !cmp.Equal(got, want) { + t.Errorf("Enterprise.ListInstallableEnterpriseOrgs = %+v, want %+v", got, want) + } + + const methodName = "ListInstallableEnterpriseOrgs" + testBadOptions(t, methodName, func() error { + _, _, err := client.Enterprise.ListInstallableEnterpriseOrgs(ctx, "\n", opts) + return err + }) + testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { + got, resp, err := client.Enterprise.ListInstallableEnterpriseOrgs(ctx, "e", nil) + if got != nil { + t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got) + } + return resp, err + }) +} + +func TestEnterpriseService_ListEnterpriseOrgAccessibleRepositories(t *testing.T) { + t.Parallel() + client, mux, _ := setup(t) + + mux.HandleFunc("/enterprises/e/apps/installable_organizations/org1/accessible_repositories", func(w http.ResponseWriter, r *http.Request) { + testMethod(t, r, "GET") + fmt.Fprint(w, `[{"id":10, "name":"repo1", "full_name":"org1/repo1"}]`) + }) + + opts := &ListOptions{Page: 2, PerPage: 2} + ctx := t.Context() + repos, _, err := client.Enterprise.ListEnterpriseOrgAccessibleRepositories(ctx, "e", "org1", opts) + if err != nil { + t.Errorf("Enterprise.ListEnterpriseOrgAccessibleRepositories returned error: %v", err) + } + + want := []*AccessibleRepository{ + {ID: Ptr(int64(10)), Name: Ptr("repo1"), FullName: Ptr("org1/repo1")}, + } + + if !cmp.Equal(repos, want) { + t.Errorf("Enterprise.ListEnterpriseOrgAccessibleRepositories returned %+v, want %+v", repos, want) + } + + const methodName = "ListEnterpriseOrgAccessibleRepositories" + + testBadOptions(t, methodName, func() (err error) { + _, _, err = client.Enterprise.ListEnterpriseOrgAccessibleRepositories(ctx, "\n", "org1", opts) + return err + }) + + testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { + got, resp, err := client.Enterprise.ListEnterpriseOrgAccessibleRepositories(ctx, "e", "org1", nil) + if got != nil { + t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got) + } + return resp, err + }) +} + +func TestEnterpriseService_ListEnterpriseAppInstallationForOrg(t *testing.T) { + t.Parallel() + client, mux, _ := setup(t) + + mux.HandleFunc("/enterprises/e/apps/organizations/org1/installations", func(w http.ResponseWriter, r *http.Request) { + testMethod(t, r, "GET") + testFormValues(t, r, values{"per_page": "2", "page": "2"}) + fmt.Fprint(w, `[{"id":99}]`) + }) + + opts := &ListOptions{Page: 2, PerPage: 2} + ctx := t.Context() + installations, _, err := client.Enterprise.ListEnterpriseAppInstallationForOrg(ctx, "e", "org1", opts) + if err != nil { + t.Errorf("ListEnterpriseAppInstallationForOrg returned error: %v", err) + } + + want := &[]Installation{ + {ID: Ptr(int64(99))}, + } + + if !cmp.Equal(installations, want) { + t.Errorf("ListEnterpriseAppInstallationForOrg returned %+v, want %+v", installations, want) + } + + const methodName = "ListEnterpriseAppInstallationForOrg" + + testBadOptions(t, methodName, func() (err error) { + _, _, err = client.Enterprise.ListEnterpriseAppInstallationForOrg(ctx, "\n", "org1", &ListOptions{}) + return err + }) + + testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { + got, resp, err := client.Enterprise.ListEnterpriseAppInstallationForOrg(ctx, "e", "org1", nil) + if got != nil { + t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got) + } + return resp, err + }) +} + +func TestEnterpriseService_InstallEnterpriseOrgApp(t *testing.T) { + t.Parallel() + client, mux, _ := setup(t) + + mux.HandleFunc("/enterprises/e/apps/organizations/org1/installations", func(w http.ResponseWriter, r *http.Request) { + testMethod(t, r, "POST") + testBody(t, r, `{"client_id":"cid","repository_selection":"selected","repository":["r1","r2"]}`+"\n") + fmt.Fprint(w, `{"id":555}`) + }) + + req := AppInstallationRequest{ + ClientID: "cid", + RepositorySelection: "selected", + Repository: []string{"r1", "r2"}, + } + + ctx := t.Context() + installation, _, err := client.Enterprise.InstallEnterpriseOrgApp(ctx, "e", "org1", req) + if err != nil { + t.Errorf("InstallEnterpriseOrgApp returned error: %v", err) + } + + want := &Installation{ID: Ptr(int64(555))} + + if !cmp.Equal(installation, want) { + t.Errorf("InstallEnterpriseOrgApp returned %+v, want %+v", installation, want) + } + + const methodName = "InstallEnterpriseOrgApp" + + testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { + got, resp, err := client.Enterprise.InstallEnterpriseOrgApp(ctx, "e", "org1", req) + if got != nil { + t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got) + } + return resp, err + }) +} + +func TestEnterpriseService_UninstallEnterpriseOrgApp(t *testing.T) { + t.Parallel() + client, mux, _ := setup(t) + + mux.HandleFunc("/enterprises/e/apps/organizations/org1/installations/123", func(w http.ResponseWriter, r *http.Request) { + testMethod(t, r, "DELETE") + w.WriteHeader(http.StatusNoContent) + }) + + ctx := t.Context() + resp, err := client.Enterprise.UninstallEnterpriseOrgApp(ctx, "e", "org1", 123) + if err != nil { + t.Errorf("UninstallEnterpriseOrgApp returned error: %v", err) + } + + if resp.StatusCode != http.StatusNoContent { + t.Errorf("UninstallEnterpriseOrgApp returned status %v, want %v", resp.StatusCode, http.StatusNoContent) + } + + const methodName = "UninstallEnterpriseOrgApp" + + testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { + return client.Enterprise.UninstallEnterpriseOrgApp(ctx, "e", "org1", 123) + }) +} diff --git a/github/github-accessors.go b/github/github-accessors.go index 2a1a9394f67..1805b21f7f8 100644 --- a/github/github-accessors.go +++ b/github/github-accessors.go @@ -78,6 +78,30 @@ func (a *AcceptedAssignment) GetSubmitted() bool { return *a.Submitted } +// GetFullName returns the FullName field if it's non-nil, zero value otherwise. +func (a *AccessibleRepository) GetFullName() string { + if a == nil || a.FullName == nil { + return "" + } + return *a.FullName +} + +// GetID returns the ID field if it's non-nil, zero value otherwise. +func (a *AccessibleRepository) GetID() int64 { + if a == nil || a.ID == nil { + return 0 + } + return *a.ID +} + +// GetName returns the Name field if it's non-nil, zero value otherwise. +func (a *AccessibleRepository) GetName() string { + if a == nil || a.Name == nil { + return "" + } + return *a.Name +} + // GetGithubOwnedAllowed returns the GithubOwnedAllowed field if it's non-nil, zero value otherwise. func (a *ActionsAllowed) GetGithubOwnedAllowed() bool { if a == nil || a.GithubOwnedAllowed == nil { @@ -11286,6 +11310,22 @@ func (i *Import) GetVCSUsername() string { return *i.VCSUsername } +// GetID returns the ID field if it's non-nil, zero value otherwise. +func (i *InstallableOrganization) GetID() int64 { + if i == nil || i.ID == nil { + return 0 + } + return *i.ID +} + +// GetLogin returns the Login field if it's non-nil, zero value otherwise. +func (i *InstallableOrganization) GetLogin() string { + if i == nil || i.Login == nil { + return "" + } + return *i.Login +} + // GetAccessTokensURL returns the AccessTokensURL field if it's non-nil, zero value otherwise. func (i *Installation) GetAccessTokensURL() string { if i == nil || i.AccessTokensURL == nil { diff --git a/github/github-accessors_test.go b/github/github-accessors_test.go index c926697944f..49ea2cf9706 100644 --- a/github/github-accessors_test.go +++ b/github/github-accessors_test.go @@ -97,6 +97,39 @@ func TestAcceptedAssignment_GetSubmitted(tt *testing.T) { a.GetSubmitted() } +func TestAccessibleRepository_GetFullName(tt *testing.T) { + tt.Parallel() + var zeroValue string + a := &AccessibleRepository{FullName: &zeroValue} + a.GetFullName() + a = &AccessibleRepository{} + a.GetFullName() + a = nil + a.GetFullName() +} + +func TestAccessibleRepository_GetID(tt *testing.T) { + tt.Parallel() + var zeroValue int64 + a := &AccessibleRepository{ID: &zeroValue} + a.GetID() + a = &AccessibleRepository{} + a.GetID() + a = nil + a.GetID() +} + +func TestAccessibleRepository_GetName(tt *testing.T) { + tt.Parallel() + var zeroValue string + a := &AccessibleRepository{Name: &zeroValue} + a.GetName() + a = &AccessibleRepository{} + a.GetName() + a = nil + a.GetName() +} + func TestActionsAllowed_GetGithubOwnedAllowed(tt *testing.T) { tt.Parallel() var zeroValue bool @@ -14662,6 +14695,28 @@ func TestImport_GetVCSUsername(tt *testing.T) { i.GetVCSUsername() } +func TestInstallableOrganization_GetID(tt *testing.T) { + tt.Parallel() + var zeroValue int64 + i := &InstallableOrganization{ID: &zeroValue} + i.GetID() + i = &InstallableOrganization{} + i.GetID() + i = nil + i.GetID() +} + +func TestInstallableOrganization_GetLogin(tt *testing.T) { + tt.Parallel() + var zeroValue string + i := &InstallableOrganization{Login: &zeroValue} + i.GetLogin() + i = &InstallableOrganization{} + i.GetLogin() + i = nil + i.GetLogin() +} + func TestInstallation_GetAccessTokensURL(tt *testing.T) { tt.Parallel() var zeroValue string From 6dc91631b6e14ece1fb46e53600aeb2a8e0315ec Mon Sep 17 00:00:00 2001 From: Dhananjay Mishra Date: Sat, 15 Nov 2025 15:23:10 +0000 Subject: [PATCH 02/10] fix test --- github/enterprise_app_installation_test.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/github/enterprise_app_installation_test.go b/github/enterprise_app_installation_test.go index 0c4f9b6786e..ec230db913f 100644 --- a/github/enterprise_app_installation_test.go +++ b/github/enterprise_app_installation_test.go @@ -107,8 +107,7 @@ func TestEnterpriseService_ListEnterpriseAppInstallationForOrg(t *testing.T) { if err != nil { t.Errorf("ListEnterpriseAppInstallationForOrg returned error: %v", err) } - - want := &[]Installation{ + want := []*Installation{ {ID: Ptr(int64(99))}, } From 838cf9b19ffacdd583309683616308367d6e6c32 Mon Sep 17 00:00:00 2001 From: Dhananjay Mishra Date: Sun, 16 Nov 2025 03:30:26 +0000 Subject: [PATCH 03/10] change method names --- github/enterprise_app_installation.go | 20 +++---- github/enterprise_app_installation_test.go | 66 +++++++++++----------- 2 files changed, 43 insertions(+), 43 deletions(-) diff --git a/github/enterprise_app_installation.go b/github/enterprise_app_installation.go index 40ede68d30b..c1c8cc5b4ac 100644 --- a/github/enterprise_app_installation.go +++ b/github/enterprise_app_installation.go @@ -34,12 +34,12 @@ type AppInstallationRequest struct { Repository []string `json:"repository,omitempty"` } -// ListInstallableEnterpriseOrgs lists the organizations in an enterprise that are installable for an app. +// ListInstallableEnterpriseOrganization lists the organizations in an enterprise that are installable for an app. // // GitHub API docs: https://docs.github.com/enterprise-cloud@latest/rest/enterprise-admin/organization-installations#get-enterprise-owned-organizations-that-can-have-github-apps-installed // //meta:operation GET /enterprises/{enterprise}/apps/installable_organizations -func (s *EnterpriseService) ListInstallableEnterpriseOrgs(ctx context.Context, enterprise string, opts *ListOptions) ([]*InstallableOrganization, *Response, error) { +func (s *EnterpriseService) ListInstallableEnterpriseOrganization(ctx context.Context, enterprise string, opts *ListOptions) ([]*InstallableOrganization, *Response, error) { u := fmt.Sprintf("enterprises/%v/apps/installable_organizations", enterprise) u, err := addOptions(u, opts) @@ -61,12 +61,12 @@ func (s *EnterpriseService) ListInstallableEnterpriseOrgs(ctx context.Context, e return orgs, resp, nil } -// ListEnterpriseOrgAccessibleRepositories lists the repositories accessible to an app in an enterprise-owned organization. +// ListOrganizationAccessibleRepositories lists the repositories accessible to an app in an enterprise-owned organization. // // GitHub API docs: https://docs.github.com/enterprise-cloud@latest/rest/enterprise-admin/organization-installations#get-repositories-belonging-to-an-enterprise-owned-organization // //meta:operation GET /enterprises/{enterprise}/apps/installable_organizations/{org}/accessible_repositories -func (s *EnterpriseService) ListEnterpriseOrgAccessibleRepositories(ctx context.Context, enterprise, org string, opts *ListOptions) ([]*AccessibleRepository, *Response, error) { +func (s *EnterpriseService) ListOrganizationAccessibleRepositories(ctx context.Context, enterprise, org string, opts *ListOptions) ([]*AccessibleRepository, *Response, error) { u := fmt.Sprintf("enterprises/%v/apps/installable_organizations/%v/accessible_repositories", enterprise, org) u, err := addOptions(u, opts) @@ -88,12 +88,12 @@ func (s *EnterpriseService) ListEnterpriseOrgAccessibleRepositories(ctx context. return repos, resp, nil } -// ListEnterpriseAppInstallationForOrg lists the GitHub app installations associated with the given enterprise-owned organization. +// ListAppOrganizationInstallations lists the GitHub app installations associated with the given enterprise-owned organization. // // GitHub API docs: https://docs.github.com/enterprise-cloud@latest/rest/enterprise-admin/organization-installations#list-github-apps-installed-on-an-enterprise-owned-organization // //meta:operation GET /enterprises/{enterprise}/apps/organizations/{org}/installations -func (s *EnterpriseService) ListEnterpriseAppInstallationForOrg(ctx context.Context, enterprise, org string, opts *ListOptions) ([]*Installation, *Response, error) { +func (s *EnterpriseService) ListAppOrganizationInstallations(ctx context.Context, enterprise, org string, opts *ListOptions) ([]*Installation, *Response, error) { u := fmt.Sprintf("enterprises/%v/apps/organizations/%v/installations", enterprise, org) u, err := addOptions(u, opts) @@ -115,13 +115,13 @@ func (s *EnterpriseService) ListEnterpriseAppInstallationForOrg(ctx context.Cont return installation, resp, nil } -// InstallEnterpriseOrgApp installs any valid GitHub app on the specified organization owned by the enterprise. +// InstallEnterpriseOrganizationApp installs any valid GitHub app on the specified organization owned by the enterprise. // If the app is already installed on the organization, and is suspended, it will be unsuspended. If the app has a pending installation request, they will all be approved. // // GitHub API docs: https://docs.github.com/enterprise-cloud@latest/rest/enterprise-admin/organization-installations#install-a-github-app-on-an-enterprise-owned-organization // //meta:operation POST /enterprises/{enterprise}/apps/organizations/{org}/installations -func (s *EnterpriseService) InstallEnterpriseOrgApp(ctx context.Context, enterprise, org string, request AppInstallationRequest) (*Installation, *Response, error) { +func (s *EnterpriseService) InstallEnterpriseOrganizationApp(ctx context.Context, enterprise, org string, request AppInstallationRequest) (*Installation, *Response, error) { u := fmt.Sprintf("enterprises/%v/apps/organizations/%v/installations", enterprise, org) req, err := s.client.NewRequest("POST", u, request) if err != nil { @@ -137,12 +137,12 @@ func (s *EnterpriseService) InstallEnterpriseOrgApp(ctx context.Context, enterpr return installation, resp, nil } -// UninstallEnterpriseOrgApp uninstalls a GitHub app from an organization. Any app installed on the organization can be removed. +// UninstallEnterpriseOrganizationApp uninstalls a GitHub app from an organization. Any app installed on the organization can be removed. // // GitHub API docs: https://docs.github.com/enterprise-cloud@latest/rest/enterprise-admin/organization-installations#uninstall-a-github-app-from-an-enterprise-owned-organization // //meta:operation DELETE /enterprises/{enterprise}/apps/organizations/{org}/installations/{installation_id} -func (s *EnterpriseService) UninstallEnterpriseOrgApp(ctx context.Context, enterprise, org string, installationID int64) (*Response, error) { +func (s *EnterpriseService) UninstallEnterpriseOrganizationApp(ctx context.Context, enterprise, org string, installationID int64) (*Response, error) { u := fmt.Sprintf("enterprises/%v/apps/organizations/%v/installations/%v", enterprise, org, installationID) req, err := s.client.NewRequest("DELETE", u, nil) if err != nil { diff --git a/github/enterprise_app_installation_test.go b/github/enterprise_app_installation_test.go index ec230db913f..0057b7214f5 100644 --- a/github/enterprise_app_installation_test.go +++ b/github/enterprise_app_installation_test.go @@ -13,7 +13,7 @@ import ( "github.com/google/go-cmp/cmp" ) -func TestEnterpriseService_ListInstallableEnterpriseOrgs(t *testing.T) { +func TestEnterpriseService_ListInstallableEnterpriseOrganization(t *testing.T) { t.Parallel() client, mux, _ := setup(t) @@ -24,9 +24,9 @@ func TestEnterpriseService_ListInstallableEnterpriseOrgs(t *testing.T) { ctx := t.Context() opts := &ListOptions{Page: 1, PerPage: 10} - got, _, err := client.Enterprise.ListInstallableEnterpriseOrgs(ctx, "e", opts) + got, _, err := client.Enterprise.ListInstallableEnterpriseOrganization(ctx, "e", opts) if err != nil { - t.Fatalf("Enterprise.ListInstallableEnterpriseOrgs returned error: %v", err) + t.Fatalf("Enterprise.ListInstallableEnterpriseOrganization returned error: %v", err) } want := []*InstallableOrganization{ @@ -34,16 +34,16 @@ func TestEnterpriseService_ListInstallableEnterpriseOrgs(t *testing.T) { } if !cmp.Equal(got, want) { - t.Errorf("Enterprise.ListInstallableEnterpriseOrgs = %+v, want %+v", got, want) + t.Errorf("Enterprise.ListInstallableEnterpriseOrganization = %+v, want %+v", got, want) } - const methodName = "ListInstallableEnterpriseOrgs" + const methodName = "ListInstallableEnterpriseOrganization" testBadOptions(t, methodName, func() error { - _, _, err := client.Enterprise.ListInstallableEnterpriseOrgs(ctx, "\n", opts) + _, _, err := client.Enterprise.ListInstallableEnterpriseOrganization(ctx, "\n", opts) return err }) testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { - got, resp, err := client.Enterprise.ListInstallableEnterpriseOrgs(ctx, "e", nil) + got, resp, err := client.Enterprise.ListInstallableEnterpriseOrganization(ctx, "e", nil) if got != nil { t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got) } @@ -51,7 +51,7 @@ func TestEnterpriseService_ListInstallableEnterpriseOrgs(t *testing.T) { }) } -func TestEnterpriseService_ListEnterpriseOrgAccessibleRepositories(t *testing.T) { +func TestEnterpriseService_ListOrganizationAccessibleRepositories(t *testing.T) { t.Parallel() client, mux, _ := setup(t) @@ -62,9 +62,9 @@ func TestEnterpriseService_ListEnterpriseOrgAccessibleRepositories(t *testing.T) opts := &ListOptions{Page: 2, PerPage: 2} ctx := t.Context() - repos, _, err := client.Enterprise.ListEnterpriseOrgAccessibleRepositories(ctx, "e", "org1", opts) + repos, _, err := client.Enterprise.ListOrganizationAccessibleRepositories(ctx, "e", "org1", opts) if err != nil { - t.Errorf("Enterprise.ListEnterpriseOrgAccessibleRepositories returned error: %v", err) + t.Errorf("Enterprise.ListOrganizationAccessibleRepositories returned error: %v", err) } want := []*AccessibleRepository{ @@ -72,18 +72,18 @@ func TestEnterpriseService_ListEnterpriseOrgAccessibleRepositories(t *testing.T) } if !cmp.Equal(repos, want) { - t.Errorf("Enterprise.ListEnterpriseOrgAccessibleRepositories returned %+v, want %+v", repos, want) + t.Errorf("Enterprise.ListOrganizationAccessibleRepositories returned %+v, want %+v", repos, want) } - const methodName = "ListEnterpriseOrgAccessibleRepositories" + const methodName = "ListOrganizationAccessibleRepositories" testBadOptions(t, methodName, func() (err error) { - _, _, err = client.Enterprise.ListEnterpriseOrgAccessibleRepositories(ctx, "\n", "org1", opts) + _, _, err = client.Enterprise.ListOrganizationAccessibleRepositories(ctx, "\n", "org1", opts) return err }) testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { - got, resp, err := client.Enterprise.ListEnterpriseOrgAccessibleRepositories(ctx, "e", "org1", nil) + got, resp, err := client.Enterprise.ListOrganizationAccessibleRepositories(ctx, "e", "org1", nil) if got != nil { t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got) } @@ -91,7 +91,7 @@ func TestEnterpriseService_ListEnterpriseOrgAccessibleRepositories(t *testing.T) }) } -func TestEnterpriseService_ListEnterpriseAppInstallationForOrg(t *testing.T) { +func TestEnterpriseService_ListAppOrganizationInstallations(t *testing.T) { t.Parallel() client, mux, _ := setup(t) @@ -103,27 +103,27 @@ func TestEnterpriseService_ListEnterpriseAppInstallationForOrg(t *testing.T) { opts := &ListOptions{Page: 2, PerPage: 2} ctx := t.Context() - installations, _, err := client.Enterprise.ListEnterpriseAppInstallationForOrg(ctx, "e", "org1", opts) + installations, _, err := client.Enterprise.ListAppOrganizationInstallations(ctx, "e", "org1", opts) if err != nil { - t.Errorf("ListEnterpriseAppInstallationForOrg returned error: %v", err) + t.Errorf("ListAppOrganizationInstallations returned error: %v", err) } want := []*Installation{ {ID: Ptr(int64(99))}, } if !cmp.Equal(installations, want) { - t.Errorf("ListEnterpriseAppInstallationForOrg returned %+v, want %+v", installations, want) + t.Errorf("ListAppOrganizationInstallations returned %+v, want %+v", installations, want) } - const methodName = "ListEnterpriseAppInstallationForOrg" + const methodName = "ListAppOrganizationInstallations" testBadOptions(t, methodName, func() (err error) { - _, _, err = client.Enterprise.ListEnterpriseAppInstallationForOrg(ctx, "\n", "org1", &ListOptions{}) + _, _, err = client.Enterprise.ListAppOrganizationInstallations(ctx, "\n", "org1", &ListOptions{}) return err }) testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { - got, resp, err := client.Enterprise.ListEnterpriseAppInstallationForOrg(ctx, "e", "org1", nil) + got, resp, err := client.Enterprise.ListAppOrganizationInstallations(ctx, "e", "org1", nil) if got != nil { t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got) } @@ -131,7 +131,7 @@ func TestEnterpriseService_ListEnterpriseAppInstallationForOrg(t *testing.T) { }) } -func TestEnterpriseService_InstallEnterpriseOrgApp(t *testing.T) { +func TestEnterpriseService_InstallEnterpriseOrganizationApp(t *testing.T) { t.Parallel() client, mux, _ := setup(t) @@ -148,21 +148,21 @@ func TestEnterpriseService_InstallEnterpriseOrgApp(t *testing.T) { } ctx := t.Context() - installation, _, err := client.Enterprise.InstallEnterpriseOrgApp(ctx, "e", "org1", req) + installation, _, err := client.Enterprise.InstallEnterpriseOrganizationApp(ctx, "e", "org1", req) if err != nil { - t.Errorf("InstallEnterpriseOrgApp returned error: %v", err) + t.Errorf("InstallEnterpriseOrganizationApp returned error: %v", err) } want := &Installation{ID: Ptr(int64(555))} if !cmp.Equal(installation, want) { - t.Errorf("InstallEnterpriseOrgApp returned %+v, want %+v", installation, want) + t.Errorf("InstallEnterpriseOrganizationApp returned %+v, want %+v", installation, want) } - const methodName = "InstallEnterpriseOrgApp" + const methodName = "InstallEnterpriseOrganizationApp" testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { - got, resp, err := client.Enterprise.InstallEnterpriseOrgApp(ctx, "e", "org1", req) + got, resp, err := client.Enterprise.InstallEnterpriseOrganizationApp(ctx, "e", "org1", req) if got != nil { t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got) } @@ -170,7 +170,7 @@ func TestEnterpriseService_InstallEnterpriseOrgApp(t *testing.T) { }) } -func TestEnterpriseService_UninstallEnterpriseOrgApp(t *testing.T) { +func UninstallEnterpriseOrganizationApp(t *testing.T) { t.Parallel() client, mux, _ := setup(t) @@ -180,18 +180,18 @@ func TestEnterpriseService_UninstallEnterpriseOrgApp(t *testing.T) { }) ctx := t.Context() - resp, err := client.Enterprise.UninstallEnterpriseOrgApp(ctx, "e", "org1", 123) + resp, err := client.Enterprise.UninstallEnterpriseOrganizationApp(ctx, "e", "org1", 123) if err != nil { - t.Errorf("UninstallEnterpriseOrgApp returned error: %v", err) + t.Errorf("UninstallEnterpriseOrganizationApp returned error: %v", err) } if resp.StatusCode != http.StatusNoContent { - t.Errorf("UninstallEnterpriseOrgApp returned status %v, want %v", resp.StatusCode, http.StatusNoContent) + t.Errorf("UninstallEnterpriseOrganizationApp returned status %v, want %v", resp.StatusCode, http.StatusNoContent) } - const methodName = "UninstallEnterpriseOrgApp" + const methodName = "UninstallEnterpriseOrganizationApp" testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { - return client.Enterprise.UninstallEnterpriseOrgApp(ctx, "e", "org1", 123) + return client.Enterprise.UninstallEnterpriseOrganizationApp(ctx, "e", "org1", 123) }) } From 17147f6017cad5879c7243f02af8faa82801d424 Mon Sep 17 00:00:00 2001 From: Dhananjay Mishra Date: Sun, 16 Nov 2025 03:44:12 +0000 Subject: [PATCH 04/10] fix test --- github/enterprise_app_installation_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/github/enterprise_app_installation_test.go b/github/enterprise_app_installation_test.go index 0057b7214f5..e9007daf9fc 100644 --- a/github/enterprise_app_installation_test.go +++ b/github/enterprise_app_installation_test.go @@ -170,7 +170,7 @@ func TestEnterpriseService_InstallEnterpriseOrganizationApp(t *testing.T) { }) } -func UninstallEnterpriseOrganizationApp(t *testing.T) { +func TestEnterpriseService_UninstallEnterpriseOrganizationApp(t *testing.T) { t.Parallel() client, mux, _ := setup(t) From 12b34c6c9b188babde754f170d5896728d067f2e Mon Sep 17 00:00:00 2001 From: Dhananjay Mishra Date: Mon, 17 Nov 2025 09:41:32 +0000 Subject: [PATCH 05/10] change method name --- github/enterprise_app_installation.go | 8 +++---- github/enterprise_app_installation_test.go | 28 +++++++++++----------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/github/enterprise_app_installation.go b/github/enterprise_app_installation.go index c1c8cc5b4ac..da5417067b7 100644 --- a/github/enterprise_app_installation.go +++ b/github/enterprise_app_installation.go @@ -34,12 +34,12 @@ type AppInstallationRequest struct { Repository []string `json:"repository,omitempty"` } -// ListInstallableEnterpriseOrganization lists the organizations in an enterprise that are installable for an app. +// ListInstallableAppOrganizations lists the organizations in an enterprise that are installable for an app. // // GitHub API docs: https://docs.github.com/enterprise-cloud@latest/rest/enterprise-admin/organization-installations#get-enterprise-owned-organizations-that-can-have-github-apps-installed // //meta:operation GET /enterprises/{enterprise}/apps/installable_organizations -func (s *EnterpriseService) ListInstallableEnterpriseOrganization(ctx context.Context, enterprise string, opts *ListOptions) ([]*InstallableOrganization, *Response, error) { +func (s *EnterpriseService) ListInstallableAppOrganizations(ctx context.Context, enterprise string, opts *ListOptions) ([]*InstallableOrganization, *Response, error) { u := fmt.Sprintf("enterprises/%v/apps/installable_organizations", enterprise) u, err := addOptions(u, opts) @@ -61,12 +61,12 @@ func (s *EnterpriseService) ListInstallableEnterpriseOrganization(ctx context.Co return orgs, resp, nil } -// ListOrganizationAccessibleRepositories lists the repositories accessible to an app in an enterprise-owned organization. +// ListOrganizationAccessibleAppRepositories lists the repositories accessible to an app in an enterprise-owned organization. // // GitHub API docs: https://docs.github.com/enterprise-cloud@latest/rest/enterprise-admin/organization-installations#get-repositories-belonging-to-an-enterprise-owned-organization // //meta:operation GET /enterprises/{enterprise}/apps/installable_organizations/{org}/accessible_repositories -func (s *EnterpriseService) ListOrganizationAccessibleRepositories(ctx context.Context, enterprise, org string, opts *ListOptions) ([]*AccessibleRepository, *Response, error) { +func (s *EnterpriseService) ListOrganizationAccessibleAppRepositories(ctx context.Context, enterprise, org string, opts *ListOptions) ([]*AccessibleRepository, *Response, error) { u := fmt.Sprintf("enterprises/%v/apps/installable_organizations/%v/accessible_repositories", enterprise, org) u, err := addOptions(u, opts) diff --git a/github/enterprise_app_installation_test.go b/github/enterprise_app_installation_test.go index e9007daf9fc..f6ddfa3e911 100644 --- a/github/enterprise_app_installation_test.go +++ b/github/enterprise_app_installation_test.go @@ -13,7 +13,7 @@ import ( "github.com/google/go-cmp/cmp" ) -func TestEnterpriseService_ListInstallableEnterpriseOrganization(t *testing.T) { +func TestEnterpriseService_ListInstallableAppOrganizations(t *testing.T) { t.Parallel() client, mux, _ := setup(t) @@ -24,9 +24,9 @@ func TestEnterpriseService_ListInstallableEnterpriseOrganization(t *testing.T) { ctx := t.Context() opts := &ListOptions{Page: 1, PerPage: 10} - got, _, err := client.Enterprise.ListInstallableEnterpriseOrganization(ctx, "e", opts) + got, _, err := client.Enterprise.ListInstallableAppOrganizations(ctx, "e", opts) if err != nil { - t.Fatalf("Enterprise.ListInstallableEnterpriseOrganization returned error: %v", err) + t.Fatalf("Enterprise.ListInstallableAppOrganizations returned error: %v", err) } want := []*InstallableOrganization{ @@ -34,16 +34,16 @@ func TestEnterpriseService_ListInstallableEnterpriseOrganization(t *testing.T) { } if !cmp.Equal(got, want) { - t.Errorf("Enterprise.ListInstallableEnterpriseOrganization = %+v, want %+v", got, want) + t.Errorf("Enterprise.ListInstallableAppOrganizations = %+v, want %+v", got, want) } - const methodName = "ListInstallableEnterpriseOrganization" + const methodName = "ListInstallableAppOrganizations" testBadOptions(t, methodName, func() error { - _, _, err := client.Enterprise.ListInstallableEnterpriseOrganization(ctx, "\n", opts) + _, _, err := client.Enterprise.ListInstallableAppOrganizations(ctx, "\n", opts) return err }) testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { - got, resp, err := client.Enterprise.ListInstallableEnterpriseOrganization(ctx, "e", nil) + got, resp, err := client.Enterprise.ListInstallableAppOrganizations(ctx, "e", nil) if got != nil { t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got) } @@ -51,7 +51,7 @@ func TestEnterpriseService_ListInstallableEnterpriseOrganization(t *testing.T) { }) } -func TestEnterpriseService_ListOrganizationAccessibleRepositories(t *testing.T) { +func TestEnterpriseService_ListOrganizationAccessibleAppRepositories(t *testing.T) { t.Parallel() client, mux, _ := setup(t) @@ -62,9 +62,9 @@ func TestEnterpriseService_ListOrganizationAccessibleRepositories(t *testing.T) opts := &ListOptions{Page: 2, PerPage: 2} ctx := t.Context() - repos, _, err := client.Enterprise.ListOrganizationAccessibleRepositories(ctx, "e", "org1", opts) + repos, _, err := client.Enterprise.ListOrganizationAccessibleAppRepositories(ctx, "e", "org1", opts) if err != nil { - t.Errorf("Enterprise.ListOrganizationAccessibleRepositories returned error: %v", err) + t.Errorf("Enterprise.ListOrganizationAccessibleAppRepositories returned error: %v", err) } want := []*AccessibleRepository{ @@ -72,18 +72,18 @@ func TestEnterpriseService_ListOrganizationAccessibleRepositories(t *testing.T) } if !cmp.Equal(repos, want) { - t.Errorf("Enterprise.ListOrganizationAccessibleRepositories returned %+v, want %+v", repos, want) + t.Errorf("Enterprise.ListOrganizationAccessibleAppRepositories returned %+v, want %+v", repos, want) } - const methodName = "ListOrganizationAccessibleRepositories" + const methodName = "ListOrganizationAccessibleAppRepositories" testBadOptions(t, methodName, func() (err error) { - _, _, err = client.Enterprise.ListOrganizationAccessibleRepositories(ctx, "\n", "org1", opts) + _, _, err = client.Enterprise.ListOrganizationAccessibleAppRepositories(ctx, "\n", "org1", opts) return err }) testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { - got, resp, err := client.Enterprise.ListOrganizationAccessibleRepositories(ctx, "e", "org1", nil) + got, resp, err := client.Enterprise.ListOrganizationAccessibleAppRepositories(ctx, "e", "org1", nil) if got != nil { t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got) } From a3b2fc262daa8f8ae9ea2b2f52ff9c07ec9e3e4c Mon Sep 17 00:00:00 2001 From: Dhananjay Mishra Date: Mon, 17 Nov 2025 09:48:31 +0000 Subject: [PATCH 06/10] change ListOrganizationAccessibleAppRepositories to ListOrganizationAppAccessibleRepositories --- github/enterprise_app_installation.go | 4 ++-- github/enterprise_app_installation_test.go | 14 +++++++------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/github/enterprise_app_installation.go b/github/enterprise_app_installation.go index da5417067b7..ef2e2c8cdd5 100644 --- a/github/enterprise_app_installation.go +++ b/github/enterprise_app_installation.go @@ -61,12 +61,12 @@ func (s *EnterpriseService) ListInstallableAppOrganizations(ctx context.Context, return orgs, resp, nil } -// ListOrganizationAccessibleAppRepositories lists the repositories accessible to an app in an enterprise-owned organization. +// ListOrganizationAppAccessibleRepositories lists the repositories accessible to an app in an enterprise-owned organization. // // GitHub API docs: https://docs.github.com/enterprise-cloud@latest/rest/enterprise-admin/organization-installations#get-repositories-belonging-to-an-enterprise-owned-organization // //meta:operation GET /enterprises/{enterprise}/apps/installable_organizations/{org}/accessible_repositories -func (s *EnterpriseService) ListOrganizationAccessibleAppRepositories(ctx context.Context, enterprise, org string, opts *ListOptions) ([]*AccessibleRepository, *Response, error) { +func (s *EnterpriseService) ListOrganizationAppAccessibleRepositories(ctx context.Context, enterprise, org string, opts *ListOptions) ([]*AccessibleRepository, *Response, error) { u := fmt.Sprintf("enterprises/%v/apps/installable_organizations/%v/accessible_repositories", enterprise, org) u, err := addOptions(u, opts) diff --git a/github/enterprise_app_installation_test.go b/github/enterprise_app_installation_test.go index f6ddfa3e911..8d589cf2428 100644 --- a/github/enterprise_app_installation_test.go +++ b/github/enterprise_app_installation_test.go @@ -51,7 +51,7 @@ func TestEnterpriseService_ListInstallableAppOrganizations(t *testing.T) { }) } -func TestEnterpriseService_ListOrganizationAccessibleAppRepositories(t *testing.T) { +func TestEnterpriseService_ListOrganizationAppAccessibleRepositories(t *testing.T) { t.Parallel() client, mux, _ := setup(t) @@ -62,9 +62,9 @@ func TestEnterpriseService_ListOrganizationAccessibleAppRepositories(t *testing. opts := &ListOptions{Page: 2, PerPage: 2} ctx := t.Context() - repos, _, err := client.Enterprise.ListOrganizationAccessibleAppRepositories(ctx, "e", "org1", opts) + repos, _, err := client.Enterprise.ListOrganizationAppAccessibleRepositories(ctx, "e", "org1", opts) if err != nil { - t.Errorf("Enterprise.ListOrganizationAccessibleAppRepositories returned error: %v", err) + t.Errorf("Enterprise.ListOrganizationAppAccessibleRepositories returned error: %v", err) } want := []*AccessibleRepository{ @@ -72,18 +72,18 @@ func TestEnterpriseService_ListOrganizationAccessibleAppRepositories(t *testing. } if !cmp.Equal(repos, want) { - t.Errorf("Enterprise.ListOrganizationAccessibleAppRepositories returned %+v, want %+v", repos, want) + t.Errorf("Enterprise.ListOrganizationAppAccessibleRepositories returned %+v, want %+v", repos, want) } - const methodName = "ListOrganizationAccessibleAppRepositories" + const methodName = "ListOrganizationAppAccessibleRepositories" testBadOptions(t, methodName, func() (err error) { - _, _, err = client.Enterprise.ListOrganizationAccessibleAppRepositories(ctx, "\n", "org1", opts) + _, _, err = client.Enterprise.ListOrganizationAppAccessibleRepositories(ctx, "\n", "org1", opts) return err }) testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { - got, resp, err := client.Enterprise.ListOrganizationAccessibleAppRepositories(ctx, "e", "org1", nil) + got, resp, err := client.Enterprise.ListOrganizationAppAccessibleRepositories(ctx, "e", "org1", nil) if got != nil { t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got) } From 45be8c36038e94d9093aed870f7ba9abb17d0f56 Mon Sep 17 00:00:00 2001 From: Dhananjay Mishra Date: Mon, 17 Nov 2025 10:44:04 +0000 Subject: [PATCH 07/10] method name change --- github/enterprise_app_installation.go | 20 +++---- github/enterprise_app_installation_test.go | 66 +++++++++++----------- 2 files changed, 43 insertions(+), 43 deletions(-) diff --git a/github/enterprise_app_installation.go b/github/enterprise_app_installation.go index ef2e2c8cdd5..ea22ba0515c 100644 --- a/github/enterprise_app_installation.go +++ b/github/enterprise_app_installation.go @@ -34,12 +34,12 @@ type AppInstallationRequest struct { Repository []string `json:"repository,omitempty"` } -// ListInstallableAppOrganizations lists the organizations in an enterprise that are installable for an app. +// ListAppInstallableOrganizations lists the organizations in an enterprise that are installable for an app. // // GitHub API docs: https://docs.github.com/enterprise-cloud@latest/rest/enterprise-admin/organization-installations#get-enterprise-owned-organizations-that-can-have-github-apps-installed // //meta:operation GET /enterprises/{enterprise}/apps/installable_organizations -func (s *EnterpriseService) ListInstallableAppOrganizations(ctx context.Context, enterprise string, opts *ListOptions) ([]*InstallableOrganization, *Response, error) { +func (s *EnterpriseService) ListAppInstallableOrganizations(ctx context.Context, enterprise string, opts *ListOptions) ([]*InstallableOrganization, *Response, error) { u := fmt.Sprintf("enterprises/%v/apps/installable_organizations", enterprise) u, err := addOptions(u, opts) @@ -61,12 +61,12 @@ func (s *EnterpriseService) ListInstallableAppOrganizations(ctx context.Context, return orgs, resp, nil } -// ListOrganizationAppAccessibleRepositories lists the repositories accessible to an app in an enterprise-owned organization. +// ListAppAccessibleOrganizationRepositories lists the repositories accessible to an app in an enterprise-owned organization. // // GitHub API docs: https://docs.github.com/enterprise-cloud@latest/rest/enterprise-admin/organization-installations#get-repositories-belonging-to-an-enterprise-owned-organization // //meta:operation GET /enterprises/{enterprise}/apps/installable_organizations/{org}/accessible_repositories -func (s *EnterpriseService) ListOrganizationAppAccessibleRepositories(ctx context.Context, enterprise, org string, opts *ListOptions) ([]*AccessibleRepository, *Response, error) { +func (s *EnterpriseService) ListAppAccessibleOrganizationRepositories(ctx context.Context, enterprise, org string, opts *ListOptions) ([]*AccessibleRepository, *Response, error) { u := fmt.Sprintf("enterprises/%v/apps/installable_organizations/%v/accessible_repositories", enterprise, org) u, err := addOptions(u, opts) @@ -88,12 +88,12 @@ func (s *EnterpriseService) ListOrganizationAppAccessibleRepositories(ctx contex return repos, resp, nil } -// ListAppOrganizationInstallations lists the GitHub app installations associated with the given enterprise-owned organization. +// ListAppInstallations lists the GitHub app installations associated with the given enterprise-owned organization. // // GitHub API docs: https://docs.github.com/enterprise-cloud@latest/rest/enterprise-admin/organization-installations#list-github-apps-installed-on-an-enterprise-owned-organization // //meta:operation GET /enterprises/{enterprise}/apps/organizations/{org}/installations -func (s *EnterpriseService) ListAppOrganizationInstallations(ctx context.Context, enterprise, org string, opts *ListOptions) ([]*Installation, *Response, error) { +func (s *EnterpriseService) ListAppInstallations(ctx context.Context, enterprise, org string, opts *ListOptions) ([]*Installation, *Response, error) { u := fmt.Sprintf("enterprises/%v/apps/organizations/%v/installations", enterprise, org) u, err := addOptions(u, opts) @@ -115,13 +115,13 @@ func (s *EnterpriseService) ListAppOrganizationInstallations(ctx context.Context return installation, resp, nil } -// InstallEnterpriseOrganizationApp installs any valid GitHub app on the specified organization owned by the enterprise. +// InstallApp installs any valid GitHub app on the specified organization owned by the enterprise. // If the app is already installed on the organization, and is suspended, it will be unsuspended. If the app has a pending installation request, they will all be approved. // // GitHub API docs: https://docs.github.com/enterprise-cloud@latest/rest/enterprise-admin/organization-installations#install-a-github-app-on-an-enterprise-owned-organization // //meta:operation POST /enterprises/{enterprise}/apps/organizations/{org}/installations -func (s *EnterpriseService) InstallEnterpriseOrganizationApp(ctx context.Context, enterprise, org string, request AppInstallationRequest) (*Installation, *Response, error) { +func (s *EnterpriseService) InstallApp(ctx context.Context, enterprise, org string, request AppInstallationRequest) (*Installation, *Response, error) { u := fmt.Sprintf("enterprises/%v/apps/organizations/%v/installations", enterprise, org) req, err := s.client.NewRequest("POST", u, request) if err != nil { @@ -137,12 +137,12 @@ func (s *EnterpriseService) InstallEnterpriseOrganizationApp(ctx context.Context return installation, resp, nil } -// UninstallEnterpriseOrganizationApp uninstalls a GitHub app from an organization. Any app installed on the organization can be removed. +// UninstallApp uninstalls a GitHub app from an organization. Any app installed on the organization can be removed. // // GitHub API docs: https://docs.github.com/enterprise-cloud@latest/rest/enterprise-admin/organization-installations#uninstall-a-github-app-from-an-enterprise-owned-organization // //meta:operation DELETE /enterprises/{enterprise}/apps/organizations/{org}/installations/{installation_id} -func (s *EnterpriseService) UninstallEnterpriseOrganizationApp(ctx context.Context, enterprise, org string, installationID int64) (*Response, error) { +func (s *EnterpriseService) UninstallApp(ctx context.Context, enterprise, org string, installationID int64) (*Response, error) { u := fmt.Sprintf("enterprises/%v/apps/organizations/%v/installations/%v", enterprise, org, installationID) req, err := s.client.NewRequest("DELETE", u, nil) if err != nil { diff --git a/github/enterprise_app_installation_test.go b/github/enterprise_app_installation_test.go index 8d589cf2428..d3c9c150f81 100644 --- a/github/enterprise_app_installation_test.go +++ b/github/enterprise_app_installation_test.go @@ -13,7 +13,7 @@ import ( "github.com/google/go-cmp/cmp" ) -func TestEnterpriseService_ListInstallableAppOrganizations(t *testing.T) { +func TestEnterpriseService_ListAppInstallableOrganizations(t *testing.T) { t.Parallel() client, mux, _ := setup(t) @@ -24,9 +24,9 @@ func TestEnterpriseService_ListInstallableAppOrganizations(t *testing.T) { ctx := t.Context() opts := &ListOptions{Page: 1, PerPage: 10} - got, _, err := client.Enterprise.ListInstallableAppOrganizations(ctx, "e", opts) + got, _, err := client.Enterprise.ListAppInstallableOrganizations(ctx, "e", opts) if err != nil { - t.Fatalf("Enterprise.ListInstallableAppOrganizations returned error: %v", err) + t.Fatalf("Enterprise.ListAppInstallableOrganizations returned error: %v", err) } want := []*InstallableOrganization{ @@ -34,16 +34,16 @@ func TestEnterpriseService_ListInstallableAppOrganizations(t *testing.T) { } if !cmp.Equal(got, want) { - t.Errorf("Enterprise.ListInstallableAppOrganizations = %+v, want %+v", got, want) + t.Errorf("Enterprise.ListAppInstallableOrganizations = %+v, want %+v", got, want) } - const methodName = "ListInstallableAppOrganizations" + const methodName = "ListAppInstallableOrganizations" testBadOptions(t, methodName, func() error { - _, _, err := client.Enterprise.ListInstallableAppOrganizations(ctx, "\n", opts) + _, _, err := client.Enterprise.ListAppInstallableOrganizations(ctx, "\n", opts) return err }) testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { - got, resp, err := client.Enterprise.ListInstallableAppOrganizations(ctx, "e", nil) + got, resp, err := client.Enterprise.ListAppInstallableOrganizations(ctx, "e", nil) if got != nil { t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got) } @@ -51,7 +51,7 @@ func TestEnterpriseService_ListInstallableAppOrganizations(t *testing.T) { }) } -func TestEnterpriseService_ListOrganizationAppAccessibleRepositories(t *testing.T) { +func TestEnterpriseService_ListAppAccessibleOrganizationRepositories(t *testing.T) { t.Parallel() client, mux, _ := setup(t) @@ -62,9 +62,9 @@ func TestEnterpriseService_ListOrganizationAppAccessibleRepositories(t *testing. opts := &ListOptions{Page: 2, PerPage: 2} ctx := t.Context() - repos, _, err := client.Enterprise.ListOrganizationAppAccessibleRepositories(ctx, "e", "org1", opts) + repos, _, err := client.Enterprise.ListAppAccessibleOrganizationRepositories(ctx, "e", "org1", opts) if err != nil { - t.Errorf("Enterprise.ListOrganizationAppAccessibleRepositories returned error: %v", err) + t.Errorf("Enterprise.ListAppAccessibleOrganizationRepositories returned error: %v", err) } want := []*AccessibleRepository{ @@ -72,18 +72,18 @@ func TestEnterpriseService_ListOrganizationAppAccessibleRepositories(t *testing. } if !cmp.Equal(repos, want) { - t.Errorf("Enterprise.ListOrganizationAppAccessibleRepositories returned %+v, want %+v", repos, want) + t.Errorf("Enterprise.ListAppAccessibleOrganizationRepositories returned %+v, want %+v", repos, want) } - const methodName = "ListOrganizationAppAccessibleRepositories" + const methodName = "ListAppAccessibleOrganizationRepositories" testBadOptions(t, methodName, func() (err error) { - _, _, err = client.Enterprise.ListOrganizationAppAccessibleRepositories(ctx, "\n", "org1", opts) + _, _, err = client.Enterprise.ListAppAccessibleOrganizationRepositories(ctx, "\n", "org1", opts) return err }) testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { - got, resp, err := client.Enterprise.ListOrganizationAppAccessibleRepositories(ctx, "e", "org1", nil) + got, resp, err := client.Enterprise.ListAppAccessibleOrganizationRepositories(ctx, "e", "org1", nil) if got != nil { t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got) } @@ -91,7 +91,7 @@ func TestEnterpriseService_ListOrganizationAppAccessibleRepositories(t *testing. }) } -func TestEnterpriseService_ListAppOrganizationInstallations(t *testing.T) { +func TestEnterpriseService_ListAppInstallations(t *testing.T) { t.Parallel() client, mux, _ := setup(t) @@ -103,27 +103,27 @@ func TestEnterpriseService_ListAppOrganizationInstallations(t *testing.T) { opts := &ListOptions{Page: 2, PerPage: 2} ctx := t.Context() - installations, _, err := client.Enterprise.ListAppOrganizationInstallations(ctx, "e", "org1", opts) + installations, _, err := client.Enterprise.ListAppInstallations(ctx, "e", "org1", opts) if err != nil { - t.Errorf("ListAppOrganizationInstallations returned error: %v", err) + t.Errorf("ListAppInstallations returned error: %v", err) } want := []*Installation{ {ID: Ptr(int64(99))}, } if !cmp.Equal(installations, want) { - t.Errorf("ListAppOrganizationInstallations returned %+v, want %+v", installations, want) + t.Errorf("ListAppInstallations returned %+v, want %+v", installations, want) } - const methodName = "ListAppOrganizationInstallations" + const methodName = "ListAppInstallations" testBadOptions(t, methodName, func() (err error) { - _, _, err = client.Enterprise.ListAppOrganizationInstallations(ctx, "\n", "org1", &ListOptions{}) + _, _, err = client.Enterprise.ListAppInstallations(ctx, "\n", "org1", &ListOptions{}) return err }) testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { - got, resp, err := client.Enterprise.ListAppOrganizationInstallations(ctx, "e", "org1", nil) + got, resp, err := client.Enterprise.ListAppInstallations(ctx, "e", "org1", nil) if got != nil { t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got) } @@ -131,7 +131,7 @@ func TestEnterpriseService_ListAppOrganizationInstallations(t *testing.T) { }) } -func TestEnterpriseService_InstallEnterpriseOrganizationApp(t *testing.T) { +func TestEnterpriseService_InstallApp(t *testing.T) { t.Parallel() client, mux, _ := setup(t) @@ -148,21 +148,21 @@ func TestEnterpriseService_InstallEnterpriseOrganizationApp(t *testing.T) { } ctx := t.Context() - installation, _, err := client.Enterprise.InstallEnterpriseOrganizationApp(ctx, "e", "org1", req) + installation, _, err := client.Enterprise.InstallApp(ctx, "e", "org1", req) if err != nil { - t.Errorf("InstallEnterpriseOrganizationApp returned error: %v", err) + t.Errorf("InstallApp returned error: %v", err) } want := &Installation{ID: Ptr(int64(555))} if !cmp.Equal(installation, want) { - t.Errorf("InstallEnterpriseOrganizationApp returned %+v, want %+v", installation, want) + t.Errorf("InstallApp returned %+v, want %+v", installation, want) } - const methodName = "InstallEnterpriseOrganizationApp" + const methodName = "InstallApp" testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { - got, resp, err := client.Enterprise.InstallEnterpriseOrganizationApp(ctx, "e", "org1", req) + got, resp, err := client.Enterprise.InstallApp(ctx, "e", "org1", req) if got != nil { t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got) } @@ -170,7 +170,7 @@ func TestEnterpriseService_InstallEnterpriseOrganizationApp(t *testing.T) { }) } -func TestEnterpriseService_UninstallEnterpriseOrganizationApp(t *testing.T) { +func TestEnterpriseService_UninstallApp(t *testing.T) { t.Parallel() client, mux, _ := setup(t) @@ -180,18 +180,18 @@ func TestEnterpriseService_UninstallEnterpriseOrganizationApp(t *testing.T) { }) ctx := t.Context() - resp, err := client.Enterprise.UninstallEnterpriseOrganizationApp(ctx, "e", "org1", 123) + resp, err := client.Enterprise.UninstallApp(ctx, "e", "org1", 123) if err != nil { - t.Errorf("UninstallEnterpriseOrganizationApp returned error: %v", err) + t.Errorf("UninstallApp returned error: %v", err) } if resp.StatusCode != http.StatusNoContent { - t.Errorf("UninstallEnterpriseOrganizationApp returned status %v, want %v", resp.StatusCode, http.StatusNoContent) + t.Errorf("UninstallApp returned status %v, want %v", resp.StatusCode, http.StatusNoContent) } - const methodName = "UninstallEnterpriseOrganizationApp" + const methodName = "UninstallApp" testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { - return client.Enterprise.UninstallEnterpriseOrganizationApp(ctx, "e", "org1", 123) + return client.Enterprise.UninstallApp(ctx, "e", "org1", 123) }) } From 25c6413dbeea7860d89b226d5fcbc6521c18ee39 Mon Sep 17 00:00:00 2001 From: Dhananjay Mishra Date: Mon, 17 Nov 2025 12:26:37 +0000 Subject: [PATCH 08/10] added AccessibleRepositoriesURL to InstallableOrganization and change struct name --- github/enterprise_app_installation.go | 13 +++++++------ github/enterprise_app_installation_test.go | 6 +++--- github/github-accessors.go | 8 ++++++++ github/github-accessors_test.go | 11 +++++++++++ 4 files changed, 29 insertions(+), 9 deletions(-) diff --git a/github/enterprise_app_installation.go b/github/enterprise_app_installation.go index ea22ba0515c..8a36f991dc9 100644 --- a/github/enterprise_app_installation.go +++ b/github/enterprise_app_installation.go @@ -12,8 +12,9 @@ import ( // InstallableOrganization represents an organization in an enterprise in which a GitHub app can be installed. type InstallableOrganization struct { - ID *int64 `json:"id,omitempty"` - Login *string `json:"login,omitempty"` + ID *int64 `json:"id,omitempty"` + Login *string `json:"login,omitempty"` + AccessibleRepositoriesURL *string `json:"accessible_repositories_url"` } // AccessibleRepository represents a repository that can be made accessible to a GitHub app. @@ -23,15 +24,15 @@ type AccessibleRepository struct { FullName *string `json:"full_name,omitempty"` } -// AppInstallationRequest represents the request to install a GitHub app on an enterprise-owned organization. -type AppInstallationRequest struct { +// InstallAppRequest represents the request to install a GitHub app on an enterprise-owned organization. +type InstallAppRequest struct { // The Client ID of the GitHub App to install. ClientID string `json:"client_id"` // The selection of repositories that the GitHub app can access. // Can be one of: all, selected, none RepositorySelection string `json:"repository_selection"` // A list of repository names that the GitHub App can access, if the repository_selection is set to selected. - Repository []string `json:"repository,omitempty"` + Repositories []string `json:"repositories,omitempty"` } // ListAppInstallableOrganizations lists the organizations in an enterprise that are installable for an app. @@ -121,7 +122,7 @@ func (s *EnterpriseService) ListAppInstallations(ctx context.Context, enterprise // GitHub API docs: https://docs.github.com/enterprise-cloud@latest/rest/enterprise-admin/organization-installations#install-a-github-app-on-an-enterprise-owned-organization // //meta:operation POST /enterprises/{enterprise}/apps/organizations/{org}/installations -func (s *EnterpriseService) InstallApp(ctx context.Context, enterprise, org string, request AppInstallationRequest) (*Installation, *Response, error) { +func (s *EnterpriseService) InstallApp(ctx context.Context, enterprise, org string, request InstallAppRequest) (*Installation, *Response, error) { u := fmt.Sprintf("enterprises/%v/apps/organizations/%v/installations", enterprise, org) req, err := s.client.NewRequest("POST", u, request) if err != nil { diff --git a/github/enterprise_app_installation_test.go b/github/enterprise_app_installation_test.go index d3c9c150f81..044afb88389 100644 --- a/github/enterprise_app_installation_test.go +++ b/github/enterprise_app_installation_test.go @@ -137,14 +137,14 @@ func TestEnterpriseService_InstallApp(t *testing.T) { mux.HandleFunc("/enterprises/e/apps/organizations/org1/installations", func(w http.ResponseWriter, r *http.Request) { testMethod(t, r, "POST") - testBody(t, r, `{"client_id":"cid","repository_selection":"selected","repository":["r1","r2"]}`+"\n") + testBody(t, r, `{"client_id":"cid","repository_selection":"selected","repositories":["r1","r2"]}`+"\n") fmt.Fprint(w, `{"id":555}`) }) - req := AppInstallationRequest{ + req := InstallAppRequest{ ClientID: "cid", RepositorySelection: "selected", - Repository: []string{"r1", "r2"}, + Repositories: []string{"r1", "r2"}, } ctx := t.Context() diff --git a/github/github-accessors.go b/github/github-accessors.go index 1805b21f7f8..9edb7ae1172 100644 --- a/github/github-accessors.go +++ b/github/github-accessors.go @@ -11310,6 +11310,14 @@ func (i *Import) GetVCSUsername() string { return *i.VCSUsername } +// GetAccessibleRepositoriesURL returns the AccessibleRepositoriesURL field if it's non-nil, zero value otherwise. +func (i *InstallableOrganization) GetAccessibleRepositoriesURL() string { + if i == nil || i.AccessibleRepositoriesURL == nil { + return "" + } + return *i.AccessibleRepositoriesURL +} + // GetID returns the ID field if it's non-nil, zero value otherwise. func (i *InstallableOrganization) GetID() int64 { if i == nil || i.ID == nil { diff --git a/github/github-accessors_test.go b/github/github-accessors_test.go index 49ea2cf9706..243eae82597 100644 --- a/github/github-accessors_test.go +++ b/github/github-accessors_test.go @@ -14695,6 +14695,17 @@ func TestImport_GetVCSUsername(tt *testing.T) { i.GetVCSUsername() } +func TestInstallableOrganization_GetAccessibleRepositoriesURL(tt *testing.T) { + tt.Parallel() + var zeroValue string + i := &InstallableOrganization{AccessibleRepositoriesURL: &zeroValue} + i.GetAccessibleRepositoriesURL() + i = &InstallableOrganization{} + i.GetAccessibleRepositoriesURL() + i = nil + i.GetAccessibleRepositoriesURL() +} + func TestInstallableOrganization_GetID(tt *testing.T) { tt.Parallel() var zeroValue int64 From 226694bf8aecea19239d0fb161e139a89e0c815a Mon Sep 17 00:00:00 2001 From: Dhananjay Mishra Date: Mon, 17 Nov 2025 12:30:04 +0000 Subject: [PATCH 09/10] change *string to string --- github/enterprise_app_installation.go | 8 ++-- github/enterprise_app_installation_test.go | 4 +- github/github-accessors.go | 32 ---------------- github/github-accessors_test.go | 44 ---------------------- 4 files changed, 6 insertions(+), 82 deletions(-) diff --git a/github/enterprise_app_installation.go b/github/enterprise_app_installation.go index 8a36f991dc9..c88d9088410 100644 --- a/github/enterprise_app_installation.go +++ b/github/enterprise_app_installation.go @@ -12,15 +12,15 @@ import ( // InstallableOrganization represents an organization in an enterprise in which a GitHub app can be installed. type InstallableOrganization struct { - ID *int64 `json:"id,omitempty"` - Login *string `json:"login,omitempty"` + ID int64 `json:"id"` + Login string `json:"login"` AccessibleRepositoriesURL *string `json:"accessible_repositories_url"` } // AccessibleRepository represents a repository that can be made accessible to a GitHub app. type AccessibleRepository struct { - ID *int64 `json:"id,omitempty"` - Name *string `json:"name,omitempty"` + ID int64 `json:"id"` + Name string `json:"name"` FullName *string `json:"full_name,omitempty"` } diff --git a/github/enterprise_app_installation_test.go b/github/enterprise_app_installation_test.go index 044afb88389..f4b3d56b708 100644 --- a/github/enterprise_app_installation_test.go +++ b/github/enterprise_app_installation_test.go @@ -30,7 +30,7 @@ func TestEnterpriseService_ListAppInstallableOrganizations(t *testing.T) { } want := []*InstallableOrganization{ - {ID: Ptr(int64(1)), Login: Ptr("org1")}, + {ID: int64(1), Login: "org1"}, } if !cmp.Equal(got, want) { @@ -68,7 +68,7 @@ func TestEnterpriseService_ListAppAccessibleOrganizationRepositories(t *testing. } want := []*AccessibleRepository{ - {ID: Ptr(int64(10)), Name: Ptr("repo1"), FullName: Ptr("org1/repo1")}, + {ID: int64(10), Name: "repo1", FullName: Ptr("org1/repo1")}, } if !cmp.Equal(repos, want) { diff --git a/github/github-accessors.go b/github/github-accessors.go index 9edb7ae1172..39d62d68f6b 100644 --- a/github/github-accessors.go +++ b/github/github-accessors.go @@ -86,22 +86,6 @@ func (a *AccessibleRepository) GetFullName() string { return *a.FullName } -// GetID returns the ID field if it's non-nil, zero value otherwise. -func (a *AccessibleRepository) GetID() int64 { - if a == nil || a.ID == nil { - return 0 - } - return *a.ID -} - -// GetName returns the Name field if it's non-nil, zero value otherwise. -func (a *AccessibleRepository) GetName() string { - if a == nil || a.Name == nil { - return "" - } - return *a.Name -} - // GetGithubOwnedAllowed returns the GithubOwnedAllowed field if it's non-nil, zero value otherwise. func (a *ActionsAllowed) GetGithubOwnedAllowed() bool { if a == nil || a.GithubOwnedAllowed == nil { @@ -11318,22 +11302,6 @@ func (i *InstallableOrganization) GetAccessibleRepositoriesURL() string { return *i.AccessibleRepositoriesURL } -// GetID returns the ID field if it's non-nil, zero value otherwise. -func (i *InstallableOrganization) GetID() int64 { - if i == nil || i.ID == nil { - return 0 - } - return *i.ID -} - -// GetLogin returns the Login field if it's non-nil, zero value otherwise. -func (i *InstallableOrganization) GetLogin() string { - if i == nil || i.Login == nil { - return "" - } - return *i.Login -} - // GetAccessTokensURL returns the AccessTokensURL field if it's non-nil, zero value otherwise. func (i *Installation) GetAccessTokensURL() string { if i == nil || i.AccessTokensURL == nil { diff --git a/github/github-accessors_test.go b/github/github-accessors_test.go index 243eae82597..1c820ee5264 100644 --- a/github/github-accessors_test.go +++ b/github/github-accessors_test.go @@ -108,28 +108,6 @@ func TestAccessibleRepository_GetFullName(tt *testing.T) { a.GetFullName() } -func TestAccessibleRepository_GetID(tt *testing.T) { - tt.Parallel() - var zeroValue int64 - a := &AccessibleRepository{ID: &zeroValue} - a.GetID() - a = &AccessibleRepository{} - a.GetID() - a = nil - a.GetID() -} - -func TestAccessibleRepository_GetName(tt *testing.T) { - tt.Parallel() - var zeroValue string - a := &AccessibleRepository{Name: &zeroValue} - a.GetName() - a = &AccessibleRepository{} - a.GetName() - a = nil - a.GetName() -} - func TestActionsAllowed_GetGithubOwnedAllowed(tt *testing.T) { tt.Parallel() var zeroValue bool @@ -14706,28 +14684,6 @@ func TestInstallableOrganization_GetAccessibleRepositoriesURL(tt *testing.T) { i.GetAccessibleRepositoriesURL() } -func TestInstallableOrganization_GetID(tt *testing.T) { - tt.Parallel() - var zeroValue int64 - i := &InstallableOrganization{ID: &zeroValue} - i.GetID() - i = &InstallableOrganization{} - i.GetID() - i = nil - i.GetID() -} - -func TestInstallableOrganization_GetLogin(tt *testing.T) { - tt.Parallel() - var zeroValue string - i := &InstallableOrganization{Login: &zeroValue} - i.GetLogin() - i = &InstallableOrganization{} - i.GetLogin() - i = nil - i.GetLogin() -} - func TestInstallation_GetAccessTokensURL(tt *testing.T) { tt.Parallel() var zeroValue string From 884c2d1da06148c975242ff089b70be159d7d0bb Mon Sep 17 00:00:00 2001 From: Dhananjay Mishra Date: Mon, 17 Nov 2025 12:46:13 +0000 Subject: [PATCH 10/10] fix *string and omitempty issue --- github/enterprise_app_installation.go | 8 ++++---- github/enterprise_app_installation_test.go | 2 +- github/github-accessors.go | 8 -------- github/github-accessors_test.go | 11 ----------- 4 files changed, 5 insertions(+), 24 deletions(-) diff --git a/github/enterprise_app_installation.go b/github/enterprise_app_installation.go index c88d9088410..aed3ac753fd 100644 --- a/github/enterprise_app_installation.go +++ b/github/enterprise_app_installation.go @@ -14,14 +14,14 @@ import ( type InstallableOrganization struct { ID int64 `json:"id"` Login string `json:"login"` - AccessibleRepositoriesURL *string `json:"accessible_repositories_url"` + AccessibleRepositoriesURL *string `json:"accessible_repositories_url,omitempty"` } // AccessibleRepository represents a repository that can be made accessible to a GitHub app. type AccessibleRepository struct { - ID int64 `json:"id"` - Name string `json:"name"` - FullName *string `json:"full_name,omitempty"` + ID int64 `json:"id"` + Name string `json:"name"` + FullName string `json:"full_name"` } // InstallAppRequest represents the request to install a GitHub app on an enterprise-owned organization. diff --git a/github/enterprise_app_installation_test.go b/github/enterprise_app_installation_test.go index f4b3d56b708..766982a28d4 100644 --- a/github/enterprise_app_installation_test.go +++ b/github/enterprise_app_installation_test.go @@ -68,7 +68,7 @@ func TestEnterpriseService_ListAppAccessibleOrganizationRepositories(t *testing. } want := []*AccessibleRepository{ - {ID: int64(10), Name: "repo1", FullName: Ptr("org1/repo1")}, + {ID: int64(10), Name: "repo1", FullName: "org1/repo1"}, } if !cmp.Equal(repos, want) { diff --git a/github/github-accessors.go b/github/github-accessors.go index 39d62d68f6b..d9ed060d5ce 100644 --- a/github/github-accessors.go +++ b/github/github-accessors.go @@ -78,14 +78,6 @@ func (a *AcceptedAssignment) GetSubmitted() bool { return *a.Submitted } -// GetFullName returns the FullName field if it's non-nil, zero value otherwise. -func (a *AccessibleRepository) GetFullName() string { - if a == nil || a.FullName == nil { - return "" - } - return *a.FullName -} - // GetGithubOwnedAllowed returns the GithubOwnedAllowed field if it's non-nil, zero value otherwise. func (a *ActionsAllowed) GetGithubOwnedAllowed() bool { if a == nil || a.GithubOwnedAllowed == nil { diff --git a/github/github-accessors_test.go b/github/github-accessors_test.go index 1c820ee5264..d2ae9e7b911 100644 --- a/github/github-accessors_test.go +++ b/github/github-accessors_test.go @@ -97,17 +97,6 @@ func TestAcceptedAssignment_GetSubmitted(tt *testing.T) { a.GetSubmitted() } -func TestAccessibleRepository_GetFullName(tt *testing.T) { - tt.Parallel() - var zeroValue string - a := &AccessibleRepository{FullName: &zeroValue} - a.GetFullName() - a = &AccessibleRepository{} - a.GetFullName() - a = nil - a.GetFullName() -} - func TestActionsAllowed_GetGithubOwnedAllowed(tt *testing.T) { tt.Parallel() var zeroValue bool