Documentation
¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Config ¶
type Config struct {
// SyncPeriodString compiles into SyncPeriod at load time.
SyncPeriodString string `json:"sync_period,omitempty"`
// SyncPeriod specifies how often Keeper will sync jobs with Github. Defaults to 1m.
SyncPeriod time.Duration `json:"-"`
// StatusUpdatePeriodString compiles into StatusUpdatePeriod at load time.
StatusUpdatePeriodString string `json:"status_update_period,omitempty"`
// StatusUpdatePeriod specifies how often Keeper will update Github status contexts.
// Defaults to the value of SyncPeriod.
StatusUpdatePeriod time.Duration `json:"-"`
// Queries represents a list of GitHub search queries that collectively
// specify the set of PRs that meet merge requirements.
Queries Queries `json:"queries,omitempty"`
// A key/value pair of an org/repo as the key and merge method to override
// the default method of merge. Valid options are squash, rebase, and merge.
MergeType map[string]PullRequestMergeType `json:"merge_method,omitempty"`
// A key/value pair of an org/repo as the key and Go template to override
// the default merge commit title and/or message. Template is passed the
// PullRequest struct (prow/github/types.go#PullRequest)
MergeTemplate map[string]MergeCommitTemplate `json:"merge_commit_template,omitempty"`
// URL for keeper status contexts.
// We can consider allowing this to be set separately for separate repos, or
// allowing it to be a template.
TargetURL string `json:"target_url,omitempty"`
// PRStatusBaseURL is the base URL for the PR status page.
// This is used to link to a merge requirements overview
// in the keeper status context.
PRStatusBaseURL string `json:"pr_status_base_url,omitempty"`
// BlockerLabel is an optional label that is used to identify merge blocking
// Github issues.
// Leave this blank to disable this feature and save 1 API token per sync loop.
BlockerLabel string `json:"blocker_label,omitempty"`
// SquashLabel is an optional label that is used to identify PRs that should
// always be squash merged.
// Leave this blank to disable this feature.
SquashLabel string `json:"squash_label,omitempty"`
// RebaseLabel is an optional label that is used to identify PRs that should
// always be rebased and merged.
// Leave this blank to disable this feature.
RebaseLabel string `json:"rebase_label,omitempty"`
// MergeLabel is an optional label that is used to identify PRs that should
// always be merged with all individual commits from the PR.
// Leave this blank to disable this feature.
MergeLabel string `json:"merge_label,omitempty"`
// MaxGoroutines is the maximum number of goroutines spawned inside the
// controller to handle org/repo:branch pools. Defaults to 20. Needs to be a
// positive number.
MaxGoroutines int `json:"max_goroutines,omitempty"`
// KeeperContextPolicyOptions defines merge options for context. If not set it will infer
// the required and optional contexts from the prow jobs configured and use the github
// combined status; otherwise it may apply the branch protection setting or let user
// define their own options in case branch protection is not used.
ContextOptions ContextPolicyOptions `json:"context_options,omitempty"`
// BatchSizeLimitMap is a key/value pair of an org or org/repo as the key and
// integer batch size limit as the value. The empty string key can be used as
// a global default.
// Special values:
// 0 => unlimited batch size
// -1 => batch merging disabled :(
BatchSizeLimitMap map[string]int `json:"batch_size_limit,omitempty"`
}
Config is the config for the keeper pool.
func (*Config) BatchSizeLimit ¶
BatchSizeLimit return the batch size limit for the given repo
func (*Config) MergeCommitTemplate ¶
func (c *Config) MergeCommitTemplate(org, repo string) MergeCommitTemplate
MergeCommitTemplate returns a struct with Go template string(s) or nil
func (*Config) MergeMethod ¶
func (c *Config) MergeMethod(org, repo string) PullRequestMergeType
MergeMethod returns the merge method to use for a repo. The default of merge is returned when not overridden.
type ContextPolicy ¶
type ContextPolicy struct {
// whether to consider unknown contexts optional (skip) or required.
SkipUnknownContexts *bool `json:"skip-unknown-contexts,omitempty"`
RequiredContexts []string `json:"required-contexts,omitempty"`
RequiredIfPresentContexts []string `json:"required-if-present-contexts"`
OptionalContexts []string `json:"optional-contexts,omitempty"`
// Infer required and optional jobs from Branch Protection configuration
FromBranchProtection *bool `json:"from-branch-protection,omitempty"`
}
ContextPolicy configures options about how to handle various contexts.
func (*ContextPolicy) IsOptional ¶
func (cp *ContextPolicy) IsOptional(c string) bool
IsOptional checks whether a context can be ignored. Will return true if - context is registered as optional - required contexts are registered and the context provided is not required Will return false otherwise. Every context is required.
func (ContextPolicy) Merge ¶
func (cp ContextPolicy) Merge(other ContextPolicy) ContextPolicy
Merge merges one ContextPolicy with another one
func (*ContextPolicy) MissingRequiredContexts ¶
func (cp *ContextPolicy) MissingRequiredContexts(contexts []string) []string
MissingRequiredContexts discard the optional contexts and only look of extra required contexts that are not provided.
func (*ContextPolicy) Validate ¶
func (cp *ContextPolicy) Validate() error
Validate returns an error if any contexts are listed more than once in the config.
type ContextPolicyOptions ¶
type ContextPolicyOptions struct {
ContextPolicy
// Github Orgs
Orgs map[string]OrgContextPolicy `json:"orgs,omitempty"`
}
ContextPolicyOptions holds the default policy, and any org overrides.
func (ContextPolicyOptions) Parse ¶
func (options ContextPolicyOptions) Parse(org, repo, branch string) ContextPolicy
Parse returns the context policy for an org/repo/branch
type MergeCommitTemplate ¶
type MergeCommitTemplate struct {
TitleTemplate string `json:"title,omitempty"`
BodyTemplate string `json:"body,omitempty"`
Title *template.Template `json:"-"`
Body *template.Template `json:"-"`
}
MergeCommitTemplate holds templates to use for merge commits.
type OrgContextPolicy ¶
type OrgContextPolicy struct {
ContextPolicy
Repos map[string]RepoContextPolicy `json:"repos,omitempty"`
}
OrgContextPolicy overrides the policy for an org, and any repo overrides.
type PullRequestMergeType ¶
type PullRequestMergeType string
PullRequestMergeType inidicates the type of the pull request
const ( MergeMerge PullRequestMergeType = "merge" MergeRebase PullRequestMergeType = "rebase" MergeSquash PullRequestMergeType = "squash" )
Possible types of merges for the GitHub merge API
func (PullRequestMergeType) IsValid ¶
func (c PullRequestMergeType) IsValid() bool
IsValid checks that the merge type is valid
type Queries ¶
type Queries []Query
Queries is a Query slice.
func (Queries) OrgExceptionsAndRepos ¶
OrgExceptionsAndRepos determines which orgs and repos a set of queries cover. Output is returned as a mapping from 'included org'->'repos excluded in the org' and a set of included repos.
type Query ¶
type Query struct {
Orgs []string `json:"orgs,omitempty"`
Repos []string `json:"repos,omitempty"`
ExcludedRepos []string `json:"excludedRepos,omitempty"`
ExcludedBranches []string `json:"excludedBranches,omitempty"`
IncludedBranches []string `json:"includedBranches,omitempty"`
Labels []string `json:"labels,omitempty"`
MissingLabels []string `json:"missingLabels,omitempty"`
Milestone string `json:"milestone,omitempty"`
ReviewApprovedRequired bool `json:"reviewApprovedRequired,omitempty"`
}
Query is turned into a GitHub search query. See the docs for details: https://help.github.com/articles/searching-issues-and-pull-requests/
type QueryMap ¶
QueryMap is a struct mapping from "org/repo" -> KeeperQueries that apply to that org or repo. It is lazily populated, but threadsafe.
type RepoContextPolicy ¶
type RepoContextPolicy struct {
ContextPolicy
Branches map[string]ContextPolicy `json:"branches,omitempty"`
}
RepoContextPolicy overrides the policy for repo, and any branch overrides.