Documentation ¶
Overview ¶
Package mungers deals with munging of github pull requests
Index ¶
- func EachLoop() error
- func InitializeMungers(requestedMungers []string, config *github.Config) error
- func MungeIssue(obj *github.MungeObject) error
- func RegisterMunger(munger Munger) error
- func RegisterMungerOrDie(munger Munger)
- type BlunderbussConfig
- type BlunderbussMunger
- type LGTMAfterCommitMunger
- type Munger
- type NeedsRebaseMunger
- type OkToTestMunger
- type PathLabelMunger
- type PingCIMunger
- type RebuildMunger
- type SizeMunger
- type StaleGreenCI
- type StalePendingCI
- type SubmitQueue
- func (sq *SubmitQueue) AddFlags(cmd *cobra.Command, config *github.Config)
- func (sq *SubmitQueue) EachLoop() error
- func (sq *SubmitQueue) Initialize(config *github.Config) error
- func (sq *SubmitQueue) Munge(obj *github.MungeObject)
- func (sq SubmitQueue) Name() string
- func (sq *SubmitQueue) RefreshWhitelist()
- func (sq *SubmitQueue) SetMergeStatus(obj *github.MungeObject, reason string, record bool)
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func EachLoop ¶
func EachLoop() error
EachLoop will be called before we start a poll loop and will run the EachLoop function for all active mungers
func InitializeMungers ¶
InitializeMungers will call munger.Initialize() for all mungers requested in --pr-mungers
func MungeIssue ¶
func MungeIssue(obj *github.MungeObject) error
MungeIssue will call each activated munger with the given object
func RegisterMunger ¶
RegisterMunger should be called in `init()` by each munger to make itself available by name
func RegisterMungerOrDie ¶
func RegisterMungerOrDie(munger Munger)
RegisterMungerOrDie will call RegisterMunger but will be fatal on error
Types ¶
type BlunderbussConfig ¶
type BlunderbussConfig struct {
PrefixMap map[string][]string `json:"prefixMap,omitempty" yaml:"prefixMap,omitempty"`
}
A BlunderbussConfig maps a set of file prefixes to a set of owner names (github users)
type BlunderbussMunger ¶
type BlunderbussMunger struct {
// contains filtered or unexported fields
}
BlunderbussMunger will assign issues to users based on the config file provided by --blunderbuss-config.
func (*BlunderbussMunger) AddFlags ¶
func (b *BlunderbussMunger) AddFlags(cmd *cobra.Command, config *github.Config)
AddFlags will add any request flags to the cobra `cmd`
func (*BlunderbussMunger) EachLoop ¶
func (b *BlunderbussMunger) EachLoop() error
EachLoop is called at the start of every munge loop
func (*BlunderbussMunger) Initialize ¶
func (b *BlunderbussMunger) Initialize(config *github.Config) error
Initialize will initialize the munger
func (*BlunderbussMunger) Munge ¶
func (b *BlunderbussMunger) Munge(obj *github.MungeObject)
Munge is the workhorse the will actually make updates to the PR
func (*BlunderbussMunger) Name ¶
func (b *BlunderbussMunger) Name() string
Name is the name usable in --pr-mungers
type LGTMAfterCommitMunger ¶
type LGTMAfterCommitMunger struct{}
LGTMAfterCommitMunger will remove the LGTM flag from an PR which has been updated since the reviewer added LGTM
func (LGTMAfterCommitMunger) AddFlags ¶
func (LGTMAfterCommitMunger) AddFlags(cmd *cobra.Command, config *github.Config)
AddFlags will add any request flags to the cobra `cmd`
func (LGTMAfterCommitMunger) EachLoop ¶
func (LGTMAfterCommitMunger) EachLoop() error
EachLoop is called at the start of every munge loop
func (LGTMAfterCommitMunger) Initialize ¶
func (LGTMAfterCommitMunger) Initialize(config *github.Config) error
Initialize will initialize the munger
func (LGTMAfterCommitMunger) Munge ¶
func (LGTMAfterCommitMunger) Munge(obj *github.MungeObject)
Munge is the workhorse the will actually make updates to the PR
func (LGTMAfterCommitMunger) Name ¶
func (LGTMAfterCommitMunger) Name() string
Name is the name usable in --pr-mungers
type Munger ¶
type Munger interface { // Take action on a specific github issue: Munge(obj *github.MungeObject) AddFlags(cmd *cobra.Command, config *github.Config) Name() string Initialize(*github.Config) error EachLoop() error }
Munger is the interface which all mungers must implement to register
func GetActiveMungers ¶
func GetActiveMungers() []Munger
GetActiveMungers returns a slice of all mungers which both registered and were requested by the user
func GetAllMungers ¶
func GetAllMungers() []Munger
GetAllMungers returns a slice of all registered mungers. This list is completely independant of the mungers selected at runtime in --pr-mungers. This is all possible mungers.
type NeedsRebaseMunger ¶
type NeedsRebaseMunger struct{}
NeedsRebaseMunger will add the "needs-rebase" label to any issue which is unable to be automatically merged
func (NeedsRebaseMunger) AddFlags ¶
func (NeedsRebaseMunger) AddFlags(cmd *cobra.Command, config *github.Config)
AddFlags will add any request flags to the cobra `cmd`
func (NeedsRebaseMunger) EachLoop ¶
func (NeedsRebaseMunger) EachLoop() error
EachLoop is called at the start of every munge loop
func (NeedsRebaseMunger) Initialize ¶
func (NeedsRebaseMunger) Initialize(config *github.Config) error
Initialize will initialize the munger
func (NeedsRebaseMunger) Munge ¶
func (NeedsRebaseMunger) Munge(obj *github.MungeObject)
Munge is the workhorse the will actually make updates to the PR
func (NeedsRebaseMunger) Name ¶
func (NeedsRebaseMunger) Name() string
Name is the name usable in --pr-mungers
type OkToTestMunger ¶
type OkToTestMunger struct{}
OkToTestMunger looks for situations where a reviewer has LGTM'd a PR, but it isn't ok to test by the k8s-bot, and adds an 'ok to test' comment to the PR.
func (OkToTestMunger) AddFlags ¶
func (OkToTestMunger) AddFlags(cmd *cobra.Command, config *github.Config)
AddFlags will add any request flags to the cobra `cmd`
func (OkToTestMunger) EachLoop ¶
func (OkToTestMunger) EachLoop() error
EachLoop is called at the start of every munge loop
func (OkToTestMunger) Initialize ¶
func (OkToTestMunger) Initialize(config *github.Config) error
Initialize will initialize the munger
func (OkToTestMunger) Munge ¶
func (OkToTestMunger) Munge(obj *github.MungeObject)
Munge is the workhorse the will actually make updates to the PR
func (OkToTestMunger) Name ¶
func (OkToTestMunger) Name() string
Name is the name usable in --pr-mungers
type PathLabelMunger ¶
type PathLabelMunger struct {
// contains filtered or unexported fields
}
PathLabelMunger will add labels to PRs based on what files it modified. The mapping of files to labels if provided in a file in --path-label-config
func (*PathLabelMunger) AddFlags ¶
func (p *PathLabelMunger) AddFlags(cmd *cobra.Command, config *github.Config)
AddFlags will add any request flags to the cobra `cmd`
func (*PathLabelMunger) EachLoop ¶
func (p *PathLabelMunger) EachLoop() error
EachLoop is called at the start of every munge loop
func (*PathLabelMunger) Initialize ¶
func (p *PathLabelMunger) Initialize(config *github.Config) error
Initialize will initialize the munger
func (*PathLabelMunger) Munge ¶
func (p *PathLabelMunger) Munge(obj *github.MungeObject)
Munge is the workhorse the will actually make updates to the PR
func (*PathLabelMunger) Name ¶
func (p *PathLabelMunger) Name() string
Name is the name usable in --pr-mungers
type PingCIMunger ¶
type PingCIMunger struct{}
PingCIMunger looks for situations CI (Travis | Shippable) has flaked for some reason and we want to re-run them. Achieves this by closing and re-opening the pr
func (PingCIMunger) AddFlags ¶
func (PingCIMunger) AddFlags(cmd *cobra.Command, config *github.Config)
AddFlags will add any request flags to the cobra `cmd`
func (PingCIMunger) EachLoop ¶
func (PingCIMunger) EachLoop() error
EachLoop is called at the start of every munge loop
func (PingCIMunger) Initialize ¶
func (PingCIMunger) Initialize(config *github.Config) error
Initialize will initialize the munger
func (PingCIMunger) Munge ¶
func (PingCIMunger) Munge(obj *github.MungeObject)
Munge is the workhorse the will actually make updates to the PR
func (PingCIMunger) Name ¶
func (PingCIMunger) Name() string
Name is the name usable in --pr-mungers
type RebuildMunger ¶
type RebuildMunger struct {
// contains filtered or unexported fields
}
RebuildMunger looks for situations where a someone has asked for an e2e rebuild, but hasn't provided an issue
func (*RebuildMunger) AddFlags ¶
func (r *RebuildMunger) AddFlags(cmd *cobra.Command, config *github.Config)
AddFlags will add any request flags to the cobra `cmd`
func (*RebuildMunger) EachLoop ¶
func (r *RebuildMunger) EachLoop() error
EachLoop is called at the start of every munge loop
func (*RebuildMunger) Initialize ¶
func (r *RebuildMunger) Initialize(config *github.Config) error
Initialize will initialize the munger
func (*RebuildMunger) Munge ¶
func (r *RebuildMunger) Munge(obj *github.MungeObject)
Munge is the workhorse the will actually make updates to the PR
func (*RebuildMunger) Name ¶
func (r *RebuildMunger) Name() string
Name is the name usable in --pr-mungers
type SizeMunger ¶
type SizeMunger struct {
// contains filtered or unexported fields
}
SizeMunger will update a label on a PR based on how many lines are changed. It will exclude certain files in it's calculations based on the config file provided in --generated-files-config
func (*SizeMunger) AddFlags ¶
func (s *SizeMunger) AddFlags(cmd *cobra.Command, config *github.Config)
AddFlags will add any request flags to the cobra `cmd`
func (SizeMunger) EachLoop ¶
func (SizeMunger) EachLoop() error
EachLoop is called at the start of every munge loop
func (SizeMunger) Initialize ¶
func (SizeMunger) Initialize(config *github.Config) error
Initialize will initialize the munger
func (*SizeMunger) Munge ¶
func (s *SizeMunger) Munge(obj *github.MungeObject)
Munge is the workhorse the will actually make updates to the PR
type StaleGreenCI ¶
type StaleGreenCI struct{}
StaleGreenCI will remove the LGTM flag from an PR which has been updated since the reviewer added LGTM
func (StaleGreenCI) AddFlags ¶
func (StaleGreenCI) AddFlags(cmd *cobra.Command, config *github.Config)
AddFlags will add any request flags to the cobra `cmd`
func (StaleGreenCI) EachLoop ¶
func (StaleGreenCI) EachLoop() error
EachLoop is called at the start of every munge loop
func (StaleGreenCI) Initialize ¶
func (StaleGreenCI) Initialize(config *github.Config) error
Initialize will initialize the munger
func (StaleGreenCI) Munge ¶
func (StaleGreenCI) Munge(obj *github.MungeObject)
Munge is the workhorse the will actually make updates to the PR
func (StaleGreenCI) Name ¶
func (StaleGreenCI) Name() string
Name is the name usable in --pr-mungers
type StalePendingCI ¶
type StalePendingCI struct{}
StalePendingCI will ask the k8s-bot to test any PR with a LGTM that has been pending for more than 24 hours. This can happen when the jenkins VM is restarted.
The real fix would be for the jenkins VM restart to not move every single PR to pending without actually testing...
But this is our world and so we should really do this for all PRs which aren't likely to get another push (everything that is mergeable). Since that can be a lot of PRs, I'm just doing it for the LGTM PRs automatically...
With minor modification this can be run easily by hand. Remove the LGTM check godep go build ./mungegithub --token-file=/PATH/TO/YOUR/TOKEN --pr-mungers=stale-pending-ci --once (--dry-run)
func (StalePendingCI) AddFlags ¶
func (StalePendingCI) AddFlags(cmd *cobra.Command, config *github.Config)
AddFlags will add any request flags to the cobra `cmd`
func (StalePendingCI) EachLoop ¶
func (StalePendingCI) EachLoop() error
EachLoop is called at the start of every munge loop
func (StalePendingCI) Initialize ¶
func (StalePendingCI) Initialize(config *github.Config) error
Initialize will initialize the munger
func (StalePendingCI) Munge ¶
func (StalePendingCI) Munge(obj *github.MungeObject)
Munge is the workhorse the will actually make updates to the PR
func (StalePendingCI) Name ¶
func (StalePendingCI) Name() string
Name is the name usable in --pr-mungers
type SubmitQueue ¶
type SubmitQueue struct { JenkinsJobs []string JenkinsHost string Whitelist string WhitelistOverride string Committers string Address string E2EStatusContext string UnitStatusContext string RequiredStatusContexts []string WWWRoot string sync.Mutex // contains filtered or unexported fields }
SubmitQueue will merge PR which meet a set of requirements.
PR must have LGTM after the last commit PR must have passed all github CI checks if user not in whitelist PR must have "ok-to-merge" The google internal jenkins instance must be passing the JenkinsJobs e2e tests
func (*SubmitQueue) AddFlags ¶
func (sq *SubmitQueue) AddFlags(cmd *cobra.Command, config *github.Config)
AddFlags will add any request flags to the cobra `cmd`
func (*SubmitQueue) EachLoop ¶
func (sq *SubmitQueue) EachLoop() error
EachLoop is called at the start of every munge loop
func (*SubmitQueue) Initialize ¶
func (sq *SubmitQueue) Initialize(config *github.Config) error
Initialize will initialize the munger
func (*SubmitQueue) Munge ¶
func (sq *SubmitQueue) Munge(obj *github.MungeObject)
Munge is the workhorse the will actually make updates to the PR
func (SubmitQueue) Name ¶
func (sq SubmitQueue) Name() string
Name is the name usable in --pr-mungers
func (*SubmitQueue) RefreshWhitelist ¶
func (sq *SubmitQueue) RefreshWhitelist()
RefreshWhitelist updates the whitelist, re-getting the list of committers. called with sq.Lock() held!
func (*SubmitQueue) SetMergeStatus ¶
func (sq *SubmitQueue) SetMergeStatus(obj *github.MungeObject, reason string, record bool)
SetMergeStatus will set the status given a particular PR. This function should be used instead of manipulating the prStatus directly as sq.Lock() must be called when manipulating that structure `obj` is the active github object `reason` is the new 'status' for this object `record` is wether we should show this status on the web page or not
In general we do not show the status updates for PRs which didn't reach the 're-run github e2e' state as these are more obvious, change less, and don't seem to ever confuse people.