Documentation
¶
Index ¶
- Constants
- func Health() http.Handler
- func LoadTemplates(c *FilesConfig, basePath string, githubURL string) (templatetree.HTMLTree, error)
- func Login(c githubapp.Config, basePath string, sessions *scs.Manager) oauth2.LoginCallback
- func PostStatus(ctx context.Context, client *github.Client, owner, repo, ref string, ...) error
- func RequireLogin(sessions *scs.Manager, basePath string) func(http.Handler) http.Handler
- func Static(prefix string, c *FilesConfig) http.Handler
- func Validate() http.Handler
- type Base
- func (b *Base) Evaluate(ctx context.Context, installationID int64, trigger common.Trigger, ...) error
- func (b *Base) NewEvalContext(ctx context.Context, installationID int64, loc pull.Locator) (*EvalContext, error)
- func (b *Base) PreparePRContext(ctx context.Context, installationID int64, pr *github.PullRequest) (context.Context, zerolog.Logger)
- type CheckRun
- type ConfigFetcher
- type CrossOrgMembershipContext
- func (c *CrossOrgMembershipContext) IsOrgMember(org, user string) (bool, error)
- func (c *CrossOrgMembershipContext) IsTeamMember(team, user string) (bool, error)
- func (c *CrossOrgMembershipContext) OrganizationMembers(org string) ([]string, error)
- func (c *CrossOrgMembershipContext) TeamMembers(team string) ([]string, error)
- type Details
- type EvalContext
- func (ec *EvalContext) Evaluate(ctx context.Context, trigger common.Trigger) error
- func (ec *EvalContext) EvaluatePolicy(ctx context.Context, evaluator common.Evaluator) (common.Result, error)
- func (ec *EvalContext) ParseConfig(ctx context.Context, trigger common.Trigger) (common.Evaluator, error)
- func (ec *EvalContext) PostStatus(ctx context.Context, state, message string)
- func (ec *EvalContext) RunPostEvaluateActions(ctx context.Context, result common.Result, trigger common.Trigger)
- type FetchedConfig
- type FilesConfig
- type HealthCheck
- type Index
- type Installation
- type IssueComment
- type Membership
- type MergeGroup
- type PullEvaluationOptions
- type PullRequest
- type PullRequestReview
- type Status
- type ValidateCheck
Constants ¶
const ( DefaultPolicyPath = ".policy.yml" DefaultStatusCheckContext = "policy-bot" )
const ( DefaultTemplatesDir = "templates" DefaultStaticDir = "static" )
const ( SessionKeyUsername = "username" SessionKeyRedirect = "redirect" )
const (
LogKeyAudit string = "audit"
)
const (
LogKeyGitHubSHA = "github_sha"
)
Variables ¶
This section is empty.
Functions ¶
func LoadTemplates ¶
func LoadTemplates(c *FilesConfig, basePath string, githubURL string) (templatetree.HTMLTree, error)
func PostStatus ¶ added in v1.27.0
func PostStatus(ctx context.Context, client *github.Client, owner, repo, ref string, status *github.RepoStatus) error
PostStatus posts a GitHub commit status with consistent logging.
func RequireLogin ¶
Types ¶
type Base ¶
type Base struct {
githubapp.ClientCreator
Installations githubapp.InstallationsService
GlobalCache pull.GlobalCache
ConfigFetcher *ConfigFetcher
BaseConfig *baseapp.HTTPConfig
PullOpts *PullEvaluationOptions
AppName string
}
func (*Base) NewEvalContext ¶ added in v1.27.0
type ConfigFetcher ¶
func (*ConfigFetcher) ConfigForRepositoryBranch ¶ added in v1.28.0
func (cf *ConfigFetcher) ConfigForRepositoryBranch(ctx context.Context, client *github.Client, owner, repository, branch string) FetchedConfig
type CrossOrgMembershipContext ¶
type CrossOrgMembershipContext struct {
// contains filtered or unexported fields
}
func NewCrossOrgMembershipContext ¶
func NewCrossOrgMembershipContext(ctx context.Context, client *github.Client, orgName string, installations githubapp.InstallationsService, clientCreator githubapp.ClientCreator) *CrossOrgMembershipContext
func (*CrossOrgMembershipContext) IsOrgMember ¶
func (c *CrossOrgMembershipContext) IsOrgMember(org, user string) (bool, error)
func (*CrossOrgMembershipContext) IsTeamMember ¶
func (c *CrossOrgMembershipContext) IsTeamMember(team, user string) (bool, error)
func (*CrossOrgMembershipContext) OrganizationMembers ¶
func (c *CrossOrgMembershipContext) OrganizationMembers(org string) ([]string, error)
func (*CrossOrgMembershipContext) TeamMembers ¶
func (c *CrossOrgMembershipContext) TeamMembers(team string) ([]string, error)
type EvalContext ¶ added in v1.27.0
type EvalContext struct {
Client *github.Client
V4Client *githubv4.Client
Options *PullEvaluationOptions
PublicURL string
PullContext pull.Context
Config FetchedConfig
// If true, store statuses in the Status field instead of posting them to
// GitHub. Only the last status is saved, so when this option is enabled,
// callers should check for a non-nil status after each method call.
SkipPostStatus bool
Status *github.RepoStatus
}
EvalContext contains common fields and methods used to evaluate policy requests. Handlers construct an EvalContext once they decide to handle a request or event, then call the appropriate methods for each stage of evaluation. Handlers with no special requirements can simply call Evaluate.
func (*EvalContext) Evaluate ¶ added in v1.27.0
Evaluate runs the full process for evaluating a pull request.
func (*EvalContext) EvaluatePolicy ¶ added in v1.27.0
func (ec *EvalContext) EvaluatePolicy(ctx context.Context, evaluator common.Evaluator) (common.Result, error)
EvaluatePolicy evaluates the policy for a PR and generates a result. The evaluator must be non-nil, meaning callers should check the output of ParseConfig before calling this method.
func (*EvalContext) ParseConfig ¶ added in v1.27.0
func (ec *EvalContext) ParseConfig(ctx context.Context, trigger common.Trigger) (common.Evaluator, error)
ParseConfig checks and validates the configuration in the EvalContext and returns a non-nil Evaluator if the policy exists, is valid, and requires evaluation for the trigger.
func (*EvalContext) PostStatus ¶ added in v1.27.0
func (ec *EvalContext) PostStatus(ctx context.Context, state, message string)
PostStatus posts a status for the evaluated PR.
func (*EvalContext) RunPostEvaluateActions ¶ added in v1.27.0
func (ec *EvalContext) RunPostEvaluateActions(ctx context.Context, result common.Result, trigger common.Trigger)
RunPostEvaluateActions executes additional actions that should happen after evaluation completes, like assigning reviewers or dismissing reviews. These actions happen after a status is posted to GitHub for the main evaluation.
Post-evaluate actions are best effort, so this function logs failures instead of returning an error.
type FetchedConfig ¶
type FilesConfig ¶
type HealthCheck ¶
type Index ¶
type Index struct {
Base
GithubConfig *githubapp.Config
Templates templatetree.HTMLTree
}
type Installation ¶ added in v1.24.0
type Installation struct {
Base
}
func (*Installation) Handle ¶ added in v1.24.0
func (h *Installation) Handle(ctx context.Context, eventType, deliveryID string, payload []byte) error
Handle installation, installation_repositories https://docs.github.com/en/developers/webhooks-and-events/webhooks/webhook-events-and-payloads#installation https://docs.github.com/en/developers/webhooks-and-events/webhooks/webhook-events-and-payloads#installation_repositories
func (*Installation) Handles ¶ added in v1.24.0
func (h *Installation) Handles() []string
type IssueComment ¶
type IssueComment struct {
Base
}
func (*IssueComment) Handle ¶
func (h *IssueComment) Handle(ctx context.Context, eventType, deliveryID string, payload []byte) error
Handle issue_comment See https://developer.github.com/v3/activity/events/types/#issuecommentevent
func (*IssueComment) Handles ¶
func (h *IssueComment) Handles() []string
type Membership ¶ added in v1.25.0
type MergeGroup ¶ added in v1.28.0
type MergeGroup struct {
Base
}
func (*MergeGroup) Handle ¶ added in v1.28.0
func (h *MergeGroup) Handle(ctx context.Context, eventType, devlieryID string, payload []byte) error
Handle merge_group https://docs.github.com/webhooks-and-events/webhooks/webhook-events-and-payloads#merge_group
func (*MergeGroup) Handles ¶ added in v1.28.0
func (h *MergeGroup) Handles() []string
type PullEvaluationOptions ¶
type PullEvaluationOptions struct {
PolicyPath string `yaml:"policy_path"`
// StatusCheckContext will be used to create the status context. It will be used in the following
// pattern: <StatusCheckContext>: <Base Branch Name>
StatusCheckContext string `yaml:"status_check_context"`
// PostInsecureStatusChecks enables the sending of a second status using just StatusCheckContext as the context,
// no templating. This is turned off by default. This is to support legacy workflows that depend on the original
// context behaviour, and will be removed in 2.0
PostInsecureStatusChecks bool `yaml:"post_insecure_status_checks"`
// This field is unused but is left to avoid breaking configuration files.
// This value is now loaded from the GitHub API.
//
// TODO(bkeyes): remove in version 2.0
Deprecated_AppName string `yaml:"app_name"`
// This field is unused but is left to avoid breaking configuration files.
// It enabled a temporary workaround for a GitHub API issue.
//
// TODO(bkeyes): remove in version 2.0
Deprecated_DoNotLoadCommitPushedDate bool `yaml:"do_not_load_commit_pushed_date"`
}
func (*PullEvaluationOptions) SetValuesFromEnv ¶ added in v1.24.0
func (p *PullEvaluationOptions) SetValuesFromEnv(prefix string)
type PullRequest ¶
type PullRequest struct {
Base
}
func (*PullRequest) Handle ¶
func (h *PullRequest) Handle(ctx context.Context, eventType, deliveryID string, payload []byte) error
Handle pull_request https://developer.github.com/v3/activity/events/types/#requestevent
func (*PullRequest) Handles ¶
func (h *PullRequest) Handles() []string
type PullRequestReview ¶
type PullRequestReview struct {
Base
}
func (*PullRequestReview) Handle ¶
func (h *PullRequestReview) Handle(ctx context.Context, eventType, deliveryID string, payload []byte) error
Handle pull_request_review https://developer.github.com/v3/activity/events/types/#pullrequestreviewevent
func (*PullRequestReview) Handles ¶
func (h *PullRequestReview) Handles() []string
type Status ¶
type Status struct {
Base
}
func (*Status) Handle ¶
Handle status https://developer.github.com/v3/activity/events/types/#statusevent