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
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 Metrics ¶ added in v1.34.0
func Metrics(r metrics.Registry, config prometheus.Config) http.Handler
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"` // 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"` // 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 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 ¶
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