diff --git a/README.md b/README.md index 88665be..53d1469 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # Lassie > :dog: Lassie loves :hotdog: `s and her doghouse is in the garden of Gitlab, - but as a Rough Collie she has more to offer: +> but as a Rough Collie she has more to offer: - She can check your progress on Merge-Requests, merge them and hand out treats for diligent contributors - More to come ... @@ -53,13 +53,30 @@ helm delete my-lassie-bot-dog Lassie can be controlled with a config file. To enable lassie for a project you have to create this file called `lassie.json` at the top-level of the repository. -```json5 +```json { "$schema": "https://geprog.github.io/lassie-bot-dog/lassie.schema.json", "plugins": { "auto_merge": { "squash": true, - "neededLabels": ["👀 Ready for Review"] + "neededLabels": ["👀 Ready for Review"], + "neededApprovals": [ + { + "label": "*", + "users": ["maintainer", "maintainer-2"], + "atLeast": 1 + } + ], + // "ignoredChecks": [ + // "has-assignee", + // "has-labels", + // "passes-ci", + // "is-title-using-conventional-commit", + // "is-not-work-in-progress", + // "has-no-open-discussions", + // "has-conflicts", + // "has-enough-approvals" + // ] } } } diff --git a/config/lassie.schema.json b/config/lassie.schema.json index 1ca20b3..b345140 100644 --- a/config/lassie.schema.json +++ b/config/lassie.schema.json @@ -59,6 +59,15 @@ }, "minItems": 1, "uniqueItems": true + }, + "ignoredChecks": { + "description": "Checks that are ignored when auto merging", + "type": "array", + "items": { + "type": "string" + }, + "minItems": 1, + "uniqueItems": true } } } diff --git a/plugins/auto_merge/config/auto_merge_config.go b/plugins/auto_merge/config/auto_merge_config.go index f25af47..19003e0 100644 --- a/plugins/auto_merge/config/auto_merge_config.go +++ b/plugins/auto_merge/config/auto_merge_config.go @@ -10,4 +10,5 @@ type AutoMergeConfig struct { Squash bool `json:"squash"` NeededLabels []string `json:"neededLabels"` NeededApprovals []NeededApproval `json:"neededApprovals"` + IgnoredChecks []string `json:"ignoredChecks"` } diff --git a/plugins/auto_merge/merge_checks.go b/plugins/auto_merge/merge_checks.go index b91bc5e..988ec37 100644 --- a/plugins/auto_merge/merge_checks.go +++ b/plugins/auto_merge/merge_checks.go @@ -3,6 +3,7 @@ package auto_merge import ( "github.com/GEPROG/lassie-bot-dog/plugins/auto_merge/checks" "github.com/GEPROG/lassie-bot-dog/plugins/auto_merge/config" + "github.com/GEPROG/lassie-bot-dog/utils" "github.com/xanzy/go-gitlab" ) @@ -30,7 +31,7 @@ type mergeStatus struct { func (plugin AutoMergePlugin) checkMergeRequest(project *gitlab.Project, mergeRequest *gitlab.MergeRequest) *mergeStatus { // TODO: find better place to load this - plugin.setupMergeChecks() + plugin.setupMergeChecks(plugin.loadedConfig) status := &mergeStatus{ mergeRequestID: mergeRequest.ID, @@ -57,12 +58,8 @@ func (plugin AutoMergePlugin) checkMergeRequest(project *gitlab.Project, mergeRe return status } -func (plugin AutoMergePlugin) setupMergeChecks() { - if mergeChecks != nil { - return - } - - mergeChecks = []mergeCheck{ +func (plugin AutoMergePlugin) setupMergeChecks(config *config.AutoMergeConfig) { + allMergeChecks := []mergeCheck{ checks.HasEnoughApprovalsCheck{ Client: plugin.Client, }, @@ -76,4 +73,17 @@ func (plugin AutoMergePlugin) setupMergeChecks() { }, checks.IsTitleUsingConventionalCommit{}, } + + if config.IgnoredChecks != nil { + // filter out ignored checks + var _mergeChecks []mergeCheck + for _, check := range allMergeChecks { + if utils.StringInSlice(check.Name(), config.IgnoredChecks) { + mergeChecks = append(mergeChecks, check) + } + } + mergeChecks = _mergeChecks + } else { + mergeChecks = allMergeChecks + } }