datadog-ci 1.11.0 → 1.13.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 (55) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +20 -2
  3. data/lib/datadog/ci/configuration/components.rb +27 -15
  4. data/lib/datadog/ci/configuration/settings.rb +12 -0
  5. data/lib/datadog/ci/contrib/cucumber/instrumentation.rb +5 -2
  6. data/lib/datadog/ci/contrib/cuprite/configuration/settings.rb +34 -0
  7. data/lib/datadog/ci/contrib/cuprite/driver.rb +94 -0
  8. data/lib/datadog/ci/contrib/cuprite/ext.rb +15 -0
  9. data/lib/datadog/ci/contrib/cuprite/integration.rb +44 -0
  10. data/lib/datadog/ci/contrib/cuprite/patcher.rb +24 -0
  11. data/lib/datadog/ci/contrib/cuprite/script_executor.rb +32 -0
  12. data/lib/datadog/ci/contrib/minitest/test.rb +3 -3
  13. data/lib/datadog/ci/contrib/rspec/example.rb +3 -3
  14. data/lib/datadog/ci/contrib/selenium/capybara_driver.rb +4 -4
  15. data/lib/datadog/ci/contrib/selenium/configuration/settings.rb +3 -1
  16. data/lib/datadog/ci/contrib/selenium/driver.rb +4 -4
  17. data/lib/datadog/ci/contrib/selenium/ext.rb +0 -15
  18. data/lib/datadog/ci/contrib/selenium/navigation.rb +2 -2
  19. data/lib/datadog/ci/ext/app_types.rb +1 -1
  20. data/lib/datadog/ci/ext/environment/providers/github_actions.rb +3 -0
  21. data/lib/datadog/ci/ext/environment.rb +4 -0
  22. data/lib/datadog/ci/ext/rum.rb +26 -0
  23. data/lib/datadog/ci/ext/settings.rb +2 -0
  24. data/lib/datadog/ci/ext/telemetry.rb +17 -5
  25. data/lib/datadog/ci/ext/test.rb +42 -4
  26. data/lib/datadog/ci/ext/transport.rb +6 -0
  27. data/lib/datadog/ci/remote/component.rb +11 -1
  28. data/lib/datadog/ci/remote/library_settings.rb +31 -0
  29. data/lib/datadog/ci/remote/library_settings_client.rb +2 -1
  30. data/lib/datadog/ci/test.rb +67 -9
  31. data/lib/datadog/ci/test_management/component.rb +61 -0
  32. data/lib/datadog/ci/test_management/null_component.rb +25 -0
  33. data/lib/datadog/ci/test_management/tests_properties.rb +128 -0
  34. data/lib/datadog/ci/test_optimisation/component.rb +5 -3
  35. data/lib/datadog/ci/test_retries/component.rb +37 -7
  36. data/lib/datadog/ci/test_retries/driver/base.rb +5 -0
  37. data/lib/datadog/ci/test_retries/driver/retry_failed.rb +4 -0
  38. data/lib/datadog/ci/test_retries/driver/retry_flaky_fixed.rb +38 -0
  39. data/lib/datadog/ci/test_retries/driver/retry_new.rb +2 -7
  40. data/lib/datadog/ci/test_retries/strategy/retry_flaky_fixed.rb +43 -0
  41. data/lib/datadog/ci/test_retries/strategy/retry_new.rb +4 -46
  42. data/lib/datadog/ci/test_suite.rb +21 -2
  43. data/lib/datadog/ci/test_visibility/capabilities.rb +36 -0
  44. data/lib/datadog/ci/test_visibility/component.rb +70 -2
  45. data/lib/datadog/ci/test_visibility/context.rb +0 -4
  46. data/lib/datadog/ci/{test_retries/unique_tests_client.rb → test_visibility/known_tests.rb} +10 -10
  47. data/lib/datadog/ci/test_visibility/null_component.rb +3 -0
  48. data/lib/datadog/ci/test_visibility/serializers/factories/test_level.rb +1 -1
  49. data/lib/datadog/ci/test_visibility/telemetry.rb +11 -2
  50. data/lib/datadog/ci/test_visibility/transport.rb +29 -3
  51. data/lib/datadog/ci/utils/rum.rb +42 -0
  52. data/lib/datadog/ci/version.rb +1 -1
  53. data/lib/datadog/ci.rb +14 -5
  54. metadata +20 -10
  55. data/lib/datadog/ci/contrib/selenium/rum.rb +0 -43
@@ -1,13 +1,18 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "datadog/core/environment/identity"
4
+ require "datadog/core/telemetry/logging"
5
+ require "datadog/core/utils/only_once"
4
6
 
7
+ require_relative "capabilities"
5
8
  require_relative "serializers/factories/test_level"
9
+
6
10
  require_relative "../ext/app_types"
7
11
  require_relative "../ext/telemetry"
8
12
  require_relative "../ext/transport"
9
13
  require_relative "../transport/event_platform_transport"
10
14
  require_relative "../transport/telemetry"
15
+ require_relative "../utils/configuration"
11
16
 
12
17
  module Datadog
13
18
  module CI
@@ -15,6 +20,10 @@ module Datadog
15
20
  class Transport < Datadog::CI::Transport::EventPlatformTransport
16
21
  attr_reader :serializers_factory, :dd_env
17
22
 
23
+ def self.log_once
24
+ @log_once ||= Datadog::Core::Utils::OnlyOnce.new
25
+ end
26
+
18
27
  def initialize(
19
28
  api:,
20
29
  dd_env:,
@@ -64,8 +73,15 @@ module Datadog
64
73
 
65
74
  encoded
66
75
  else
67
- Datadog.logger.warn("Invalid event skipped: #{serializer} Errors: #{serializer.validation_errors}")
76
+ message = "Invalid event skipped: #{serializer} Errors: #{serializer.validation_errors}"
77
+ Datadog.logger.warn(message)
68
78
  CI::Transport::Telemetry.endpoint_payload_dropped(1, endpoint: telemetry_endpoint_tag)
79
+
80
+ # log invalid message once as error to internal telemetry
81
+ self.class.log_once.run do
82
+ Core::Telemetry::Logger.error(message)
83
+ end
84
+
69
85
  nil
70
86
  end
71
87
  end
@@ -101,12 +117,22 @@ module Datadog
101
117
  packer.write("library_version")
102
118
  packer.write(Datadog::CI::VERSION::STRING)
103
119
 
120
+ library_capabilities_tags = Capabilities.tags
121
+
104
122
  Ext::AppTypes::CI_SPAN_TYPES.each do |ci_span_type|
105
123
  packer.write(ci_span_type)
106
- packer.write_map_header(1)
124
+ packer.write_map_header(2 + library_capabilities_tags.count)
107
125
 
108
- packer.write(Ext::Test::METADATA_TAG_TEST_SESSION_NAME)
126
+ packer.write(Ext::Test::TAG_TEST_SESSION_NAME)
109
127
  packer.write(test_visibility&.logical_test_session_name)
128
+
129
+ packer.write(Ext::Test::TAG_USER_PROVIDED_TEST_SERVICE)
130
+ packer.write(Utils::Configuration.service_name_provided_by_user?.to_s)
131
+
132
+ library_capabilities_tags.each do |tag, value|
133
+ packer.write(tag)
134
+ packer.write(value)
135
+ end
110
136
  end
111
137
 
112
138
  packer.write("events")
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../ext/rum"
4
+ require_relative "../ext/test"
5
+ require_relative "parsing"
6
+
7
+ module Datadog
8
+ module CI
9
+ module Utils
10
+ # Provides functionality to interact with Datadog Real User Monitoring product
11
+ # via executing JavaScript code in the browser.
12
+ #
13
+ # Relevant docs: https://docs.datadoghq.com/real_user_monitoring/browser/
14
+ module RUM
15
+ def self.is_rum_active?(script_executor)
16
+ is_rum_active_script_result = script_executor.execute_script(Ext::RUM::SCRIPT_IS_RUM_ACTIVE)
17
+
18
+ Datadog.logger.debug { "[RUM] SCRIPT_IS_RUM_ACTIVE result is #{is_rum_active_script_result.inspect}" }
19
+
20
+ Utils::Parsing.convert_to_bool(is_rum_active_script_result)
21
+ end
22
+
23
+ def self.stop_rum_session(script_executor, rum_flush_wait_millis: 500)
24
+ return unless is_rum_active?(script_executor)
25
+
26
+ Datadog::CI.active_test&.set_tag(
27
+ CI::Ext::Test::TAG_IS_RUM_ACTIVE,
28
+ "true"
29
+ )
30
+
31
+ result = script_executor.execute_script(Ext::RUM::SCRIPT_STOP_RUM_SESSION)
32
+ Datadog.logger.debug { "[RUM] SCRIPT_STOP_RUM_SESSION result is #{result.inspect}" }
33
+
34
+ # introduce a delay to allow the RUM session to be stopped
35
+ delay = rum_flush_wait_millis / 1000.0
36
+ Datadog.logger.debug { "[RUM] Waiting for #{delay} seconds" }
37
+ sleep(delay)
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -4,7 +4,7 @@ module Datadog
4
4
  module CI
5
5
  module VERSION
6
6
  MAJOR = 1
7
- MINOR = 11
7
+ MINOR = 13
8
8
  PATCH = 0
9
9
  PRE = nil
10
10
  BUILD = nil
data/lib/datadog/ci.rb CHANGED
@@ -10,7 +10,7 @@ require "datadog"
10
10
  require "datadog/core"
11
11
 
12
12
  module Datadog
13
- # Datadog CI visibility public API.
13
+ # Datadog Test Optimization public API.
14
14
  #
15
15
  # @public_api
16
16
  module CI
@@ -319,16 +319,16 @@ module Datadog
319
319
  # @return [Object] If a block is provided, returns the result of the block execution.
320
320
  # @return [Datadog::CI::Span] If no block is provided, returns the active,
321
321
  # unfinished {Datadog::CI::Span}.
322
- # @return [nil] if CI visibility is disabled
323
- # @raise [ReservedTypeError] if provided type is reserved for Datadog CI visibility
322
+ # @return [nil] if Test Optimization is disabled
323
+ # @raise [ReservedTypeError] if provided type is reserved for Datadog Test Optimization
324
324
  # @yield Optional block where newly created {Datadog::CI::Span} captures the execution.
325
325
  # @yieldparam [Datadog::CI::Span] ci_span the newly created and active [Datadog::CI::Span]
326
- # @yieldparam [nil] ci_span if CI visibility is disabled
326
+ # @yieldparam [nil] ci_span if Test Optimization is disabled
327
327
  def trace(span_name, type: "span", tags: {}, &block)
328
328
  if Ext::AppTypes::CI_SPAN_TYPES.include?(type)
329
329
  raise(
330
330
  ReservedTypeError,
331
- "Span type #{type} is reserved for Datadog CI visibility. " \
331
+ "Span type #{type} is reserved for Datadog Test Optimization. " \
332
332
  "Reserved types are: #{Ext::AppTypes::CI_SPAN_TYPES}"
333
333
  )
334
334
  end
@@ -401,6 +401,14 @@ module Datadog
401
401
  def test_optimisation
402
402
  components.test_optimisation
403
403
  end
404
+
405
+ def test_management
406
+ components.test_management
407
+ end
408
+
409
+ def test_retries
410
+ components.test_retries
411
+ end
404
412
  end
405
413
  end
406
414
  end
@@ -418,6 +426,7 @@ require_relative "ci/contrib/ciqueue/integration"
418
426
 
419
427
  # Additional test libraries (auto instrumented later on test session start)
420
428
  require_relative "ci/contrib/selenium/integration"
429
+ require_relative "ci/contrib/cuprite/integration"
421
430
  require_relative "ci/contrib/simplecov/integration"
422
431
 
423
432
  # Configuration extensions
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: datadog-ci
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.11.0
4
+ version: 1.13.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Datadog, Inc.
8
- autorequire:
9
8
  bindir: exe
10
9
  cert_chain: []
11
- date: 2025-01-02 00:00:00.000000000 Z
10
+ date: 2025-02-25 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: datadog
@@ -39,7 +38,7 @@ dependencies:
39
38
  - !ruby/object:Gem::Version
40
39
  version: '0'
41
40
  description: |2
42
- datadog-ci is a Datadog's CI visibility library for Ruby. It traces
41
+ datadog-ci is a Datadog's Test Optimization library for Ruby. It traces
43
42
  tests as they are being executed and brings developers visibility into
44
43
  their CI pipelines.
45
44
  email:
@@ -83,6 +82,12 @@ files:
83
82
  - lib/datadog/ci/contrib/cucumber/instrumentation.rb
84
83
  - lib/datadog/ci/contrib/cucumber/integration.rb
85
84
  - lib/datadog/ci/contrib/cucumber/patcher.rb
85
+ - lib/datadog/ci/contrib/cuprite/configuration/settings.rb
86
+ - lib/datadog/ci/contrib/cuprite/driver.rb
87
+ - lib/datadog/ci/contrib/cuprite/ext.rb
88
+ - lib/datadog/ci/contrib/cuprite/integration.rb
89
+ - lib/datadog/ci/contrib/cuprite/patcher.rb
90
+ - lib/datadog/ci/contrib/cuprite/script_executor.rb
86
91
  - lib/datadog/ci/contrib/instrumentation.rb
87
92
  - lib/datadog/ci/contrib/integration.rb
88
93
  - lib/datadog/ci/contrib/knapsack/extension.rb
@@ -113,7 +118,6 @@ files:
113
118
  - lib/datadog/ci/contrib/selenium/integration.rb
114
119
  - lib/datadog/ci/contrib/selenium/navigation.rb
115
120
  - lib/datadog/ci/contrib/selenium/patcher.rb
116
- - lib/datadog/ci/contrib/selenium/rum.rb
117
121
  - lib/datadog/ci/contrib/settings.rb
118
122
  - lib/datadog/ci/contrib/simplecov/configuration/settings.rb
119
123
  - lib/datadog/ci/contrib/simplecov/ext.rb
@@ -142,6 +146,7 @@ files:
142
146
  - lib/datadog/ci/ext/environment/providers/travis.rb
143
147
  - lib/datadog/ci/ext/environment/providers/user_defined_tags.rb
144
148
  - lib/datadog/ci/ext/git.rb
149
+ - lib/datadog/ci/ext/rum.rb
145
150
  - lib/datadog/ci/ext/settings.rb
146
151
  - lib/datadog/ci/ext/telemetry.rb
147
152
  - lib/datadog/ci/ext/test.rb
@@ -159,6 +164,9 @@ files:
159
164
  - lib/datadog/ci/remote/slow_test_retries.rb
160
165
  - lib/datadog/ci/span.rb
161
166
  - lib/datadog/ci/test.rb
167
+ - lib/datadog/ci/test_management/component.rb
168
+ - lib/datadog/ci/test_management/null_component.rb
169
+ - lib/datadog/ci/test_management/tests_properties.rb
162
170
  - lib/datadog/ci/test_module.rb
163
171
  - lib/datadog/ci/test_optimisation/component.rb
164
172
  - lib/datadog/ci/test_optimisation/coverage/ddcov.rb
@@ -174,18 +182,21 @@ files:
174
182
  - lib/datadog/ci/test_retries/driver/base.rb
175
183
  - lib/datadog/ci/test_retries/driver/no_retry.rb
176
184
  - lib/datadog/ci/test_retries/driver/retry_failed.rb
185
+ - lib/datadog/ci/test_retries/driver/retry_flaky_fixed.rb
177
186
  - lib/datadog/ci/test_retries/driver/retry_new.rb
178
187
  - lib/datadog/ci/test_retries/null_component.rb
179
188
  - lib/datadog/ci/test_retries/strategy/base.rb
180
189
  - lib/datadog/ci/test_retries/strategy/no_retry.rb
181
190
  - lib/datadog/ci/test_retries/strategy/retry_failed.rb
191
+ - lib/datadog/ci/test_retries/strategy/retry_flaky_fixed.rb
182
192
  - lib/datadog/ci/test_retries/strategy/retry_new.rb
183
- - lib/datadog/ci/test_retries/unique_tests_client.rb
184
193
  - lib/datadog/ci/test_session.rb
185
194
  - lib/datadog/ci/test_suite.rb
195
+ - lib/datadog/ci/test_visibility/capabilities.rb
186
196
  - lib/datadog/ci/test_visibility/component.rb
187
197
  - lib/datadog/ci/test_visibility/context.rb
188
198
  - lib/datadog/ci/test_visibility/flush.rb
199
+ - lib/datadog/ci/test_visibility/known_tests.rb
189
200
  - lib/datadog/ci/test_visibility/null_component.rb
190
201
  - lib/datadog/ci/test_visibility/null_transport.rb
191
202
  - lib/datadog/ci/test_visibility/serializers/base.rb
@@ -217,6 +228,7 @@ files:
217
228
  - lib/datadog/ci/utils/configuration.rb
218
229
  - lib/datadog/ci/utils/git.rb
219
230
  - lib/datadog/ci/utils/parsing.rb
231
+ - lib/datadog/ci/utils/rum.rb
220
232
  - lib/datadog/ci/utils/telemetry.rb
221
233
  - lib/datadog/ci/utils/test_run.rb
222
234
  - lib/datadog/ci/version.rb
@@ -229,7 +241,6 @@ metadata:
229
241
  changelog_uri: https://github.com/DataDog/datadog-ci-rb/blob/main/CHANGELOG.md
230
242
  homepage_uri: https://github.com/DataDog/datadog-ci-rb
231
243
  source_code_uri: https://github.com/DataDog/datadog-ci-rb
232
- post_install_message:
233
244
  rdoc_options: []
234
245
  require_paths:
235
246
  - lib
@@ -247,8 +258,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
247
258
  - !ruby/object:Gem::Version
248
259
  version: 2.0.0
249
260
  requirements: []
250
- rubygems_version: 3.5.22
251
- signing_key:
261
+ rubygems_version: 3.6.2
252
262
  specification_version: 4
253
- summary: Datadog CI visibility for your ruby application
263
+ summary: Datadog Test Optimization for your ruby application
254
264
  test_files: []
@@ -1,43 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative "ext"
4
- require_relative "../../ext/test"
5
- require_relative "../../utils/parsing"
6
-
7
- module Datadog
8
- module CI
9
- module Contrib
10
- module Selenium
11
- # Provides functionality to interact with Datadog Real User Monitoring product
12
- # via executing JavaScript code in the browser.
13
- #
14
- # Relevant docs: https://docs.datadoghq.com/real_user_monitoring/browser/
15
- module RUM
16
- def self.is_rum_active?(script_executor)
17
- is_rum_active_script_result = script_executor.execute_script(Ext::SCRIPT_IS_RUM_ACTIVE)
18
- Datadog.logger.debug { "[Selenium] SCRIPT_IS_RUM_ACTIVE result is #{is_rum_active_script_result.inspect}" }
19
- Utils::Parsing.convert_to_bool(is_rum_active_script_result)
20
- end
21
-
22
- def self.stop_rum_session(script_executor)
23
- config = Datadog.configuration.ci[:selenium]
24
- if is_rum_active?(script_executor)
25
- Datadog::CI.active_test&.set_tag(
26
- CI::Ext::Test::TAG_IS_RUM_ACTIVE,
27
- "true"
28
- )
29
-
30
- result = script_executor.execute_script(Ext::SCRIPT_STOP_RUM_SESSION)
31
- Datadog.logger.debug { "[Selenium] SCRIPT_STOP_RUM_SESSION result is #{result.inspect}" }
32
-
33
- # introduce a delay to allow the RUM session to be stopped
34
- delay = config[:rum_flush_wait_millis] / 1000.0
35
- Datadog.logger.debug { "[Selenium] Waiting for #{delay} seconds" }
36
- sleep(delay)
37
- end
38
- end
39
- end
40
- end
41
- end
42
- end
43
- end