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/v32/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
 | 
						|
}
 |