datadog-ci 0.6.0 → 0.8.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +63 -2
- data/README.md +21 -2
- data/lib/datadog/ci/codeowners/matcher.rb +102 -0
- data/lib/datadog/ci/codeowners/parser.rb +42 -0
- data/lib/datadog/ci/codeowners/rule.rb +33 -0
- data/lib/datadog/ci/concurrent_span.rb +2 -1
- data/lib/datadog/ci/configuration/components.rb +59 -57
- data/lib/datadog/ci/configuration/settings.rb +21 -0
- data/lib/datadog/ci/contrib/cucumber/configuration/settings.rb +4 -1
- data/lib/datadog/ci/contrib/cucumber/formatter.rb +69 -38
- data/lib/datadog/ci/contrib/cucumber/instrumentation.rb +2 -1
- data/lib/datadog/ci/contrib/minitest/configuration/settings.rb +4 -1
- data/lib/datadog/ci/contrib/minitest/helpers.rb +2 -1
- data/lib/datadog/ci/contrib/minitest/hooks.rb +9 -22
- data/lib/datadog/ci/contrib/minitest/patcher.rb +9 -6
- data/lib/datadog/ci/contrib/minitest/reporter.rb +50 -0
- data/lib/datadog/ci/contrib/minitest/runnable.rb +1 -1
- data/lib/datadog/ci/contrib/minitest/runner.rb +41 -0
- data/lib/datadog/ci/contrib/rspec/configuration/settings.rb +4 -1
- data/lib/datadog/ci/contrib/rspec/example.rb +55 -14
- data/lib/datadog/ci/contrib/rspec/example_group.rb +12 -7
- data/lib/datadog/ci/contrib/rspec/patcher.rb +10 -1
- data/lib/datadog/ci/contrib/rspec/runner.rb +7 -8
- data/lib/datadog/ci/ext/app_types.rb +2 -0
- data/lib/datadog/ci/ext/environment/providers/local_git.rb +8 -29
- data/lib/datadog/ci/ext/settings.rb +2 -0
- data/lib/datadog/ci/ext/test.rb +29 -7
- data/lib/datadog/ci/ext/transport.rb +19 -1
- data/lib/datadog/ci/itr/runner.rb +67 -0
- data/lib/datadog/ci/span.rb +51 -2
- data/lib/datadog/ci/test.rb +67 -2
- data/lib/datadog/ci/test_module.rb +1 -1
- data/lib/datadog/ci/test_session.rb +10 -2
- data/lib/datadog/ci/test_suite.rb +53 -2
- data/lib/datadog/ci/test_visibility/context/local.rb +3 -9
- data/lib/datadog/ci/test_visibility/null_recorder.rb +2 -22
- data/lib/datadog/ci/test_visibility/recorder.rb +46 -20
- data/lib/datadog/ci/test_visibility/serializers/base.rb +6 -5
- data/lib/datadog/ci/test_visibility/serializers/span.rb +1 -1
- data/lib/datadog/ci/test_visibility/serializers/test_module.rb +1 -1
- data/lib/datadog/ci/test_visibility/serializers/test_session.rb +1 -1
- data/lib/datadog/ci/test_visibility/serializers/test_suite.rb +1 -1
- data/lib/datadog/ci/test_visibility/serializers/test_v1.rb +1 -1
- data/lib/datadog/ci/test_visibility/transport.rb +1 -5
- data/lib/datadog/ci/transport/api/agentless.rb +63 -0
- data/lib/datadog/ci/transport/api/base.rb +10 -14
- data/lib/datadog/ci/transport/api/builder.rb +25 -22
- data/lib/datadog/ci/transport/api/evp_proxy.rb +47 -7
- data/lib/datadog/ci/transport/http.rb +7 -1
- data/lib/datadog/ci/transport/remote_settings_api.rb +96 -0
- data/lib/datadog/ci/utils/configuration.rb +15 -0
- data/lib/datadog/ci/utils/git.rb +70 -0
- data/lib/datadog/ci/version.rb +1 -1
- data/lib/datadog/ci.rb +40 -56
- metadata +12 -90
- data/lib/datadog/ci/contrib/minitest/plugin.rb +0 -73
- data/lib/datadog/ci/null_span.rb +0 -63
- data/lib/datadog/ci/transport/api/ci_test_cycle.rb +0 -30
- data/sig/datadog/ci/concurrent_span.rbs +0 -23
- data/sig/datadog/ci/configuration/components.rbs +0 -21
- data/sig/datadog/ci/configuration/extensions.rbs +0 -9
- data/sig/datadog/ci/configuration/settings.rbs +0 -16
- data/sig/datadog/ci/contrib/cucumber/configuration/settings.rbs +0 -12
- data/sig/datadog/ci/contrib/cucumber/ext.rbs +0 -21
- data/sig/datadog/ci/contrib/cucumber/formatter.rbs +0 -48
- data/sig/datadog/ci/contrib/cucumber/instrumentation.rbs +0 -16
- data/sig/datadog/ci/contrib/cucumber/integration.rbs +0 -26
- data/sig/datadog/ci/contrib/cucumber/patcher.rbs +0 -15
- data/sig/datadog/ci/contrib/integration.rbs +0 -44
- data/sig/datadog/ci/contrib/minitest/configuration/settings.rbs +0 -12
- data/sig/datadog/ci/contrib/minitest/ext.rbs +0 -19
- data/sig/datadog/ci/contrib/minitest/helpers.rbs +0 -13
- data/sig/datadog/ci/contrib/minitest/hooks.rbs +0 -27
- data/sig/datadog/ci/contrib/minitest/integration.rbs +0 -26
- data/sig/datadog/ci/contrib/minitest/patcher.rbs +0 -15
- data/sig/datadog/ci/contrib/minitest/plugin.rbs +0 -31
- data/sig/datadog/ci/contrib/minitest/runnable.rbs +0 -24
- data/sig/datadog/ci/contrib/rspec/configuration/settings.rbs +0 -12
- data/sig/datadog/ci/contrib/rspec/example.rbs +0 -20
- data/sig/datadog/ci/contrib/rspec/example_group.rbs +0 -21
- data/sig/datadog/ci/contrib/rspec/ext.rbs +0 -17
- data/sig/datadog/ci/contrib/rspec/integration.rbs +0 -26
- data/sig/datadog/ci/contrib/rspec/patcher.rbs +0 -15
- data/sig/datadog/ci/contrib/rspec/runner.rbs +0 -21
- data/sig/datadog/ci/contrib/settings.rbs +0 -25
- data/sig/datadog/ci/ext/app_types.rbs +0 -14
- data/sig/datadog/ci/ext/environment/extractor.rbs +0 -25
- data/sig/datadog/ci/ext/environment/providers/appveyor.rbs +0 -48
- data/sig/datadog/ci/ext/environment/providers/aws_code_pipeline.rbs +0 -19
- data/sig/datadog/ci/ext/environment/providers/azure.rbs +0 -56
- data/sig/datadog/ci/ext/environment/providers/base.rbs +0 -71
- data/sig/datadog/ci/ext/environment/providers/bitbucket.rbs +0 -37
- data/sig/datadog/ci/ext/environment/providers/bitrise.rbs +0 -41
- data/sig/datadog/ci/ext/environment/providers/buddy.rbs +0 -37
- data/sig/datadog/ci/ext/environment/providers/buildkite.rbs +0 -45
- data/sig/datadog/ci/ext/environment/providers/circleci.rbs +0 -41
- data/sig/datadog/ci/ext/environment/providers/codefresh.rbs +0 -25
- data/sig/datadog/ci/ext/environment/providers/github_actions.rbs +0 -42
- data/sig/datadog/ci/ext/environment/providers/gitlab.rbs +0 -57
- data/sig/datadog/ci/ext/environment/providers/jenkins.rbs +0 -35
- data/sig/datadog/ci/ext/environment/providers/local_git.rbs +0 -66
- data/sig/datadog/ci/ext/environment/providers/teamcity.rbs +0 -17
- data/sig/datadog/ci/ext/environment/providers/travis.rbs +0 -35
- data/sig/datadog/ci/ext/environment/providers/user_defined_tags.rbs +0 -33
- data/sig/datadog/ci/ext/environment/providers.rbs +0 -13
- data/sig/datadog/ci/ext/environment.rbs +0 -44
- data/sig/datadog/ci/ext/git.rbs +0 -53
- data/sig/datadog/ci/ext/settings.rbs +0 -14
- data/sig/datadog/ci/ext/test.rbs +0 -60
- data/sig/datadog/ci/ext/transport.rbs +0 -29
- data/sig/datadog/ci/null_span.rbs +0 -37
- data/sig/datadog/ci/span.rbs +0 -47
- data/sig/datadog/ci/test.rbs +0 -12
- data/sig/datadog/ci/test_module.rbs +0 -6
- data/sig/datadog/ci/test_session.rbs +0 -9
- data/sig/datadog/ci/test_suite.rbs +0 -6
- data/sig/datadog/ci/test_visibility/context/global.rbs +0 -39
- data/sig/datadog/ci/test_visibility/context/local.rbs +0 -23
- data/sig/datadog/ci/test_visibility/flush.rbs +0 -17
- data/sig/datadog/ci/test_visibility/null_recorder.rbs +0 -45
- data/sig/datadog/ci/test_visibility/recorder.rbs +0 -85
- data/sig/datadog/ci/test_visibility/serializers/base.rbs +0 -94
- data/sig/datadog/ci/test_visibility/serializers/factories/test_level.rbs +0 -13
- data/sig/datadog/ci/test_visibility/serializers/factories/test_suite_level.rbs +0 -13
- data/sig/datadog/ci/test_visibility/serializers/span.rbs +0 -18
- data/sig/datadog/ci/test_visibility/serializers/test_module.rbs +0 -26
- data/sig/datadog/ci/test_visibility/serializers/test_session.rbs +0 -26
- data/sig/datadog/ci/test_visibility/serializers/test_suite.rbs +0 -26
- data/sig/datadog/ci/test_visibility/serializers/test_v1.rbs +0 -23
- data/sig/datadog/ci/test_visibility/serializers/test_v2.rbs +0 -25
- data/sig/datadog/ci/test_visibility/transport.rbs +0 -35
- data/sig/datadog/ci/transport/api/base.rbs +0 -21
- data/sig/datadog/ci/transport/api/builder.rbs +0 -12
- data/sig/datadog/ci/transport/api/ci_test_cycle.rbs +0 -21
- data/sig/datadog/ci/transport/api/evp_proxy.rbs +0 -19
- data/sig/datadog/ci/transport/gzip.rbs +0 -9
- data/sig/datadog/ci/transport/http.rbs +0 -36
- data/sig/datadog/ci/utils/git.rbs +0 -11
- data/sig/datadog/ci/utils/test_run.rbs +0 -11
- data/sig/datadog/ci/utils/url.rbs +0 -9
- data/sig/datadog/ci/version.rbs +0 -16
- data/sig/datadog/ci.rbs +0 -37
data/lib/datadog/ci/utils/git.rb
CHANGED
@@ -1,5 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require "open3"
|
4
|
+
require "pathname"
|
5
|
+
|
3
6
|
module Datadog
|
4
7
|
module CI
|
5
8
|
module Utils
|
@@ -16,6 +19,73 @@ module Datadog
|
|
16
19
|
def self.is_git_tag?(ref)
|
17
20
|
!ref.nil? && ref.include?("tags/")
|
18
21
|
end
|
22
|
+
|
23
|
+
def self.root
|
24
|
+
return @root if defined?(@root)
|
25
|
+
|
26
|
+
@root = exec_git_command("git rev-parse --show-toplevel")
|
27
|
+
rescue => e
|
28
|
+
Datadog.logger.debug(
|
29
|
+
"Unable to read git root: #{e.class.name} #{e.message} at #{Array(e.backtrace).first}"
|
30
|
+
)
|
31
|
+
@root = nil
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.relative_to_root(path)
|
35
|
+
return nil if path.nil?
|
36
|
+
|
37
|
+
git_root = root
|
38
|
+
return path if git_root.nil?
|
39
|
+
|
40
|
+
path = Pathname.new(File.expand_path(path))
|
41
|
+
git_root = Pathname.new(git_root)
|
42
|
+
|
43
|
+
path.relative_path_from(git_root).to_s
|
44
|
+
end
|
45
|
+
|
46
|
+
def self.repository_name
|
47
|
+
return @repository_name if defined?(@repository_name)
|
48
|
+
|
49
|
+
git_remote_url = exec_git_command("git ls-remote --get-url origin")
|
50
|
+
|
51
|
+
# return git repository name from remote url without .git extension
|
52
|
+
last_path_segment = git_remote_url.split("/").last if git_remote_url
|
53
|
+
@repository_name = last_path_segment.gsub(".git", "") if last_path_segment
|
54
|
+
@repository_name ||= current_folder_name
|
55
|
+
rescue => e
|
56
|
+
Datadog.logger.debug(
|
57
|
+
"Unable to get git remote: #{e.class.name} #{e.message} at #{Array(e.backtrace).first}"
|
58
|
+
)
|
59
|
+
@repository_name = current_folder_name
|
60
|
+
end
|
61
|
+
|
62
|
+
def self.current_folder_name
|
63
|
+
root_folder = root
|
64
|
+
if root_folder.nil?
|
65
|
+
File.basename(Dir.pwd)
|
66
|
+
else
|
67
|
+
File.basename(root_folder)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def self.exec_git_command(cmd)
|
72
|
+
out, status = Open3.capture2e(cmd)
|
73
|
+
|
74
|
+
raise "Failed to run git command #{cmd}: #{out}" unless status.success?
|
75
|
+
|
76
|
+
# Sometimes Encoding.default_external is somehow set to US-ASCII which breaks
|
77
|
+
# commit messages with UTF-8 characters like emojis
|
78
|
+
# We force output's encoding to be UTF-8 in this case
|
79
|
+
# This is safe to do as UTF-8 is compatible with US-ASCII
|
80
|
+
if Encoding.default_external == Encoding::US_ASCII
|
81
|
+
out = out.force_encoding(Encoding::UTF_8)
|
82
|
+
end
|
83
|
+
out.strip! # There's always a "\n" at the end of the command output
|
84
|
+
|
85
|
+
return nil if out.empty?
|
86
|
+
|
87
|
+
out
|
88
|
+
end
|
19
89
|
end
|
20
90
|
end
|
21
91
|
end
|
data/lib/datadog/ci/version.rb
CHANGED
data/lib/datadog/ci.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require_relative "ci/version"
|
4
|
+
require_relative "ci/utils/configuration"
|
5
|
+
require_relative "ci/ext/app_types"
|
4
6
|
|
5
7
|
require "datadog/core"
|
6
8
|
|
@@ -9,6 +11,8 @@ module Datadog
|
|
9
11
|
#
|
10
12
|
# @public_api
|
11
13
|
module CI
|
14
|
+
class ReservedTypeError < StandardError; end
|
15
|
+
|
12
16
|
class << self
|
13
17
|
# Starts a {Datadog::CI::TestSession ci_test_session} that represents the whole test session run.
|
14
18
|
#
|
@@ -30,13 +34,11 @@ module Datadog
|
|
30
34
|
#
|
31
35
|
# Remember that calling {Datadog::CI::TestSession#finish} is mandatory.
|
32
36
|
#
|
33
|
-
# @param [String] service the service name for this session (optional, defaults to DD_SERVICE)
|
37
|
+
# @param [String] service the service name for this session (optional, defaults to DD_SERVICE or repository name)
|
34
38
|
# @param [Hash<String,String>] tags extra tags which should be added to the test session.
|
35
|
-
# @return [Datadog::CI::TestSession]
|
36
|
-
# @return [
|
37
|
-
|
38
|
-
def start_test_session(service: nil, tags: {})
|
39
|
-
service ||= Datadog.configuration.service
|
39
|
+
# @return [Datadog::CI::TestSession] the active, running {Datadog::CI::TestSession}.
|
40
|
+
# @return [nil] if test suite level visibility is disabled or CI mode is disabled.
|
41
|
+
def start_test_session(service: Utils::Configuration.fetch_service_name("test"), tags: {})
|
40
42
|
recorder.start_test_session(service: service, tags: tags)
|
41
43
|
end
|
42
44
|
|
@@ -88,9 +90,8 @@ module Datadog
|
|
88
90
|
# @param [String] test_module_name the name for this module
|
89
91
|
# @param [String] service the service name for this session (optional, inherited from test session if not provided)
|
90
92
|
# @param [Hash<String,String>] tags extra tags which should be added to the test module (optional, some tags are inherited from test session).
|
91
|
-
# @return [Datadog::CI::TestModule]
|
92
|
-
# @return [
|
93
|
-
# detected and test suite level visibility cannot be supported.
|
93
|
+
# @return [Datadog::CI::TestModule] the active, running {Datadog::CI::TestModule}.
|
94
|
+
# @return [nil] if test suite level visibility is disabled or CI mode is disabled.
|
94
95
|
def start_test_module(test_module_name, service: nil, tags: {})
|
95
96
|
recorder.start_test_module(test_module_name, service: service, tags: tags)
|
96
97
|
end
|
@@ -141,9 +142,8 @@ module Datadog
|
|
141
142
|
# @param [String] test_suite_name the name of the test suite
|
142
143
|
# @param [String] service the service name for this test suite (optional, inherited from test session if not provided)
|
143
144
|
# @param [Hash<String,String>] tags extra tags which should be added to the test module (optional, some tags are inherited from test session)
|
144
|
-
# @return [Datadog::CI::TestSuite]
|
145
|
-
# @return [
|
146
|
-
# detected and test suite level visibility cannot be supported.
|
145
|
+
# @return [Datadog::CI::TestSuite] the active, running {Datadog::CI::TestSuite}.
|
146
|
+
# @return [nil] if test suite level visibility is disabled or CI mode is disabled.
|
147
147
|
def start_test_suite(test_suite_name, service: nil, tags: {})
|
148
148
|
recorder.start_test_suite(test_suite_name, service: service, tags: tags)
|
149
149
|
end
|
@@ -217,10 +217,10 @@ module Datadog
|
|
217
217
|
# @return [Object] If a block is provided, returns the result of the block execution.
|
218
218
|
# @return [Datadog::CI::Test] If no block is provided, returns the active,
|
219
219
|
# unfinished {Datadog::CI::Test}.
|
220
|
-
# @return [
|
220
|
+
# @return [nil] if no block is provided and CI mode is disabled.
|
221
221
|
# @yield Optional block where newly created {Datadog::CI::Test} captures the execution.
|
222
222
|
# @yieldparam [Datadog::CI::Test] ci_test the newly created and active [Datadog::CI::Test]
|
223
|
-
# @yieldparam [
|
223
|
+
# @yieldparam [nil] if CI mode is disabled
|
224
224
|
def trace_test(test_name, test_suite_name, service: nil, tags: {}, &block)
|
225
225
|
recorder.trace_test(test_name, test_suite_name, service: service, tags: tags, &block)
|
226
226
|
end
|
@@ -245,8 +245,8 @@ module Datadog
|
|
245
245
|
# @param [String] test_suite_name name of test suite this test belongs to (example: "CalculatorTest").
|
246
246
|
# @param [String] service the service name for this span (optional, inherited from test session if not provided)
|
247
247
|
# @param [Hash<String,String>] tags extra tags which should be added to the test.
|
248
|
-
# @return [Datadog::CI::Test]
|
249
|
-
# @return [
|
248
|
+
# @return [Datadog::CI::Test] the active, unfinished {Datadog::CI::Test}.
|
249
|
+
# @return [nil] if CI mode is disabled.
|
250
250
|
def start_test(test_name, test_suite_name, service: nil, tags: {})
|
251
251
|
recorder.trace_test(test_name, test_suite_name, service: service, tags: tags)
|
252
252
|
end
|
@@ -260,8 +260,8 @@ module Datadog
|
|
260
260
|
#
|
261
261
|
# ```
|
262
262
|
# Datadog::CI.trace(
|
263
|
-
# "step",
|
264
263
|
# "Given I have 42 cucumbers",
|
264
|
+
# type: "step",
|
265
265
|
# tags: {}
|
266
266
|
# ) do
|
267
267
|
# run_operation
|
@@ -271,8 +271,8 @@ module Datadog
|
|
271
271
|
# The {.trace} method can also be used without a block in this way:
|
272
272
|
# ```
|
273
273
|
# ci_span = Datadog::CI.trace(
|
274
|
-
# "step",
|
275
274
|
# "Given I have 42 cucumbers",
|
275
|
+
# type: "step",
|
276
276
|
# tags: {}
|
277
277
|
# )
|
278
278
|
# # ... run test here ...
|
@@ -280,22 +280,31 @@ module Datadog
|
|
280
280
|
# ```
|
281
281
|
# Remember that in this case, calling {Datadog::CI::Span#finish} is mandatory.
|
282
282
|
#
|
283
|
-
# @param [String] span_type custom, user-defined span type (for example "step" or "query").
|
284
283
|
# @param [String] span_name the resource this span refers, or `test` if it's missing
|
284
|
+
# @param [String] type custom, user-defined span type (for example "step" or "query").
|
285
285
|
# @param [Hash<String,String>] tags extra tags which should be added to the span.
|
286
286
|
# @return [Object] If a block is provided, returns the result of the block execution.
|
287
287
|
# @return [Datadog::CI::Span] If no block is provided, returns the active,
|
288
288
|
# unfinished {Datadog::CI::Span}.
|
289
|
-
# @return [
|
289
|
+
# @return [nil] if CI visibility is disabled
|
290
|
+
# @raise [ReservedTypeError] if provided type is reserved for Datadog CI visibility
|
290
291
|
# @yield Optional block where newly created {Datadog::CI::Span} captures the execution.
|
291
292
|
# @yieldparam [Datadog::CI::Span] ci_span the newly created and active [Datadog::CI::Span]
|
292
|
-
# @yieldparam [
|
293
|
-
def trace(
|
294
|
-
|
293
|
+
# @yieldparam [nil] ci_span if CI visibility is disabled
|
294
|
+
def trace(span_name, type: "span", tags: {}, &block)
|
295
|
+
if Ext::AppTypes::CI_SPAN_TYPES.include?(type)
|
296
|
+
raise(
|
297
|
+
ReservedTypeError,
|
298
|
+
"Span type #{type} is reserved for Datadog CI visibility. " \
|
299
|
+
"Reserved types are: #{Ext::AppTypes::CI_SPAN_TYPES}"
|
300
|
+
)
|
301
|
+
end
|
302
|
+
|
303
|
+
recorder.trace(span_name, type: type, tags: tags, &block)
|
295
304
|
end
|
296
305
|
|
297
|
-
# The active, unfinished custom
|
298
|
-
# If no span is active, or if the active span is not a custom span
|
306
|
+
# The active, unfinished custom (i.e. not test/suite/module/session) span.
|
307
|
+
# If no span is active, or if the active span is not a custom span, returns nil.
|
299
308
|
#
|
300
309
|
# The active span belongs to an {.active_test}.
|
301
310
|
#
|
@@ -304,22 +313,21 @@ module Datadog
|
|
304
313
|
# ```
|
305
314
|
# # start span
|
306
315
|
# Datadog::CI.trace(
|
307
|
-
# "step",
|
308
316
|
# "Given I have 42 cucumbers",
|
317
|
+
# type: "step",
|
309
318
|
# tags: {}
|
310
319
|
# )
|
311
320
|
#
|
312
|
-
# # somewhere else, access the active
|
313
|
-
# step_span = Datadog::CI.active_span
|
321
|
+
# # somewhere else, access the active step span
|
322
|
+
# step_span = Datadog::CI.active_span
|
314
323
|
# step_span.finish()
|
315
324
|
# ```
|
316
325
|
#
|
317
|
-
# @param [String] span_type type of the span to retrieve (for example "step" or "query") that was provided to {.trace}
|
318
326
|
# @return [Datadog::CI::Span] the active span
|
319
|
-
# @return [nil] if no span is active, or if the active span is not a custom span
|
320
|
-
def active_span
|
327
|
+
# @return [nil] if no span is active, or if the active span is not a custom span
|
328
|
+
def active_span
|
321
329
|
span = recorder.active_span
|
322
|
-
span if span && span.
|
330
|
+
span if span && !Ext::AppTypes::CI_SPAN_TYPES.include?(span.type)
|
323
331
|
end
|
324
332
|
|
325
333
|
# The active, unfinished test span.
|
@@ -347,30 +355,6 @@ module Datadog
|
|
347
355
|
recorder.active_test
|
348
356
|
end
|
349
357
|
|
350
|
-
# Internal only, to finish a test use {Datadog::CI::Test#finish}
|
351
|
-
# @private
|
352
|
-
def deactivate_test(test)
|
353
|
-
recorder.deactivate_test(test)
|
354
|
-
end
|
355
|
-
|
356
|
-
# Internal only, to finish a test session use {Datadog::CI::TestSession#finish}
|
357
|
-
# @private
|
358
|
-
def deactivate_test_session
|
359
|
-
recorder.deactivate_test_session
|
360
|
-
end
|
361
|
-
|
362
|
-
# Internal only, to finish a test module use {Datadog::CI::TestModule#finish}
|
363
|
-
# @private
|
364
|
-
def deactivate_test_module
|
365
|
-
recorder.deactivate_test_module
|
366
|
-
end
|
367
|
-
|
368
|
-
# Internal only, to finish a test suite use {Datadog::CI::TestSuite#finish}
|
369
|
-
# @private
|
370
|
-
def deactivate_test_suite(test_suite_name)
|
371
|
-
recorder.deactivate_test_suite(test_suite_name)
|
372
|
-
end
|
373
|
-
|
374
358
|
private
|
375
359
|
|
376
360
|
def components
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: datadog-ci
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Datadog, Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-03-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: msgpack
|
@@ -42,6 +42,9 @@ files:
|
|
42
42
|
- NOTICE
|
43
43
|
- README.md
|
44
44
|
- lib/datadog/ci.rb
|
45
|
+
- lib/datadog/ci/codeowners/matcher.rb
|
46
|
+
- lib/datadog/ci/codeowners/parser.rb
|
47
|
+
- lib/datadog/ci/codeowners/rule.rb
|
45
48
|
- lib/datadog/ci/concurrent_span.rb
|
46
49
|
- lib/datadog/ci/configuration/components.rb
|
47
50
|
- lib/datadog/ci/configuration/extensions.rb
|
@@ -59,8 +62,9 @@ files:
|
|
59
62
|
- lib/datadog/ci/contrib/minitest/hooks.rb
|
60
63
|
- lib/datadog/ci/contrib/minitest/integration.rb
|
61
64
|
- lib/datadog/ci/contrib/minitest/patcher.rb
|
62
|
-
- lib/datadog/ci/contrib/minitest/
|
65
|
+
- lib/datadog/ci/contrib/minitest/reporter.rb
|
63
66
|
- lib/datadog/ci/contrib/minitest/runnable.rb
|
67
|
+
- lib/datadog/ci/contrib/minitest/runner.rb
|
64
68
|
- lib/datadog/ci/contrib/rspec/configuration/settings.rb
|
65
69
|
- lib/datadog/ci/contrib/rspec/example.rb
|
66
70
|
- lib/datadog/ci/contrib/rspec/example_group.rb
|
@@ -94,7 +98,7 @@ files:
|
|
94
98
|
- lib/datadog/ci/ext/settings.rb
|
95
99
|
- lib/datadog/ci/ext/test.rb
|
96
100
|
- lib/datadog/ci/ext/transport.rb
|
97
|
-
- lib/datadog/ci/
|
101
|
+
- lib/datadog/ci/itr/runner.rb
|
98
102
|
- lib/datadog/ci/span.rb
|
99
103
|
- lib/datadog/ci/test.rb
|
100
104
|
- lib/datadog/ci/test_module.rb
|
@@ -115,100 +119,18 @@ files:
|
|
115
119
|
- lib/datadog/ci/test_visibility/serializers/test_v1.rb
|
116
120
|
- lib/datadog/ci/test_visibility/serializers/test_v2.rb
|
117
121
|
- lib/datadog/ci/test_visibility/transport.rb
|
122
|
+
- lib/datadog/ci/transport/api/agentless.rb
|
118
123
|
- lib/datadog/ci/transport/api/base.rb
|
119
124
|
- lib/datadog/ci/transport/api/builder.rb
|
120
|
-
- lib/datadog/ci/transport/api/ci_test_cycle.rb
|
121
125
|
- lib/datadog/ci/transport/api/evp_proxy.rb
|
122
126
|
- lib/datadog/ci/transport/gzip.rb
|
123
127
|
- lib/datadog/ci/transport/http.rb
|
128
|
+
- lib/datadog/ci/transport/remote_settings_api.rb
|
129
|
+
- lib/datadog/ci/utils/configuration.rb
|
124
130
|
- lib/datadog/ci/utils/git.rb
|
125
131
|
- lib/datadog/ci/utils/test_run.rb
|
126
132
|
- lib/datadog/ci/utils/url.rb
|
127
133
|
- lib/datadog/ci/version.rb
|
128
|
-
- sig/datadog/ci.rbs
|
129
|
-
- sig/datadog/ci/concurrent_span.rbs
|
130
|
-
- sig/datadog/ci/configuration/components.rbs
|
131
|
-
- sig/datadog/ci/configuration/extensions.rbs
|
132
|
-
- sig/datadog/ci/configuration/settings.rbs
|
133
|
-
- sig/datadog/ci/contrib/cucumber/configuration/settings.rbs
|
134
|
-
- sig/datadog/ci/contrib/cucumber/ext.rbs
|
135
|
-
- sig/datadog/ci/contrib/cucumber/formatter.rbs
|
136
|
-
- sig/datadog/ci/contrib/cucumber/instrumentation.rbs
|
137
|
-
- sig/datadog/ci/contrib/cucumber/integration.rbs
|
138
|
-
- sig/datadog/ci/contrib/cucumber/patcher.rbs
|
139
|
-
- sig/datadog/ci/contrib/integration.rbs
|
140
|
-
- sig/datadog/ci/contrib/minitest/configuration/settings.rbs
|
141
|
-
- sig/datadog/ci/contrib/minitest/ext.rbs
|
142
|
-
- sig/datadog/ci/contrib/minitest/helpers.rbs
|
143
|
-
- sig/datadog/ci/contrib/minitest/hooks.rbs
|
144
|
-
- sig/datadog/ci/contrib/minitest/integration.rbs
|
145
|
-
- sig/datadog/ci/contrib/minitest/patcher.rbs
|
146
|
-
- sig/datadog/ci/contrib/minitest/plugin.rbs
|
147
|
-
- sig/datadog/ci/contrib/minitest/runnable.rbs
|
148
|
-
- sig/datadog/ci/contrib/rspec/configuration/settings.rbs
|
149
|
-
- sig/datadog/ci/contrib/rspec/example.rbs
|
150
|
-
- sig/datadog/ci/contrib/rspec/example_group.rbs
|
151
|
-
- sig/datadog/ci/contrib/rspec/ext.rbs
|
152
|
-
- sig/datadog/ci/contrib/rspec/integration.rbs
|
153
|
-
- sig/datadog/ci/contrib/rspec/patcher.rbs
|
154
|
-
- sig/datadog/ci/contrib/rspec/runner.rbs
|
155
|
-
- sig/datadog/ci/contrib/settings.rbs
|
156
|
-
- sig/datadog/ci/ext/app_types.rbs
|
157
|
-
- sig/datadog/ci/ext/environment.rbs
|
158
|
-
- sig/datadog/ci/ext/environment/extractor.rbs
|
159
|
-
- sig/datadog/ci/ext/environment/providers.rbs
|
160
|
-
- sig/datadog/ci/ext/environment/providers/appveyor.rbs
|
161
|
-
- sig/datadog/ci/ext/environment/providers/aws_code_pipeline.rbs
|
162
|
-
- sig/datadog/ci/ext/environment/providers/azure.rbs
|
163
|
-
- sig/datadog/ci/ext/environment/providers/base.rbs
|
164
|
-
- sig/datadog/ci/ext/environment/providers/bitbucket.rbs
|
165
|
-
- sig/datadog/ci/ext/environment/providers/bitrise.rbs
|
166
|
-
- sig/datadog/ci/ext/environment/providers/buddy.rbs
|
167
|
-
- sig/datadog/ci/ext/environment/providers/buildkite.rbs
|
168
|
-
- sig/datadog/ci/ext/environment/providers/circleci.rbs
|
169
|
-
- sig/datadog/ci/ext/environment/providers/codefresh.rbs
|
170
|
-
- sig/datadog/ci/ext/environment/providers/github_actions.rbs
|
171
|
-
- sig/datadog/ci/ext/environment/providers/gitlab.rbs
|
172
|
-
- sig/datadog/ci/ext/environment/providers/jenkins.rbs
|
173
|
-
- sig/datadog/ci/ext/environment/providers/local_git.rbs
|
174
|
-
- sig/datadog/ci/ext/environment/providers/teamcity.rbs
|
175
|
-
- sig/datadog/ci/ext/environment/providers/travis.rbs
|
176
|
-
- sig/datadog/ci/ext/environment/providers/user_defined_tags.rbs
|
177
|
-
- sig/datadog/ci/ext/git.rbs
|
178
|
-
- sig/datadog/ci/ext/settings.rbs
|
179
|
-
- sig/datadog/ci/ext/test.rbs
|
180
|
-
- sig/datadog/ci/ext/transport.rbs
|
181
|
-
- sig/datadog/ci/null_span.rbs
|
182
|
-
- sig/datadog/ci/span.rbs
|
183
|
-
- sig/datadog/ci/test.rbs
|
184
|
-
- sig/datadog/ci/test_module.rbs
|
185
|
-
- sig/datadog/ci/test_session.rbs
|
186
|
-
- sig/datadog/ci/test_suite.rbs
|
187
|
-
- sig/datadog/ci/test_visibility/context/global.rbs
|
188
|
-
- sig/datadog/ci/test_visibility/context/local.rbs
|
189
|
-
- sig/datadog/ci/test_visibility/flush.rbs
|
190
|
-
- sig/datadog/ci/test_visibility/null_recorder.rbs
|
191
|
-
- sig/datadog/ci/test_visibility/recorder.rbs
|
192
|
-
- sig/datadog/ci/test_visibility/serializers/base.rbs
|
193
|
-
- sig/datadog/ci/test_visibility/serializers/factories/test_level.rbs
|
194
|
-
- sig/datadog/ci/test_visibility/serializers/factories/test_suite_level.rbs
|
195
|
-
- sig/datadog/ci/test_visibility/serializers/span.rbs
|
196
|
-
- sig/datadog/ci/test_visibility/serializers/test_module.rbs
|
197
|
-
- sig/datadog/ci/test_visibility/serializers/test_session.rbs
|
198
|
-
- sig/datadog/ci/test_visibility/serializers/test_suite.rbs
|
199
|
-
- sig/datadog/ci/test_visibility/serializers/test_v1.rbs
|
200
|
-
- sig/datadog/ci/test_visibility/serializers/test_v2.rbs
|
201
|
-
- sig/datadog/ci/test_visibility/transport.rbs
|
202
|
-
- sig/datadog/ci/transport/api/base.rbs
|
203
|
-
- sig/datadog/ci/transport/api/builder.rbs
|
204
|
-
- sig/datadog/ci/transport/api/ci_test_cycle.rbs
|
205
|
-
- sig/datadog/ci/transport/api/evp_proxy.rbs
|
206
|
-
- sig/datadog/ci/transport/gzip.rbs
|
207
|
-
- sig/datadog/ci/transport/http.rbs
|
208
|
-
- sig/datadog/ci/utils/git.rbs
|
209
|
-
- sig/datadog/ci/utils/test_run.rbs
|
210
|
-
- sig/datadog/ci/utils/url.rbs
|
211
|
-
- sig/datadog/ci/version.rbs
|
212
134
|
homepage: https://github.com/DataDog/datadog-ci-rb
|
213
135
|
licenses:
|
214
136
|
- BSD-3-Clause
|
@@ -235,7 +157,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
235
157
|
- !ruby/object:Gem::Version
|
236
158
|
version: 2.0.0
|
237
159
|
requirements: []
|
238
|
-
rubygems_version: 3.
|
160
|
+
rubygems_version: 3.5.3
|
239
161
|
signing_key:
|
240
162
|
specification_version: 4
|
241
163
|
summary: Datadog CI visibility for your ruby application
|
@@ -1,73 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "weakref"
|
4
|
-
|
5
|
-
require_relative "../../ext/test"
|
6
|
-
require_relative "ext"
|
7
|
-
|
8
|
-
module Datadog
|
9
|
-
module CI
|
10
|
-
module Contrib
|
11
|
-
module Minitest
|
12
|
-
module Plugin
|
13
|
-
def self.included(base)
|
14
|
-
base.extend(ClassMethods)
|
15
|
-
end
|
16
|
-
|
17
|
-
class DatadogReporter < ::Minitest::AbstractReporter
|
18
|
-
def initialize(minitest_reporter)
|
19
|
-
# This creates circular reference as minitest_reporter also holds reference to DatadogReporter.
|
20
|
-
# To make sure that minitest_reporter can be garbage collected, we use WeakRef.
|
21
|
-
@reporter = WeakRef.new(minitest_reporter)
|
22
|
-
end
|
23
|
-
|
24
|
-
def report
|
25
|
-
active_test_session = CI.active_test_session
|
26
|
-
active_test_module = CI.active_test_module
|
27
|
-
|
28
|
-
return unless @reporter.weakref_alive?
|
29
|
-
return if active_test_session.nil? || active_test_module.nil?
|
30
|
-
|
31
|
-
if @reporter.passed?
|
32
|
-
active_test_module.passed!
|
33
|
-
active_test_session.passed!
|
34
|
-
else
|
35
|
-
active_test_module.failed!
|
36
|
-
active_test_session.failed!
|
37
|
-
end
|
38
|
-
|
39
|
-
active_test_module.finish
|
40
|
-
active_test_session.finish
|
41
|
-
|
42
|
-
nil
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
module ClassMethods
|
47
|
-
def plugin_datadog_ci_init(*)
|
48
|
-
return unless datadog_configuration[:enabled]
|
49
|
-
|
50
|
-
test_session = CI.start_test_session(
|
51
|
-
tags: {
|
52
|
-
CI::Ext::Test::TAG_FRAMEWORK => Ext::FRAMEWORK,
|
53
|
-
CI::Ext::Test::TAG_FRAMEWORK_VERSION => CI::Contrib::Minitest::Integration.version.to_s,
|
54
|
-
CI::Ext::Test::TAG_TYPE => CI::Ext::Test::TEST_TYPE
|
55
|
-
},
|
56
|
-
service: datadog_configuration[:service_name]
|
57
|
-
)
|
58
|
-
CI.start_test_module(test_session.name)
|
59
|
-
|
60
|
-
reporter.reporters << DatadogReporter.new(reporter)
|
61
|
-
end
|
62
|
-
|
63
|
-
private
|
64
|
-
|
65
|
-
def datadog_configuration
|
66
|
-
Datadog.configuration.ci[:minitest]
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|
70
|
-
end
|
71
|
-
end
|
72
|
-
end
|
73
|
-
end
|
data/lib/datadog/ci/null_span.rb
DELETED
@@ -1,63 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "datadog/tracing/span_operation"
|
4
|
-
|
5
|
-
module Datadog
|
6
|
-
module CI
|
7
|
-
# Represents an ignored span when CI visibility is disabled.
|
8
|
-
# Replaces all methods with no-op.
|
9
|
-
#
|
10
|
-
# @public_api
|
11
|
-
class NullSpan < Span
|
12
|
-
def initialize
|
13
|
-
super(Datadog::Tracing::SpanOperation.new("null.span"))
|
14
|
-
end
|
15
|
-
|
16
|
-
def id
|
17
|
-
end
|
18
|
-
|
19
|
-
def name
|
20
|
-
end
|
21
|
-
|
22
|
-
def service
|
23
|
-
end
|
24
|
-
|
25
|
-
def span_type
|
26
|
-
end
|
27
|
-
|
28
|
-
def passed!
|
29
|
-
end
|
30
|
-
|
31
|
-
def failed!(exception: nil)
|
32
|
-
end
|
33
|
-
|
34
|
-
def skipped!(exception: nil, reason: nil)
|
35
|
-
end
|
36
|
-
|
37
|
-
def get_tag(key)
|
38
|
-
end
|
39
|
-
|
40
|
-
def set_tag(key, value)
|
41
|
-
end
|
42
|
-
|
43
|
-
def set_metric(key, value)
|
44
|
-
end
|
45
|
-
|
46
|
-
def finish
|
47
|
-
end
|
48
|
-
|
49
|
-
def set_tags(tags)
|
50
|
-
end
|
51
|
-
|
52
|
-
def set_environment_runtime_tags
|
53
|
-
end
|
54
|
-
|
55
|
-
def set_default_tags
|
56
|
-
end
|
57
|
-
|
58
|
-
def to_s
|
59
|
-
self.class.to_s
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
@@ -1,30 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative "base"
|
4
|
-
require_relative "../../ext/transport"
|
5
|
-
|
6
|
-
module Datadog
|
7
|
-
module CI
|
8
|
-
module Transport
|
9
|
-
module Api
|
10
|
-
class CiTestCycle < Base
|
11
|
-
attr_reader :api_key
|
12
|
-
|
13
|
-
def initialize(api_key:, http:)
|
14
|
-
@api_key = api_key
|
15
|
-
|
16
|
-
super(http: http)
|
17
|
-
end
|
18
|
-
|
19
|
-
private
|
20
|
-
|
21
|
-
def headers
|
22
|
-
headers = super
|
23
|
-
headers[Ext::Transport::HEADER_DD_API_KEY] = api_key
|
24
|
-
headers
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
@@ -1,23 +0,0 @@
|
|
1
|
-
module Datadog
|
2
|
-
module CI
|
3
|
-
class ConcurrentSpan < Span
|
4
|
-
@mutex: Thread::Mutex
|
5
|
-
|
6
|
-
def initialize: (Datadog::Tracing::SpanOperation tracer_span) -> void
|
7
|
-
def passed!: () -> void
|
8
|
-
def failed!: (?exception: untyped?) -> void
|
9
|
-
def skipped!: (?exception: untyped?, ?reason: String?) -> void
|
10
|
-
def get_tag: (String key) -> untyped?
|
11
|
-
def set_tag: (String key, untyped? value) -> void
|
12
|
-
def set_metric: (String key, untyped value) -> void
|
13
|
-
def finish: () -> void
|
14
|
-
def set_tags: (Hash[untyped, untyped] tags) -> void
|
15
|
-
|
16
|
-
def set_environment_runtime_tags: () -> void
|
17
|
-
|
18
|
-
def set_default_tags: () -> void
|
19
|
-
|
20
|
-
def synchronize: () { () -> untyped } -> untyped
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
@@ -1,21 +0,0 @@
|
|
1
|
-
module Datadog
|
2
|
-
module CI
|
3
|
-
module Configuration
|
4
|
-
module Components : Datadog::Core::Configuration::Components
|
5
|
-
@ci_recorder: Datadog::CI::TestVisibility::Recorder
|
6
|
-
|
7
|
-
attr_reader ci_recorder: Datadog::CI::TestVisibility::Recorder
|
8
|
-
|
9
|
-
def initialize: (untyped settings) -> void
|
10
|
-
|
11
|
-
def activate_ci!: (untyped settings) -> untyped
|
12
|
-
|
13
|
-
def build_agentless_transport: (untyped settings) -> Datadog::CI::TestVisibility::Transport?
|
14
|
-
def build_evp_proxy_transport: (untyped settings, untyped agent_settings) -> Datadog::CI::TestVisibility::Transport
|
15
|
-
def can_use_evp_proxy?: (untyped settings, untyped agent_settings) -> bool
|
16
|
-
def serializers_factory: (untyped settings) -> (singleton(Datadog::CI::TestVisibility::Serializers::Factories::TestSuiteLevel) | singleton(Datadog::CI::TestVisibility::Serializers::Factories::TestLevel))
|
17
|
-
def check_dd_site: (untyped settings) -> void
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|