github

package
v0.1.16 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 27, 2023 License: MPL-2.0 Imports: 42 Imported by: 0

Documentation

Overview

Package github provides github related code

Index

Constants

View Source
const (
	PushEvent   GithubEvent = "push"
	PullRequest GithubEvent = "pull_request"

	WebhookCreated webhookAction = iota
	WebhookUpdated
	WebhookDeleted
)
View Source
const (
	// GithubPath is the URL path for the endpoint receiving VCS events from the
	// Github App
	AppEventsPath = "/webhooks/github-app"
)
View Source
const (
	DefaultHostname = "github.com"
)

Variables

View Source
var (
	OAuthEndpoint = oauth2github.Endpoint

	// TODO: don't think read:org scope is necessary any more...not since OTF
	// stopped sync'ing org and team memberships from github.
	OAuthScopes = []string{"user:email", "read:org"}
)

Functions

func HandleEvent

func HandleEvent(w http.ResponseWriter, r *http.Request, secret string) *vcs.EventPayload

func NewOAuthClient added in v0.1.14

func NewService added in v0.1.14

func NewService(opts Options) *service

func NewTokenClient added in v0.1.14

func NewTokenClient(opts vcs.NewTokenClientOptions) (vcs.Client, error)

func SendEventRequest added in v0.1.14

func SendEventRequest(t *testing.T, event GithubEvent, url, secret string, payload []byte)

SendEventRequest sends a GitHub event via a http request to the url, signed with the secret,

Types

type App added in v0.1.14

type App struct {
	ID            int64  // github's app id
	Slug          string // github's "slug" name
	WebhookSecret string
	PrivateKey    string

	// Organization is the name of the organization that owns the app. If
	// the app is owned by a user then this is nil.
	Organization *string
}

func (*App) AdvancedURL added in v0.1.14

func (a *App) AdvancedURL(hostname string) string

AdvancedURL returns the URL for the "advanced" settings on github

func (*App) LogValue added in v0.1.14

func (a *App) LogValue() slog.Value

LogValue implements slog.LogValuer.

func (*App) NewInstallURL added in v0.1.14

func (a *App) NewInstallURL(hostname string) string

NewInstallURL returns the GitHub URL for creating a new install of the app.

func (*App) String added in v0.1.14

func (a *App) String() string

func (*App) URL added in v0.1.14

func (a *App) URL(hostname string) string

URL returns the app's URL on GitHub

type AppCredentials added in v0.1.14

type AppCredentials struct {
	// Github app ID
	ID int64
	// Private key in PEM format
	PrivateKey string
}

Credentials for authenticating as an app: https://docs.github.com/en/apps/creating-github-apps/authenticating-with-a-github-app/about-authentication-with-a-github-app#authentication-as-a-github-app

type Client

type Client struct {
	// contains filtered or unexported fields
}

Client is a wrapper around the upstream go-github client

func NewClient

func NewClient(cfg ClientOptions) (*Client, error)

func (*Client) CreateWebhook

func (g *Client) CreateWebhook(ctx context.Context, opts vcs.CreateWebhookOptions) (string, error)

CreateWebhook creates a webhook on a github repository.

func (*Client) DeleteInstallation added in v0.1.14

func (g *Client) DeleteInstallation(ctx context.Context, installID int64) error

DeleteInstallation deletes an installation of a github app with the given installation ID.

func (*Client) DeleteWebhook

func (g *Client) DeleteWebhook(ctx context.Context, opts vcs.DeleteWebhookOptions) error

func (*Client) ExchangeCode added in v0.1.14

func (g *Client) ExchangeCode(ctx context.Context, code string) (*github.AppConfig, error)

func (*Client) GetCommit added in v0.1.8

func (g *Client) GetCommit(ctx context.Context, repo, ref string) (vcs.Commit, error)

func (*Client) GetCurrentUser added in v0.1.8

func (g *Client) GetCurrentUser(ctx context.Context) (string, error)

func (*Client) GetInstallation added in v0.1.14

func (g *Client) GetInstallation(ctx context.Context, installID int64) (*github.Installation, error)

func (*Client) GetRepoTarball

func (g *Client) GetRepoTarball(ctx context.Context, opts vcs.GetRepoTarballOptions) ([]byte, string, error)

func (*Client) GetRepository

func (g *Client) GetRepository(ctx context.Context, identifier string) (vcs.Repository, error)

func (*Client) GetWebhook

func (g *Client) GetWebhook(ctx context.Context, opts vcs.GetWebhookOptions) (vcs.Webhook, error)

func (*Client) ListInstallations added in v0.1.14

func (g *Client) ListInstallations(ctx context.Context) ([]*github.Installation, error)

ListInstallations lists installations of the currently authenticated app.

func (*Client) ListPullRequestFiles added in v0.1.4

func (g *Client) ListPullRequestFiles(ctx context.Context, repo string, pull int) ([]string, error)

func (*Client) ListRepositories

func (g *Client) ListRepositories(ctx context.Context, opts vcs.ListRepositoriesOptions) ([]string, error)

ListRepositories has different behaviour depending on the authentication: (a) if authenticated as an app installation then repositories accessible to the installation are listed; *all* repos are listed, in order of last pushed to. (b) if authenticated using a personal access token then repositories belonging to the user are listed; only the first page of repos is listed, those that have most recently been pushed to.

func (*Client) ListTags

func (g *Client) ListTags(ctx context.Context, opts vcs.ListTagsOptions) ([]string, error)

func (*Client) SetStatus

func (g *Client) SetStatus(ctx context.Context, opts vcs.SetStatusOptions) error

func (*Client) UpdateWebhook

func (g *Client) UpdateWebhook(ctx context.Context, id string, opts vcs.UpdateWebhookOptions) error

type ClientOptions added in v0.1.14

type ClientOptions struct {
	Hostname            string
	SkipTLSVerification bool

	// Only specify one of the following
	OAuthToken    *oauth2.Token
	PersonalToken *string
	*AppCredentials
	*InstallCredentials
}

type CreateAppOptions added in v0.1.14

type CreateAppOptions struct {
	AppID         int64
	WebhookSecret string
	PrivateKey    string
	Slug          string
	Organization  *string
}

type GithubAppService added in v0.1.14

type GithubAppService Service

Alias services so they don't conflict when nested together in struct

type GithubEvent

type GithubEvent string

The name of the event sent in the X-Github-Event header

type InstallCredentials added in v0.1.14

type InstallCredentials struct {
	// Github installation ID
	ID int64
	// Github username if installed in a user account; mutually exclusive
	// with Organization
	User *string
	// Github organization if installed in an organization; mutually
	// exclusive with User
	Organization *string

	AppCredentials
}

Credentials for authenticating as an app installation: https://docs.github.com/en/apps/creating-github-apps/authenticating-with-a-github-app/about-authentication-with-a-github-app#authentication-as-an-app-installation

type Installation added in v0.1.14

type Installation struct {
	*github.Installation
}

func (*Installation) String added in v0.1.14

func (i *Installation) String() string

type Options added in v0.1.14

type Options struct {
	internal.HostnameService
	*sql.DB
	html.Renderer
	logr.Logger
	vcs.Publisher
	GithubHostname      string
	SkipTLSVerification bool
}

type Service added in v0.1.14

type Service interface {
	CreateGithubApp(ctx context.Context, opts CreateAppOptions) (*App, error)
	// GetGithubApp returns the github app. If no github app has been
	// created then nil is returned without an error.
	GetGithubApp(ctx context.Context) (*App, error)
	DeleteGithubApp(ctx context.Context) error

	ListInstallations(ctx context.Context) ([]*Installation, error)
	DeleteInstallation(ctx context.Context, installID int64) error

	GetInstallCredentials(ctx context.Context, installID int64) (*InstallCredentials, error)
}

type TestServer

type TestServer struct {

	// webhook created/updated/deleted events channel
	WebhookEvents chan webhookEvent

	*httptest.Server
	// contains filtered or unexported fields
}

func NewTestServer

func NewTestServer(t *testing.T, opts ...TestServerOption) (*TestServer, *url.URL)

func (*TestServer) GetStatus

func (s *TestServer) GetStatus(t *testing.T, ctx context.Context) *github.StatusEvent

GetStatus retrieves a commit status event off the queue, timing out after 10 seconds if nothing is on the queue.

func (*TestServer) HasWebhook

func (s *TestServer) HasWebhook() bool

func (*TestServer) SendEvent

func (s *TestServer) SendEvent(t *testing.T, event GithubEvent, payload []byte)

SendEvent sends an event to the registered webhook.

type TestServerOption

type TestServerOption func(*TestServer)

func WithArchive

func WithArchive(tarball []byte) TestServerOption

func WithCommit added in v0.1.8

func WithCommit(commit string) TestServerOption

func WithDefaultBranch added in v0.1.8

func WithDefaultBranch(branch string) TestServerOption

func WithHandler added in v0.1.14

func WithHandler(path string, h http.HandlerFunc) TestServerOption

func WithPullRequest added in v0.1.4

func WithPullRequest(pullNumber string, changedPaths ...string) TestServerOption

func WithRefs

func WithRefs(refs ...string) TestServerOption

func WithRepo

func WithRepo(repo string) TestServerOption

func WithUser

func WithUser(username *string) TestServerOption

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL