github

package
v0.9.1 Latest Latest
Warning

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

Go to latest
Published: Apr 4, 2024 License: MPL-2.0 Imports: 43 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(r *http.Request, secret string) (*vcs.EventPayload, error)

func NewTokenClient

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

func SendEventRequest

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

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

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

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

func (*App) LogValue

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

LogValue implements slog.LogValuer.

func (*App) NewInstallURL

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

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

func (*App) String

func (a *App) String() string

func (*App) URL

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

URL returns the app's URL on GitHub

type AppCredentials

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

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

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

func (*Client) GetCommit

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

func (*Client) GetCurrentUser

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

func (*Client) GetInstallation

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

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

ListInstallations lists installations of the currently authenticated app.

func (*Client) ListPullRequestFiles

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

type ClientOptions struct {
	Hostname            string
	SkipTLSVerification bool

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

type CreateAppOptions

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

type GithubEvent

type GithubEvent string

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

type InstallCredentials

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

type Installation struct {
	*github.Installation
}

func (*Installation) String

func (i *Installation) String() string

type Options

type Options struct {
	*sql.DB
	html.Renderer
	logr.Logger
	vcs.Publisher
	*internal.HostnameService

	GithubHostname      string
	SkipTLSVerification bool
}

type Service

type Service struct {
	logr.Logger

	GithubHostname string
	// contains filtered or unexported fields
}

Service is the service for github app management

func NewService

func NewService(opts Options) *Service

func (*Service) AddHandlers

func (a *Service) AddHandlers(r *mux.Router)

func (*Service) CreateApp

func (a *Service) CreateApp(ctx context.Context, opts CreateAppOptions) (*App, error)

func (*Service) DeleteApp

func (a *Service) DeleteApp(ctx context.Context) error

func (*Service) DeleteInstallation

func (a *Service) DeleteInstallation(ctx context.Context, installID int64) error

func (*Service) GetApp

func (a *Service) GetApp(ctx context.Context) (*App, error)

func (*Service) GetInstallCredentials

func (a *Service) GetInstallCredentials(ctx context.Context, installID int64) (*InstallCredentials, error)

func (*Service) ListInstallations

func (a *Service) ListInstallations(ctx context.Context) ([]*Installation, 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

func WithCommit(commit string) TestServerOption

func WithDefaultBranch

func WithDefaultBranch(branch string) TestServerOption

func WithHandler

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

func WithPullRequest

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