@@ -3,10 +3,14 @@ package agent
33import (
44 "fmt"
55 "os"
6+ "regexp"
7+ "strings"
68
79 "go.undefinedlabs.com/scopeagent/tags"
810)
911
12+ var branchRefRegex = regexp .MustCompile (`(?m)^refs\/heads\/(.*)|refs\/(.*)$` )
13+
1014func getCIMetadata () map [string ]interface {} {
1115 ciMetadata := map [string ]interface {}{tags .CI : false }
1216
@@ -25,6 +29,11 @@ func getCIMetadata() map[string]interface{} {
2529 os .Getenv ("TRAVIS_REPO_SLUG" ),
2630 )
2731 ciMetadata [tags .Commit ] = os .Getenv ("TRAVIS_COMMIT" )
32+ if branch , ok := os .LookupEnv ("TRAVIS_PULL_REQUEST_BRANCH" ); ok && branch != "" {
33+ ciMetadata [tags .Branch ] = branch
34+ } else {
35+ ciMetadata [tags .Branch ] = os .Getenv ("TRAVIS_BRANCH" )
36+ }
2837 ciMetadata [tags .SourceRoot ] = getSourceRootFromEnv ("TRAVIS_BUILD_DIR" )
2938 } else if _ , set := os .LookupEnv ("CIRCLECI" ); set {
3039 ciMetadata [tags .CI ] = true
@@ -33,6 +42,7 @@ func getCIMetadata() map[string]interface{} {
3342 ciMetadata [tags .CIBuildUrl ] = os .Getenv ("CIRCLE_BUILD_URL" )
3443 ciMetadata [tags .Repository ] = os .Getenv ("CIRCLE_REPOSITORY_URL" )
3544 ciMetadata [tags .Commit ] = os .Getenv ("CIRCLE_SHA1" )
45+ ciMetadata [tags .Branch ] = os .Getenv ("CIRCLE_BRANCH" )
3646 ciMetadata [tags .SourceRoot ] = getSourceRootFromEnv ("CIRCLE_WORKING_DIRECTORY" )
3747 } else if _ , set := os .LookupEnv ("JENKINS_URL" ); set {
3848 ciMetadata [tags .CI ] = true
@@ -42,6 +52,12 @@ func getCIMetadata() map[string]interface{} {
4252 ciMetadata [tags .CIBuildUrl ] = os .Getenv ("BUILD_URL" )
4353 ciMetadata [tags .Repository ] = os .Getenv ("GIT_URL" )
4454 ciMetadata [tags .Commit ] = os .Getenv ("GIT_COMMIT" )
55+ branch := os .Getenv ("GIT_BRANCH" )
56+ if strings .Index ("branch" , "origin/" ) == 0 {
57+ // Removes the origin/ prefix
58+ branch = branch [7 :]
59+ }
60+ ciMetadata [tags .Branch ] = branch
4561 ciMetadata [tags .SourceRoot ] = getSourceRootFromEnv ("WORKSPACE" )
4662 } else if _ , set := os .LookupEnv ("GITLAB_CI" ); set {
4763 ciMetadata [tags .CI ] = true
@@ -50,6 +66,11 @@ func getCIMetadata() map[string]interface{} {
5066 ciMetadata [tags .CIBuildUrl ] = os .Getenv ("CI_JOB_URL" )
5167 ciMetadata [tags .Repository ] = os .Getenv ("CI_REPOSITORY_URL" )
5268 ciMetadata [tags .Commit ] = os .Getenv ("CI_COMMIT_SHA" )
69+ if branch , ok := os .LookupEnv ("CI_COMMIT_BRANCH" ); ok && branch != "" {
70+ ciMetadata [tags .Branch ] = branch
71+ } else {
72+ ciMetadata [tags .Branch ] = os .Getenv ("CI_COMMIT_REF_NAME" )
73+ }
5374 ciMetadata [tags .SourceRoot ] = getSourceRootFromEnv ("CI_PROJECT_DIR" )
5475 } else if _ , set := os .LookupEnv ("APPVEYOR" ); set {
5576 buildId := os .Getenv ("APPVEYOR_BUILD_ID" )
@@ -64,6 +85,11 @@ func getCIMetadata() map[string]interface{} {
6485 )
6586 ciMetadata [tags .Repository ] = os .Getenv ("APPVEYOR_REPO_NAME" )
6687 ciMetadata [tags .Commit ] = os .Getenv ("APPVEYOR_REPO_COMMIT" )
88+ if branch , ok := os .LookupEnv ("APPVEYOR_PULL_REQUEST_HEAD_REPO_BRANCH" ); ok && branch != "" {
89+ ciMetadata [tags .Branch ] = branch
90+ } else {
91+ ciMetadata [tags .Branch ] = os .Getenv ("APPVEYOR_REPO_BRANCH" )
92+ }
6793 ciMetadata [tags .SourceRoot ] = getSourceRootFromEnv ("APPVEYOR_BUILD_FOLDER" )
6894 } else if _ , set := os .LookupEnv ("TF_BUILD" ); set {
6995 buildId := os .Getenv ("Build.BuildId" )
@@ -79,13 +105,19 @@ func getCIMetadata() map[string]interface{} {
79105 )
80106 ciMetadata [tags .Repository ] = os .Getenv ("Build.Repository.Uri" )
81107 ciMetadata [tags .Commit ] = os .Getenv ("Build.SourceVersion" )
108+ if branch , ok := os .LookupEnv ("Build.SourceBranchName" ); ok && branch != "" {
109+ ciMetadata [tags .Branch ] = branch
110+ } else {
111+ ciMetadata [tags .Branch ] = os .Getenv ("Build.SourceBranch" )
112+ }
82113 ciMetadata [tags .SourceRoot ] = getSourceRootFromEnv ("Build.SourcesDirectory" )
83114 } else if sha , set := os .LookupEnv ("BITBUCKET_COMMIT" ); set {
84115 ciMetadata [tags .CI ] = true
85116 ciMetadata [tags .CIProvider ] = "Bitbucket Pipelines"
86117 ciMetadata [tags .CIBuildNumber ] = os .Getenv ("BITBUCKET_BUILD_NUMBER" )
87118 ciMetadata [tags .Repository ] = os .Getenv ("BITBUCKET_GIT_SSH_ORIGIN" )
88119 ciMetadata [tags .Commit ] = sha
120+ ciMetadata [tags .Branch ] = os .Getenv ("BITBUCKET_BRANCH" )
89121 ciMetadata [tags .SourceRoot ] = getSourceRootFromEnv ("BITBUCKET_CLONE_DIR" )
90122 } else if sha , set := os .LookupEnv ("GITHUB_SHA" ); set {
91123 repo := os .Getenv ("GITHUB_REPOSITORY" )
@@ -101,6 +133,7 @@ func getCIMetadata() map[string]interface{} {
101133 repo ,
102134 )
103135 ciMetadata [tags .Commit ] = sha
136+ ciMetadata [tags .Branch ] = os .Getenv ("GITHUB_REF" )
104137 ciMetadata [tags .SourceRoot ] = getSourceRootFromEnv ("GITHUB_WORKSPACE" )
105138 ciMetadata [tags .CIBuildId ] = os .Getenv ("GITHUB_RUN_ID" )
106139 ciMetadata [tags .CIBuildNumber ] = os .Getenv ("GITHUB_RUN_NUMBER" )
@@ -126,8 +159,20 @@ func getCIMetadata() map[string]interface{} {
126159 ciMetadata [tags .CIBuildUrl ] = os .Getenv ("BUILDKITE_BUILD_URL" )
127160 ciMetadata [tags .Repository ] = os .Getenv ("BUILDKITE_REPO" )
128161 ciMetadata [tags .Commit ] = os .Getenv ("BUILDKITE_COMMIT" )
162+ ciMetadata [tags .Branch ] = os .Getenv ("BUILDKITE_BRANCH" )
129163 ciMetadata [tags .SourceRoot ] = getSourceRootFromEnv ("BUILDKITE_BUILD_CHECKOUT_PATH" )
130164 }
131165
166+ if branchValue , ok := ciMetadata [tags .Branch ]; ok {
167+ match := branchRefRegex .FindStringSubmatch (branchValue .(string ))
168+ if len (match ) == 3 {
169+ if len (match [1 ]) > 0 {
170+ ciMetadata [tags .Branch ] = match [1 ]
171+ } else {
172+ ciMetadata [tags .Branch ] = match [2 ]
173+ }
174+ }
175+ }
176+
132177 return ciMetadata
133178}
0 commit comments