// Munge is the workhorse the will actually make updates to the PR func (StaleGreenCI) Munge(obj *github.MungeObject) { if !obj.IsPR() { return } if !obj.HasLabel(lgtmLabel) { return } if mergeable, err := obj.IsMergeable(); !mergeable || err != nil { return } if !obj.IsStatusSuccess(requiredContexts) { return } for _, context := range requiredContexts { statusTime := obj.GetStatusTime(context) if statusTime == nil { glog.Errorf("%d: unable to determine time %q context was set", *obj.Issue.Number, context) return } if time.Since(*statusTime) > staleGreenCIHours*time.Hour { obj.WriteComment(greenMsgBody) err := obj.WaitForPending(requiredContexts) if err != nil { glog.Errorf("Failed waiting for PR to start testing: %v", err) } return } } }
// Munge is the workhorse the will actually make updates to the PR func (StalePendingCI) Munge(obj *github.MungeObject) { requiredContexts := []string{jenkinsUnitContext, jenkinsE2EContext} if !obj.IsPR() { return } if !obj.HasLabel(lgtmLabel) { return } if mergeable, err := obj.IsMergeable(); !mergeable || err != nil { return } status := obj.GetStatusState(requiredContexts) if status != "pending" { return } for _, context := range requiredContexts { statusTime := obj.GetStatusTime(context) if statusTime == nil { glog.Errorf("%d: unable to determine time %q context was set", *obj.Issue.Number, context) return } if time.Since(*statusTime) > stalePendingCIHours*time.Hour { obj.WriteComment(pendingMsgBody) return } } }
func commentBeforeLastCI(obj *github.MungeObject, comment *githubapi.IssueComment) bool { if !obj.IsStatusSuccess(requiredContexts) { return false } if comment.CreatedAt == nil { return false } commentTime := *comment.CreatedAt for _, context := range requiredContexts { statusTimeP := obj.GetStatusTime(context) if statusTimeP == nil { return false } statusTime := statusTimeP.Add(30 * time.Minute) if commentTime.After(statusTime) { return false } } return true }
// Munge is the workhorse the will actually make updates to the PR func (StaleUnitTestMunger) Munge(obj *github.MungeObject) { requiredContexts := []string{jenkinsUnitContext, jenkinsE2EContext} if !obj.IsPR() { return } if !obj.HasLabels([]string{"lgtm"}) { return } if mergeable, err := obj.IsMergeable(); !mergeable || err != nil { return } if !obj.IsStatusSuccess(requiredContexts) { return } for _, context := range requiredContexts { statusTime := obj.GetStatusTime(context) if statusTime == nil { glog.Errorf("%d: unable to determine time %q context was set", *obj.Issue.Number, context) return } if time.Since(*statusTime) > staleHours*time.Hour { msgFormat := `@k8s-bot test this Tests are more than %d hours old. Re-running tests.` msg := fmt.Sprintf(msgFormat, staleHours) obj.WriteComment(msg) err := obj.WaitForPending(requiredContexts) if err != nil { glog.Errorf("Failed waiting for PR to start testing: %v", err) } return } } }
// Munge is the workhorse the will actually make updates to the PR func (StalePendingCI) Munge(obj *github.MungeObject) { requiredContexts := []string{jenkinsUnitContext, jenkinsE2EContext} if !obj.IsPR() { return } if !obj.HasLabel("lgtm") { return } if mergeable, err := obj.IsMergeable(); !mergeable || err != nil { return } status := obj.GetStatusState(requiredContexts) if status != "pending" { return } for _, context := range requiredContexts { statusTime := obj.GetStatusTime(context) if statusTime == nil { glog.Errorf("%d: unable to determine time %q context was set", *obj.Issue.Number, context) return } if time.Since(*statusTime) > stalePendingCIHours*time.Hour { msgFormat := `@k8s-bot test this issue: #IGNORE Tests have been pending for %d hours` msg := fmt.Sprintf(msgFormat, stalePendingCIHours) obj.WriteComment(msg) return } } }