Documentation ¶
Index ¶
- func GetLabelsWithPrefix(labels []github.Label, prefix string) []string
- type Config
- func (config *Config) AddRootFlags(cmd *cobra.Command)
- func (config *Config) ForEachIssueDo(fn MungeFunction) error
- func (config *Config) GetDebugStats() DebugStats
- func (config *Config) GetObject(num int) (*MungeObject, error)
- func (config *Config) GetUser(login string) (*github.User, error)
- func (config *Config) ListAllIssues(listOpts *github.IssueListByRepoOptions) ([]*github.Issue, error)
- func (config *Config) NextExpectedUpdate(t time.Time)
- func (config *Config) PreExecute() error
- func (config *Config) ResetAPICount()
- func (config *Config) ServeDebugStats(path string)
- func (config *Config) SetClient(client *github.Client)
- func (config *Config) UsersWithAccess() ([]github.User, []github.User, error)
- type DebugStats
- type MungeFunction
- type MungeObject
- func (obj *MungeObject) AddLabel(label string) error
- func (obj *MungeObject) AddLabels(labels []string) error
- func (obj *MungeObject) AssignPR(owner string) error
- func (obj *MungeObject) ClosePR() error
- func (obj *MungeObject) DeleteComment(comment *github.IssueComment) error
- func (obj *MungeObject) GetCommits() ([]github.RepositoryCommit, error)
- func (obj *MungeObject) GetEvents() ([]github.IssueEvent, error)
- func (obj *MungeObject) GetFileContents(file, sha string) (string, error)
- func (obj *MungeObject) GetPR() (*github.PullRequest, error)
- func (obj *MungeObject) GetStatus(context string) *github.RepoStatus
- func (obj *MungeObject) GetStatusState(requiredContexts []string) string
- func (obj *MungeObject) GetStatusTime(context string) *time.Time
- func (obj *MungeObject) HasLabel(name string) bool
- func (obj *MungeObject) HasLabels(names []string) bool
- func (obj *MungeObject) IsForBranch(branch string) bool
- func (obj *MungeObject) IsMergeable() (bool, error)
- func (obj *MungeObject) IsMerged() (bool, error)
- func (obj *MungeObject) IsPR() bool
- func (obj *MungeObject) IsStatusSuccess(requiredContexts []string) bool
- func (obj *MungeObject) LabelCreator(label string) string
- func (obj *MungeObject) LabelSet() sets.String
- func (obj *MungeObject) LabelTime(label string) *time.Time
- func (obj *MungeObject) LastModifiedTime() *time.Time
- func (obj *MungeObject) ListComments(number int) ([]github.IssueComment, error)
- func (obj *MungeObject) MergeCommit() *string
- func (obj *MungeObject) MergePR(who string) error
- func (obj *MungeObject) MergedAt() *time.Time
- func (obj *MungeObject) OpenPR(numTries int) error
- func (obj *MungeObject) Priority() int
- func (obj *MungeObject) Refresh() error
- func (obj *MungeObject) ReleaseMilestone() string
- func (obj *MungeObject) ReleaseMilestoneDue() time.Time
- func (obj *MungeObject) RemoveLabel(label string) error
- func (obj *MungeObject) SetStatus(state, url, description, context string) error
- func (obj *MungeObject) WaitForNotPending(requiredContexts []string) error
- func (obj *MungeObject) WaitForPending(requiredContexts []string) error
- func (obj *MungeObject) WriteComment(msg string) error
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
Types ¶
type Config ¶
type Config struct { Org string Project string Token string TokenFile string Address string // if a munger runs a web server, where it should live WWWRoot string MinPRNumber int MaxPRNumber int // If true, don't make any mutating API calls DryRun bool // Defaults to 30 seconds. PendingWaitTime *time.Duration // contains filtered or unexported fields }
Config is how we are configured to talk to github and provides access methods for doing so.
func (*Config) AddRootFlags ¶
AddRootFlags will add all of the flags needed for the github config to the cobra command
func (*Config) ForEachIssueDo ¶
func (config *Config) ForEachIssueDo(fn MungeFunction) error
ForEachIssueDo will run for each Issue in the project that matches:
- pr.Number >= minPRNumber
- pr.Number <= maxPRNumber
func (*Config) GetDebugStats ¶
func (config *Config) GetDebugStats() DebugStats
GetDebugStats returns information about the bot iself. Things like how many API calls has it made, how many of each type, etc.
func (*Config) GetObject ¶
func (config *Config) GetObject(num int) (*MungeObject, error)
GetObject will return an object (with only the issue filled in)
func (*Config) GetUser ¶
GetUser will return information about the github user with the given login name
func (*Config) ListAllIssues ¶
func (config *Config) ListAllIssues(listOpts *github.IssueListByRepoOptions) ([]*github.Issue, error)
ListAllIssues grabs all issues matching the options, so you don't have to worry about paging. Enforces some constraints, like min/max PR number and having a valid user.
func (*Config) NextExpectedUpdate ¶
NextExpectedUpdate will set the debug information concerning when the mungers are likely to run again.
func (*Config) PreExecute ¶
PreExecute will initialize the Config. It MUST be run before the config may be used to get information from Github
func (*Config) ResetAPICount ¶
func (config *Config) ResetAPICount()
ResetAPICount will both reset the counters of how many api calls have been made but will also print the information from the last run.
func (*Config) ServeDebugStats ¶
ServeDebugStats will serve out debug information at the path
func (*Config) SetClient ¶
SetClient should ONLY be used by testing. Normal commands should use PreExecute()
func (*Config) UsersWithAccess ¶
UsersWithAccess returns two sets of users. The first set are users with push access. The second set is the specific set of user with pull access. If the repo is public all users will have pull access, but some with have it explicitly
type DebugStats ¶
type DebugStats struct { Analytics analytics APIPerSec float64 APICount int CachedAPICount int NextLoopTime time.Time LimitRemaining int LimitResetTime time.Time }
DebugStats is a structure that tells information about how we have interacted with github
type MungeFunction ¶
type MungeFunction func(*MungeObject) error
MungeFunction is the type that must be implemented and passed to ForEachIssueDo
type MungeObject ¶
MungeObject is the object that mungers deal with. It is a combination of different github API objects.
func TestObject ¶
func TestObject(config *Config, issue *github.Issue, pr *github.PullRequest, commits []github.RepositoryCommit, events []github.IssueEvent) *MungeObject
TestObject should NEVER be used outside of _test.go code. It creates a MungeObject with the given fields. Normally these should be filled in lazily as needed
func (*MungeObject) AddLabel ¶
func (obj *MungeObject) AddLabel(label string) error
AddLabel adds a single `label` to the issue
func (*MungeObject) AddLabels ¶
func (obj *MungeObject) AddLabels(labels []string) error
AddLabels will add all of the named `labels` to the issue
func (*MungeObject) AssignPR ¶
func (obj *MungeObject) AssignPR(owner string) error
AssignPR will assign `prNum` to the `owner` where the `owner` is asignee's github login
func (*MungeObject) ClosePR ¶
func (obj *MungeObject) ClosePR() error
ClosePR will close the Given PR
func (*MungeObject) DeleteComment ¶
func (obj *MungeObject) DeleteComment(comment *github.IssueComment) error
DeleteComment will remove the specified comment
func (*MungeObject) GetCommits ¶
func (obj *MungeObject) GetCommits() ([]github.RepositoryCommit, error)
GetCommits returns all of the commits for a given PR
func (*MungeObject) GetEvents ¶
func (obj *MungeObject) GetEvents() ([]github.IssueEvent, error)
GetEvents returns a list of all events for a given pr.
func (*MungeObject) GetFileContents ¶
func (obj *MungeObject) GetFileContents(file, sha string) (string, error)
GetFileContents will return the contents of the `file` in the repo at `sha` as a string
func (*MungeObject) GetPR ¶
func (obj *MungeObject) GetPR() (*github.PullRequest, error)
GetPR will return the PR of the object.
func (*MungeObject) GetStatus ¶
func (obj *MungeObject) GetStatus(context string) *github.RepoStatus
GetStatus returns the actual requested status, or nil if not found
func (*MungeObject) GetStatusState ¶
func (obj *MungeObject) GetStatusState(requiredContexts []string) string
GetStatusState gets the current status of a PR.
- If any member of the 'requiredContexts' list is missing, it is 'incomplete'
- If any is 'pending', the PR is 'pending'
- If any is 'error', the PR is in 'error'
- If any is 'failure', the PR is 'failure'
- Otherwise the PR is 'success'
func (*MungeObject) GetStatusTime ¶
func (obj *MungeObject) GetStatusTime(context string) *time.Time
GetStatusTime returns when the status was set
func (*MungeObject) HasLabel ¶
func (obj *MungeObject) HasLabel(name string) bool
HasLabel returns if the label `name` is in the array of `labels`
func (*MungeObject) HasLabels ¶
func (obj *MungeObject) HasLabels(names []string) bool
HasLabels returns if all of the label `names` are in the array of `labels`
func (*MungeObject) IsForBranch ¶
func (obj *MungeObject) IsForBranch(branch string) bool
IsForBranch return true if the object is a PR for a branch with the given name. It return false if it is not a pr, it isn't against the given branch, or we can't tell
func (*MungeObject) IsMergeable ¶
func (obj *MungeObject) IsMergeable() (bool, error)
IsMergeable will return if the PR is mergeable. It will pause and get the PR again if github did not respond the first time. So the hopefully github will have a response the second time. If we have no answer twice, we return false
func (*MungeObject) IsMerged ¶
func (obj *MungeObject) IsMerged() (bool, error)
IsMerged returns if the issue in question was already merged
func (*MungeObject) IsPR ¶
func (obj *MungeObject) IsPR() bool
IsPR returns if the obj is a PR or an Issue.
func (*MungeObject) IsStatusSuccess ¶
func (obj *MungeObject) IsStatusSuccess(requiredContexts []string) bool
IsStatusSuccess makes sure that the combined status for all commits in a PR is 'success'
func (*MungeObject) LabelCreator ¶
func (obj *MungeObject) LabelCreator(label string) string
LabelCreator returns the login name of the user who (last) created the given label
func (*MungeObject) LabelSet ¶
func (obj *MungeObject) LabelSet() sets.String
LabelSet returns the name of all of he labels applied to the object as a kubernetes string set.
func (*MungeObject) LabelTime ¶
func (obj *MungeObject) LabelTime(label string) *time.Time
LabelTime returns the last time the request label was added to an issue. If the label was never added you will get the 0 time.
func (*MungeObject) LastModifiedTime ¶
func (obj *MungeObject) LastModifiedTime() *time.Time
LastModifiedTime returns the time the last commit was made BUG: this should probably return the last time a git push happened or something like that.
func (*MungeObject) ListComments ¶
func (obj *MungeObject) ListComments(number int) ([]github.IssueComment, error)
ListComments returns all comments for the issue/PR in question
func (*MungeObject) MergeCommit ¶
func (obj *MungeObject) MergeCommit() *string
MergeCommit will return the sha of the merge. PRs which have not merged (or if we hit an error) will return nil
func (*MungeObject) MergePR ¶
func (obj *MungeObject) MergePR(who string) error
MergePR will merge the given PR, duh "who" is who is doing the merging, like "submit-queue"
func (*MungeObject) MergedAt ¶
func (obj *MungeObject) MergedAt() *time.Time
MergedAt returns the time an issue was merged (for nil if unmerged)
func (*MungeObject) OpenPR ¶
func (obj *MungeObject) OpenPR(numTries int) error
OpenPR will attempt to open the given PR. It will attempt to reopen the pr `numTries` before returning an error and giving up.
func (*MungeObject) Priority ¶
func (obj *MungeObject) Priority() int
Priority returns the priority an issue was labeled with. The labels must take the form 'priority/[pP][0-9]+' or math.MaxInt32 if unset
If a PR has both priority/p0 and priority/p1 it will be considered a p0.
func (*MungeObject) Refresh ¶
func (obj *MungeObject) Refresh() error
Refresh will refresh the Issue (and PR if this is a PR) (not the commits or events)
func (*MungeObject) ReleaseMilestone ¶
func (obj *MungeObject) ReleaseMilestone() string
ReleaseMilestone returns the name of the 'release' milestone or an empty string if none found. Release milestones are determined by the format "vX.Y"
func (*MungeObject) ReleaseMilestoneDue ¶
func (obj *MungeObject) ReleaseMilestoneDue() time.Time
ReleaseMilestoneDue returns the due date for a milestone. It ONLY looks at milestones of the form 'vX.Y' where X and Y are integeters. Return the maximum possible time if there is no milestone or the milestone doesn't look like a release milestone
func (*MungeObject) RemoveLabel ¶
func (obj *MungeObject) RemoveLabel(label string) error
RemoveLabel will remove the `label` from the PR
func (*MungeObject) SetStatus ¶
func (obj *MungeObject) SetStatus(state, url, description, context string) error
SetStatus allowes you to set the Github Status
func (*MungeObject) WaitForNotPending ¶
func (obj *MungeObject) WaitForNotPending(requiredContexts []string) error
WaitForNotPending will check if the github status is "pending" (CI still running) if so it will sleep and try again until all required status hooks have complete
func (*MungeObject) WaitForPending ¶
func (obj *MungeObject) WaitForPending(requiredContexts []string) error
WaitForPending will wait for a PR to move into Pending. This is useful because the request to test a PR again is asynchronous with the PR actually moving into a pending state
func (*MungeObject) WriteComment ¶
func (obj *MungeObject) WriteComment(msg string) error
WriteComment will send the `msg` as a comment to the specified PR