datadog-ci 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/CHANGELOG.md +30 -0
- data/LICENSE +6 -0
- data/LICENSE-3rdparty.csv +2 -0
- data/LICENSE.Apache +200 -0
- data/LICENSE.BSD3 +24 -0
- data/NOTICE +4 -0
- data/README.md +125 -0
- data/lib/datadog/ci/configuration/components.rb +32 -0
- data/lib/datadog/ci/configuration/settings.rb +51 -0
- data/lib/datadog/ci/contrib/cucumber/configuration/settings.rb +36 -0
- data/lib/datadog/ci/contrib/cucumber/ext.rb +22 -0
- data/lib/datadog/ci/contrib/cucumber/formatter.rb +94 -0
- data/lib/datadog/ci/contrib/cucumber/instrumentation.rb +28 -0
- data/lib/datadog/ci/contrib/cucumber/integration.rb +47 -0
- data/lib/datadog/ci/contrib/cucumber/patcher.rb +27 -0
- data/lib/datadog/ci/contrib/minitest/configuration/settings.rb +36 -0
- data/lib/datadog/ci/contrib/minitest/ext.rb +21 -0
- data/lib/datadog/ci/contrib/minitest/hooks.rb +66 -0
- data/lib/datadog/ci/contrib/minitest/integration.rb +46 -0
- data/lib/datadog/ci/contrib/minitest/patcher.rb +26 -0
- data/lib/datadog/ci/contrib/rspec/configuration/settings.rb +36 -0
- data/lib/datadog/ci/contrib/rspec/example.rb +70 -0
- data/lib/datadog/ci/contrib/rspec/ext.rb +21 -0
- data/lib/datadog/ci/contrib/rspec/integration.rb +50 -0
- data/lib/datadog/ci/contrib/rspec/patcher.rb +27 -0
- data/lib/datadog/ci/ext/app_types.rb +11 -0
- data/lib/datadog/ci/ext/environment/extractor.rb +101 -0
- data/lib/datadog/ci/ext/environment/providers/appveyor.rb +98 -0
- data/lib/datadog/ci/ext/environment/providers/azure.rb +109 -0
- data/lib/datadog/ci/ext/environment/providers/base.rb +115 -0
- data/lib/datadog/ci/ext/environment/providers/bitbucket.rb +69 -0
- data/lib/datadog/ci/ext/environment/providers/bitrise.rb +77 -0
- data/lib/datadog/ci/ext/environment/providers/buddy.rb +69 -0
- data/lib/datadog/ci/ext/environment/providers/buildkite.rb +95 -0
- data/lib/datadog/ci/ext/environment/providers/circleci.rb +82 -0
- data/lib/datadog/ci/ext/environment/providers/codefresh.rb +49 -0
- data/lib/datadog/ci/ext/environment/providers/github_actions.rb +76 -0
- data/lib/datadog/ci/ext/environment/providers/gitlab.rb +119 -0
- data/lib/datadog/ci/ext/environment/providers/jenkins.rb +74 -0
- data/lib/datadog/ci/ext/environment/providers/local_git.rb +170 -0
- data/lib/datadog/ci/ext/environment/providers/teamcity.rb +29 -0
- data/lib/datadog/ci/ext/environment/providers/travis.rb +65 -0
- data/lib/datadog/ci/ext/environment/providers/user_defined_tags.rb +62 -0
- data/lib/datadog/ci/ext/environment/providers.rb +52 -0
- data/lib/datadog/ci/ext/environment.rb +82 -0
- data/lib/datadog/ci/ext/git.rb +37 -0
- data/lib/datadog/ci/ext/settings.rb +12 -0
- data/lib/datadog/ci/ext/test.rb +37 -0
- data/lib/datadog/ci/extensions.rb +19 -0
- data/lib/datadog/ci/flush.rb +38 -0
- data/lib/datadog/ci/test.rb +82 -0
- data/lib/datadog/ci/utils/git.rb +22 -0
- data/lib/datadog/ci/version.rb +28 -0
- data/lib/datadog/ci.rb +24 -0
- data/sig/datadog/ci/configuration/components.rbs +11 -0
- data/sig/datadog/ci/configuration/settings.rbs +14 -0
- data/sig/datadog/ci/contrib/cucumber/configuration/settings.rbs +12 -0
- data/sig/datadog/ci/contrib/cucumber/ext.rbs +25 -0
- data/sig/datadog/ci/contrib/cucumber/formatter.rbs +35 -0
- data/sig/datadog/ci/contrib/cucumber/instrumentation.rbs +16 -0
- data/sig/datadog/ci/contrib/cucumber/integration.rbs +25 -0
- data/sig/datadog/ci/contrib/cucumber/patcher.rbs +15 -0
- data/sig/datadog/ci/contrib/minitest/configuration/settings.rbs +12 -0
- data/sig/datadog/ci/contrib/minitest/ext.rbs +23 -0
- data/sig/datadog/ci/contrib/minitest/hooks.rbs +19 -0
- data/sig/datadog/ci/contrib/minitest/integration.rbs +25 -0
- data/sig/datadog/ci/contrib/minitest/patcher.rbs +15 -0
- data/sig/datadog/ci/contrib/rspec/configuration/settings.rbs +12 -0
- data/sig/datadog/ci/contrib/rspec/example.rbs +20 -0
- data/sig/datadog/ci/contrib/rspec/ext.rbs +23 -0
- data/sig/datadog/ci/contrib/rspec/integration.rbs +25 -0
- data/sig/datadog/ci/contrib/rspec/patcher.rbs +15 -0
- data/sig/datadog/ci/ext/app_types.rbs +9 -0
- data/sig/datadog/ci/ext/environment/extractor.rbs +27 -0
- data/sig/datadog/ci/ext/environment/providers/appveyor.rbs +48 -0
- data/sig/datadog/ci/ext/environment/providers/azure.rbs +56 -0
- data/sig/datadog/ci/ext/environment/providers/base.rbs +69 -0
- data/sig/datadog/ci/ext/environment/providers/bitbucket.rbs +37 -0
- data/sig/datadog/ci/ext/environment/providers/bitrise.rbs +41 -0
- data/sig/datadog/ci/ext/environment/providers/buddy.rbs +37 -0
- data/sig/datadog/ci/ext/environment/providers/buildkite.rbs +45 -0
- data/sig/datadog/ci/ext/environment/providers/circleci.rbs +41 -0
- data/sig/datadog/ci/ext/environment/providers/codefresh.rbs +25 -0
- data/sig/datadog/ci/ext/environment/providers/github_actions.rbs +37 -0
- data/sig/datadog/ci/ext/environment/providers/gitlab.rbs +57 -0
- data/sig/datadog/ci/ext/environment/providers/jenkins.rbs +35 -0
- data/sig/datadog/ci/ext/environment/providers/local_git.rbs +66 -0
- data/sig/datadog/ci/ext/environment/providers/teamcity.rbs +17 -0
- data/sig/datadog/ci/ext/environment/providers/travis.rbs +35 -0
- data/sig/datadog/ci/ext/environment/providers/user_defined_tags.rbs +33 -0
- data/sig/datadog/ci/ext/environment/providers.rbs +13 -0
- data/sig/datadog/ci/ext/environment.rbs +44 -0
- data/sig/datadog/ci/ext/git.rbs +53 -0
- data/sig/datadog/ci/ext/settings.rbs +9 -0
- data/sig/datadog/ci/ext/test.rbs +43 -0
- data/sig/datadog/ci/extensions.rbs +7 -0
- data/sig/datadog/ci/flush.rbs +15 -0
- data/sig/datadog/ci/test.rbs +18 -0
- data/sig/datadog/ci/utils/git.rbs +11 -0
- data/sig/datadog/ci/version.rbs +16 -0
- data/sig/datadog/ci.rbs +7 -0
- metadata +154 -0
@@ -0,0 +1,76 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "json"
|
4
|
+
|
5
|
+
require_relative "base"
|
6
|
+
|
7
|
+
module Datadog
|
8
|
+
module CI
|
9
|
+
module Ext
|
10
|
+
module Environment
|
11
|
+
module Providers
|
12
|
+
# Github Actions: https://github.com/features/actions
|
13
|
+
# Environment variables docs: https://docs.github.com/en/actions/learn-github-actions/variables#default-environment-variables
|
14
|
+
class GithubActions < Base
|
15
|
+
def provider_name
|
16
|
+
"github"
|
17
|
+
end
|
18
|
+
|
19
|
+
def job_name
|
20
|
+
env["GITHUB_JOB"]
|
21
|
+
end
|
22
|
+
|
23
|
+
def job_url
|
24
|
+
"#{env["GITHUB_SERVER_URL"]}/#{env["GITHUB_REPOSITORY"]}/commit/#{env["GITHUB_SHA"]}/checks"
|
25
|
+
end
|
26
|
+
|
27
|
+
def pipeline_id
|
28
|
+
env["GITHUB_RUN_ID"]
|
29
|
+
end
|
30
|
+
|
31
|
+
def pipeline_name
|
32
|
+
env["GITHUB_WORKFLOW"]
|
33
|
+
end
|
34
|
+
|
35
|
+
def pipeline_number
|
36
|
+
env["GITHUB_RUN_NUMBER"]
|
37
|
+
end
|
38
|
+
|
39
|
+
def pipeline_url
|
40
|
+
res = "#{env["GITHUB_SERVER_URL"]}/#{env["GITHUB_REPOSITORY"]}/actions/runs/#{env["GITHUB_RUN_ID"]}"
|
41
|
+
res = "#{res}/attempts/#{env["GITHUB_RUN_ATTEMPT"]}" if env["GITHUB_RUN_ATTEMPT"]
|
42
|
+
res
|
43
|
+
end
|
44
|
+
|
45
|
+
def workspace_path
|
46
|
+
env["GITHUB_WORKSPACE"]
|
47
|
+
end
|
48
|
+
|
49
|
+
def git_repository_url
|
50
|
+
"#{env["GITHUB_SERVER_URL"]}/#{env["GITHUB_REPOSITORY"]}.git"
|
51
|
+
end
|
52
|
+
|
53
|
+
def git_commit_sha
|
54
|
+
env["GITHUB_SHA"]
|
55
|
+
end
|
56
|
+
|
57
|
+
def git_branch_or_tag
|
58
|
+
ref = env["GITHUB_HEAD_REF"]
|
59
|
+
ref = env["GITHUB_REF"] if ref.nil? || ref.empty?
|
60
|
+
ref
|
61
|
+
end
|
62
|
+
|
63
|
+
def ci_env_vars
|
64
|
+
{
|
65
|
+
"GITHUB_SERVER_URL" => env["GITHUB_SERVER_URL"],
|
66
|
+
"GITHUB_REPOSITORY" => env["GITHUB_REPOSITORY"],
|
67
|
+
"GITHUB_RUN_ID" => env["GITHUB_RUN_ID"],
|
68
|
+
"GITHUB_RUN_ATTEMPT" => env["GITHUB_RUN_ATTEMPT"]
|
69
|
+
}.reject { |_, v| v.nil? }.to_json
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
@@ -0,0 +1,119 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "base"
|
4
|
+
|
5
|
+
module Datadog
|
6
|
+
module CI
|
7
|
+
module Ext
|
8
|
+
module Environment
|
9
|
+
module Providers
|
10
|
+
# Gitlab CI: https://docs.gitlab.com/ee/ci/
|
11
|
+
# Environment variables docs: https://docs.gitlab.com/ee/ci/variables/predefined_variables.html
|
12
|
+
class Gitlab < Base
|
13
|
+
def provider_name
|
14
|
+
"gitlab"
|
15
|
+
end
|
16
|
+
|
17
|
+
def job_name
|
18
|
+
env["CI_JOB_NAME"]
|
19
|
+
end
|
20
|
+
|
21
|
+
def job_url
|
22
|
+
env["CI_JOB_URL"]
|
23
|
+
end
|
24
|
+
|
25
|
+
def pipeline_id
|
26
|
+
env["CI_PIPELINE_ID"]
|
27
|
+
end
|
28
|
+
|
29
|
+
def pipeline_name
|
30
|
+
env["CI_PROJECT_PATH"]
|
31
|
+
end
|
32
|
+
|
33
|
+
def pipeline_number
|
34
|
+
env["CI_PIPELINE_IID"]
|
35
|
+
end
|
36
|
+
|
37
|
+
def pipeline_url
|
38
|
+
env["CI_PIPELINE_URL"]
|
39
|
+
end
|
40
|
+
|
41
|
+
def stage_name
|
42
|
+
env["CI_JOB_STAGE"]
|
43
|
+
end
|
44
|
+
|
45
|
+
def workspace_path
|
46
|
+
env["CI_PROJECT_DIR"]
|
47
|
+
end
|
48
|
+
|
49
|
+
def node_name
|
50
|
+
env["CI_RUNNER_ID"]
|
51
|
+
end
|
52
|
+
|
53
|
+
def node_labels
|
54
|
+
env["CI_RUNNER_TAGS"]
|
55
|
+
end
|
56
|
+
|
57
|
+
def git_repository_url
|
58
|
+
env["CI_REPOSITORY_URL"]
|
59
|
+
end
|
60
|
+
|
61
|
+
def git_commit_sha
|
62
|
+
env["CI_COMMIT_SHA"]
|
63
|
+
end
|
64
|
+
|
65
|
+
def git_branch
|
66
|
+
env["CI_COMMIT_REF_NAME"]
|
67
|
+
end
|
68
|
+
|
69
|
+
def git_tag
|
70
|
+
env["CI_COMMIT_TAG"]
|
71
|
+
end
|
72
|
+
|
73
|
+
def git_commit_author_name
|
74
|
+
name, _ = extract_name_email
|
75
|
+
name
|
76
|
+
end
|
77
|
+
|
78
|
+
def git_commit_author_email
|
79
|
+
_, email = extract_name_email
|
80
|
+
email
|
81
|
+
end
|
82
|
+
|
83
|
+
def git_commit_author_date
|
84
|
+
env["CI_COMMIT_TIMESTAMP"]
|
85
|
+
end
|
86
|
+
|
87
|
+
def git_commit_message
|
88
|
+
env["CI_COMMIT_MESSAGE"]
|
89
|
+
end
|
90
|
+
|
91
|
+
def ci_env_vars
|
92
|
+
{
|
93
|
+
"CI_PROJECT_URL" => env["CI_PROJECT_URL"],
|
94
|
+
"CI_PIPELINE_ID" => env["CI_PIPELINE_ID"],
|
95
|
+
"CI_JOB_ID" => env["CI_JOB_ID"]
|
96
|
+
}.to_json
|
97
|
+
end
|
98
|
+
|
99
|
+
private
|
100
|
+
|
101
|
+
def extract_name_email
|
102
|
+
return @name_email_tuple if defined?(@name_email_tuple)
|
103
|
+
|
104
|
+
name_and_email_string = env["CI_COMMIT_AUTHOR"]
|
105
|
+
if name_and_email_string.include?("<") && (match = /^([^<]*)<([^>]*)>$/.match(name_and_email_string))
|
106
|
+
name = match[1]
|
107
|
+
name = name.strip if name
|
108
|
+
email = match[2]
|
109
|
+
return @name_email_tuple = [name, email] if name && email
|
110
|
+
end
|
111
|
+
|
112
|
+
@name_email_tuple = [nil, name_and_email_string]
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "json"
|
4
|
+
|
5
|
+
require_relative "base"
|
6
|
+
require_relative "../../../utils/git"
|
7
|
+
|
8
|
+
module Datadog
|
9
|
+
module CI
|
10
|
+
module Ext
|
11
|
+
module Environment
|
12
|
+
module Providers
|
13
|
+
# Jenkins: https://www.jenkins.io/
|
14
|
+
# Environment variables docs: https://www.jenkins.io/doc/book/pipeline/jenkinsfile/#using-environment-variables
|
15
|
+
class Jenkins < Base
|
16
|
+
def provider_name
|
17
|
+
"jenkins"
|
18
|
+
end
|
19
|
+
|
20
|
+
def pipeline_id
|
21
|
+
env["BUILD_TAG"]
|
22
|
+
end
|
23
|
+
|
24
|
+
def pipeline_name
|
25
|
+
if (name = env["JOB_NAME"])
|
26
|
+
name = name.gsub("/#{Datadog::CI::Utils::Git.normalize_ref(git_branch)}", "") if git_branch
|
27
|
+
name = name.split("/").reject { |v| v.nil? || v.include?("=") }.join("/")
|
28
|
+
end
|
29
|
+
name
|
30
|
+
end
|
31
|
+
|
32
|
+
def pipeline_number
|
33
|
+
env["BUILD_NUMBER"]
|
34
|
+
end
|
35
|
+
|
36
|
+
def pipeline_url
|
37
|
+
env["BUILD_URL"]
|
38
|
+
end
|
39
|
+
|
40
|
+
def workspace_path
|
41
|
+
env["WORKSPACE"]
|
42
|
+
end
|
43
|
+
|
44
|
+
def node_name
|
45
|
+
env["NODE_NAME"]
|
46
|
+
end
|
47
|
+
|
48
|
+
def node_labels
|
49
|
+
env["NODE_LABELS"] && env["NODE_LABELS"].split.to_json
|
50
|
+
end
|
51
|
+
|
52
|
+
def git_repository_url
|
53
|
+
env["GIT_URL"] || env["GIT_URL_1"]
|
54
|
+
end
|
55
|
+
|
56
|
+
def git_commit_sha
|
57
|
+
env["GIT_COMMIT"]
|
58
|
+
end
|
59
|
+
|
60
|
+
def git_branch_or_tag
|
61
|
+
env["GIT_BRANCH"]
|
62
|
+
end
|
63
|
+
|
64
|
+
def ci_env_vars
|
65
|
+
{
|
66
|
+
"DD_CUSTOM_TRACE_ID" => env["DD_CUSTOM_TRACE_ID"]
|
67
|
+
}.to_json
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
@@ -0,0 +1,170 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "open3"
|
4
|
+
|
5
|
+
require_relative "base"
|
6
|
+
require_relative "../../git"
|
7
|
+
|
8
|
+
module Datadog
|
9
|
+
module CI
|
10
|
+
module Ext
|
11
|
+
module Environment
|
12
|
+
module Providers
|
13
|
+
# As a fallback we try to fetch git information from the local git repository
|
14
|
+
class LocalGit < Base
|
15
|
+
def git_repository_url
|
16
|
+
exec_git_command("git ls-remote --get-url")
|
17
|
+
rescue => e
|
18
|
+
Datadog.logger.debug(
|
19
|
+
"Unable to read git repository url: #{e.class.name} #{e.message} at #{Array(e.backtrace).first}"
|
20
|
+
)
|
21
|
+
nil
|
22
|
+
end
|
23
|
+
|
24
|
+
def git_commit_sha
|
25
|
+
exec_git_command("git rev-parse HEAD")
|
26
|
+
rescue => e
|
27
|
+
Datadog.logger.debug(
|
28
|
+
"Unable to read git commit SHA: #{e.class.name} #{e.message} at #{Array(e.backtrace).first}"
|
29
|
+
)
|
30
|
+
nil
|
31
|
+
end
|
32
|
+
|
33
|
+
def git_branch
|
34
|
+
exec_git_command("git rev-parse --abbrev-ref HEAD")
|
35
|
+
rescue => e
|
36
|
+
Datadog.logger.debug(
|
37
|
+
"Unable to read git branch: #{e.class.name} #{e.message} at #{Array(e.backtrace).first}"
|
38
|
+
)
|
39
|
+
nil
|
40
|
+
end
|
41
|
+
|
42
|
+
def git_tag
|
43
|
+
exec_git_command("git tag --points-at HEAD")
|
44
|
+
rescue => e
|
45
|
+
Datadog.logger.debug(
|
46
|
+
"Unable to read git tag: #{e.class.name} #{e.message} at #{Array(e.backtrace).first}"
|
47
|
+
)
|
48
|
+
nil
|
49
|
+
end
|
50
|
+
|
51
|
+
def git_commit_message
|
52
|
+
exec_git_command("git show -s --format=%s")
|
53
|
+
rescue => e
|
54
|
+
Datadog.logger.debug(
|
55
|
+
"Unable to read git commit message: #{e.class.name} #{e.message} at #{Array(e.backtrace).first}"
|
56
|
+
)
|
57
|
+
nil
|
58
|
+
end
|
59
|
+
|
60
|
+
def git_commit_author_name
|
61
|
+
author.name
|
62
|
+
end
|
63
|
+
|
64
|
+
def git_commit_author_email
|
65
|
+
author.email
|
66
|
+
end
|
67
|
+
|
68
|
+
def git_commit_author_date
|
69
|
+
author.date
|
70
|
+
end
|
71
|
+
|
72
|
+
def git_commit_committer_name
|
73
|
+
committer.name
|
74
|
+
end
|
75
|
+
|
76
|
+
def git_commit_committer_email
|
77
|
+
committer.email
|
78
|
+
end
|
79
|
+
|
80
|
+
def git_commit_committer_date
|
81
|
+
committer.date
|
82
|
+
end
|
83
|
+
|
84
|
+
def workspace_path
|
85
|
+
exec_git_command("git rev-parse --show-toplevel")
|
86
|
+
rescue => e
|
87
|
+
Datadog.logger.debug(
|
88
|
+
"Unable to read git base directory: #{e.class.name} #{e.message} at #{Array(e.backtrace).first}"
|
89
|
+
)
|
90
|
+
nil
|
91
|
+
end
|
92
|
+
|
93
|
+
private
|
94
|
+
|
95
|
+
def exec_git_command(cmd)
|
96
|
+
out, status = Open3.capture2e(cmd)
|
97
|
+
|
98
|
+
raise "Failed to run git command #{cmd}: #{out}" unless status.success?
|
99
|
+
|
100
|
+
out.strip! # There's always a "\n" at the end of the command output
|
101
|
+
|
102
|
+
return nil if out.empty?
|
103
|
+
|
104
|
+
out
|
105
|
+
end
|
106
|
+
|
107
|
+
def author
|
108
|
+
return @author if defined?(@author)
|
109
|
+
|
110
|
+
set_git_commit_users
|
111
|
+
@author
|
112
|
+
end
|
113
|
+
|
114
|
+
def committer
|
115
|
+
return @committer if defined?(@committer)
|
116
|
+
|
117
|
+
set_git_commit_users
|
118
|
+
@committer
|
119
|
+
end
|
120
|
+
|
121
|
+
def set_git_commit_users
|
122
|
+
# Get committer and author information in one command.
|
123
|
+
output = exec_git_command("git show -s --format='%an\t%ae\t%at\t%cn\t%ce\t%ct'")
|
124
|
+
unless output
|
125
|
+
Datadog.logger.debug(
|
126
|
+
"Unable to read git commit users: git command output is nil"
|
127
|
+
)
|
128
|
+
@author = @committer = NilUser.new
|
129
|
+
return
|
130
|
+
end
|
131
|
+
|
132
|
+
author_name, author_email, author_timestamp,
|
133
|
+
committer_name, committer_email, committer_timestamp = output.split("\t").each(&:strip!)
|
134
|
+
|
135
|
+
@author = GitUser.new(author_name, author_email, author_timestamp)
|
136
|
+
@committer = GitUser.new(committer_name, committer_email, committer_timestamp)
|
137
|
+
rescue => e
|
138
|
+
Datadog.logger.debug(
|
139
|
+
"Unable to read git commit users: #{e.class.name} #{e.message} at #{Array(e.backtrace).first}"
|
140
|
+
)
|
141
|
+
@author = @committer = NilUser.new
|
142
|
+
end
|
143
|
+
|
144
|
+
class GitUser
|
145
|
+
attr_reader :name, :email, :timestamp
|
146
|
+
|
147
|
+
def initialize(name, email, timestamp)
|
148
|
+
@name = name
|
149
|
+
@email = email
|
150
|
+
@timestamp = timestamp
|
151
|
+
end
|
152
|
+
|
153
|
+
def date
|
154
|
+
return nil if timestamp.nil?
|
155
|
+
|
156
|
+
Time.at(timestamp.to_i).utc.to_datetime.iso8601
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
160
|
+
class NilUser < GitUser
|
161
|
+
def initialize
|
162
|
+
super(nil, nil, nil)
|
163
|
+
end
|
164
|
+
end
|
165
|
+
end
|
166
|
+
end
|
167
|
+
end
|
168
|
+
end
|
169
|
+
end
|
170
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "base"
|
4
|
+
|
5
|
+
module Datadog
|
6
|
+
module CI
|
7
|
+
module Ext
|
8
|
+
module Environment
|
9
|
+
module Providers
|
10
|
+
# Teamcity: https://www.jetbrains.com/teamcity/
|
11
|
+
# Environment variables docs: https://www.jetbrains.com/help/teamcity/predefined-build-parameters.html
|
12
|
+
class Teamcity < Base
|
13
|
+
def provider_name
|
14
|
+
"teamcity"
|
15
|
+
end
|
16
|
+
|
17
|
+
def job_name
|
18
|
+
env["TEAMCITY_BUILDCONF_NAME"]
|
19
|
+
end
|
20
|
+
|
21
|
+
def job_url
|
22
|
+
env["BUILD_URL"]
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "base"
|
4
|
+
|
5
|
+
module Datadog
|
6
|
+
module CI
|
7
|
+
module Ext
|
8
|
+
module Environment
|
9
|
+
module Providers
|
10
|
+
# Travis CI: https://www.travis-ci.com/
|
11
|
+
# Environment variables docs: https://docs.travis-ci.com/user/environment-variables#default-environment-variables
|
12
|
+
class Travis < Base
|
13
|
+
def provider_name
|
14
|
+
"travisci"
|
15
|
+
end
|
16
|
+
|
17
|
+
def job_url
|
18
|
+
env["TRAVIS_JOB_WEB_URL"]
|
19
|
+
end
|
20
|
+
|
21
|
+
def pipeline_id
|
22
|
+
env["TRAVIS_BUILD_ID"]
|
23
|
+
end
|
24
|
+
|
25
|
+
def pipeline_name
|
26
|
+
env["TRAVIS_REPO_SLUG"]
|
27
|
+
end
|
28
|
+
|
29
|
+
def pipeline_number
|
30
|
+
env["TRAVIS_BUILD_NUMBER"]
|
31
|
+
end
|
32
|
+
|
33
|
+
def pipeline_url
|
34
|
+
env["TRAVIS_BUILD_WEB_URL"]
|
35
|
+
end
|
36
|
+
|
37
|
+
def workspace_path
|
38
|
+
env["TRAVIS_BUILD_DIR"]
|
39
|
+
end
|
40
|
+
|
41
|
+
def git_repository_url
|
42
|
+
"https://github.com/#{env["TRAVIS_REPO_SLUG"]}.git"
|
43
|
+
end
|
44
|
+
|
45
|
+
def git_commit_sha
|
46
|
+
env["TRAVIS_COMMIT"]
|
47
|
+
end
|
48
|
+
|
49
|
+
def git_branch
|
50
|
+
env["TRAVIS_PULL_REQUEST_BRANCH"] || env["TRAVIS_BRANCH"]
|
51
|
+
end
|
52
|
+
|
53
|
+
def git_tag
|
54
|
+
env["TRAVIS_TAG"]
|
55
|
+
end
|
56
|
+
|
57
|
+
def git_commit_message
|
58
|
+
env["TRAVIS_COMMIT_MESSAGE"]
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "base"
|
4
|
+
require_relative "../../git"
|
5
|
+
|
6
|
+
module Datadog
|
7
|
+
module CI
|
8
|
+
module Ext
|
9
|
+
module Environment
|
10
|
+
module Providers
|
11
|
+
# Parses user defined git data from the environment variables
|
12
|
+
# User documentation: https://docs.datadoghq.com/continuous_integration/troubleshooting/#data-appears-in-test-runs-but-not-tests
|
13
|
+
class UserDefinedTags < Base
|
14
|
+
def git_repository_url
|
15
|
+
env[Git::ENV_REPOSITORY_URL]
|
16
|
+
end
|
17
|
+
|
18
|
+
def git_commit_sha
|
19
|
+
env[Git::ENV_COMMIT_SHA]
|
20
|
+
end
|
21
|
+
|
22
|
+
def git_branch
|
23
|
+
env[Git::ENV_BRANCH]
|
24
|
+
end
|
25
|
+
|
26
|
+
def git_tag
|
27
|
+
env[Git::ENV_TAG]
|
28
|
+
end
|
29
|
+
|
30
|
+
def git_commit_message
|
31
|
+
env[Git::ENV_COMMIT_MESSAGE]
|
32
|
+
end
|
33
|
+
|
34
|
+
def git_commit_author_name
|
35
|
+
env[Git::ENV_COMMIT_AUTHOR_NAME]
|
36
|
+
end
|
37
|
+
|
38
|
+
def git_commit_author_email
|
39
|
+
env[Git::ENV_COMMIT_AUTHOR_EMAIL]
|
40
|
+
end
|
41
|
+
|
42
|
+
def git_commit_author_date
|
43
|
+
env[Git::ENV_COMMIT_AUTHOR_DATE]
|
44
|
+
end
|
45
|
+
|
46
|
+
def git_commit_committer_name
|
47
|
+
env[Git::ENV_COMMIT_COMMITTER_NAME]
|
48
|
+
end
|
49
|
+
|
50
|
+
def git_commit_committer_email
|
51
|
+
env[Git::ENV_COMMIT_COMMITTER_EMAIL]
|
52
|
+
end
|
53
|
+
|
54
|
+
def git_commit_committer_date
|
55
|
+
env[Git::ENV_COMMIT_COMMITTER_DATE]
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "providers/base"
|
4
|
+
require_relative "providers/appveyor"
|
5
|
+
require_relative "providers/azure"
|
6
|
+
require_relative "providers/bitbucket"
|
7
|
+
require_relative "providers/bitrise"
|
8
|
+
require_relative "providers/buddy"
|
9
|
+
require_relative "providers/buildkite"
|
10
|
+
require_relative "providers/circleci"
|
11
|
+
require_relative "providers/codefresh"
|
12
|
+
require_relative "providers/github_actions"
|
13
|
+
require_relative "providers/gitlab"
|
14
|
+
require_relative "providers/jenkins"
|
15
|
+
require_relative "providers/teamcity"
|
16
|
+
require_relative "providers/travis"
|
17
|
+
|
18
|
+
require_relative "providers/local_git"
|
19
|
+
require_relative "providers/user_defined_tags"
|
20
|
+
|
21
|
+
module Datadog
|
22
|
+
module CI
|
23
|
+
module Ext
|
24
|
+
module Environment
|
25
|
+
module Providers
|
26
|
+
PROVIDERS = [
|
27
|
+
["APPVEYOR", Providers::Appveyor],
|
28
|
+
["TF_BUILD", Providers::Azure],
|
29
|
+
["BITBUCKET_COMMIT", Providers::Bitbucket],
|
30
|
+
["BITRISE_BUILD_SLUG", Providers::Bitrise],
|
31
|
+
["BUDDY", Providers::Buddy],
|
32
|
+
["BUILDKITE", Providers::Buildkite],
|
33
|
+
["CIRCLECI", Providers::Circleci],
|
34
|
+
["CF_BUILD_ID", Providers::Codefresh],
|
35
|
+
["GITHUB_SHA", Providers::GithubActions],
|
36
|
+
["GITLAB_CI", Providers::Gitlab],
|
37
|
+
["JENKINS_URL", Providers::Jenkins],
|
38
|
+
["TEAMCITY_VERSION", Providers::Teamcity],
|
39
|
+
["TRAVIS", Providers::Travis]
|
40
|
+
]
|
41
|
+
|
42
|
+
def self.for_environment(env)
|
43
|
+
_, provider_klass = PROVIDERS.find { |provider_env_var, _| env.key?(provider_env_var) }
|
44
|
+
provider_klass = Providers::Base if provider_klass.nil?
|
45
|
+
|
46
|
+
provider_klass.new(env)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|