Documentation
¶
Index ¶
- Constants
- func Health() http.Handler
- func LoadTemplates(c *FilesConfig, basePath string, githubURL string) (templatetree.Tree[*template.Template], error)
- func Login(c githubapp.Config, basePath string, sessions *scs.Manager) oauth2.LoginCallback
- func Metrics(r metrics.Registry, config prometheus.Config) http.Handler
- 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 DetailsReviewers
- type DetailsReviewersData
- type DetailsState
- type ErrorResponse
- 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 Simulate
- type SimulationResponse
- type Status
- type ValidateCheck
- type WorkflowRun
Constants ¶
const ( DefaultPolicyPath = ".policy.yml" DefaultStatusCheckContext = "policy-bot" )
const ( DefaultTemplatesDir = "templates" DefaultStaticDir = "static" ManifestFile = "manifest.json" )
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.Tree[*template.Template], 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 DetailsReviewers ¶ added in v1.32.0
type DetailsReviewers struct {
Details
}
func (*DetailsReviewers) ServeHTTP ¶ added in v1.32.0
func (h *DetailsReviewers) ServeHTTP(w http.ResponseWriter, r *http.Request) error
type DetailsReviewersData ¶ added in v1.32.0
type DetailsState ¶ added in v1.32.0
type DetailsState struct {
Ctx context.Context
Logger zerolog.Logger
EvalContext *EvalContext
Username string
PullRequest *github.PullRequest
}
DetailsState combines fields that the Details handler and related sub-handlers need to process requests
type ErrorResponse ¶ added in v1.33.0
type ErrorResponse struct {
Error string `json:"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 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"`
ForceSharedPolicy bool `yaml:"force_shared_policy"`
// 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"`
// ExpandRequiredReviewers enables a UI feature where the details page
// shows a list of the users who can approve each rule. Enabling this
// feature can leak information about team membership and permissions that
// is otherwise private. See the README for details.
ExpandRequiredReviewers bool `yaml:"expand_required_reviewers"`
// StrictReviewDismissal enables sending unconditional GitHub dismissals
// for reviews associated with rules of invalidated approval candidates
// even if that same approval candidate satifies another rule.
StrictReviewDismissal bool `yaml:"strict_review_dismissal"`
// 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"`
// IgnoreEditedComments enables ignoring comments that have been edited when evaluating approval rules.
// This provides a server-side option to ignore edited comments across all rules.
IgnoreEditedComments *bool `yaml:"ignore_edited_comments"`
// ApprovalDefaults defines default values for all approval rules evaluated
// by the server. Use this to change things like the default approval
// comments or `invalidate_on_push` behavior globally. Policies may
// override these default by providing their own values.
ApprovalDefaults *approval.Defaults `yaml:"approval_defaults"`
// 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 Simulate ¶ added in v1.33.0
type Simulate struct {
Base
}
Simulate provides a baseline for handlers to perform simulated pull request evaluations and either return the result or display it in the ui.
type SimulationResponse ¶ added in v1.33.0
type SimulationResponse struct {
Name string `json:"name"`
Description string `json:"description:"`
StatusDescription string `json:"status_description"`
Status string `json:"status"`
Error string `json:"error"`
}
SimulationResponse is the response returned from Simulate, this is a trimmed down version of common.Result with json tags. This struct and the newSimulationResponse constructor can be extended to include extra content from common.Result.
type Status ¶
type Status struct {
Base
}
func (*Status) Handle ¶
Handle status https://developer.github.com/v3/activity/events/types/#statusevent
type ValidateCheck ¶
type WorkflowRun ¶ added in v1.36.0
type WorkflowRun struct {
Base
}
func (*WorkflowRun) Handles ¶ added in v1.36.0
func (h *WorkflowRun) Handles() []string
Source Files
¶
- audit.go
- base.go
- check_run.go
- cross_org.go
- details.go
- details_reviewers.go
- eval_context.go
- eval_context_dismissal.go
- eval_context_reviewers.go
- eval_options.go
- fetcher.go
- frontend.go
- health.go
- index.go
- installation.go
- issue_comment.go
- login.go
- merge_group.go
- metrics.go
- pull_request.go
- pull_request_review.go
- simulate.go
- status.go
- validate.go
- workflow_run.go