Documentation ¶
Overview ¶
Package config knows how to read and parse config.yaml.
Index ¶
- Constants
- func BranchRequirements(org, repo, branch string, presubmits map[string][]Presubmit) ([]string, []string, []string)
- func ClearCompiledRegexes(presubmits []Presubmit)
- func DefaultRerunCommandFor(name string) string
- func DefaultTriggerFor(name string) string
- func Path(value string) string
- func SetPostsubmitRegexes(ps []Postsubmit) error
- func SetPresubmitRegexes(js []Presubmit) error
- func ValidateController(c *Controller) error
- type Agent
- type Branch
- type BranchProtection
- type Brancher
- type Branding
- type ChangedFilesProvider
- type Config
- func (c *Config) GetBranchProtection(org, repo, branch string) (*Policy, error)
- func (c *Config) GetPolicy(org, repo, branch string, b Branch) (*Policy, error)
- func (c *Config) GetPostsubmits(repository scm.Repository) []Postsubmit
- func (c *Config) GetPresubmits(repository scm.Repository) []Presubmit
- func (c Config) GetTideContextPolicy(org, repo, branch string) (*TideContextPolicy, error)
- type ContextPolicy
- type Controller
- type Cookie
- type Deck
- type Delta
- type DeltaChan
- type ExternalAgentLog
- type Gerrit
- type Getter
- type GitHubOptions
- type GithubOAuthConfig
- type JenkinsOperator
- type JobBase
- type JobConfig
- func (c *JobConfig) AllPeriodics() []Periodic
- func (c *JobConfig) AllPostsubmits(repos []string) []Postsubmit
- func (c *JobConfig) AllPresubmits(repos []string) []Presubmit
- func (c *JobConfig) GetPresubmit(repo, jobName string) *Presubmit
- func (c *JobConfig) RetestPresubmits(fullRepoName string, skipContexts, runContexts sets.String) []Presubmit
- func (c *JobConfig) SetPostsubmits(jobs map[string][]Postsubmit) error
- func (c *JobConfig) SetPresubmits(jobs map[string][]Presubmit) error
- type Org
- type OwnersDirBlacklist
- type Periodic
- type Plank
- type Policy
- type Postsubmit
- type Preset
- type Presubmit
- func (ps Presubmit) ContextRequired() bool
- func (ps Presubmit) CouldRun(baseRef string) bool
- func (ps Presubmit) NeedsExplicitTrigger() bool
- func (ps Presubmit) ShouldRun(baseRef string, changes ChangedFilesProvider, forced, defaults bool) (bool, error)
- func (ps Presubmit) TriggerMatches(body string) bool
- func (ps Presubmit) TriggersConditionally() bool
- type ProwConfig
- type PubsubSubscriptions
- type PushGateway
- type QueryMap
- type RegexpChangeMatcher
- type Repo
- type Reporter
- type Restrictions
- type ReviewPolicy
- type Sinker
- type Spyglass
- type Tide
- type TideContextPolicy
- type TideContextPolicyOptions
- type TideMergeCommitTemplate
- type TideOrgContextPolicy
- type TideQueries
- type TideQuery
- type TideRepoContextPolicy
- type UtilityConfig
Constants ¶
const DefaultConfigPath = "/etc/config/config.yaml"
DefaultConfigPath will be used if a --config-path is unset
Variables ¶
This section is empty.
Functions ¶
func BranchRequirements ¶
func BranchRequirements(org, repo, branch string, presubmits map[string][]Presubmit) ([]string, []string, []string)
BranchRequirements partitions status contexts for a given org, repo branch into three buckets:
- contexts that are always required to be present
- contexts that are required, _if_ present
- contexts that are always optional
func ClearCompiledRegexes ¶
func ClearCompiledRegexes(presubmits []Presubmit)
ClearCompiledRegexes removes compiled regexes from the presubmits, useful for testing when deep equality is needed between presubmits
func DefaultRerunCommandFor ¶
DefaultRerunCommandFor returns the default rerun command for the job with this name.
func DefaultTriggerFor ¶
DefaultTriggerFor returns the default regexp string used to match comments that should trigger the job with this name.
func Path ¶
Path returns the value for the component's configPath if provided explicitly or default otherwise.
func SetPostsubmitRegexes ¶
func SetPostsubmitRegexes(ps []Postsubmit) error
SetPostsubmitRegexes compiles and validates all the regular expressions for the provided postsubmits.
func SetPresubmitRegexes ¶
SetPresubmitRegexes compiles and validates all the regular expressions for the provided presubmits.
func ValidateController ¶
func ValidateController(c *Controller) error
ValidateController validates the provided controller config.
Types ¶
type Agent ¶
type Agent struct {
// contains filtered or unexported fields
}
Agent watches a path and automatically loads the config stored therein.
type Branch ¶
type Branch struct {
Policy
}
Branch holds protection policy overrides for a particular branch.
type BranchProtection ¶
type BranchProtection struct { Policy // ProtectTested determines if branch protection rules are set for all repos // that Prow has registered jobs for, regardless of if those repos are in the // branch protection config. ProtectTested bool `json:"protect-tested-repos,omitempty"` // Orgs holds branch protection options for orgs by name Orgs map[string]Org `json:"orgs,omitempty"` // AllowDisabledPolicies allows a child to disable all protection even if the // branch has inherited protection options from a parent. AllowDisabledPolicies bool `json:"allow_disabled_policies,omitempty"` // AllowDisabledJobPolicies allows a branch to choose to opt out of branch protection // even if Prow has registered required jobs for that branch. AllowDisabledJobPolicies bool `json:"allow_disabled_job_policies,omitempty"` }
BranchProtection specifies the global branch protection policy
func (BranchProtection) GetOrg ¶
func (bp BranchProtection) GetOrg(name string) *Org
GetOrg returns the org config after merging in any global policies.
type Brancher ¶
type Brancher struct { // Do not run against these branches. Default is no branches. SkipBranches []string `json:"skip_branches,omitempty"` // Only run against these branches. Default is all branches. Branches []string `json:"branches,omitempty"` // contains filtered or unexported fields }
Brancher is for shared code between jobs that only run against certain branches. An empty brancher runs against all branches.
func (Brancher) Intersects ¶
Intersects checks if other Brancher would trigger for the same branch.
func (Brancher) RunsAgainstAllBranch ¶
RunsAgainstAllBranch returns true if there are both branches and skip_branches are unset
type Branding ¶
type Branding struct { // Logo is the location of the logo that will be loaded in deck. Logo string `json:"logo,omitempty"` // Favicon is the location of the favicon that will be loaded in deck. Favicon string `json:"favicon,omitempty"` // BackgroundColor is the color of the background. BackgroundColor string `json:"background_color,omitempty"` // HeaderColor is the color of the header. HeaderColor string `json:"header_color,omitempty"` }
Branding holds branding configuration for deck.
type ChangedFilesProvider ¶
ChangedFilesProvider returns a slice of modified files.
func NewGitHubDeferredChangedFilesProvider ¶
func NewGitHubDeferredChangedFilesProvider(client githubClient, org, repo string, num int) ChangedFilesProvider
NewGitHubDeferredChangedFilesProvider uses a closure to lazily retrieve the file changes only if they are needed. We only have to fetch the changes if there is at least one RunIfChanged job that is not being force run (due to a `/retest` after a failure or because it is explicitly triggered with `/test foo`).
type Config ¶
type Config struct { JobConfig ProwConfig }
Config is a read-only snapshot of the config.
func LoadYAMLConfig ¶
LoadYAMLConfig loads the configuration from the given data
func (*Config) GetBranchProtection ¶
GetBranchProtection returns the policy for a given branch.
Handles merging any policies defined at repo/org/global levels into the branch policy.
func (*Config) GetPolicy ¶
GetPolicy returns the protection policy for the branch, after merging in presubmits.
func (*Config) GetPostsubmits ¶
func (c *Config) GetPostsubmits(repository scm.Repository) []Postsubmit
GetPostsubmits lets return all the post submits
func (*Config) GetPresubmits ¶
func (c *Config) GetPresubmits(repository scm.Repository) []Presubmit
GetPresubmits lets return all the pre submits for the given repo
func (Config) GetTideContextPolicy ¶
func (c Config) GetTideContextPolicy(org, repo, branch string) (*TideContextPolicy, error)
GetTideContextPolicy parses the prow config to find context merge options. If none are set, it will use the prow jobs configured and use the default github combined status. Otherwise if set it will use the branch protection setting, or the listed jobs.
type ContextPolicy ¶
type ContextPolicy struct { // Contexts appends required contexts that must be green to merge Contexts []string `json:"contexts,omitempty"` // Strict overrides whether new commits in the base branch require updating the PR if set Strict *bool `json:"strict,omitempty"` }
ContextPolicy configures required github contexts. When merging policies, contexts are appended to context list from parent. Strict determines whether merging to the branch invalidates existing contexts.
type Controller ¶
type Controller struct { // JobURLTemplateString compiles into JobURLTemplate at load time. JobURLTemplateString string `json:"job_url_template,omitempty"` // JobURLTemplate is compiled at load time from JobURLTemplateString. It // will be passed a builder.PipelineOptions and is used to set the URL for the // "Details" link on GitHub as well as the link from deck. JobURLTemplate *template.Template `json:"-"` // ReportTemplateString compiles into ReportTemplate at load time. ReportTemplateString string `json:"report_template,omitempty"` // ReportTemplate is compiled at load time from ReportTemplateString. It // will be passed a builder.PipelineOptions and can provide an optional blurb below // the test failures comment. ReportTemplate *template.Template `json:"-"` // MaxConcurrency is the maximum number of tests running concurrently that // will be allowed by the controller. 0 implies no limit. MaxConcurrency int `json:"max_concurrency,omitempty"` // MaxGoroutines is the maximum number of goroutines spawned inside the // controller to handle tests. Defaults to 20. Needs to be a positive // number. MaxGoroutines int `json:"max_goroutines,omitempty"` // AllowCancellations enables aborting presubmit jobs for commits that // have been superseded by newer commits in Github pull requests. AllowCancellations bool `json:"allow_cancellations,omitempty"` }
Controller holds configuration applicable to all agent-specific prow controllers.
type Cookie ¶
type Cookie struct {
Secret string `json:"secret,omitempty"`
}
Cookie holds the secret returned from github that authenticates the user who authorized this app.
type Deck ¶
type Deck struct { // Spyglass specifies which viewers will be used for which artifacts when viewing a job in Deck Spyglass Spyglass `json:"spyglass,omitempty"` // TideUpdatePeriodString compiles into TideUpdatePeriod at load time. TideUpdatePeriodString string `json:"tide_update_period,omitempty"` // TideUpdatePeriod specifies how often Deck will fetch status from Tide. Defaults to 10s. TideUpdatePeriod time.Duration `json:"-"` // HiddenRepos is a list of orgs and/or repos that should not be displayed by Deck. HiddenRepos []string `json:"hidden_repos,omitempty"` // ExternalAgentLogs ensures external agents can expose // their logs in prow. ExternalAgentLogs []ExternalAgentLog `json:"external_agent_logs,omitempty"` // Branding of the frontend Branding *Branding `json:"branding,omitempty"` }
Deck holds config for deck.
type Delta ¶
type Delta struct {
Before, After Config
}
Delta represents the before and after states of a Config change detected by the Agent.
type DeltaChan ¶
type DeltaChan = chan<- Delta
DeltaChan is a channel to receive config delta events when config changes.
type ExternalAgentLog ¶
type ExternalAgentLog struct { // Agent is an external prow agent that supports exposing // logs via deck. Agent string `json:"agent,omitempty"` // SelectorString compiles into Selector at load time. SelectorString string `json:"selector,omitempty"` // Selector can be used in prow deployments where the workload has // been sharded between controllers of the same agent. For more info // see https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors Selector labels.Selector `json:"-"` // URLTemplateString compiles into URLTemplate at load time. URLTemplateString string `json:"url_template,omitempty"` // URLTemplate is compiled at load time from URLTemplateString. It // will be passed a builder.PipelineOptions and the generated URL should provide // logs for the PipelineOptions. URLTemplate *template.Template `json:"-"` }
ExternalAgentLog ensures an external agent like Jenkins can expose its logs in prow.
type Gerrit ¶
type Gerrit struct { // TickInterval is how often we do a sync with binded gerrit instance TickIntervalString string `json:"tick_interval,omitempty"` TickInterval time.Duration `json:"-"` // RateLimit defines how many changes to query per gerrit API call // default is 5 RateLimit int `json:"ratelimit,omitempty"` }
Gerrit is config for the gerrit controller.
type GitHubOptions ¶
type GitHubOptions struct { // LinkURLFromConfig is the string representation of the link_url config parameter. // This config parameter allows users to override the default GitHub link url for all plugins. // If this option is not set, we assume "https://github.com". LinkURLFromConfig string `json:"link_url,omitempty"` // LinkURL is the url representation of LinkURLFromConfig. This variable should be used // in all places internally. LinkURL *url.URL }
GitHubOptions allows users to control how prow applications display GitHub website links.
type GithubOAuthConfig ¶
type GithubOAuthConfig struct { ClientID string `json:"client_id"` ClientSecret string `json:"client_secret"` RedirectURL string `json:"redirect_url"` Scopes []string `json:"scopes,omitempty"` FinalRedirectURL string `json:"final_redirect_url"` CookieStore *sessions.CookieStore `json:"-"` }
GithubOAuthConfig is a config for requesting users access tokens from Github API. It also has a Cookie Store that retains user credentials deriving from Github API.
func (*GithubOAuthConfig) InitGithubOAuthConfig ¶
func (gac *GithubOAuthConfig) InitGithubOAuthConfig(cookie *sessions.CookieStore)
InitGithubOAuthConfig creates an OAuthClient using GithubOAuth config and a Cookie Store to retain user credentials.
type JenkinsOperator ¶
type JenkinsOperator struct { Controller `json:",inline"` // LabelSelectorString compiles into LabelSelector at load time. // If set, this option needs to match --label-selector used by // the desired jenkins-operator. This option is considered // invalid when provided with a single jenkins-operator config. // // For label selector syntax, see below: // https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors LabelSelectorString string `json:"label_selector,omitempty"` // LabelSelector is used so different jenkins-operator replicas // can use their own configuration. LabelSelector labels.Selector `json:"-"` }
JenkinsOperator is config for the jenkins-operator controller.
type JobBase ¶
type JobBase struct { // The name of the job. Must match regex [A-Za-z0-9-._]+ // e.g. pull-test-infra-bazel-build Name string `json:"name"` // Labels are added to plumberJobs and pods created for this job. Labels map[string]string `json:"labels,omitempty"` // Annotations are unused by prow itself, but provide a space to configure other automation. Annotations map[string]string `json:"annotations,omitempty"` // MaximumConcurrency of this job, 0 implies no limit. MaxConcurrency int `json:"max_concurrency,omitempty"` // Agent that will take care of running this job. Agent string `json:"agent"` // Cluster is the alias of the cluster to run this job in. // (Default: kube.DefaultClusterAlias) Cluster string `json:"cluster,omitempty"` // Namespace is the namespace in which pods schedule. // nil: results in config.PodNamespace (aka pod default) // empty: results in config.PlumberJobNamespace (aka same as plumberJob) Namespace *string `json:"namespace,omitempty"` // ErrorOnEviction indicates that the PipelineOptions should be completed and given // the ErrorState status if the pod that is executing the job is evicted. // If this field is unspecified or false, a new pod will be created to replace // the evicted one. ErrorOnEviction bool `json:"error_on_eviction,omitempty"` // SourcePath contains the path where this job is defined SourcePath string `json:"-"` // Spec is the Kubernetes pod spec used if Agent is kubernetes. Spec *v1.PodSpec `json:"spec,omitempty"` // BuildSpec is the Knative build spec used if Agent is knative-build. BuildSpec *buildv1alpha1.BuildSpec `json:"build_spec,omitempty"` UtilityConfig }
JobBase contains attributes common to all job types
type JobConfig ¶
type JobConfig struct { // Presets apply to all job types. Presets []Preset `json:"presets,omitempty"` // Full repo name (such as "kubernetes/kubernetes") -> list of jobs. Presubmits map[string][]Presubmit `json:"presubmits,omitempty"` Postsubmits map[string][]Postsubmit `json:"postsubmits,omitempty"` // Periodics are not associated with any repo. Periodics []Periodic `json:"periodics,omitempty"` }
JobConfig is config for all prow jobs
func (*JobConfig) AllPeriodics ¶
AllPeriodics returns all prow periodic jobs.
func (*JobConfig) AllPostsubmits ¶
func (c *JobConfig) AllPostsubmits(repos []string) []Postsubmit
AllPostsubmits returns all prow postsubmit jobs in repos. if repos is empty, return all postsubmits.
func (*JobConfig) AllPresubmits ¶
AllPresubmits returns all prow presubmit jobs in repos. if repos is empty, return all presubmits.
func (*JobConfig) GetPresubmit ¶
GetPresubmit returns the presubmit job for the provided repo and job name.
func (*JobConfig) RetestPresubmits ¶
func (c *JobConfig) RetestPresubmits(fullRepoName string, skipContexts, runContexts sets.String) []Presubmit
RetestPresubmits returns all presubmits that should be run given a /retest command. This is the set of all presubmits intersected with ((alwaysRun + runContexts) - skipContexts)
func (*JobConfig) SetPostsubmits ¶
func (c *JobConfig) SetPostsubmits(jobs map[string][]Postsubmit) error
SetPostsubmits updates c.Postsubmits to jobs, after compiling and validating their regexes.
type Org ¶
Org holds the default protection policy for an entire org, as well as any repo overrides.
type OwnersDirBlacklist ¶
type OwnersDirBlacklist struct { // Repos configures a directory blacklist per repo (or org) Repos map[string][]string `json:"repos"` // Default configures a default blacklist for repos (or orgs) not // specifically configured Default []string `json:"default"` }
OwnersDirBlacklist is used to configure which directories to ignore when searching for OWNERS{,_ALIAS} files in a repo.
type Periodic ¶
type Periodic struct { JobBase // (deprecated)Interval to wait between two runs of the job. Interval string `json:"interval"` // Cron representation of job trigger time Cron string `json:"cron"` // Tags for config entries Tags []string `json:"tags,omitempty"` // contains filtered or unexported fields }
Periodic runs on a timer.
func (*Periodic) GetInterval ¶
GetInterval returns interval, the frequency duration it runs.
func (*Periodic) SetInterval ¶
SetInterval updates interval, the frequency duration it runs.
type Plank ¶
type Plank struct { Controller `json:",inline"` // PodPendingTimeoutString compiles into PodPendingTimeout at load time. PodPendingTimeoutString string `json:"pod_pending_timeout,omitempty"` // PodPendingTimeout is after how long the controller will perform a garbage // collection on pending pods. Defaults to one day. PodPendingTimeout time.Duration `json:"-"` /* // DefaultDecorationConfig are defaults for shared fields for PlumberJobs // that request to have their PodSpecs decorated DefaultDecorationConfig *builder.DecorationConfig `json:"default_decoration_config,omitempty"` */ // JobURLPrefix is the host and path prefix under // which job details will be viewable JobURLPrefix string `json:"job_url_prefix,omitempty"` }
Plank is config for the plank controller.
type Policy ¶
type Policy struct { // Protect overrides whether branch protection is enabled if set. Protect *bool `json:"protect,omitempty"` // RequiredStatusChecks configures github contexts RequiredStatusChecks *ContextPolicy `json:"required_status_checks,omitempty"` // Admins overrides whether protections apply to admins if set. Admins *bool `json:"enforce_admins,omitempty"` // Restrictions limits who can merge Restrictions *Restrictions `json:"restrictions,omitempty"` // RequiredPullRequestReviews specifies github approval/review criteria. RequiredPullRequestReviews *ReviewPolicy `json:"required_pull_request_reviews,omitempty"` // Exclude specifies a set of regular expressions which identify branches // that should be excluded from the protection policy Exclude []string `json:"exclude,omitempty"` }
Policy for the config/org/repo/branch. When merging policies, a nil value results in inheriting the parent policy.
type Postsubmit ¶
type Postsubmit struct { JobBase RegexpChangeMatcher Brancher // TODO(krzyzacy): Move existing `Report` into `Skip_Report` once this is deployed Reporter }
Postsubmit runs on push events.
func (Postsubmit) CouldRun ¶
func (ps Postsubmit) CouldRun(baseRef string) bool
CouldRun determines if the postsubmit could run against a specific base ref
func (Postsubmit) ShouldRun ¶
func (ps Postsubmit) ShouldRun(baseRef string, changes ChangedFilesProvider) (bool, error)
ShouldRun determines if the postsubmit should run in response to a set of changes. This is evaluated lazily, if necessary.
type Preset ¶
type Preset struct { Labels map[string]string `json:"labels"` Env []v1.EnvVar `json:"env"` Volumes []v1.Volume `json:"volumes"` VolumeMounts []v1.VolumeMount `json:"volumeMounts"` }
Preset is intended to match the k8s' PodPreset feature, and may be removed if that feature goes beta.
type Presubmit ¶
type Presubmit struct { JobBase // AlwaysRun automatically for every PR, or only when a comment triggers it. AlwaysRun bool `json:"always_run"` // Optional indicates that the job's status context should not be required for merge. Optional bool `json:"optional,omitempty"` // Trigger is the regular expression to trigger the job. // e.g. `@k8s-bot e2e test this` // RerunCommand must also be specified if this field is specified. // (Default: `(?m)^/test (?:.*? )?<job name>(?: .*?)?$`) Trigger string `json:"trigger,omitempty"` // The RerunCommand to give users. Must match Trigger. // Trigger must also be specified if this field is specified. // (Default: `/test <job name>`) RerunCommand string `json:"rerun_command,omitempty"` Brancher RegexpChangeMatcher Reporter }
Presubmit runs on PRs.
func (Presubmit) ContextRequired ¶
ContextRequired checks whether a context is required from github points of view (required check).
func (Presubmit) CouldRun ¶
CouldRun determines if the presubmit could run against a specific base ref
func (Presubmit) NeedsExplicitTrigger ¶
NeedsExplicitTrigger determines if the presubmit requires a human action to trigger it or not.
func (Presubmit) ShouldRun ¶
func (ps Presubmit) ShouldRun(baseRef string, changes ChangedFilesProvider, forced, defaults bool) (bool, error)
ShouldRun determines if the presubmit should run against a specific base ref, or in response to a set of changes. The latter mechanism is evaluated lazily, if necessary.
func (Presubmit) TriggerMatches ¶
TriggerMatches returns true if the comment body should trigger this presubmit.
This is usually a /test foo string.
func (Presubmit) TriggersConditionally ¶
TriggersConditionally determines if the presubmit triggers conditionally (if it may or may not trigger).
type ProwConfig ¶
type ProwConfig struct { Tide Tide `json:"tide,omitempty"` Plank Plank `json:"plank,omitempty"` Sinker Sinker `json:"sinker,omitempty"` Deck Deck `json:"deck,omitempty"` BranchProtection BranchProtection `json:"branch-protection,omitempty"` Orgs map[string]org.Config `json:"orgs,omitempty"` Gerrit Gerrit `json:"gerrit,omitempty"` // TODO: Move this out of the main config. JenkinsOperators []JenkinsOperator `json:"jenkins_operators,omitempty"` // PlumberJobNamespace is the namespace in the cluster that prow // components will use for looking up PlumberJobs. The namespace // needs to exist and will not be created by prow. // Defaults to "default". PlumberJobNamespace string `json:"plumberJob_namespace,omitempty"` // PodNamespace is the namespace in the cluster that prow // components will use for looking up Pods owned by PlumberJobs. // The namespace needs to exist and will not be created by prow. // Defaults to "default". PodNamespace string `json:"pod_namespace,omitempty"` // LogLevel enables dynamically updating the log level of the // standard logger that is used by all prow components. // // Valid values: // // "debug", "info", "warn", "warning", "error", "fatal", "panic" // // Defaults to "info". LogLevel string `json:"log_level,omitempty"` // PushGateway is a prometheus push gateway. PushGateway PushGateway `json:"push_gateway,omitempty"` // OwnersDirBlacklist is used to configure which directories to ignore when // searching for OWNERS{,_ALIAS} files in a repo. OwnersDirBlacklist OwnersDirBlacklist `json:"owners_dir_blacklist,omitempty"` // Pub/Sub Subscriptions that we want to listen to PubSubSubscriptions PubsubSubscriptions `json:"pubsub_subscriptions,omitempty"` // GitHubOptions allows users to control how prow applications display GitHub website links. GitHubOptions GitHubOptions `json:"github,omitempty"` }
ProwConfig is config for all prow controllers
type PubsubSubscriptions ¶
PubsubSubscriptions maps GCP projects to a list of Topics.
type PushGateway ¶
type PushGateway struct { // Endpoint is the location of the prometheus pushgateway // where prow will push metrics to. Endpoint string `json:"endpoint,omitempty"` // IntervalString compiles into Interval at load time. IntervalString string `json:"interval,omitempty"` // Interval specifies how often prow will push metrics // to the pushgateway. Defaults to 1m. Interval time.Duration `json:"-"` // ServeMetrics tells if or not the components serve metrics ServeMetrics bool `json:"serve_metrics"` }
PushGateway is a prometheus push gateway.
type QueryMap ¶
QueryMap is a struct mapping from "org/repo" -> TideQueries that apply to that org or repo. It is lazily populated, but threadsafe.
func (*QueryMap) ForRepo ¶
func (qm *QueryMap) ForRepo(org, repo string) TideQueries
ForRepo returns the tide queries that apply to a repo.
type RegexpChangeMatcher ¶
type RegexpChangeMatcher struct { // RunIfChanged defines a regex used to select which subset of file changes should trigger this job. // If any file in the changeset matches this regex, the job will be triggered RunIfChanged string `json:"run_if_changed,omitempty"` // contains filtered or unexported fields }
RegexpChangeMatcher is for code shared between jobs that run only when certain files are changed.
func (RegexpChangeMatcher) CouldRun ¶
func (cm RegexpChangeMatcher) CouldRun() bool
CouldRun determines if its possible for a set of changes to trigger this condition
func (RegexpChangeMatcher) RunsAgainstChanges ¶
func (cm RegexpChangeMatcher) RunsAgainstChanges(changes []string) bool
RunsAgainstChanges returns true if any of the changed input paths match the run_if_changed regex.
func (RegexpChangeMatcher) ShouldRun ¶
func (cm RegexpChangeMatcher) ShouldRun(changes ChangedFilesProvider) (determined bool, shouldRun bool, err error)
ShouldRun determines if we can know for certain that the job should run. We can either know for certain that the job should or should not run based on the matcher, or we can not be able to determine that fact at all.
type Repo ¶
Repo holds protection policy overrides for all branches in a repo, as well as specific branch overrides.
type Reporter ¶
type Reporter struct { // Context is the name of the GitHub status context for the job. // Defaults: the same as the name of the job. Context string `json:"context,omitempty"` // SkipReport skips commenting and setting status on GitHub. SkipReport bool `json:"skip_report,omitempty"` }
Reporter keeps various details for status reporting
type Restrictions ¶
Restrictions limits who can merge Users and Teams items are appended to parent lists.
type ReviewPolicy ¶
type ReviewPolicy struct { // Restrictions appends users/teams that are allowed to merge DismissalRestrictions *Restrictions `json:"dismissal_restrictions,omitempty"` // DismissStale overrides whether new commits automatically dismiss old reviews if set DismissStale *bool `json:"dismiss_stale_reviews,omitempty"` // RequireOwners overrides whether CODEOWNERS must approve PRs if set RequireOwners *bool `json:"require_code_owner_reviews,omitempty"` // Approvals overrides the number of approvals required if set (set to 0 to disable) Approvals *int `json:"required_approving_review_count,omitempty"` }
ReviewPolicy specifies github approval/review criteria. Any nil values inherit the policy from the parent, otherwise bool/ints are overridden. Non-empty lists are appended to parent lists.
type Sinker ¶
type Sinker struct { // ResyncPeriodString compiles into ResyncPeriod at load time. ResyncPeriodString string `json:"resync_period,omitempty"` // ResyncPeriod is how often the controller will perform a garbage // collection. Defaults to one hour. ResyncPeriod time.Duration `json:"-"` // MaxPlumberJobAgeString compiles into MaxPlumberJobAge at load time. MaxPlumberJobAgeString string `json:"max_plumberJob_age,omitempty"` // MaxPlumberJobAge is how old a PipelineOptions can be before it is garbage-collected. // Defaults to one week. MaxPlumberJobAge time.Duration `json:"-"` // MaxPodAgeString compiles into MaxPodAge at load time. MaxPodAgeString string `json:"max_pod_age,omitempty"` // MaxPodAge is how old a Pod can be before it is garbage-collected. // Defaults to one day. MaxPodAge time.Duration `json:"-"` }
Sinker is config for the sinker controller.
type Spyglass ¶
type Spyglass struct { // Viewers is a map of Regexp strings to viewer names that defines which sets // of artifacts need to be consumed by which viewers. The keys are compiled // and stored in RegexCache at load time. Viewers map[string][]string `json:"viewers,omitempty"` // RegexCache is a map of viewer regexp strings to their compiled equivalents. RegexCache map[string]*regexp.Regexp `json:"-"` // SizeLimit is the max size artifact in bytes that Spyglass will attempt to // read in entirety. This will only affect viewers attempting to use // artifact.ReadAll(). To exclude outlier artifacts, set this limit to // expected file size + variance. To include all artifacts with high // probability, use 2*maximum observed artifact size. SizeLimit int64 `json:"size_limit,omitempty"` }
Spyglass holds config for Spyglass
type Tide ¶
type Tide struct { // SyncPeriodString compiles into SyncPeriod at load time. SyncPeriodString string `json:"sync_period,omitempty"` // SyncPeriod specifies how often Tide 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 Tide 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 TideQueries `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]gitprovider.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]TideMergeCommitTemplate `json:"merge_commit_template,omitempty"` // URL for tide 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 tide 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"` // TideContextPolicyOptions 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 TideContextPolicyOptions `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"` }
Tide is config for the tide pool.
func (*Tide) BatchSizeLimit ¶
BatchSizeLimit return the batch size limit for the given repo
func (*Tide) MergeCommitTemplate ¶
func (t *Tide) MergeCommitTemplate(org, repo string) TideMergeCommitTemplate
MergeCommitTemplate returns a struct with Go template string(s) or nil
func (*Tide) MergeMethod ¶
func (t *Tide) MergeMethod(org, repo string) gitprovider.PullRequestMergeType
MergeMethod returns the merge method to use for a repo. The default of merge is returned when not overridden.
type TideContextPolicy ¶
type TideContextPolicy 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"` }
TideContextPolicy configures options about how to handle various contexts.
func (*TideContextPolicy) IsOptional ¶
func (cp *TideContextPolicy) 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 (*TideContextPolicy) MissingRequiredContexts ¶
func (cp *TideContextPolicy) MissingRequiredContexts(contexts []string) []string
MissingRequiredContexts discard the optional contexts and only look of extra required contexts that are not provided.
func (*TideContextPolicy) Validate ¶
func (cp *TideContextPolicy) Validate() error
Validate returns an error if any contexts are listed more than once in the config.
type TideContextPolicyOptions ¶
type TideContextPolicyOptions struct { TideContextPolicy // Github Orgs Orgs map[string]TideOrgContextPolicy `json:"orgs,omitempty"` }
TideContextPolicyOptions holds the default policy, and any org overrides.
type TideMergeCommitTemplate ¶
type TideMergeCommitTemplate struct { TitleTemplate string `json:"title,omitempty"` BodyTemplate string `json:"body,omitempty"` Title *template.Template `json:"-"` Body *template.Template `json:"-"` }
TideMergeCommitTemplate holds templates to use for merge commits.
type TideOrgContextPolicy ¶
type TideOrgContextPolicy struct { TideContextPolicy Repos map[string]TideRepoContextPolicy `json:"repos,omitempty"` }
TideOrgContextPolicy overrides the policy for an org, and any repo overrides.
type TideQueries ¶
type TideQueries []TideQuery
TideQueries is a TideQuery slice.
func (TideQueries) 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.
func (TideQueries) QueryMap ¶
func (tqs TideQueries) QueryMap() *QueryMap
QueryMap creates a QueryMap from TideQueries
type TideQuery ¶
type TideQuery 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"` }
TideQuery is turned into a GitHub search query. See the docs for details: https://help.github.com/articles/searching-issues-and-pull-requests/
func (*TideQuery) Validate ¶
Validate returns an error if the query has any errors.
Examples include: * an org name that is empty or includes a / * repos that are not org/repo * a label that is in both the labels and missing_labels section * a branch that is in both included and excluded branch set.
type TideRepoContextPolicy ¶
type TideRepoContextPolicy struct { TideContextPolicy Branches map[string]TideContextPolicy `json:"branches,omitempty"` }
TideRepoContextPolicy overrides the policy for repo, and any branch overrides.
type UtilityConfig ¶
type UtilityConfig struct { // Decorate determines if we decorate the PodSpec or not Decorate bool `json:"decorate,omitempty"` // PathAlias is the location under <root-dir>/src // where the repository under test is cloned. If this // is not set, <root-dir>/src/github.com/org/repo will // be used as the default. PathAlias string `json:"path_alias,omitempty"` // CloneURI is the URI that is used to clone the // repository. If unset, will default to // `https://github.com/org/repo.git`. CloneURI string `json:"clone_uri,omitempty"` // SkipSubmodules determines if submodules should be // cloned when the job is run. Defaults to true. SkipSubmodules bool `json:"skip_submodules,omitempty"` // CloneDepth is the depth of the clone that will be used. // A depth of zero will do a full clone. CloneDepth int `json:"clone_depth,omitempty"` // ExtraRefs are auxiliary repositories that // need to be cloned, determined from config ExtraRefs []plumber.Refs `json:"extra_refs,omitempty"` // DecorationConfig holds configuration options for // decorating PodSpecs that users provide DecorationConfig *plumber.DecorationConfig `json:"decoration_config,omitempty"` }
UtilityConfig holds decoration metadata, such as how to clone and additional containers/etc