Skip to content

Commit f1bb576

Browse files
lukashassanbraten
andauthored
feat: disallow self approval (#73)
Co-authored-by: Anbraten <[email protected]>
1 parent e7d0de8 commit f1bb576

File tree

3 files changed

+29
-3
lines changed

3 files changed

+29
-3
lines changed
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package checks
2+
3+
import (
4+
"github.com/GEPROG/lassie-bot-dog/plugins/auto_merge/config"
5+
"github.com/xanzy/go-gitlab"
6+
)
7+
8+
type HasAssignee struct {
9+
}
10+
11+
func (check HasAssignee) Check(_ *config.AutoMergeConfig, _ *gitlab.Project, mergeRequest *gitlab.MergeRequest) bool {
12+
return mergeRequest.Assignee != nil
13+
}
14+
15+
func (check HasAssignee) Name() string {
16+
return "has-assignee"
17+
}
18+
19+
func (check HasAssignee) PassedText(_ int) string {
20+
return "Someone is assigned to your Merge-Request"
21+
}
22+
23+
func (check HasAssignee) FailedText(_ int) string {
24+
return "No one is assigned to your Merge-Request"
25+
}

plugins/auto_merge/checks/has_enough_approvals.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ func (check HasEnoughApprovalsCheck) Check(config *config.AutoMergeConfig, proje
3636
}
3737

3838
// get amount of users that need to approve and already approved
39-
approvedBy := len(check.getApprovals(approvals.ApprovedBy, neededApproval.Users))
39+
approvedBy := len(check.getApprovals(approvals.ApprovedBy, neededApproval.Users, mergeRequest.Assignee))
4040
atLeast := utils.Max(neededApproval.AtLeast, 1)
4141

4242
if approvedBy < atLeast {
@@ -64,11 +64,11 @@ func (check HasEnoughApprovalsCheck) FailedText(mergeRequestID int) string {
6464
return fmt.Sprintf("You still need some review for your changes %s", missingLabels)
6565
}
6666

67-
func (check HasEnoughApprovalsCheck) getApprovals(approvedByAll []*gitlab.MergeRequestApproverUser, possibleApprovers []string) []string {
67+
func (check HasEnoughApprovalsCheck) getApprovals(approvedByAll []*gitlab.MergeRequestApproverUser, possibleApprovers []string, assignee *gitlab.BasicUser) []string {
6868
var approvedBy []string
6969

7070
for _, approver := range approvedByAll {
71-
if utils.StringInSlice(approver.User.Username, possibleApprovers) {
71+
if utils.StringInSlice(approver.User.Username, possibleApprovers) && (assignee == nil || approver.User.Username != assignee.Username) {
7272
approvedBy = append(approvedBy, approver.User.Username)
7373
}
7474
}

plugins/auto_merge/merge_checks.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ func (plugin AutoMergePlugin) setupMergeChecks() {
7070
checks.HasNoConflictsCheck{},
7171
checks.HasNoOpenDiscussionsCheck{Client: plugin.Client},
7272
checks.IsNotWorkInProgressCheck{},
73+
checks.HasAssignee{},
7374
checks.PassesCICheck{
7475
Client: plugin.Client,
7576
},

0 commit comments

Comments
 (0)