mungers

package
v0.0.0-...-8079955 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 8, 2016 License: Apache-2.0 Imports: 26 Imported by: 0

Documentation

Overview

Package mungers deals with munging of github pull requests

Index

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

func InitializeMungers(requestedMungers []string, config *github.Config, features *features.Features) error

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

func RegisterMunger(munger Munger) error

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

func RequestedFeatures

func RequestedFeatures() []string

RequestedFeatures returns a list of all feature which should be enabled for the running mungers

Types

type BlockPath

type BlockPath struct {
	// contains filtered or unexported fields
}

BlockPath will add a label to block auto merge if a PR touches certain paths

func (*BlockPath) AddFlags

func (b *BlockPath) AddFlags(cmd *cobra.Command, config *github.Config)

AddFlags will add any request flags to the cobra `cmd`

func (*BlockPath) EachLoop

func (b *BlockPath) EachLoop() error

EachLoop is called at the start of every munge loop

func (*BlockPath) Initialize

func (b *BlockPath) Initialize(config *github.Config, features *features.Features) error

Initialize will initialize the munger

func (*BlockPath) Munge

func (b *BlockPath) Munge(obj *github.MungeObject)

Munge is the workhorse the will actually make updates to the PR

func (*BlockPath) Name

func (b *BlockPath) Name() string

Name is the name usable in --pr-mungers

func (*BlockPath) RequiredFeatures

func (b *BlockPath) RequiredFeatures() []string

RequiredFeatures is a slice of 'features' that must be provided

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, features *features.Features) 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

func (*BlunderbussMunger) RequiredFeatures

func (b *BlunderbussMunger) RequiredFeatures() []string

RequiredFeatures is a slice of 'features' that must be provided

type CherrypickAutoApprove

type CherrypickAutoApprove struct {
	// contains filtered or unexported fields
}

CherrypickAutoApprove will add 'cherrypick-approved' to PRs which are for 'cherrypick-approved' parents. This only works if the PR (against the 'release-*' branch was done using the script.

func (*CherrypickAutoApprove) AddFlags

func (c *CherrypickAutoApprove) AddFlags(cmd *cobra.Command, config *github.Config)

AddFlags will add any request flags to the cobra `cmd`

func (*CherrypickAutoApprove) EachLoop

func (c *CherrypickAutoApprove) EachLoop() error

EachLoop is called at the start of every munge loop

func (*CherrypickAutoApprove) Initialize

func (c *CherrypickAutoApprove) Initialize(config *github.Config, features *features.Features) error

Initialize will initialize the munger

func (*CherrypickAutoApprove) Munge

func (c *CherrypickAutoApprove) Munge(obj *github.MungeObject)

Munge is the workhorse the will actually make updates to the PR

func (*CherrypickAutoApprove) Name

func (c *CherrypickAutoApprove) Name() string

Name is the name usable in --pr-mungers

func (*CherrypickAutoApprove) RequiredFeatures

func (c *CherrypickAutoApprove) RequiredFeatures() []string

RequiredFeatures is a slice of 'features' that must be provided

type CherrypickQueue

type CherrypickQueue struct {
	sync.Mutex
	// contains filtered or unexported fields
}

CherrypickQueue will merge PR which meet a set of requirements.

func (*CherrypickQueue) AddFlags

func (c *CherrypickQueue) AddFlags(cmd *cobra.Command, config *github.Config)

AddFlags will add any request flags to the cobra `cmd`

func (*CherrypickQueue) EachLoop

func (c *CherrypickQueue) EachLoop() error

EachLoop is called at the start of every munge loop

func (*CherrypickQueue) Initialize

func (c *CherrypickQueue) Initialize(config *github.Config, features *features.Features) error

Initialize will initialize the munger

func (*CherrypickQueue) Munge

func (c *CherrypickQueue) Munge(obj *github.MungeObject)

Munge is the workhorse the will actually make updates to the PR

func (*CherrypickQueue) Name

func (c *CherrypickQueue) Name() string

Name is the name usable in --pr-mungers

func (*CherrypickQueue) RequiredFeatures

func (c *CherrypickQueue) RequiredFeatures() []string

RequiredFeatures is a slice of 'features' that must be provided

type ClearPickAfterMerge

type ClearPickAfterMerge struct {
	// contains filtered or unexported fields
}

ClearPickAfterMerge will remove the the cherrypick-candidate label from any PR that does not have a 'release' milestone set.

func (*ClearPickAfterMerge) AddFlags

func (c *ClearPickAfterMerge) AddFlags(cmd *cobra.Command, config *github.Config)

AddFlags will add any request flags to the cobra `cmd`

func (*ClearPickAfterMerge) EachLoop

func (c *ClearPickAfterMerge) EachLoop() error

EachLoop is called at the start of every munge loop

func (*ClearPickAfterMerge) Initialize

func (c *ClearPickAfterMerge) Initialize(config *github.Config, features *features.Features) error

Initialize will initialize the munger

func (*ClearPickAfterMerge) Munge

func (c *ClearPickAfterMerge) Munge(obj *github.MungeObject)

Munge is the workhorse the will actually make updates to the PR

func (*ClearPickAfterMerge) Name

func (c *ClearPickAfterMerge) Name() string

Name is the name usable in --pr-mungers

func (*ClearPickAfterMerge) RequiredFeatures

func (c *ClearPickAfterMerge) RequiredFeatures() []string

RequiredFeatures is a slice of 'features' that must be provided

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, features *features.Features) error

Initialize will initialize the munger

func (LGTMAfterCommitMunger) Munge

Munge is the workhorse the will actually make updates to the PR

func (LGTMAfterCommitMunger) Name

Name is the name usable in --pr-mungers

func (LGTMAfterCommitMunger) RequiredFeatures

func (LGTMAfterCommitMunger) RequiredFeatures() []string

RequiredFeatures is a slice of 'features' that must be provided

type LabelUnapprovedPicks

type LabelUnapprovedPicks struct{}

LabelUnapprovedPicks will remove the LGTM flag from an PR which has been updated since the reviewer added LGTM

func (LabelUnapprovedPicks) AddFlags

func (LabelUnapprovedPicks) AddFlags(cmd *cobra.Command, config *github.Config)

AddFlags will add any request flags to the cobra `cmd`

func (LabelUnapprovedPicks) EachLoop

func (LabelUnapprovedPicks) EachLoop() error

EachLoop is called at the start of every munge loop

func (LabelUnapprovedPicks) Initialize

func (LabelUnapprovedPicks) Initialize(config *github.Config, features *features.Features) error

Initialize will initialize the munger

func (LabelUnapprovedPicks) Munge

Munge is the workhorse the will actually make updates to the PR

func (LabelUnapprovedPicks) Name

Name is the name usable in --pr-mungers

func (LabelUnapprovedPicks) RequiredFeatures

func (LabelUnapprovedPicks) RequiredFeatures() []string

RequiredFeatures is a slice of 'features' that must be provided

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
	RequiredFeatures() []string
	Initialize(*github.Config, *features.Features) 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, features *features.Features) 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

func (NeedsRebaseMunger) RequiredFeatures

func (NeedsRebaseMunger) RequiredFeatures() []string

RequiredFeatures is a slice of 'features' that must be provided

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, features *features.Features) 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

func (OkToTestMunger) RequiredFeatures

func (OkToTestMunger) RequiredFeatures() []string

RequiredFeatures is a slice of 'features' that must be provided

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, features *features.Features) 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

func (*PathLabelMunger) RequiredFeatures

func (p *PathLabelMunger) RequiredFeatures() []string

RequiredFeatures is a slice of 'features' that must be provided

type PickMustHaveMilestone

type PickMustHaveMilestone struct{}

PickMustHaveMilestone will remove the the cherrypick-candidate label from any PR that does not have a 'release' milestone set.

func (PickMustHaveMilestone) AddFlags

func (PickMustHaveMilestone) AddFlags(cmd *cobra.Command, config *github.Config)

AddFlags will add any request flags to the cobra `cmd`

func (PickMustHaveMilestone) EachLoop

func (PickMustHaveMilestone) EachLoop() error

EachLoop is called at the start of every munge loop

func (PickMustHaveMilestone) Initialize

func (PickMustHaveMilestone) Initialize(config *github.Config, features *features.Features) error

Initialize will initialize the munger

func (PickMustHaveMilestone) Munge

Munge is the workhorse the will actually make updates to the PR

func (PickMustHaveMilestone) Name

Name is the name usable in --pr-mungers

func (PickMustHaveMilestone) RequiredFeatures

func (PickMustHaveMilestone) RequiredFeatures() []string

RequiredFeatures is a slice of 'features' that must be provided

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, features *features.Features) 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

func (PingCIMunger) RequiredFeatures

func (PingCIMunger) RequiredFeatures() []string

RequiredFeatures is a slice of 'features' that must be provided

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, features *features.Features) 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

func (*RebuildMunger) RequiredFeatures

func (r *RebuildMunger) RequiredFeatures() []string

RequiredFeatures is a slice of 'features' that must be provided

type ReleaseNoteLabel

type ReleaseNoteLabel struct {
	// contains filtered or unexported fields
}

ReleaseNoteLabel will remove the LGTM label from an PR which has not set one of the appropriete 'release-note-*' labels.

func (*ReleaseNoteLabel) AddFlags

func (r *ReleaseNoteLabel) AddFlags(cmd *cobra.Command, config *github.Config)

AddFlags will add any request flags to the cobra `cmd`

func (*ReleaseNoteLabel) EachLoop

func (r *ReleaseNoteLabel) EachLoop() error

EachLoop is called at the start of every munge loop

func (*ReleaseNoteLabel) Initialize

func (r *ReleaseNoteLabel) Initialize(config *github.Config, features *features.Features) error

Initialize will initialize the munger

func (*ReleaseNoteLabel) Munge

func (r *ReleaseNoteLabel) Munge(obj *github.MungeObject)

Munge is the workhorse the will actually make updates to the PR

func (*ReleaseNoteLabel) Name

func (r *ReleaseNoteLabel) Name() string

Name is the name usable in --pr-mungers

func (*ReleaseNoteLabel) RequiredFeatures

func (r *ReleaseNoteLabel) RequiredFeatures() []string

RequiredFeatures is a slice of 'features' that must be provided

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, features *features.Features) 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

func (SizeMunger) Name

func (SizeMunger) Name() string

Name is the name usable in --pr-mungers

func (SizeMunger) RequiredFeatures

func (SizeMunger) RequiredFeatures() []string

RequiredFeatures is a slice of 'features' that must be provided

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, features *features.Features) 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

func (StaleGreenCI) RequiredFeatures

func (StaleGreenCI) RequiredFeatures() []string

RequiredFeatures is a slice of 'features' that must be provided

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, features *features.Features) 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

func (StalePendingCI) RequiredFeatures

func (StalePendingCI) RequiredFeatures() []string

RequiredFeatures is a slice of 'features' that must be provided

type SubmitQueue

type SubmitQueue struct {
	JobNames           []string
	WeakStableJobNames []string

	// If FakeE2E is true, don't try to connect to JenkinsHost, all jobs are passing.
	FakeE2E     bool
	JenkinsHost string

	Whitelist              string
	WhitelistOverride      string
	Committers             string
	E2EStatusContext       string
	UnitStatusContext      string
	RequiredStatusContexts []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 JobNames 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, features *features.Features) 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) RequiredFeatures

func (sq SubmitQueue) RequiredFeatures() []string

RequiredFeatures is a slice of 'features' that must be provided

func (*SubmitQueue) SetMergeStatus

func (sq *SubmitQueue) SetMergeStatus(obj *github.MungeObject, reason string)

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

Directories

Path Synopsis
e2e

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL