// Munge is the workhorse the will actually make updates to the PR func (c *CherrypickAutoApprove) Munge(obj *github.MungeObject) { if !obj.IsPR() { return } if obj.IsForBranch("master") { return } if obj.HasLabel(cpApprovedLabel) && obj.ReleaseMilestone() != "" { return } parents := getCherrypickParentPRs(obj, c.config) if len(parents) == 0 { return } major := 0 minor := 0 branch := obj.Branch() if l, err := fmt.Sscanf(branch, "release-%d.%d", &major, &minor); err != nil || l != 2 { return } branchImpliedMilestone := fmt.Sprintf("v%d.%d", major, minor) milestone := obj.ReleaseMilestone() if milestone != "" && milestone != branchImpliedMilestone { glog.Errorf("Found PR %d on branch %q but have milestone %q", *obj.Issue.Number, branch, milestone) return } for _, parent := range parents { if !parent.HasLabel(cpApprovedLabel) { return } // If the parent was for milestone v1.2 but this PR has // comments saying it was 'on branch release-1.1' we should // not auto approve parentMilestone := parent.ReleaseMilestone() if parentMilestone != branchImpliedMilestone { glog.Errorf("%d: parentReleaseMilestone=%q but branch is %q", *obj.Issue.Number, parentMilestone, obj.Branch()) return } } if milestone == "" { obj.SetMilestone(branchImpliedMilestone) } if !obj.HasLabel(cpApprovedLabel) { obj.AddLabel(cpApprovedLabel) } }