96 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			96 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Go
		
	
	
	
| package github
 | |
| 
 | |
| // this contains BETA API clients, that are currently not (yet) in go-github
 | |
| // once these functions have been added there, they can be removed from here
 | |
| // code was reused from https://github.com/google/go-github
 | |
| 
 | |
| import (
 | |
| 	"context"
 | |
| 	"fmt"
 | |
| 	"net/url"
 | |
| 	"reflect"
 | |
| 
 | |
| 	"github.com/google/go-github/v33/github"
 | |
| 	"github.com/google/go-querystring/query"
 | |
| )
 | |
| 
 | |
| // CreateOrganizationRegistrationToken creates a token that can be used to add a self-hosted runner on an organization.
 | |
| //
 | |
| // GitHub API docs: https://developer.github.com/v3/actions/self-hosted-runners/#create-a-registration-token-for-an-organization
 | |
| func CreateOrganizationRegistrationToken(ctx context.Context, client *Client, owner string) (*github.RegistrationToken, *github.Response, error) {
 | |
| 	u := fmt.Sprintf("orgs/%v/actions/runners/registration-token", owner)
 | |
| 
 | |
| 	req, err := client.NewRequest("POST", u, nil)
 | |
| 	if err != nil {
 | |
| 		return nil, nil, err
 | |
| 	}
 | |
| 
 | |
| 	registrationToken := new(github.RegistrationToken)
 | |
| 	resp, err := client.Do(ctx, req, registrationToken)
 | |
| 	if err != nil {
 | |
| 		return nil, resp, err
 | |
| 	}
 | |
| 
 | |
| 	return registrationToken, resp, nil
 | |
| }
 | |
| 
 | |
| // ListOrganizationRunners lists all the self-hosted runners for an organization.
 | |
| //
 | |
| // GitHub API docs: https://developer.github.com/v3/actions/self-hosted-runners/#list-self-hosted-runners-for-an-organization
 | |
| func ListOrganizationRunners(ctx context.Context, client *Client, owner string, opts *github.ListOptions) (*github.Runners, *github.Response, error) {
 | |
| 	u := fmt.Sprintf("orgs/%v/actions/runners", owner)
 | |
| 	u, err := addOptions(u, opts)
 | |
| 	if err != nil {
 | |
| 		return nil, nil, err
 | |
| 	}
 | |
| 
 | |
| 	req, err := client.NewRequest("GET", u, nil)
 | |
| 	if err != nil {
 | |
| 		return nil, nil, err
 | |
| 	}
 | |
| 
 | |
| 	runners := &github.Runners{}
 | |
| 	resp, err := client.Do(ctx, req, &runners)
 | |
| 	if err != nil {
 | |
| 		return nil, resp, err
 | |
| 	}
 | |
| 
 | |
| 	return runners, resp, nil
 | |
| }
 | |
| 
 | |
| // RemoveOrganizationRunner forces the removal of a self-hosted runner in a repository using the runner id.
 | |
| //
 | |
| // GitHub API docs: https://developer.github.com/v3/actions/self_hosted_runners/#remove-a-self-hosted-runner
 | |
| func RemoveOrganizationRunner(ctx context.Context, client *Client, owner string, runnerID int64) (*github.Response, error) {
 | |
| 	u := fmt.Sprintf("orgs/%v/actions/runners/%v", owner, runnerID)
 | |
| 
 | |
| 	req, err := client.NewRequest("DELETE", u, nil)
 | |
| 	if err != nil {
 | |
| 		return nil, err
 | |
| 	}
 | |
| 
 | |
| 	return client.Do(ctx, req, nil)
 | |
| }
 | |
| 
 | |
| // addOptions adds the parameters in opt as URL query parameters to s. opt
 | |
| // must be a struct whose fields may contain "url" tags.
 | |
| func addOptions(s string, opts interface{}) (string, error) {
 | |
| 	v := reflect.ValueOf(opts)
 | |
| 	if v.Kind() == reflect.Ptr && v.IsNil() {
 | |
| 		return s, nil
 | |
| 	}
 | |
| 
 | |
| 	u, err := url.Parse(s)
 | |
| 	if err != nil {
 | |
| 		return s, err
 | |
| 	}
 | |
| 
 | |
| 	qs, err := query.Values(opts)
 | |
| 	if err != nil {
 | |
| 		return s, err
 | |
| 	}
 | |
| 
 | |
| 	u.RawQuery = qs.Encode()
 | |
| 	return u.String(), nil
 | |
| }
 |