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