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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +20 -2
- data/lib/datadog/ci/configuration/components.rb +27 -15
- data/lib/datadog/ci/configuration/settings.rb +12 -0
- data/lib/datadog/ci/contrib/cucumber/instrumentation.rb +5 -2
- data/lib/datadog/ci/contrib/cuprite/configuration/settings.rb +34 -0
- data/lib/datadog/ci/contrib/cuprite/driver.rb +94 -0
- data/lib/datadog/ci/contrib/cuprite/ext.rb +15 -0
- data/lib/datadog/ci/contrib/cuprite/integration.rb +44 -0
- data/lib/datadog/ci/contrib/cuprite/patcher.rb +24 -0
- data/lib/datadog/ci/contrib/cuprite/script_executor.rb +32 -0
- data/lib/datadog/ci/contrib/minitest/test.rb +3 -3
- data/lib/datadog/ci/contrib/rspec/example.rb +3 -3
- data/lib/datadog/ci/contrib/selenium/capybara_driver.rb +4 -4
- data/lib/datadog/ci/contrib/selenium/configuration/settings.rb +3 -1
- data/lib/datadog/ci/contrib/selenium/driver.rb +4 -4
- data/lib/datadog/ci/contrib/selenium/ext.rb +0 -15
- data/lib/datadog/ci/contrib/selenium/navigation.rb +2 -2
- data/lib/datadog/ci/ext/app_types.rb +1 -1
- data/lib/datadog/ci/ext/environment/providers/github_actions.rb +3 -0
- data/lib/datadog/ci/ext/environment.rb +4 -0
- data/lib/datadog/ci/ext/rum.rb +26 -0
- data/lib/datadog/ci/ext/settings.rb +2 -0
- data/lib/datadog/ci/ext/telemetry.rb +17 -5
- data/lib/datadog/ci/ext/test.rb +42 -4
- data/lib/datadog/ci/ext/transport.rb +6 -0
- data/lib/datadog/ci/remote/component.rb +11 -1
- data/lib/datadog/ci/remote/library_settings.rb +31 -0
- data/lib/datadog/ci/remote/library_settings_client.rb +2 -1
- data/lib/datadog/ci/test.rb +67 -9
- data/lib/datadog/ci/test_management/component.rb +61 -0
- data/lib/datadog/ci/test_management/null_component.rb +25 -0
- data/lib/datadog/ci/test_management/tests_properties.rb +128 -0
- data/lib/datadog/ci/test_optimisation/component.rb +5 -3
- data/lib/datadog/ci/test_retries/component.rb +37 -7
- data/lib/datadog/ci/test_retries/driver/base.rb +5 -0
- data/lib/datadog/ci/test_retries/driver/retry_failed.rb +4 -0
- data/lib/datadog/ci/test_retries/driver/retry_flaky_fixed.rb +38 -0
- data/lib/datadog/ci/test_retries/driver/retry_new.rb +2 -7
- data/lib/datadog/ci/test_retries/strategy/retry_flaky_fixed.rb +43 -0
- data/lib/datadog/ci/test_retries/strategy/retry_new.rb +4 -46
- data/lib/datadog/ci/test_suite.rb +21 -2
- data/lib/datadog/ci/test_visibility/capabilities.rb +36 -0
- data/lib/datadog/ci/test_visibility/component.rb +70 -2
- data/lib/datadog/ci/test_visibility/context.rb +0 -4
- data/lib/datadog/ci/{test_retries/unique_tests_client.rb → test_visibility/known_tests.rb} +10 -10
- data/lib/datadog/ci/test_visibility/null_component.rb +3 -0
- data/lib/datadog/ci/test_visibility/serializers/factories/test_level.rb +1 -1
- data/lib/datadog/ci/test_visibility/telemetry.rb +11 -2
- data/lib/datadog/ci/test_visibility/transport.rb +29 -3
- data/lib/datadog/ci/utils/rum.rb +42 -0
- data/lib/datadog/ci/version.rb +1 -1
- data/lib/datadog/ci.rb +14 -5
- metadata +20 -10
- 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
|
-
|
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(
|
124
|
+
packer.write_map_header(2 + library_capabilities_tags.count)
|
107
125
|
|
108
|
-
packer.write(Ext::Test::
|
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
|
data/lib/datadog/ci/version.rb
CHANGED
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
|
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
|
323
|
-
# @raise [ReservedTypeError] if provided type is reserved for Datadog
|
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
|
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
|
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.
|
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-
|
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
|
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.
|
251
|
-
signing_key:
|
261
|
+
rubygems_version: 3.6.2
|
252
262
|
specification_version: 4
|
253
|
-
summary: Datadog
|
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
|