@@ -189,37 +189,43 @@ func (c CommitPolicyConfig) IsEmpty() bool {
189189}
190190
191191type gitEnv struct {
192- Ref string
193- Base string
192+ EnvName string
193+ Event string
194+ Ref string
195+ Base string
194196}
195197
196198type 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
202205var ErrGitEnvironment = errors .New ("git environment error" )
203206
204207func 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
250256var 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