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