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