github.com/google/go-github/v49@v49.1.0/github/actions_runners.go (about) 1 // Copyright 2020 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 // RunnerApplicationDownload represents a binary for the self-hosted runner application that can be downloaded. 14 type RunnerApplicationDownload struct { 15 OS *string `json:"os,omitempty"` 16 Architecture *string `json:"architecture,omitempty"` 17 DownloadURL *string `json:"download_url,omitempty"` 18 Filename *string `json:"filename,omitempty"` 19 TempDownloadToken *string `json:"temp_download_token,omitempty"` 20 SHA256Checksum *string `json:"sha256_checksum,omitempty"` 21 } 22 23 // ActionsEnabledOnOrgRepos represents all the repositories in an organization for which Actions is enabled. 24 type ActionsEnabledOnOrgRepos struct { 25 TotalCount int `json:"total_count"` 26 Repositories []*Repository `json:"repositories"` 27 } 28 29 // ListRunnerApplicationDownloads lists self-hosted runner application binaries that can be downloaded and run. 30 // 31 // GitHub API docs: https://docs.github.com/en/rest/actions/self-hosted-runners#list-runner-applications-for-a-repository 32 func (s *ActionsService) ListRunnerApplicationDownloads(ctx context.Context, owner, repo string) ([]*RunnerApplicationDownload, *Response, error) { 33 u := fmt.Sprintf("repos/%v/%v/actions/runners/downloads", owner, repo) 34 req, err := s.client.NewRequest("GET", u, nil) 35 if err != nil { 36 return nil, nil, err 37 } 38 39 var rads []*RunnerApplicationDownload 40 resp, err := s.client.Do(ctx, req, &rads) 41 if err != nil { 42 return nil, resp, err 43 } 44 45 return rads, resp, nil 46 } 47 48 // RegistrationToken represents a token that can be used to add a self-hosted runner to a repository. 49 type RegistrationToken struct { 50 Token *string `json:"token,omitempty"` 51 ExpiresAt *Timestamp `json:"expires_at,omitempty"` 52 } 53 54 // CreateRegistrationToken creates a token that can be used to add a self-hosted runner. 55 // 56 // GitHub API docs: https://docs.github.com/en/rest/actions/self-hosted-runners#create-a-registration-token-for-a-repository 57 func (s *ActionsService) CreateRegistrationToken(ctx context.Context, owner, repo string) (*RegistrationToken, *Response, error) { 58 u := fmt.Sprintf("repos/%v/%v/actions/runners/registration-token", owner, repo) 59 60 req, err := s.client.NewRequest("POST", u, nil) 61 if err != nil { 62 return nil, nil, err 63 } 64 65 registrationToken := new(RegistrationToken) 66 resp, err := s.client.Do(ctx, req, registrationToken) 67 if err != nil { 68 return nil, resp, err 69 } 70 71 return registrationToken, resp, nil 72 } 73 74 // Runner represents a self-hosted runner registered with a repository. 75 type Runner struct { 76 ID *int64 `json:"id,omitempty"` 77 Name *string `json:"name,omitempty"` 78 OS *string `json:"os,omitempty"` 79 Status *string `json:"status,omitempty"` 80 Busy *bool `json:"busy,omitempty"` 81 Labels []*RunnerLabels `json:"labels,omitempty"` 82 } 83 84 // RunnerLabels represents a collection of labels attached to each runner. 85 type RunnerLabels struct { 86 ID *int64 `json:"id,omitempty"` 87 Name *string `json:"name,omitempty"` 88 Type *string `json:"type,omitempty"` 89 } 90 91 // Runners represents a collection of self-hosted runners for a repository. 92 type Runners struct { 93 TotalCount int `json:"total_count"` 94 Runners []*Runner `json:"runners"` 95 } 96 97 // ListRunners lists all the self-hosted runners for a repository. 98 // 99 // GitHub API docs: https://docs.github.com/en/rest/actions/self-hosted-runners#list-self-hosted-runners-for-a-repository 100 func (s *ActionsService) ListRunners(ctx context.Context, owner, repo string, opts *ListOptions) (*Runners, *Response, error) { 101 u := fmt.Sprintf("repos/%v/%v/actions/runners", owner, repo) 102 u, err := addOptions(u, opts) 103 if err != nil { 104 return nil, nil, err 105 } 106 107 req, err := s.client.NewRequest("GET", u, nil) 108 if err != nil { 109 return nil, nil, err 110 } 111 112 runners := &Runners{} 113 resp, err := s.client.Do(ctx, req, &runners) 114 if err != nil { 115 return nil, resp, err 116 } 117 118 return runners, resp, nil 119 } 120 121 // GetRunner gets a specific self-hosted runner for a repository using its runner ID. 122 // 123 // GitHub API docs: https://docs.github.com/en/rest/actions/self-hosted-runners#get-a-self-hosted-runner-for-a-repository 124 func (s *ActionsService) GetRunner(ctx context.Context, owner, repo string, runnerID int64) (*Runner, *Response, error) { 125 u := fmt.Sprintf("repos/%v/%v/actions/runners/%v", owner, repo, runnerID) 126 req, err := s.client.NewRequest("GET", u, nil) 127 if err != nil { 128 return nil, nil, err 129 } 130 131 runner := new(Runner) 132 resp, err := s.client.Do(ctx, req, runner) 133 if err != nil { 134 return nil, resp, err 135 } 136 137 return runner, resp, nil 138 } 139 140 // RemoveToken represents a token that can be used to remove a self-hosted runner from a repository. 141 type RemoveToken struct { 142 Token *string `json:"token,omitempty"` 143 ExpiresAt *Timestamp `json:"expires_at,omitempty"` 144 } 145 146 // CreateRemoveToken creates a token that can be used to remove a self-hosted runner from a repository. 147 // 148 // GitHub API docs: https://docs.github.com/en/rest/actions/self-hosted-runners#create-a-remove-token-for-a-repository 149 func (s *ActionsService) CreateRemoveToken(ctx context.Context, owner, repo string) (*RemoveToken, *Response, error) { 150 u := fmt.Sprintf("repos/%v/%v/actions/runners/remove-token", owner, repo) 151 152 req, err := s.client.NewRequest("POST", u, nil) 153 if err != nil { 154 return nil, nil, err 155 } 156 157 removeToken := new(RemoveToken) 158 resp, err := s.client.Do(ctx, req, removeToken) 159 if err != nil { 160 return nil, resp, err 161 } 162 163 return removeToken, resp, nil 164 } 165 166 // RemoveRunner forces the removal of a self-hosted runner in a repository using the runner id. 167 // 168 // GitHub API docs: https://docs.github.com/en/rest/actions/self-hosted-runners#delete-a-self-hosted-runner-from-a-repository 169 func (s *ActionsService) RemoveRunner(ctx context.Context, owner, repo string, runnerID int64) (*Response, error) { 170 u := fmt.Sprintf("repos/%v/%v/actions/runners/%v", owner, repo, runnerID) 171 172 req, err := s.client.NewRequest("DELETE", u, nil) 173 if err != nil { 174 return nil, err 175 } 176 177 return s.client.Do(ctx, req, nil) 178 } 179 180 // ListOrganizationRunnerApplicationDownloads lists self-hosted runner application binaries that can be downloaded and run. 181 // 182 // GitHub API docs: https://docs.github.com/en/rest/actions/self-hosted-runners#list-runner-applications-for-an-organization 183 func (s *ActionsService) ListOrganizationRunnerApplicationDownloads(ctx context.Context, owner string) ([]*RunnerApplicationDownload, *Response, error) { 184 u := fmt.Sprintf("orgs/%v/actions/runners/downloads", owner) 185 req, err := s.client.NewRequest("GET", u, nil) 186 if err != nil { 187 return nil, nil, err 188 } 189 190 var rads []*RunnerApplicationDownload 191 resp, err := s.client.Do(ctx, req, &rads) 192 if err != nil { 193 return nil, resp, err 194 } 195 196 return rads, resp, nil 197 } 198 199 // CreateOrganizationRegistrationToken creates a token that can be used to add a self-hosted runner to an organization. 200 // 201 // GitHub API docs: https://docs.github.com/en/rest/actions/self-hosted-runners#create-a-registration-token-for-an-organization 202 func (s *ActionsService) CreateOrganizationRegistrationToken(ctx context.Context, owner string) (*RegistrationToken, *Response, error) { 203 u := fmt.Sprintf("orgs/%v/actions/runners/registration-token", owner) 204 205 req, err := s.client.NewRequest("POST", u, nil) 206 if err != nil { 207 return nil, nil, err 208 } 209 210 registrationToken := new(RegistrationToken) 211 resp, err := s.client.Do(ctx, req, registrationToken) 212 if err != nil { 213 return nil, resp, err 214 } 215 216 return registrationToken, resp, nil 217 } 218 219 // ListOrganizationRunners lists all the self-hosted runners for an organization. 220 // 221 // GitHub API docs: https://docs.github.com/en/rest/actions/self-hosted-runners#list-self-hosted-runners-for-an-organization 222 func (s *ActionsService) ListOrganizationRunners(ctx context.Context, owner string, opts *ListOptions) (*Runners, *Response, error) { 223 u := fmt.Sprintf("orgs/%v/actions/runners", owner) 224 u, err := addOptions(u, opts) 225 if err != nil { 226 return nil, nil, err 227 } 228 229 req, err := s.client.NewRequest("GET", u, nil) 230 if err != nil { 231 return nil, nil, err 232 } 233 234 runners := &Runners{} 235 resp, err := s.client.Do(ctx, req, &runners) 236 if err != nil { 237 return nil, resp, err 238 } 239 240 return runners, resp, nil 241 } 242 243 // ListEnabledReposInOrg lists the selected repositories that are enabled for GitHub Actions in an organization. 244 // 245 // GitHub API docs: https://docs.github.com/en/rest/actions/permissions#list-selected-repositories-enabled-for-github-actions-in-an-organization 246 func (s *ActionsService) ListEnabledReposInOrg(ctx context.Context, owner string, opts *ListOptions) (*ActionsEnabledOnOrgRepos, *Response, error) { 247 u := fmt.Sprintf("orgs/%v/actions/permissions/repositories", owner) 248 u, err := addOptions(u, opts) 249 if err != nil { 250 return nil, nil, err 251 } 252 253 req, err := s.client.NewRequest("GET", u, nil) 254 if err != nil { 255 return nil, nil, err 256 } 257 258 repos := &ActionsEnabledOnOrgRepos{} 259 resp, err := s.client.Do(ctx, req, repos) 260 if err != nil { 261 return nil, resp, err 262 } 263 264 return repos, resp, nil 265 } 266 267 // SetEnabledReposInOrg replaces the list of selected repositories that are enabled for GitHub Actions in an organization.. 268 // 269 // GitHub API docs: https://docs.github.com/en/rest/actions/permissions#set-selected-repositories-enabled-for-github-actions-in-an-organization 270 func (s *ActionsService) SetEnabledReposInOrg(ctx context.Context, owner string, repositoryIDs []int64) (*Response, error) { 271 u := fmt.Sprintf("orgs/%v/actions/permissions/repositories", owner) 272 273 req, err := s.client.NewRequest("PUT", u, struct { 274 IDs []int64 `json:"selected_repository_ids"` 275 }{IDs: repositoryIDs}) 276 if err != nil { 277 return nil, err 278 } 279 280 resp, err := s.client.Do(ctx, req, nil) 281 if err != nil { 282 return resp, err 283 } 284 285 return resp, nil 286 } 287 288 // AddEnabledReposInOrg adds a repository to the list of selected repositories that are enabled for GitHub Actions in an organization. 289 // 290 // GitHub API docs: https://docs.github.com/en/rest/actions/permissions#enable-a-selected-repository-for-github-actions-in-an-organization 291 func (s *ActionsService) AddEnabledReposInOrg(ctx context.Context, owner string, repositoryID int64) (*Response, error) { 292 u := fmt.Sprintf("orgs/%v/actions/permissions/repositories/%v", owner, repositoryID) 293 294 req, err := s.client.NewRequest("PUT", u, nil) 295 if err != nil { 296 return nil, err 297 } 298 299 resp, err := s.client.Do(ctx, req, nil) 300 if err != nil { 301 return resp, err 302 } 303 304 return resp, nil 305 } 306 307 // RemoveEnabledRepoInOrg removes a single repository from the list of enabled repos for GitHub Actions in an organization. 308 // 309 // GitHub API docs: https://docs.github.com/en/rest/actions/permissions#disable-a-selected-repository-for-github-actions-in-an-organization 310 func (s *ActionsService) RemoveEnabledRepoInOrg(ctx context.Context, owner string, repositoryID int64) (*Response, error) { 311 u := fmt.Sprintf("orgs/%v/actions/permissions/repositories/%v", owner, repositoryID) 312 313 req, err := s.client.NewRequest("DELETE", u, nil) 314 if err != nil { 315 return nil, err 316 } 317 318 resp, err := s.client.Do(ctx, req, nil) 319 if err != nil { 320 return resp, err 321 } 322 323 return resp, nil 324 } 325 326 // GetOrganizationRunner gets a specific self-hosted runner for an organization using its runner ID. 327 // 328 // GitHub API docs: https://docs.github.com/en/rest/actions/self-hosted-runners#get-a-self-hosted-runner-for-an-organization 329 func (s *ActionsService) GetOrganizationRunner(ctx context.Context, owner string, runnerID int64) (*Runner, *Response, error) { 330 u := fmt.Sprintf("orgs/%v/actions/runners/%v", owner, runnerID) 331 req, err := s.client.NewRequest("GET", u, nil) 332 if err != nil { 333 return nil, nil, err 334 } 335 336 runner := new(Runner) 337 resp, err := s.client.Do(ctx, req, runner) 338 if err != nil { 339 return nil, resp, err 340 } 341 342 return runner, resp, nil 343 } 344 345 // CreateOrganizationRemoveToken creates a token that can be used to remove a self-hosted runner from an organization. 346 // 347 // GitHub API docs: https://docs.github.com/en/rest/actions/self-hosted-runners#create-a-remove-token-for-an-organization 348 func (s *ActionsService) CreateOrganizationRemoveToken(ctx context.Context, owner string) (*RemoveToken, *Response, error) { 349 u := fmt.Sprintf("orgs/%v/actions/runners/remove-token", owner) 350 351 req, err := s.client.NewRequest("POST", u, nil) 352 if err != nil { 353 return nil, nil, err 354 } 355 356 removeToken := new(RemoveToken) 357 resp, err := s.client.Do(ctx, req, removeToken) 358 if err != nil { 359 return nil, resp, err 360 } 361 362 return removeToken, resp, nil 363 } 364 365 // RemoveOrganizationRunner forces the removal of a self-hosted runner from an organization using the runner id. 366 // 367 // GitHub API docs: https://docs.github.com/en/rest/actions/self-hosted-runners#delete-a-self-hosted-runner-from-an-organization 368 func (s *ActionsService) RemoveOrganizationRunner(ctx context.Context, owner string, runnerID int64) (*Response, error) { 369 u := fmt.Sprintf("orgs/%v/actions/runners/%v", owner, runnerID) 370 371 req, err := s.client.NewRequest("DELETE", u, nil) 372 if err != nil { 373 return nil, err 374 } 375 376 return s.client.Do(ctx, req, nil) 377 }