github.com/google/go-github/v70@v70.0.0/github/repos_rules.go (about) 1 // Copyright 2023 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 // rulesetNoOmitBypassActors represents a GitHub ruleset object. The struct does not omit bypassActors if the field is nil or an empty array is passed. 14 type rulesetNoOmitBypassActors struct { 15 ID *int64 `json:"id,omitempty"` 16 Name string `json:"name"` 17 Target *RulesetTarget `json:"target,omitempty"` 18 SourceType *RulesetSourceType `json:"source_type,omitempty"` 19 Source string `json:"source"` 20 Enforcement RulesetEnforcement `json:"enforcement"` 21 BypassActors []*BypassActor `json:"bypass_actors"` 22 CurrentUserCanBypass *BypassMode `json:"current_user_can_bypass,omitempty"` 23 NodeID *string `json:"node_id,omitempty"` 24 Links *RepositoryRulesetLinks `json:"_links,omitempty"` 25 Conditions *RepositoryRulesetConditions `json:"conditions,omitempty"` 26 Rules *RepositoryRulesetRules `json:"rules,omitempty"` 27 UpdatedAt *Timestamp `json:"updated_at,omitempty"` 28 CreatedAt *Timestamp `json:"created_at,omitempty"` 29 } 30 31 // rulesetClearBypassActors is used to clear the bypass actors when modifying a GitHub ruleset object. 32 type rulesetClearBypassActors struct { 33 BypassActors []*BypassActor `json:"bypass_actors"` 34 } 35 36 // GetRulesForBranch gets all the repository rules that apply to the specified branch. 37 // 38 // GitHub API docs: https://docs.github.com/rest/repos/rules#get-rules-for-a-branch 39 // 40 //meta:operation GET /repos/{owner}/{repo}/rules/branches/{branch} 41 func (s *RepositoriesService) GetRulesForBranch(ctx context.Context, owner, repo, branch string) (*BranchRules, *Response, error) { 42 u := fmt.Sprintf("repos/%v/%v/rules/branches/%v", owner, repo, branch) 43 44 req, err := s.client.NewRequest("GET", u, nil) 45 if err != nil { 46 return nil, nil, err 47 } 48 49 var rules *BranchRules 50 resp, err := s.client.Do(ctx, req, &rules) 51 if err != nil { 52 return nil, resp, err 53 } 54 55 return rules, resp, nil 56 } 57 58 // GetAllRulesets gets all the repository rulesets for the specified repository. 59 // If includesParents is true, rulesets configured at the organization or enterprise level that apply to the repository will be returned. 60 // 61 // GitHub API docs: https://docs.github.com/rest/repos/rules#get-all-repository-rulesets 62 // 63 //meta:operation GET /repos/{owner}/{repo}/rulesets 64 func (s *RepositoriesService) GetAllRulesets(ctx context.Context, owner, repo string, includesParents bool) ([]*RepositoryRuleset, *Response, error) { 65 u := fmt.Sprintf("repos/%v/%v/rulesets?includes_parents=%v", owner, repo, includesParents) 66 67 req, err := s.client.NewRequest("GET", u, nil) 68 if err != nil { 69 return nil, nil, err 70 } 71 72 var ruleset []*RepositoryRuleset 73 resp, err := s.client.Do(ctx, req, &ruleset) 74 if err != nil { 75 return nil, resp, err 76 } 77 78 return ruleset, resp, nil 79 } 80 81 // CreateRuleset creates a repository ruleset for the specified repository. 82 // 83 // GitHub API docs: https://docs.github.com/rest/repos/rules#create-a-repository-ruleset 84 // 85 //meta:operation POST /repos/{owner}/{repo}/rulesets 86 func (s *RepositoriesService) CreateRuleset(ctx context.Context, owner, repo string, ruleset RepositoryRuleset) (*RepositoryRuleset, *Response, error) { 87 u := fmt.Sprintf("repos/%v/%v/rulesets", owner, repo) 88 89 req, err := s.client.NewRequest("POST", u, ruleset) 90 if err != nil { 91 return nil, nil, err 92 } 93 94 var rs *RepositoryRuleset 95 resp, err := s.client.Do(ctx, req, &rs) 96 if err != nil { 97 return nil, resp, err 98 } 99 100 return rs, resp, nil 101 } 102 103 // GetRuleset gets a repository ruleset for the specified repository. 104 // If includesParents is true, rulesets configured at the organization or enterprise level that apply to the repository will be returned. 105 // 106 // GitHub API docs: https://docs.github.com/rest/repos/rules#get-a-repository-ruleset 107 // 108 //meta:operation GET /repos/{owner}/{repo}/rulesets/{ruleset_id} 109 func (s *RepositoriesService) GetRuleset(ctx context.Context, owner, repo string, rulesetID int64, includesParents bool) (*RepositoryRuleset, *Response, error) { 110 u := fmt.Sprintf("repos/%v/%v/rulesets/%v?includes_parents=%v", owner, repo, rulesetID, includesParents) 111 112 req, err := s.client.NewRequest("GET", u, nil) 113 if err != nil { 114 return nil, nil, err 115 } 116 117 var ruleset *RepositoryRuleset 118 resp, err := s.client.Do(ctx, req, &ruleset) 119 if err != nil { 120 return nil, resp, err 121 } 122 123 return ruleset, resp, nil 124 } 125 126 // UpdateRuleset updates a repository ruleset for the specified repository. 127 // 128 // GitHub API docs: https://docs.github.com/rest/repos/rules#update-a-repository-ruleset 129 // 130 //meta:operation PUT /repos/{owner}/{repo}/rulesets/{ruleset_id} 131 func (s *RepositoriesService) UpdateRuleset(ctx context.Context, owner, repo string, rulesetID int64, ruleset RepositoryRuleset) (*RepositoryRuleset, *Response, error) { 132 u := fmt.Sprintf("repos/%v/%v/rulesets/%v", owner, repo, rulesetID) 133 134 req, err := s.client.NewRequest("PUT", u, ruleset) 135 if err != nil { 136 return nil, nil, err 137 } 138 139 var rs *RepositoryRuleset 140 resp, err := s.client.Do(ctx, req, &rs) 141 if err != nil { 142 return nil, resp, err 143 } 144 145 return rs, resp, nil 146 } 147 148 // UpdateRulesetClearBypassActor clears the bypass actors for a repository ruleset for the specified repository. 149 // 150 // This function is necessary as the UpdateRuleset function does not marshal ByPassActor if passed as an empty array. 151 // 152 // GitHub API docs: https://docs.github.com/rest/repos/rules#update-a-repository-ruleset 153 // 154 //meta:operation PUT /repos/{owner}/{repo}/rulesets/{ruleset_id} 155 func (s *RepositoriesService) UpdateRulesetClearBypassActor(ctx context.Context, owner, repo string, rulesetID int64) (*Response, error) { 156 u := fmt.Sprintf("repos/%v/%v/rulesets/%v", owner, repo, rulesetID) 157 158 rsClearBypassActor := rulesetClearBypassActors{} 159 160 req, err := s.client.NewRequest("PUT", u, rsClearBypassActor) 161 if err != nil { 162 return nil, err 163 } 164 165 resp, err := s.client.Do(ctx, req, nil) 166 if err != nil { 167 return resp, err 168 } 169 170 return resp, nil 171 } 172 173 // UpdateRulesetNoBypassActor updates a repository ruleset for the specified repository. 174 // 175 // This function is necessary as the UpdateRuleset function does not marshal ByPassActor if passed as an empty array. 176 // 177 // Deprecated: Use UpdateRulesetClearBypassActor instead. 178 // 179 // GitHub API docs: https://docs.github.com/rest/repos/rules#update-a-repository-ruleset 180 // 181 //meta:operation PUT /repos/{owner}/{repo}/rulesets/{ruleset_id} 182 func (s *RepositoriesService) UpdateRulesetNoBypassActor(ctx context.Context, owner, repo string, rulesetID int64, ruleset RepositoryRuleset) (*RepositoryRuleset, *Response, error) { 183 u := fmt.Sprintf("repos/%v/%v/rulesets/%v", owner, repo, rulesetID) 184 185 rsNoBypassActor := rulesetNoOmitBypassActors{ 186 ID: ruleset.ID, 187 Name: ruleset.Name, 188 Target: ruleset.Target, 189 SourceType: ruleset.SourceType, 190 Source: ruleset.Source, 191 Enforcement: ruleset.Enforcement, 192 BypassActors: ruleset.BypassActors, 193 NodeID: ruleset.NodeID, 194 Links: ruleset.Links, 195 Conditions: ruleset.Conditions, 196 Rules: ruleset.Rules, 197 } 198 199 req, err := s.client.NewRequest("PUT", u, rsNoBypassActor) 200 if err != nil { 201 return nil, nil, err 202 } 203 204 var rs *RepositoryRuleset 205 resp, err := s.client.Do(ctx, req, &rs) 206 if err != nil { 207 return nil, resp, err 208 } 209 210 return rs, resp, nil 211 } 212 213 // DeleteRuleset deletes a repository ruleset for the specified repository. 214 // 215 // GitHub API docs: https://docs.github.com/rest/repos/rules#delete-a-repository-ruleset 216 // 217 //meta:operation DELETE /repos/{owner}/{repo}/rulesets/{ruleset_id} 218 func (s *RepositoriesService) DeleteRuleset(ctx context.Context, owner, repo string, rulesetID int64) (*Response, error) { 219 u := fmt.Sprintf("repos/%v/%v/rulesets/%v", owner, repo, rulesetID) 220 221 req, err := s.client.NewRequest("DELETE", u, nil) 222 if err != nil { 223 return nil, err 224 } 225 226 return s.client.Do(ctx, req, nil) 227 }