github.com/google/go-github/v60@v60.0.0/github/orgs_custom_roles.go (about) 1 // Copyright 2022 The go-github AUTHORS. All rights reserved. 2 // 3 // Use of this source code is governed by a BSD-style 4 // license that can be found in the LICENSE file. 5 6 package github 7 8 import ( 9 "context" 10 "fmt" 11 ) 12 13 // OrganizationCustomRepoRoles represents custom repository roles available in specified organization. 14 type OrganizationCustomRepoRoles struct { 15 TotalCount *int `json:"total_count,omitempty"` 16 CustomRepoRoles []*CustomRepoRoles `json:"custom_roles,omitempty"` 17 } 18 19 // CustomRepoRoles represents custom repository roles for an organization. 20 // See https://docs.github.com/enterprise-cloud@latest/organizations/managing-peoples-access-to-your-organization-with-roles/managing-custom-repository-roles-for-an-organization 21 // for more information. 22 type CustomRepoRoles struct { 23 ID *int64 `json:"id,omitempty"` 24 Name *string `json:"name,omitempty"` 25 Description *string `json:"description,omitempty"` 26 BaseRole *string `json:"base_role,omitempty"` 27 Permissions []string `json:"permissions,omitempty"` 28 } 29 30 // ListCustomRepoRoles lists the custom repository roles available in this organization. 31 // In order to see custom repository roles in an organization, the authenticated user must be an organization owner. 32 // 33 // GitHub API docs: https://docs.github.com/enterprise-cloud@latest/rest/orgs/custom-roles#list-custom-repository-roles-in-an-organization 34 // 35 //meta:operation GET /orgs/{org}/custom-repository-roles 36 func (s *OrganizationsService) ListCustomRepoRoles(ctx context.Context, org string) (*OrganizationCustomRepoRoles, *Response, error) { 37 u := fmt.Sprintf("orgs/%v/custom-repository-roles", org) 38 39 req, err := s.client.NewRequest("GET", u, nil) 40 if err != nil { 41 return nil, nil, err 42 } 43 44 customRepoRoles := new(OrganizationCustomRepoRoles) 45 resp, err := s.client.Do(ctx, req, customRepoRoles) 46 if err != nil { 47 return nil, resp, err 48 } 49 50 return customRepoRoles, resp, nil 51 } 52 53 // CreateOrUpdateCustomRoleOptions represents options required to create or update a custom repository role. 54 type CreateOrUpdateCustomRoleOptions struct { 55 Name *string `json:"name,omitempty"` 56 Description *string `json:"description,omitempty"` 57 BaseRole *string `json:"base_role,omitempty"` 58 Permissions []string `json:"permissions,omitempty"` 59 } 60 61 // CreateCustomRepoRole creates a custom repository role in this organization. 62 // In order to create custom repository roles in an organization, the authenticated user must be an organization owner. 63 // 64 // GitHub API docs: https://docs.github.com/enterprise-cloud@latest/rest/orgs/custom-roles#create-a-custom-repository-role 65 // 66 //meta:operation POST /orgs/{org}/custom-repository-roles 67 func (s *OrganizationsService) CreateCustomRepoRole(ctx context.Context, org string, opts *CreateOrUpdateCustomRoleOptions) (*CustomRepoRoles, *Response, error) { 68 u := fmt.Sprintf("orgs/%v/custom-repository-roles", org) 69 70 req, err := s.client.NewRequest("POST", u, opts) 71 if err != nil { 72 return nil, nil, err 73 } 74 75 resultingRole := new(CustomRepoRoles) 76 resp, err := s.client.Do(ctx, req, resultingRole) 77 if err != nil { 78 return nil, resp, err 79 } 80 81 return resultingRole, resp, err 82 } 83 84 // UpdateCustomRepoRole updates a custom repository role in this organization. 85 // In order to update custom repository roles in an organization, the authenticated user must be an organization owner. 86 // 87 // GitHub API docs: https://docs.github.com/enterprise-cloud@latest/rest/orgs/custom-roles#update-a-custom-repository-role 88 // 89 //meta:operation PATCH /orgs/{org}/custom-repository-roles/{role_id} 90 func (s *OrganizationsService) UpdateCustomRepoRole(ctx context.Context, org, roleID string, opts *CreateOrUpdateCustomRoleOptions) (*CustomRepoRoles, *Response, error) { 91 u := fmt.Sprintf("orgs/%v/custom-repository-roles/%v", org, roleID) 92 93 req, err := s.client.NewRequest("PATCH", u, opts) 94 if err != nil { 95 return nil, nil, err 96 } 97 98 resultingRole := new(CustomRepoRoles) 99 resp, err := s.client.Do(ctx, req, resultingRole) 100 if err != nil { 101 return nil, resp, err 102 } 103 104 return resultingRole, resp, err 105 } 106 107 // DeleteCustomRepoRole deletes an existing custom repository role in this organization. 108 // In order to delete custom repository roles in an organization, the authenticated user must be an organization owner. 109 // 110 // GitHub API docs: https://docs.github.com/enterprise-cloud@latest/rest/orgs/custom-roles#delete-a-custom-repository-role 111 // 112 //meta:operation DELETE /orgs/{org}/custom-repository-roles/{role_id} 113 func (s *OrganizationsService) DeleteCustomRepoRole(ctx context.Context, org, roleID string) (*Response, error) { 114 u := fmt.Sprintf("orgs/%v/custom-repository-roles/%v", org, roleID) 115 116 req, err := s.client.NewRequest("DELETE", u, nil) 117 if err != nil { 118 return nil, err 119 } 120 121 resultingRole := new(CustomRepoRoles) 122 resp, err := s.client.Do(ctx, req, resultingRole) 123 if err != nil { 124 return resp, err 125 } 126 127 return resp, nil 128 }