Skip to content

Commit 68aa057

Browse files
committed
MINOR: update gitlab environment use to ignore Merge subjects on pull requests onlyu
1 parent 648d494 commit 68aa057

File tree

2 files changed

+29
-16
lines changed

2 files changed

+29
-16
lines changed

check-commit/.golangci.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,5 @@ linters-settings:
33
lines: 70
44
testpackage:
55
skip-regexp: check_test.go
6+
cyclop:
7+
max-complexity: 12

check-commit/check.go

Lines changed: 27 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -189,37 +189,43 @@ func (c CommitPolicyConfig) IsEmpty() bool {
189189
}
190190

191191
type gitEnv struct {
192-
Ref string
193-
Base string
192+
EnvName string
193+
Event string
194+
Ref string
195+
Base string
194196
}
195197

196198
type gitEnvVars struct {
197-
EnvName string
198-
RefVar string
199-
BaseVar string
199+
EnvName string
200+
EventVar string
201+
RefVar string
202+
BaseVar string
200203
}
201204

202205
var ErrGitEnvironment = errors.New("git environment error")
203206

204207
func readGitEnvironment() (*gitEnv, error) {
205208
knownVars := []gitEnvVars{
206-
{"Github", "GITHUB_SHA", "GITHUB_BASE_REF"},
207-
{"Gitlab", "CI_MERGE_REQUEST_SOURCE_BRANCH_NAME", "CI_MERGE_REQUEST_TARGET_BRANCH_NAME"},
208-
{"Gitlab-commit", "CI_COMMIT_SHA", "CI_DEFAULT_BRANCH"},
209+
{"Github", "GITHUB_EVENT_NAME", "GITHUB_SHA", "GITHUB_BASE_REF"},
210+
{"Gitlab", "CI_PIPELINE_SOURCE", "CI_MERGE_REQUEST_SOURCE_BRANCH_NAME", "CI_MERGE_REQUEST_TARGET_BRANCH_NAME"},
211+
{"Gitlab-commit", "CI_PIPELINE_SOURCE", "CI_COMMIT_SHA", "CI_DEFAULT_BRANCH"},
209212
}
210213

211214
var ref, base string
212215
for _, vars := range knownVars {
216+
event := os.Getenv(vars.EventVar)
213217
ref = os.Getenv(vars.RefVar)
214218
base = os.Getenv(vars.BaseVar)
215219

216220
if ref != "" && base != "" {
217221
log.Printf("detected %s environment\n", vars.EnvName)
218-
log.Printf("using %s and %s\n", ref, base)
222+
log.Printf("using %s with %s and %s\n", event, ref, base)
219223

220224
return &gitEnv{
221-
Ref: ref,
222-
Base: base,
225+
EnvName: vars.EnvName,
226+
Event: event,
227+
Ref: ref,
228+
Base: base,
223229
}, nil
224230
}
225231
}
@@ -249,10 +255,10 @@ func LoadCommitPolicy(filename string) (CommitPolicyConfig, error) {
249255

250256
var ErrReachedMergeBase = errors.New("reached Merge Base")
251257

252-
func getCommitSubjects(repo *git.Repository, from, to string) ([]string, error) {
258+
func getCommitSubjects(repo *git.Repository, repoEnv *gitEnv) ([]string, error) {
253259
var refStrings []string
254-
refStrings = append(refStrings, from)
255-
refStrings = append(refStrings, to)
260+
refStrings = append(refStrings, repoEnv.Ref)
261+
refStrings = append(refStrings, repoEnv.Base)
256262

257263
hashes := make([]*plumbing.Hash, 0, 2)
258264

@@ -291,12 +297,17 @@ func getCommitSubjects(repo *git.Repository, from, to string) ([]string, error)
291297

292298
var subjects []string
293299

300+
gitlabMergeRegex := regexp.MustCompile("Merge %s into %s")
301+
294302
err = cIter.ForEach(func(c *object.Commit) error {
295303
if c.Hash == mergeBase[0].Hash {
296304
return ErrReachedMergeBase
297305
}
298306

299-
subjects = append(subjects, strings.Split(c.Message, "\n")[0])
307+
if !(repoEnv.EnvName == "Github" && repoEnv.Event == "pull_request" && gitlabMergeRegex.Match([]byte(c.Message))) {
308+
// ignore github pull request commits with subject "Merge x into y", these get added automatically by github
309+
subjects = append(subjects, strings.Split(c.Message, "\n")[0])
310+
}
300311

301312
return nil
302313
})
@@ -358,7 +369,7 @@ func main() {
358369
log.Fatalf("couldn't open git local git repo: %s", err)
359370
}
360371

361-
subjects, err := getCommitSubjects(repo, gitEnv.Base, gitEnv.Ref)
372+
subjects, err := getCommitSubjects(repo, gitEnv)
362373
if err != nil {
363374
log.Fatalf("error getting commit subjects: %s", err)
364375
}

0 commit comments

Comments
 (0)