github.com/google/go-github/v71@v71.0.0/github/actions_runner_groups.go (about) 1 // Copyright 2021 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 // RunnerGroup represents a self-hosted runner group configured in an organization. 14 type RunnerGroup struct { 15 ID *int64 `json:"id,omitempty"` 16 Name *string `json:"name,omitempty"` 17 Visibility *string `json:"visibility,omitempty"` 18 Default *bool `json:"default,omitempty"` 19 SelectedRepositoriesURL *string `json:"selected_repositories_url,omitempty"` 20 RunnersURL *string `json:"runners_url,omitempty"` 21 Inherited *bool `json:"inherited,omitempty"` 22 AllowsPublicRepositories *bool `json:"allows_public_repositories,omitempty"` 23 RestrictedToWorkflows *bool `json:"restricted_to_workflows,omitempty"` 24 SelectedWorkflows []string `json:"selected_workflows,omitempty"` 25 WorkflowRestrictionsReadOnly *bool `json:"workflow_restrictions_read_only,omitempty"` 26 } 27 28 // RunnerGroups represents a collection of self-hosted runner groups configured for an organization. 29 type RunnerGroups struct { 30 TotalCount int `json:"total_count"` 31 RunnerGroups []*RunnerGroup `json:"runner_groups"` 32 } 33 34 // CreateRunnerGroupRequest represents a request to create a Runner group for an organization. 35 type CreateRunnerGroupRequest struct { 36 Name *string `json:"name,omitempty"` 37 Visibility *string `json:"visibility,omitempty"` 38 // List of repository IDs that can access the runner group. 39 SelectedRepositoryIDs []int64 `json:"selected_repository_ids,omitempty"` 40 // Runners represent a list of runner IDs to add to the runner group. 41 Runners []int64 `json:"runners,omitempty"` 42 // If set to True, public repos can use this runner group 43 AllowsPublicRepositories *bool `json:"allows_public_repositories,omitempty"` 44 // If true, the runner group will be restricted to running only the workflows specified in the SelectedWorkflows slice. 45 RestrictedToWorkflows *bool `json:"restricted_to_workflows,omitempty"` 46 // List of workflows the runner group should be allowed to run. This setting will be ignored unless RestrictedToWorkflows is set to true. 47 SelectedWorkflows []string `json:"selected_workflows,omitempty"` 48 } 49 50 // UpdateRunnerGroupRequest represents a request to update a Runner group for an organization. 51 type UpdateRunnerGroupRequest struct { 52 Name *string `json:"name,omitempty"` 53 Visibility *string `json:"visibility,omitempty"` 54 AllowsPublicRepositories *bool `json:"allows_public_repositories,omitempty"` 55 RestrictedToWorkflows *bool `json:"restricted_to_workflows,omitempty"` 56 SelectedWorkflows []string `json:"selected_workflows,omitempty"` 57 } 58 59 // SetRepoAccessRunnerGroupRequest represents a request to replace the list of repositories 60 // that can access a self-hosted runner group configured in an organization. 61 type SetRepoAccessRunnerGroupRequest struct { 62 // Updated list of repository IDs that should be given access to the runner group. 63 SelectedRepositoryIDs []int64 `json:"selected_repository_ids"` 64 } 65 66 // SetRunnerGroupRunnersRequest represents a request to replace the list of 67 // self-hosted runners that are part of an organization runner group. 68 type SetRunnerGroupRunnersRequest struct { 69 // Updated list of runner IDs that should be given access to the runner group. 70 Runners []int64 `json:"runners"` 71 } 72 73 // ListOrgRunnerGroupOptions extend ListOptions to have the optional parameters VisibleToRepository. 74 type ListOrgRunnerGroupOptions struct { 75 ListOptions 76 77 // Only return runner groups that are allowed to be used by this repository. 78 VisibleToRepository string `url:"visible_to_repository,omitempty"` 79 } 80 81 // ListOrganizationRunnerGroups lists all self-hosted runner groups configured in an organization. 82 // 83 // GitHub API docs: https://docs.github.com/rest/actions/self-hosted-runner-groups#list-self-hosted-runner-groups-for-an-organization 84 // 85 //meta:operation GET /orgs/{org}/actions/runner-groups 86 func (s *ActionsService) ListOrganizationRunnerGroups(ctx context.Context, org string, opts *ListOrgRunnerGroupOptions) (*RunnerGroups, *Response, error) { 87 u := fmt.Sprintf("orgs/%v/actions/runner-groups", org) 88 u, err := addOptions(u, opts) 89 if err != nil { 90 return nil, nil, err 91 } 92 93 req, err := s.client.NewRequest("GET", u, nil) 94 if err != nil { 95 return nil, nil, err 96 } 97 98 groups := &RunnerGroups{} 99 resp, err := s.client.Do(ctx, req, &groups) 100 if err != nil { 101 return nil, resp, err 102 } 103 104 return groups, resp, nil 105 } 106 107 // GetOrganizationRunnerGroup gets a specific self-hosted runner group for an organization using its RunnerGroup ID. 108 // 109 // GitHub API docs: https://docs.github.com/rest/actions/self-hosted-runner-groups#get-a-self-hosted-runner-group-for-an-organization 110 // 111 //meta:operation GET /orgs/{org}/actions/runner-groups/{runner_group_id} 112 func (s *ActionsService) GetOrganizationRunnerGroup(ctx context.Context, org string, groupID int64) (*RunnerGroup, *Response, error) { 113 u := fmt.Sprintf("orgs/%v/actions/runner-groups/%v", org, groupID) 114 req, err := s.client.NewRequest("GET", u, nil) 115 if err != nil { 116 return nil, nil, err 117 } 118 119 runnerGroup := new(RunnerGroup) 120 resp, err := s.client.Do(ctx, req, runnerGroup) 121 if err != nil { 122 return nil, resp, err 123 } 124 125 return runnerGroup, resp, nil 126 } 127 128 // DeleteOrganizationRunnerGroup deletes a self-hosted runner group from an organization. 129 // 130 // GitHub API docs: https://docs.github.com/rest/actions/self-hosted-runner-groups#delete-a-self-hosted-runner-group-from-an-organization 131 // 132 //meta:operation DELETE /orgs/{org}/actions/runner-groups/{runner_group_id} 133 func (s *ActionsService) DeleteOrganizationRunnerGroup(ctx context.Context, org string, groupID int64) (*Response, error) { 134 u := fmt.Sprintf("orgs/%v/actions/runner-groups/%v", org, groupID) 135 136 req, err := s.client.NewRequest("DELETE", u, nil) 137 if err != nil { 138 return nil, err 139 } 140 141 return s.client.Do(ctx, req, nil) 142 } 143 144 // CreateOrganizationRunnerGroup creates a new self-hosted runner group for an organization. 145 // 146 // GitHub API docs: https://docs.github.com/rest/actions/self-hosted-runner-groups#create-a-self-hosted-runner-group-for-an-organization 147 // 148 //meta:operation POST /orgs/{org}/actions/runner-groups 149 func (s *ActionsService) CreateOrganizationRunnerGroup(ctx context.Context, org string, createReq CreateRunnerGroupRequest) (*RunnerGroup, *Response, error) { 150 u := fmt.Sprintf("orgs/%v/actions/runner-groups", org) 151 req, err := s.client.NewRequest("POST", u, createReq) 152 if err != nil { 153 return nil, nil, err 154 } 155 156 runnerGroup := new(RunnerGroup) 157 resp, err := s.client.Do(ctx, req, runnerGroup) 158 if err != nil { 159 return nil, resp, err 160 } 161 162 return runnerGroup, resp, nil 163 } 164 165 // UpdateOrganizationRunnerGroup updates a self-hosted runner group for an organization. 166 // 167 // GitHub API docs: https://docs.github.com/rest/actions/self-hosted-runner-groups#update-a-self-hosted-runner-group-for-an-organization 168 // 169 //meta:operation PATCH /orgs/{org}/actions/runner-groups/{runner_group_id} 170 func (s *ActionsService) UpdateOrganizationRunnerGroup(ctx context.Context, org string, groupID int64, updateReq UpdateRunnerGroupRequest) (*RunnerGroup, *Response, error) { 171 u := fmt.Sprintf("orgs/%v/actions/runner-groups/%v", org, groupID) 172 req, err := s.client.NewRequest("PATCH", u, updateReq) 173 if err != nil { 174 return nil, nil, err 175 } 176 177 runnerGroup := new(RunnerGroup) 178 resp, err := s.client.Do(ctx, req, runnerGroup) 179 if err != nil { 180 return nil, resp, err 181 } 182 183 return runnerGroup, resp, nil 184 } 185 186 // ListRepositoryAccessRunnerGroup lists the repositories with access to a self-hosted runner group configured in an organization. 187 // 188 // GitHub API docs: https://docs.github.com/rest/actions/self-hosted-runner-groups#list-repository-access-to-a-self-hosted-runner-group-in-an-organization 189 // 190 //meta:operation GET /orgs/{org}/actions/runner-groups/{runner_group_id}/repositories 191 func (s *ActionsService) ListRepositoryAccessRunnerGroup(ctx context.Context, org string, groupID int64, opts *ListOptions) (*ListRepositories, *Response, error) { 192 u := fmt.Sprintf("orgs/%v/actions/runner-groups/%v/repositories", org, groupID) 193 u, err := addOptions(u, opts) 194 if err != nil { 195 return nil, nil, err 196 } 197 198 req, err := s.client.NewRequest("GET", u, nil) 199 if err != nil { 200 return nil, nil, err 201 } 202 203 repos := &ListRepositories{} 204 resp, err := s.client.Do(ctx, req, &repos) 205 if err != nil { 206 return nil, resp, err 207 } 208 209 return repos, resp, nil 210 } 211 212 // SetRepositoryAccessRunnerGroup replaces the list of repositories that have access to a self-hosted runner group configured in an organization 213 // with a new List of repositories. 214 // 215 // GitHub API docs: https://docs.github.com/rest/actions/self-hosted-runner-groups#set-repository-access-for-a-self-hosted-runner-group-in-an-organization 216 // 217 //meta:operation PUT /orgs/{org}/actions/runner-groups/{runner_group_id}/repositories 218 func (s *ActionsService) SetRepositoryAccessRunnerGroup(ctx context.Context, org string, groupID int64, ids SetRepoAccessRunnerGroupRequest) (*Response, error) { 219 u := fmt.Sprintf("orgs/%v/actions/runner-groups/%v/repositories", org, groupID) 220 221 req, err := s.client.NewRequest("PUT", u, ids) 222 if err != nil { 223 return nil, err 224 } 225 226 return s.client.Do(ctx, req, nil) 227 } 228 229 // AddRepositoryAccessRunnerGroup adds a repository to the list of selected repositories that can access a self-hosted runner group. 230 // The runner group must have visibility set to 'selected'. 231 // 232 // GitHub API docs: https://docs.github.com/rest/actions/self-hosted-runner-groups#add-repository-access-to-a-self-hosted-runner-group-in-an-organization 233 // 234 //meta:operation PUT /orgs/{org}/actions/runner-groups/{runner_group_id}/repositories/{repository_id} 235 func (s *ActionsService) AddRepositoryAccessRunnerGroup(ctx context.Context, org string, groupID, repoID int64) (*Response, error) { 236 u := fmt.Sprintf("orgs/%v/actions/runner-groups/%v/repositories/%v", org, groupID, repoID) 237 238 req, err := s.client.NewRequest("PUT", u, nil) 239 if err != nil { 240 return nil, err 241 } 242 243 return s.client.Do(ctx, req, nil) 244 } 245 246 // RemoveRepositoryAccessRunnerGroup removes a repository from the list of selected repositories that can access a self-hosted runner group. 247 // The runner group must have visibility set to 'selected'. 248 // 249 // GitHub API docs: https://docs.github.com/rest/actions/self-hosted-runner-groups#remove-repository-access-to-a-self-hosted-runner-group-in-an-organization 250 // 251 //meta:operation DELETE /orgs/{org}/actions/runner-groups/{runner_group_id}/repositories/{repository_id} 252 func (s *ActionsService) RemoveRepositoryAccessRunnerGroup(ctx context.Context, org string, groupID, repoID int64) (*Response, error) { 253 u := fmt.Sprintf("orgs/%v/actions/runner-groups/%v/repositories/%v", org, groupID, repoID) 254 255 req, err := s.client.NewRequest("DELETE", u, nil) 256 if err != nil { 257 return nil, err 258 } 259 260 return s.client.Do(ctx, req, nil) 261 } 262 263 // ListRunnerGroupRunners lists self-hosted runners that are in a specific organization group. 264 // 265 // GitHub API docs: https://docs.github.com/rest/actions/self-hosted-runner-groups#list-self-hosted-runners-in-a-group-for-an-organization 266 // 267 //meta:operation GET /orgs/{org}/actions/runner-groups/{runner_group_id}/runners 268 func (s *ActionsService) ListRunnerGroupRunners(ctx context.Context, org string, groupID int64, opts *ListOptions) (*Runners, *Response, error) { 269 u := fmt.Sprintf("orgs/%v/actions/runner-groups/%v/runners", org, groupID) 270 u, err := addOptions(u, opts) 271 if err != nil { 272 return nil, nil, err 273 } 274 275 req, err := s.client.NewRequest("GET", u, nil) 276 if err != nil { 277 return nil, nil, err 278 } 279 280 runners := &Runners{} 281 resp, err := s.client.Do(ctx, req, &runners) 282 if err != nil { 283 return nil, resp, err 284 } 285 286 return runners, resp, nil 287 } 288 289 // SetRunnerGroupRunners replaces the list of self-hosted runners that are part of an organization runner group 290 // with a new list of runners. 291 // 292 // GitHub API docs: https://docs.github.com/rest/actions/self-hosted-runner-groups#set-self-hosted-runners-in-a-group-for-an-organization 293 // 294 //meta:operation PUT /orgs/{org}/actions/runner-groups/{runner_group_id}/runners 295 func (s *ActionsService) SetRunnerGroupRunners(ctx context.Context, org string, groupID int64, ids SetRunnerGroupRunnersRequest) (*Response, error) { 296 u := fmt.Sprintf("orgs/%v/actions/runner-groups/%v/runners", org, groupID) 297 298 req, err := s.client.NewRequest("PUT", u, ids) 299 if err != nil { 300 return nil, err 301 } 302 303 return s.client.Do(ctx, req, nil) 304 } 305 306 // AddRunnerGroupRunners adds a self-hosted runner to a runner group configured in an organization. 307 // 308 // GitHub API docs: https://docs.github.com/rest/actions/self-hosted-runner-groups#add-a-self-hosted-runner-to-a-group-for-an-organization 309 // 310 //meta:operation PUT /orgs/{org}/actions/runner-groups/{runner_group_id}/runners/{runner_id} 311 func (s *ActionsService) AddRunnerGroupRunners(ctx context.Context, org string, groupID, runnerID int64) (*Response, error) { 312 u := fmt.Sprintf("orgs/%v/actions/runner-groups/%v/runners/%v", org, groupID, runnerID) 313 314 req, err := s.client.NewRequest("PUT", u, nil) 315 if err != nil { 316 return nil, err 317 } 318 319 return s.client.Do(ctx, req, nil) 320 } 321 322 // RemoveRunnerGroupRunners removes a self-hosted runner from a group configured in an organization. 323 // The runner is then returned to the default group. 324 // 325 // GitHub API docs: https://docs.github.com/rest/actions/self-hosted-runner-groups#remove-a-self-hosted-runner-from-a-group-for-an-organization 326 // 327 //meta:operation DELETE /orgs/{org}/actions/runner-groups/{runner_group_id}/runners/{runner_id} 328 func (s *ActionsService) RemoveRunnerGroupRunners(ctx context.Context, org string, groupID, runnerID int64) (*Response, error) { 329 u := fmt.Sprintf("orgs/%v/actions/runner-groups/%v/runners/%v", org, groupID, runnerID) 330 331 req, err := s.client.NewRequest("DELETE", u, nil) 332 if err != nil { 333 return nil, err 334 } 335 336 return s.client.Do(ctx, req, nil) 337 }