Skip to content

Commit d7911b3

Browse files
refactor!: Split CreateOrUpdateCustomRepoRoleOptions into CreateCustomRepoRoleRequest and UpdateCustomRepoRoleRequest and pass by value (#4401)
BREAKING CHANGE: `CreateOrUpdateCustomRepoRoleOptions` is split into `CreateCustomRepoRoleRequest` (with non-pointer `Name` and `BaseRole`) and `UpdateCustomRepoRoleRequest`; `OrganizationsService.CreateCustomRepoRole` and `UpdateCustomRepoRole` now take these request types by value.
1 parent a3951f5 commit d7911b3

5 files changed

Lines changed: 169 additions & 93 deletions

File tree

.golangci.yml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,6 @@ linters:
211211
- ConfigApplyOptions
212212
- ConfigSettings
213213
- CreateCodespaceOptions
214-
- CreateOrUpdateCustomRepoRoleOptions
215214
- CreateOrUpdateIssueTypesOptions
216215
- CreateOrgInvitationOptions
217216
- CreateUpdateEnvironment
@@ -280,7 +279,6 @@ linters:
280279
- CreateCheckRunOptions
281280
- CreateCheckSuiteOptions
282281
- CreateCodespaceOptions
283-
- CreateOrUpdateCustomRepoRoleOptions
284282
- CreateOrUpdateIssueTypesOptions
285283
- CreateOrgInvitationOptions
286284
- ImpersonateUserOptions

github/github-accessors.go

Lines changed: 64 additions & 32 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

github/github-accessors_test.go

Lines changed: 82 additions & 44 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

github/orgs_custom_repository_roles.go

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,20 @@ type CustomRepoRoles struct {
3030
UpdatedAt *Timestamp `json:"updated_at,omitempty"`
3131
}
3232

33-
// CreateOrUpdateCustomRepoRoleOptions represents options required to create or update a custom repository role.
34-
type CreateOrUpdateCustomRepoRoleOptions struct {
33+
// CreateCustomRepoRoleRequest represents the parameters to create a custom repository role.
34+
type CreateCustomRepoRoleRequest struct {
35+
Name string `json:"name"`
36+
Description *string `json:"description,omitempty"`
37+
BaseRole string `json:"base_role"`
38+
Permissions []string `json:"permissions"`
39+
}
40+
41+
// UpdateCustomRepoRoleRequest represents the parameters to update a custom repository role.
42+
type UpdateCustomRepoRoleRequest struct {
3543
Name *string `json:"name,omitempty"`
3644
Description *string `json:"description,omitempty"`
3745
BaseRole *string `json:"base_role,omitempty"`
38-
Permissions []string `json:"permissions"`
46+
Permissions []string `json:"permissions,omitzero"`
3947
}
4048

4149
// RepoFineGrainedPermission represents a fine-grained permission that can be used in a custom repository role.
@@ -96,7 +104,7 @@ func (s *OrganizationsService) GetCustomRepoRole(ctx context.Context, org string
96104
// GitHub API docs: https://docs.github.com/enterprise-cloud@latest/rest/orgs/custom-roles?apiVersion=2022-11-28#create-a-custom-repository-role
97105
//
98106
//meta:operation POST /orgs/{org}/custom-repository-roles
99-
func (s *OrganizationsService) CreateCustomRepoRole(ctx context.Context, org string, body *CreateOrUpdateCustomRepoRoleOptions) (*CustomRepoRoles, *Response, error) {
107+
func (s *OrganizationsService) CreateCustomRepoRole(ctx context.Context, org string, body CreateCustomRepoRoleRequest) (*CustomRepoRoles, *Response, error) {
100108
u := fmt.Sprintf("orgs/%v/custom-repository-roles", org)
101109

102110
req, err := s.client.NewRequest(ctx, "POST", u, body)
@@ -119,7 +127,7 @@ func (s *OrganizationsService) CreateCustomRepoRole(ctx context.Context, org str
119127
// GitHub API docs: https://docs.github.com/enterprise-cloud@latest/rest/orgs/custom-roles?apiVersion=2022-11-28#update-a-custom-repository-role
120128
//
121129
//meta:operation PATCH /orgs/{org}/custom-repository-roles/{role_id}
122-
func (s *OrganizationsService) UpdateCustomRepoRole(ctx context.Context, org string, roleID int64, body *CreateOrUpdateCustomRepoRoleOptions) (*CustomRepoRoles, *Response, error) {
130+
func (s *OrganizationsService) UpdateCustomRepoRole(ctx context.Context, org string, roleID int64, body UpdateCustomRepoRoleRequest) (*CustomRepoRoles, *Response, error) {
123131
u := fmt.Sprintf("orgs/%v/custom-repository-roles/%v", org, roleID)
124132

125133
req, err := s.client.NewRequest(ctx, "PATCH", u, body)

github/orgs_custom_repository_roles_test.go

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -183,13 +183,13 @@ func TestOrganizationsService_CreateCustomRepoRole(t *testing.T) {
183183

184184
ctx := t.Context()
185185

186-
opts := &CreateOrUpdateCustomRepoRoleOptions{
187-
Name: Ptr("Labeler"),
186+
body := CreateCustomRepoRoleRequest{
187+
Name: "Labeler",
188188
Description: Ptr("A role for issue and PR labelers"),
189-
BaseRole: Ptr("read"),
189+
BaseRole: "read",
190190
Permissions: []string{"add_label"},
191191
}
192-
apps, _, err := client.Organizations.CreateCustomRepoRole(ctx, "o", opts)
192+
apps, _, err := client.Organizations.CreateCustomRepoRole(ctx, "o", body)
193193
if err != nil {
194194
t.Errorf("Organizations.CreateCustomRepoRole returned error: %v", err)
195195
}
@@ -202,12 +202,12 @@ func TestOrganizationsService_CreateCustomRepoRole(t *testing.T) {
202202

203203
const methodName = "CreateCustomRepoRole"
204204
testBadOptions(t, methodName, func() (err error) {
205-
_, _, err = client.Organizations.CreateCustomRepoRole(ctx, "\no", nil)
205+
_, _, err = client.Organizations.CreateCustomRepoRole(ctx, "\no", CreateCustomRepoRoleRequest{})
206206
return err
207207
})
208208

209209
testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
210-
got, resp, err := client.Organizations.CreateCustomRepoRole(ctx, "o", nil)
210+
got, resp, err := client.Organizations.CreateCustomRepoRole(ctx, "o", CreateCustomRepoRoleRequest{})
211211
if got != nil {
212212
t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
213213
}
@@ -226,11 +226,11 @@ func TestOrganizationsService_UpdateCustomRepoRole(t *testing.T) {
226226

227227
ctx := t.Context()
228228

229-
opts := &CreateOrUpdateCustomRepoRoleOptions{
229+
body := UpdateCustomRepoRoleRequest{
230230
Name: Ptr("Updated Name"),
231231
Description: Ptr("Updated Description"),
232232
}
233-
apps, _, err := client.Organizations.UpdateCustomRepoRole(ctx, "o", 8030, opts)
233+
apps, _, err := client.Organizations.UpdateCustomRepoRole(ctx, "o", 8030, body)
234234
if err != nil {
235235
t.Errorf("Organizations.UpdateCustomRepoRole returned error: %v", err)
236236
}
@@ -243,12 +243,12 @@ func TestOrganizationsService_UpdateCustomRepoRole(t *testing.T) {
243243

244244
const methodName = "UpdateCustomRepoRole"
245245
testBadOptions(t, methodName, func() (err error) {
246-
_, _, err = client.Organizations.UpdateCustomRepoRole(ctx, "\no", 8030, nil)
246+
_, _, err = client.Organizations.UpdateCustomRepoRole(ctx, "\no", 8030, UpdateCustomRepoRoleRequest{})
247247
return err
248248
})
249249

250250
testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
251-
got, resp, err := client.Organizations.UpdateCustomRepoRole(ctx, "o", 8030, nil)
251+
got, resp, err := client.Organizations.UpdateCustomRepoRole(ctx, "o", 8030, UpdateCustomRepoRoleRequest{})
252252
if got != nil {
253253
t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
254254
}

0 commit comments

Comments
 (0)