Skip to content
This repository was archived by the owner on Aug 17, 2020. It is now read-only.

Commit 94f35e3

Browse files
authored
Ci branch and improved container detector (#201)
* - Improves container detector - Adds the branch name from detected CIs - Removes the HEAD branch name when is a detached checkout * fix length * update regex in ref pull requests
1 parent a539917 commit 94f35e3

File tree

3 files changed

+57
-22
lines changed

3 files changed

+57
-22
lines changed

agent/ci.go

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,14 @@ package agent
33
import (
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+
1014
func 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
}

agent/container.go

Lines changed: 12 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,31 @@
11
package agent
22

33
import (
4-
"bufio"
5-
"os"
4+
"io/ioutil"
5+
"regexp"
66
"runtime"
7-
"strings"
87
"sync"
98
)
109

1110
var (
1211
runningInContainerOnce sync.Once
1312
runningInContainer bool
13+
containerRegex = regexp.MustCompile(`(?m)\/docker\/|\/ecs\/|\/docker-|\/kubepods\/|\/actions_job\/|\/lxc\/`)
1414
)
1515

1616
// gets if the current process is running inside a container
1717
func isRunningInContainer() bool {
1818
runningInContainerOnce.Do(func() {
19-
if runtime.GOOS == "linux" {
20-
file, err := os.Open("/proc/1/cgroup")
21-
if err != nil {
22-
runningInContainer = false
23-
return
24-
}
25-
defer file.Close()
26-
for {
27-
line, readErr := bufio.NewReader(file).ReadString('\n')
28-
if readErr != nil {
29-
break
30-
}
31-
if strings.Contains(line, "/docker/") || strings.Contains(line, "/lxc/") {
32-
runningInContainer = true
33-
return
34-
}
35-
}
19+
if runtime.GOOS != "linux" {
20+
runningInContainer = false
21+
return
3622
}
37-
runningInContainer = false
23+
content, err := ioutil.ReadFile("/proc/1/cgroup")
24+
if err != nil {
25+
runningInContainer = false
26+
return
27+
}
28+
runningInContainer = containerRegex.Match(content)
3829
})
3930
return runningInContainer
4031
}

agent/git.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,6 @@ func getGitData() *GitData {
7979
} else {
8080
// Detached head (Plain hash)
8181
commit = strings.TrimSpace(head)
82-
branch = "HEAD"
8382
}
8483
}
8584
}

0 commit comments

Comments
 (0)