datadog-ci 1.1.0 → 1.3.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.
Files changed (67) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +31 -2
  3. data/ext/datadog_cov/datadog_cov.c +259 -67
  4. data/lib/datadog/ci/configuration/components.rb +149 -80
  5. data/lib/datadog/ci/configuration/settings.rb +6 -0
  6. data/lib/datadog/ci/contrib/cucumber/formatter.rb +13 -9
  7. data/lib/datadog/ci/contrib/minitest/runnable.rb +5 -1
  8. data/lib/datadog/ci/contrib/minitest/runner.rb +6 -2
  9. data/lib/datadog/ci/contrib/minitest/test.rb +7 -3
  10. data/lib/datadog/ci/contrib/rspec/example.rb +6 -2
  11. data/lib/datadog/ci/contrib/rspec/example_group.rb +5 -1
  12. data/lib/datadog/ci/contrib/rspec/knapsack_pro/runner.rb +6 -2
  13. data/lib/datadog/ci/contrib/rspec/runner.rb +6 -2
  14. data/lib/datadog/ci/ext/environment/providers/appveyor.rb +1 -1
  15. data/lib/datadog/ci/ext/environment/providers/aws_code_pipeline.rb +1 -1
  16. data/lib/datadog/ci/ext/environment/providers/azure.rb +1 -1
  17. data/lib/datadog/ci/ext/environment/providers/bitbucket.rb +1 -1
  18. data/lib/datadog/ci/ext/environment/providers/bitrise.rb +1 -1
  19. data/lib/datadog/ci/ext/environment/providers/buddy.rb +1 -1
  20. data/lib/datadog/ci/ext/environment/providers/buildkite.rb +1 -1
  21. data/lib/datadog/ci/ext/environment/providers/circleci.rb +1 -1
  22. data/lib/datadog/ci/ext/environment/providers/codefresh.rb +1 -1
  23. data/lib/datadog/ci/ext/environment/providers/github_actions.rb +1 -1
  24. data/lib/datadog/ci/ext/environment/providers/gitlab.rb +1 -1
  25. data/lib/datadog/ci/ext/environment/providers/jenkins.rb +1 -1
  26. data/lib/datadog/ci/ext/environment/providers/teamcity.rb +1 -1
  27. data/lib/datadog/ci/ext/environment/providers/travis.rb +1 -1
  28. data/lib/datadog/ci/ext/environment.rb +17 -0
  29. data/lib/datadog/ci/ext/settings.rb +1 -0
  30. data/lib/datadog/ci/ext/telemetry.rb +120 -0
  31. data/lib/datadog/ci/git/local_repository.rb +116 -25
  32. data/lib/datadog/ci/git/search_commits.rb +20 -1
  33. data/lib/datadog/ci/git/telemetry.rb +37 -0
  34. data/lib/datadog/ci/git/tree_uploader.rb +7 -0
  35. data/lib/datadog/ci/git/upload_packfile.rb +22 -1
  36. data/lib/datadog/ci/span.rb +3 -3
  37. data/lib/datadog/ci/test.rb +6 -1
  38. data/lib/datadog/ci/test_module.rb +1 -1
  39. data/lib/datadog/ci/{itr/runner.rb → test_optimisation/component.rb} +29 -12
  40. data/lib/datadog/ci/{itr → test_optimisation}/coverage/ddcov.rb +1 -1
  41. data/lib/datadog/ci/{itr → test_optimisation}/coverage/event.rb +1 -1
  42. data/lib/datadog/ci/{itr → test_optimisation}/coverage/transport.rb +11 -2
  43. data/lib/datadog/ci/{itr → test_optimisation}/coverage/writer.rb +1 -1
  44. data/lib/datadog/ci/{itr → test_optimisation}/skippable.rb +25 -1
  45. data/lib/datadog/ci/test_optimisation/telemetry.rb +56 -0
  46. data/lib/datadog/ci/test_session.rb +1 -1
  47. data/lib/datadog/ci/test_suite.rb +1 -1
  48. data/lib/datadog/ci/test_visibility/component.rb +282 -0
  49. data/lib/datadog/ci/test_visibility/{recorder.rb → context.rb} +39 -187
  50. data/lib/datadog/ci/test_visibility/{null_recorder.rb → null_component.rb} +6 -4
  51. data/lib/datadog/ci/test_visibility/{context → store}/global.rb +1 -1
  52. data/lib/datadog/ci/test_visibility/{context → store}/local.rb +1 -1
  53. data/lib/datadog/ci/test_visibility/telemetry.rb +69 -0
  54. data/lib/datadog/ci/test_visibility/transport.rb +9 -10
  55. data/lib/datadog/ci/transport/adapters/net.rb +42 -11
  56. data/lib/datadog/ci/transport/adapters/net_http_client.rb +17 -0
  57. data/lib/datadog/ci/transport/adapters/telemetry_webmock_safe_adapter.rb +28 -0
  58. data/lib/datadog/ci/transport/event_platform_transport.rb +42 -5
  59. data/lib/datadog/ci/transport/http.rb +49 -21
  60. data/lib/datadog/ci/transport/remote_settings_api.rb +39 -1
  61. data/lib/datadog/ci/transport/telemetry.rb +93 -0
  62. data/lib/datadog/ci/utils/identity.rb +20 -0
  63. data/lib/datadog/ci/utils/parsing.rb +2 -1
  64. data/lib/datadog/ci/utils/telemetry.rb +23 -0
  65. data/lib/datadog/ci/version.rb +1 -1
  66. data/lib/datadog/ci.rb +45 -15
  67. metadata +24 -14
@@ -1,18 +1,23 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "datadog/core/telemetry/ext"
4
+
3
5
  require_relative "../ext/settings"
4
6
  require_relative "../git/tree_uploader"
5
- require_relative "../itr/runner"
6
- require_relative "../itr/coverage/transport"
7
- require_relative "../itr/coverage/writer"
7
+ require_relative "../test_optimisation/component"
8
+ require_relative "../test_optimisation/coverage/transport"
9
+ require_relative "../test_optimisation/coverage/writer"
10
+ require_relative "../test_visibility/component"
8
11
  require_relative "../test_visibility/flush"
9
- require_relative "../test_visibility/recorder"
10
- require_relative "../test_visibility/null_recorder"
12
+ require_relative "../test_visibility/null_component"
11
13
  require_relative "../test_visibility/serializers/factories/test_level"
12
14
  require_relative "../test_visibility/serializers/factories/test_suite_level"
13
15
  require_relative "../test_visibility/transport"
16
+ require_relative "../transport/adapters/telemetry_webmock_safe_adapter"
14
17
  require_relative "../transport/api/builder"
15
18
  require_relative "../transport/remote_settings_api"
19
+ require_relative "../utils/identity"
20
+ require_relative "../utils/parsing"
16
21
  require_relative "../utils/test_run"
17
22
  require_relative "../worker"
18
23
 
@@ -21,15 +26,15 @@ module Datadog
21
26
  module Configuration
22
27
  # Adds CI behavior to Datadog trace components
23
28
  module Components
24
- attr_reader :ci_recorder, :itr
29
+ attr_reader :test_visibility, :test_optimisation
25
30
 
26
31
  def initialize(settings)
32
+ @test_optimisation = nil
33
+ @test_visibility = TestVisibility::NullComponent.new
34
+
27
35
  # Activate CI mode if enabled
28
36
  if settings.ci.enabled
29
37
  activate_ci!(settings)
30
- else
31
- @itr = nil
32
- @ci_recorder = TestVisibility::NullRecorder.new
33
38
  end
34
39
 
35
40
  super
@@ -38,8 +43,8 @@ module Datadog
38
43
  def shutdown!(replacement = nil)
39
44
  super
40
45
 
41
- @ci_recorder&.shutdown!
42
- @itr&.shutdown!
46
+ @test_visibility&.shutdown!
47
+ @test_optimisation&.shutdown!
43
48
  end
44
49
 
45
50
  def activate_ci!(settings)
@@ -53,22 +58,19 @@ module Datadog
53
58
  return
54
59
  end
55
60
 
56
- # Configure ddtrace library for CI visibility mode
57
- # Deactivate telemetry
58
- settings.telemetry.enabled = false
59
-
60
- # Deactivate remote configuration
61
- settings.remote.enabled = false
61
+ # Builds test visibility API layer in agentless or EvP proxy mode
62
+ test_visibility_api = build_test_visibility_api(settings)
63
+ # bail out early if api is misconfigured
64
+ return unless settings.ci.enabled
62
65
 
63
- # do not use 128-bit trace ids for CI visibility
64
- # they are used for OTEL compatibility in Datadog tracer
65
- settings.tracing.trace_id_128_bit_generation_enabled = false
66
+ # Configure datadog gem for test visibility mode
67
+ configure_telemetry(settings)
66
68
 
67
- # Activate underlying tracing test mode
68
- settings.tracing.test_mode.enabled = true
69
+ # Test visibility uses its own remote settings
70
+ settings.remote.enabled = false
69
71
 
70
- # Choose user defined TraceFlush or default to CI TraceFlush
71
- settings.tracing.test_mode.trace_flush = settings.ci.trace_flush || CI::TestVisibility::Flush::Partial.new
72
+ # startup logs are useless for test visibility and create noise
73
+ settings.diagnostics.startup_logs.enabled = false
72
74
 
73
75
  # When timecop is present, Time.now is mocked and .now_without_mock_time is added on Time to
74
76
  # get the current time without the mock.
@@ -81,76 +83,70 @@ module Datadog
81
83
  end
82
84
  end
83
85
 
84
- # startup logs are useless for CI visibility and create noise
85
- settings.diagnostics.startup_logs.enabled = false
86
+ # Configure Datadog::Tracing module
86
87
 
87
- # transport creation
88
- writer_options = settings.ci.writer_options
89
- coverage_writer = nil
90
- test_visibility_api = build_test_visibility_api(settings)
88
+ # No need not use 128-bit trace ids for test visibility,
89
+ # they are used for OTEL compatibility in Datadog tracer
90
+ settings.tracing.trace_id_128_bit_generation_enabled = false
91
91
 
92
- if test_visibility_api
93
- # setup writer for code coverage payloads
94
- coverage_writer = ITR::Coverage::Writer.new(
95
- transport: ITR::Coverage::Transport.new(api: test_visibility_api)
96
- )
92
+ # Activate underlying tracing test mode with async worker
93
+ settings.tracing.test_mode.enabled = true
94
+ settings.tracing.test_mode.async = true
95
+ settings.tracing.test_mode.trace_flush = settings.ci.trace_flush || CI::TestVisibility::Flush::Partial.new
97
96
 
98
- # configure tracing writer to send traces to CI visibility backend
99
- writer_options[:transport] = TestVisibility::Transport.new(
100
- api: test_visibility_api,
101
- serializers_factory: serializers_factory(settings),
102
- dd_env: settings.env
103
- )
104
- writer_options[:shutdown_timeout] = 60
105
- writer_options[:buffer_size] = 10_000
97
+ trace_writer_options = settings.ci.writer_options
98
+ trace_writer_options[:shutdown_timeout] = 60
99
+ trace_writer_options[:buffer_size] = 10_000
100
+ tracing_transport = build_tracing_transport(settings, test_visibility_api)
101
+ trace_writer_options[:transport] = tracing_transport if tracing_transport
106
102
 
107
- settings.tracing.test_mode.async = true
108
- else
109
- # only legacy APM protocol is supported, so no test suite level visibility
110
- settings.ci.force_test_level_visibility = true
103
+ settings.tracing.test_mode.writer_options = trace_writer_options
111
104
 
112
- # ITR is not supported with APM protocol
113
- settings.ci.itr_enabled = false
114
- end
105
+ # @type ivar @test_optimisation: Datadog::CI::TestOptimisation::Component
106
+ @test_optimisation = build_test_optimisation(settings, test_visibility_api)
115
107
 
116
- settings.tracing.test_mode.writer_options = writer_options
108
+ @test_visibility = TestVisibility::Component.new(
109
+ test_optimisation: @test_optimisation,
110
+ test_suite_level_visibility_enabled: !settings.ci.force_test_level_visibility,
111
+ remote_settings_api: build_remote_settings_client(settings, test_visibility_api),
112
+ git_tree_upload_worker: build_git_upload_worker(settings, test_visibility_api)
113
+ )
114
+ end
117
115
 
118
- custom_configuration_tags = Utils::TestRun.custom_configuration(settings.tags)
116
+ def build_test_optimisation(settings, test_visibility_api)
117
+ if settings.ci.itr_code_coverage_use_single_threaded_mode &&
118
+ settings.ci.itr_test_impact_analysis_use_allocation_tracing
119
+ Datadog.logger.warn(
120
+ "Intelligent test runner: Single threaded coverage mode is incompatible with allocation tracing. " \
121
+ "Allocation tracing will be disabled. It means that test impact analysis will not be able to detect " \
122
+ "instantiations of objects in your code, which is important for ActiveRecord models. " \
123
+ "Please add your app/model folder to the list of tracked files or disable single threaded coverage mode."
124
+ )
119
125
 
120
- remote_settings_api = Transport::RemoteSettingsApi.new(
121
- api: test_visibility_api,
122
- dd_env: settings.env,
123
- config_tags: custom_configuration_tags
124
- )
126
+ settings.ci.itr_test_impact_analysis_use_allocation_tracing = false
127
+ end
125
128
 
126
- itr = ITR::Runner.new(
129
+ if RUBY_VERSION.start_with?("3.2.") && RUBY_VERSION < "3.2.3" &&
130
+ settings.ci.itr_test_impact_analysis_use_allocation_tracing
131
+ Datadog.logger.warn(
132
+ "Intelligent test runner: Allocation tracing is not supported in Ruby versions 3.2.0, 3.2.1 and 3.2.2 and will be forcibly " \
133
+ "disabled. This is due to a VM bug that can lead to crashes (https://bugs.ruby-lang.org/issues/19482). " \
134
+ "Please update your Ruby version or add your app/model folder to the list of tracked files." \
135
+ "Set env variable DD_CIVISIBILITY_ITR_TEST_IMPACT_ANALYSIS_USE_ALLOCATION_TRACING to 0 to disable this warning."
136
+ )
137
+ settings.ci.itr_test_impact_analysis_use_allocation_tracing = false
138
+ end
139
+
140
+ TestOptimisation::Component.new(
127
141
  api: test_visibility_api,
128
142
  dd_env: settings.env,
129
- config_tags: custom_configuration_tags,
130
- coverage_writer: coverage_writer,
143
+ config_tags: custom_configuration(settings),
144
+ coverage_writer: build_coverage_writer(settings, test_visibility_api),
131
145
  enabled: settings.ci.enabled && settings.ci.itr_enabled,
132
146
  bundle_location: settings.ci.itr_code_coverage_excluded_bundle_path,
133
- use_single_threaded_coverage: settings.ci.itr_code_coverage_use_single_threaded_mode
147
+ use_single_threaded_coverage: settings.ci.itr_code_coverage_use_single_threaded_mode,
148
+ use_allocation_tracing: settings.ci.itr_test_impact_analysis_use_allocation_tracing
134
149
  )
135
-
136
- git_tree_uploader = Git::TreeUploader.new(api: test_visibility_api)
137
- git_tree_upload_worker = if settings.ci.git_metadata_upload_enabled
138
- Worker.new do |repository_url|
139
- git_tree_uploader.call(repository_url)
140
- end
141
- else
142
- DummyWorker.new
143
- end
144
-
145
- # CI visibility recorder global instance
146
- @ci_recorder = TestVisibility::Recorder.new(
147
- test_suite_level_visibility_enabled: !settings.ci.force_test_level_visibility,
148
- itr: itr,
149
- remote_settings_api: remote_settings_api,
150
- git_tree_upload_worker: git_tree_upload_worker
151
- )
152
-
153
- @itr = itr
154
150
  end
155
151
 
156
152
  def build_test_visibility_api(settings)
@@ -179,12 +175,61 @@ module Datadog
179
175
  Datadog.logger.debug(
180
176
  "Old agent version detected, no evp_proxy support. Forcing test level visibility mode"
181
177
  )
178
+
179
+ # only legacy APM protocol is supported, so no test suite level visibility
180
+ settings.ci.force_test_level_visibility = true
181
+
182
+ # ITR is not supported with APM protocol
183
+ settings.ci.itr_enabled = false
182
184
  end
183
185
  end
184
186
 
185
187
  api
186
188
  end
187
189
 
190
+ def build_tracing_transport(settings, api)
191
+ return nil if api.nil?
192
+
193
+ TestVisibility::Transport.new(
194
+ api: api,
195
+ serializers_factory: serializers_factory(settings),
196
+ dd_env: settings.env
197
+ )
198
+ end
199
+
200
+ def build_coverage_writer(settings, api)
201
+ return nil if api.nil?
202
+
203
+ TestOptimisation::Coverage::Writer.new(
204
+ transport: TestOptimisation::Coverage::Transport.new(api: api)
205
+ )
206
+ end
207
+
208
+ def build_git_upload_worker(settings, api)
209
+ if settings.ci.git_metadata_upload_enabled
210
+ git_tree_uploader = Git::TreeUploader.new(api: api)
211
+ Worker.new do |repository_url|
212
+ git_tree_uploader.call(repository_url)
213
+ end
214
+ else
215
+ DummyWorker.new
216
+ end
217
+ end
218
+
219
+ def build_remote_settings_client(settings, api)
220
+ Transport::RemoteSettingsApi.new(
221
+ api: api,
222
+ dd_env: settings.env,
223
+ config_tags: custom_configuration(settings)
224
+ )
225
+ end
226
+
227
+ # fetch custom tags provided by the user in DD_TAGS env var
228
+ # with prefix test.configuration.
229
+ def custom_configuration(settings)
230
+ @custom_configuration ||= Utils::TestRun.custom_configuration(settings.tags)
231
+ end
232
+
188
233
  def serializers_factory(settings)
189
234
  if settings.ci.force_test_level_visibility
190
235
  TestVisibility::Serializers::Factories::TestLevel
@@ -204,6 +249,30 @@ module Datadog
204
249
  end
205
250
  end
206
251
 
252
+ def configure_telemetry(settings)
253
+ # in development environment Datadog's telemetry is disabled by default
254
+ # for test visibility we want to enable it by default unless explicitly disabled
255
+ # NOTE: before agentless mode is released, we only enable telemetry when running with Datadog Agent
256
+ env_telemetry_enabled = ENV[Core::Telemetry::Ext::ENV_ENABLED]
257
+ settings.telemetry.enabled = !settings.ci.agentless_mode_enabled &&
258
+ (env_telemetry_enabled.nil? || Utils::Parsing.convert_to_bool(env_telemetry_enabled))
259
+
260
+ return unless settings.telemetry.enabled
261
+
262
+ begin
263
+ require "datadog/core/environment/identity"
264
+ require "datadog/core/telemetry/http/adapters/net"
265
+
266
+ # patch gem's identity to report datadog-ci library version instead of datadog gem version
267
+ Core::Environment::Identity.include(CI::Utils::Identity)
268
+
269
+ # patch gem's telemetry transport layer to use Net::HTTP instead of WebMock's Net::HTTP
270
+ Core::Telemetry::Http::Adapters::Net.include(CI::Transport::Adapters::TelemetryWebmockSafeAdapter)
271
+ rescue => e
272
+ Datadog.logger.warn("Failed to patch Datadog gem's telemetry layer: #{e}")
273
+ end
274
+ end
275
+
207
276
  def timecop?
208
277
  Gem.loaded_specs.key?("timecop") || !!defined?(Timecop)
209
278
  end
@@ -82,6 +82,12 @@ module Datadog
82
82
  o.default false
83
83
  end
84
84
 
85
+ option :itr_test_impact_analysis_use_allocation_tracing do |o|
86
+ o.type :bool
87
+ o.env CI::Ext::Settings::ENV_ITR_TEST_IMPACT_ANALYSIS_USE_ALLOCATION_TRACING
88
+ o.default true
89
+ end
90
+
85
91
  define_method(:instrument) do |integration_name, options = {}, &block|
86
92
  return unless enabled
87
93
 
@@ -35,14 +35,14 @@ module Datadog
35
35
  end
36
36
 
37
37
  def on_test_run_started(event)
38
- CI.start_test_session(
38
+ test_visibility_component.start_test_session(
39
39
  tags: {
40
40
  CI::Ext::Test::TAG_FRAMEWORK => Ext::FRAMEWORK,
41
41
  CI::Ext::Test::TAG_FRAMEWORK_VERSION => CI::Contrib::Cucumber::Integration.version.to_s
42
42
  },
43
43
  service: configuration[:service_name]
44
44
  )
45
- CI.start_test_module(Ext::FRAMEWORK)
45
+ test_visibility_component.start_test_module(Ext::FRAMEWORK)
46
46
  end
47
47
 
48
48
  def on_test_run_finished(event)
@@ -70,7 +70,7 @@ module Datadog
70
70
 
71
71
  start_test_suite(test_suite_name) unless same_test_suite_as_current?(test_suite_name)
72
72
 
73
- test_span = CI.start_test(
73
+ test_span = test_visibility_component.trace_test(
74
74
  event.test_case.name,
75
75
  test_suite_name,
76
76
  tags: tags,
@@ -82,7 +82,7 @@ module Datadog
82
82
  end
83
83
 
84
84
  def on_test_case_finished(event)
85
- test_span = CI.active_test
85
+ test_span = test_visibility_component.active_test
86
86
  return if test_span.nil?
87
87
 
88
88
  finish_span(test_span, event.result)
@@ -90,11 +90,11 @@ module Datadog
90
90
  end
91
91
 
92
92
  def on_test_step_started(event)
93
- CI.trace(event.test_step.to_s, type: Ext::STEP_SPAN_TYPE)
93
+ test_visibility_component.trace(event.test_step.to_s, type: Ext::STEP_SPAN_TYPE)
94
94
  end
95
95
 
96
96
  def on_test_step_finished(event)
97
- current_step_span = CI.active_span
97
+ current_step_span = test_visibility_component.active_span
98
98
  return if current_step_span.nil?
99
99
 
100
100
  finish_span(current_step_span, event.result)
@@ -130,8 +130,8 @@ module Datadog
130
130
  def finish_session(result)
131
131
  finish_current_test_suite
132
132
 
133
- test_session = CI.active_test_session
134
- test_module = CI.active_test_module
133
+ test_session = test_visibility_component.active_test_session
134
+ test_module = test_visibility_component.active_test_module
135
135
 
136
136
  return unless test_session && test_module
137
137
 
@@ -150,7 +150,7 @@ module Datadog
150
150
  def start_test_suite(test_suite_name)
151
151
  finish_current_test_suite
152
152
 
153
- @current_test_suite = CI.start_test_suite(test_suite_name)
153
+ @current_test_suite = test_visibility_component.start_test_suite(test_suite_name)
154
154
  end
155
155
 
156
156
  def finish_current_test_suite
@@ -197,6 +197,10 @@ module Datadog
197
197
  def configuration
198
198
  Datadog.configuration.ci[:cucumber]
199
199
  end
200
+
201
+ def test_visibility_component
202
+ Datadog.send(:components).test_visibility
203
+ end
200
204
  end
201
205
  end
202
206
  end
@@ -19,7 +19,7 @@ module Datadog
19
19
 
20
20
  test_suite_name = Helpers.test_suite_name(self, method)
21
21
 
22
- test_suite = Datadog::CI.start_test_suite(test_suite_name)
22
+ test_suite = test_visibility_component.start_test_suite(test_suite_name)
23
23
 
24
24
  results = super
25
25
  return results unless test_suite
@@ -34,6 +34,10 @@ module Datadog
34
34
  def datadog_configuration
35
35
  Datadog.configuration.ci[:minitest]
36
36
  end
37
+
38
+ def test_visibility_component
39
+ Datadog.send(:components).test_visibility
40
+ end
37
41
  end
38
42
  end
39
43
  end
@@ -18,14 +18,14 @@ module Datadog
18
18
 
19
19
  return unless datadog_configuration[:enabled]
20
20
 
21
- CI.start_test_session(
21
+ test_visibility_component.start_test_session(
22
22
  tags: {
23
23
  CI::Ext::Test::TAG_FRAMEWORK => Ext::FRAMEWORK,
24
24
  CI::Ext::Test::TAG_FRAMEWORK_VERSION => CI::Contrib::Minitest::Integration.version.to_s
25
25
  },
26
26
  service: datadog_configuration[:service_name]
27
27
  )
28
- CI.start_test_module(Ext::FRAMEWORK)
28
+ test_visibility_component.start_test_module(Ext::FRAMEWORK)
29
29
  end
30
30
 
31
31
  private
@@ -33,6 +33,10 @@ module Datadog
33
33
  def datadog_configuration
34
34
  Datadog.configuration.ci[:minitest]
35
35
  end
36
+
37
+ def test_visibility_component
38
+ Datadog.send(:components).test_visibility
39
+ end
36
40
  end
37
41
  end
38
42
  end
@@ -26,12 +26,12 @@ module Datadog
26
26
  test_suite_name = "#{test_suite_name} (#{name} concurrently)"
27
27
 
28
28
  # for parallel execution we need to start a new test suite for each test
29
- CI.start_test_suite(test_suite_name)
29
+ test_visibility_component.start_test_suite(test_suite_name)
30
30
  end
31
31
 
32
32
  source_file, line_number = method(name).source_location
33
33
 
34
- test_span = CI.start_test(
34
+ test_span = test_visibility_component.trace_test(
35
35
  name,
36
36
  test_suite_name,
37
37
  tags: {
@@ -47,7 +47,7 @@ module Datadog
47
47
  end
48
48
 
49
49
  def after_teardown
50
- test_span = CI.active_test
50
+ test_span = test_visibility_component.active_test
51
51
  return super unless test_span
52
52
 
53
53
  finish_with_result(test_span, result_code)
@@ -77,6 +77,10 @@ module Datadog
77
77
  def datadog_configuration
78
78
  Datadog.configuration.ci[:minitest]
79
79
  end
80
+
81
+ def test_visibility_component
82
+ Datadog.send(:components).test_visibility
83
+ end
80
84
  end
81
85
 
82
86
  module ClassMethods
@@ -34,10 +34,10 @@ module Datadog
34
34
 
35
35
  if ci_queue?
36
36
  suite_name = "#{suite_name} (ci-queue running example [#{test_name}])"
37
- test_suite_span = CI.start_test_suite(suite_name)
37
+ test_suite_span = test_visibility_component.start_test_suite(suite_name)
38
38
  end
39
39
 
40
- CI.trace_test(
40
+ test_visibility_component.trace_test(
41
41
  test_name,
42
42
  suite_name,
43
43
  tags: {
@@ -99,6 +99,10 @@ module Datadog
99
99
  Datadog.configuration.ci[:rspec]
100
100
  end
101
101
 
102
+ def test_visibility_component
103
+ Datadog.send(:components).test_visibility
104
+ end
105
+
102
106
  def ci_queue?
103
107
  !!defined?(::RSpec::Queue::ExampleExtension) &&
104
108
  self.class.ancestors.include?(::RSpec::Queue::ExampleExtension)
@@ -21,7 +21,7 @@ module Datadog
21
21
  return super unless top_level?
22
22
 
23
23
  suite_name = "#{description} at #{file_path}"
24
- test_suite = Datadog::CI.start_test_suite(suite_name)
24
+ test_suite = test_visibility_component.start_test_suite(suite_name)
25
25
 
26
26
  success = super
27
27
  return success unless test_suite
@@ -44,6 +44,10 @@ module Datadog
44
44
  def datadog_configuration
45
45
  Datadog.configuration.ci[:rspec]
46
46
  end
47
+
48
+ def test_visibility_component
49
+ Datadog.send(:components).test_visibility
50
+ end
47
51
  end
48
52
  end
49
53
  end
@@ -18,7 +18,7 @@ module Datadog
18
18
  return super if ::RSpec.configuration.dry_run?
19
19
  return super unless datadog_configuration[:enabled]
20
20
 
21
- test_session = CI.start_test_session(
21
+ test_session = test_visibility_component.start_test_session(
22
22
  tags: {
23
23
  CI::Ext::Test::TAG_FRAMEWORK => Ext::FRAMEWORK,
24
24
  CI::Ext::Test::TAG_FRAMEWORK_VERSION => CI::Contrib::RSpec::Integration.version.to_s
@@ -26,7 +26,7 @@ module Datadog
26
26
  service: datadog_configuration[:service_name]
27
27
  )
28
28
 
29
- test_module = CI.start_test_module(Ext::FRAMEWORK)
29
+ test_module = test_visibility_component.start_test_module(Ext::FRAMEWORK)
30
30
 
31
31
  result = super
32
32
  return result unless test_module && test_session
@@ -49,6 +49,10 @@ module Datadog
49
49
  def datadog_configuration
50
50
  Datadog.configuration.ci[:rspec]
51
51
  end
52
+
53
+ def test_visibility_component
54
+ Datadog.send(:components).test_visibility
55
+ end
52
56
  end
53
57
  end
54
58
  end
@@ -18,7 +18,7 @@ module Datadog
18
18
  return super if ::RSpec.configuration.dry_run?
19
19
  return super unless datadog_configuration[:enabled]
20
20
 
21
- test_session = CI.start_test_session(
21
+ test_session = test_visibility_component.start_test_session(
22
22
  tags: {
23
23
  CI::Ext::Test::TAG_FRAMEWORK => Ext::FRAMEWORK,
24
24
  CI::Ext::Test::TAG_FRAMEWORK_VERSION => CI::Contrib::RSpec::Integration.version.to_s
@@ -26,7 +26,7 @@ module Datadog
26
26
  service: datadog_configuration[:service_name]
27
27
  )
28
28
 
29
- test_module = CI.start_test_module(Ext::FRAMEWORK)
29
+ test_module = test_visibility_component.start_test_module(Ext::FRAMEWORK)
30
30
 
31
31
  result = super
32
32
  return result unless test_module && test_session
@@ -49,6 +49,10 @@ module Datadog
49
49
  def datadog_configuration
50
50
  Datadog.configuration.ci[:rspec]
51
51
  end
52
+
53
+ def test_visibility_component
54
+ Datadog.send(:components).test_visibility
55
+ end
52
56
  end
53
57
  end
54
58
  end
@@ -15,7 +15,7 @@ module Datadog
15
15
  end
16
16
 
17
17
  def provider_name
18
- "appveyor"
18
+ Provider::APPVEYOR
19
19
  end
20
20
 
21
21
  def pipeline_url
@@ -17,7 +17,7 @@ module Datadog
17
17
  end
18
18
 
19
19
  def provider_name
20
- "awscodepipeline"
20
+ Provider::AWS
21
21
  end
22
22
 
23
23
  def pipeline_id
@@ -17,7 +17,7 @@ module Datadog
17
17
  end
18
18
 
19
19
  def provider_name
20
- "azurepipelines"
20
+ Provider::AZURE
21
21
  end
22
22
 
23
23
  def pipeline_url
@@ -16,7 +16,7 @@ module Datadog
16
16
 
17
17
  # overridden methods
18
18
  def provider_name
19
- "bitbucket"
19
+ Provider::BITBUCKET
20
20
  end
21
21
 
22
22
  def pipeline_id
@@ -15,7 +15,7 @@ module Datadog
15
15
  end
16
16
 
17
17
  def provider_name
18
- "bitrise"
18
+ Provider::BITRISE
19
19
  end
20
20
 
21
21
  def pipeline_id
@@ -15,7 +15,7 @@ module Datadog
15
15
  end
16
16
 
17
17
  def provider_name
18
- "buddy"
18
+ Provider::BUDDYCI
19
19
  end
20
20
 
21
21
  def pipeline_id
@@ -17,7 +17,7 @@ module Datadog
17
17
  end
18
18
 
19
19
  def provider_name
20
- "buildkite"
20
+ Provider::BUILDKITE
21
21
  end
22
22
 
23
23
  def job_url