datadog-ci 0.5.0 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (61) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +33 -2
  3. data/lib/datadog/ci/configuration/components.rb +13 -9
  4. data/lib/datadog/ci/configuration/extensions.rb +21 -0
  5. data/lib/datadog/ci/contrib/cucumber/configuration/settings.rb +1 -1
  6. data/lib/datadog/ci/contrib/cucumber/ext.rb +7 -5
  7. data/lib/datadog/ci/contrib/cucumber/formatter.rb +99 -19
  8. data/lib/datadog/ci/contrib/minitest/configuration/settings.rb +1 -1
  9. data/lib/datadog/ci/contrib/minitest/ext.rb +6 -4
  10. data/lib/datadog/ci/contrib/minitest/helpers.rb +22 -0
  11. data/lib/datadog/ci/contrib/minitest/hooks.rb +45 -17
  12. data/lib/datadog/ci/contrib/minitest/patcher.rb +7 -0
  13. data/lib/datadog/ci/contrib/minitest/plugin.rb +73 -0
  14. data/lib/datadog/ci/contrib/minitest/runnable.rb +42 -0
  15. data/lib/datadog/ci/contrib/rspec/configuration/settings.rb +1 -1
  16. data/lib/datadog/ci/contrib/rspec/example.rb +2 -2
  17. data/lib/datadog/ci/contrib/rspec/example_group.rb +46 -0
  18. data/lib/datadog/ci/contrib/rspec/ext.rb +5 -4
  19. data/lib/datadog/ci/contrib/rspec/integration.rb +1 -1
  20. data/lib/datadog/ci/contrib/rspec/patcher.rb +5 -0
  21. data/lib/datadog/ci/contrib/rspec/runner.rb +57 -0
  22. data/lib/datadog/ci/contrib/settings.rb +1 -1
  23. data/lib/datadog/ci/ext/test.rb +2 -0
  24. data/lib/datadog/ci/span.rb +24 -0
  25. data/lib/datadog/ci/test.rb +30 -0
  26. data/lib/datadog/ci/test_session.rb +8 -0
  27. data/lib/datadog/ci/test_visibility/context/global.rb +82 -0
  28. data/lib/datadog/ci/test_visibility/context/local.rb +52 -0
  29. data/lib/datadog/ci/test_visibility/null_recorder.rb +73 -0
  30. data/lib/datadog/ci/test_visibility/recorder.rb +314 -0
  31. data/lib/datadog/ci/version.rb +1 -1
  32. data/lib/datadog/ci.rb +3 -3
  33. data/sig/datadog/ci/configuration/components.rbs +2 -2
  34. data/sig/datadog/ci/configuration/extensions.rbs +9 -0
  35. data/sig/datadog/ci/contrib/cucumber/ext.rbs +1 -5
  36. data/sig/datadog/ci/contrib/cucumber/formatter.rbs +17 -4
  37. data/sig/datadog/ci/contrib/minitest/ext.rbs +1 -5
  38. data/sig/datadog/ci/contrib/minitest/helpers.rbs +13 -0
  39. data/sig/datadog/ci/contrib/minitest/hooks.rbs +9 -1
  40. data/sig/datadog/ci/contrib/minitest/plugin.rbs +31 -0
  41. data/sig/datadog/ci/contrib/minitest/runnable.rbs +24 -0
  42. data/sig/datadog/ci/contrib/rspec/example_group.rbs +21 -0
  43. data/sig/datadog/ci/contrib/rspec/ext.rbs +2 -8
  44. data/sig/datadog/ci/contrib/rspec/runner.rbs +21 -0
  45. data/sig/datadog/ci/ext/test.rbs +2 -0
  46. data/sig/datadog/ci/span.rbs +8 -0
  47. data/sig/datadog/ci/test.rbs +5 -0
  48. data/sig/datadog/ci/test_visibility/context/global.rbs +39 -0
  49. data/sig/datadog/ci/test_visibility/context/local.rbs +23 -0
  50. data/sig/datadog/ci/test_visibility/null_recorder.rbs +45 -0
  51. data/sig/datadog/ci/test_visibility/recorder.rbs +85 -0
  52. data/sig/datadog/ci.rbs +3 -1
  53. metadata +23 -11
  54. data/lib/datadog/ci/context/global.rb +0 -80
  55. data/lib/datadog/ci/context/local.rb +0 -50
  56. data/lib/datadog/ci/extensions.rb +0 -19
  57. data/lib/datadog/ci/recorder.rb +0 -291
  58. data/sig/datadog/ci/context/global.rbs +0 -37
  59. data/sig/datadog/ci/context/local.rbs +0 -21
  60. data/sig/datadog/ci/extensions.rbs +0 -7
  61. data/sig/datadog/ci/recorder.rbs +0 -83
@@ -0,0 +1,23 @@
1
+ module Datadog
2
+ module CI
3
+ module TestVisibility
4
+ module Context
5
+ class Local
6
+ @key: Symbol
7
+
8
+ def initialize: () -> void
9
+
10
+ def activate_test!: (Datadog::CI::Test test) ?{ () -> untyped } -> void
11
+
12
+ def deactivate_test!: (Datadog::CI::Test test) -> void
13
+
14
+ def active_test: () -> Datadog::CI::Test?
15
+
16
+ private
17
+
18
+ def active_test=: (Datadog::CI::Test? test) -> untyped
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,45 @@
1
+ module Datadog
2
+ module CI
3
+ module TestVisibility
4
+ class NullRecorder
5
+ @null_span: Datadog::CI::NullSpan
6
+
7
+ def initialize: (?untyped args) -> void
8
+
9
+ def trace_test: (String span_name, String test_suite_name, ?service: String?, ?tags: Hash[untyped, untyped]) ?{ (Datadog::CI::Span span) -> untyped } -> untyped
10
+
11
+ def trace: (String span_type, String span_name, ?tags: Hash[untyped, untyped]) ?{ (Datadog::CI::Span span) -> untyped } -> untyped
12
+
13
+ def start_test_session: (?service: String?, ?tags: Hash[untyped, untyped]) -> Datadog::CI::Span
14
+
15
+ def start_test_module: (String test_module_name, ?service: String?, ?tags: Hash[untyped, untyped]) -> Datadog::CI::Span
16
+
17
+ def start_test_suite: (String test_suite_name, ?service: String?, ?tags: Hash[untyped, untyped]) -> Datadog::CI::Span
18
+
19
+ def active_test_session: () -> Datadog::CI::TestSession?
20
+
21
+ def active_test_module: () -> Datadog::CI::TestModule?
22
+
23
+ def active_test_suite: (String test_suite_name) -> Datadog::CI::TestSuite?
24
+
25
+ def active_test: () -> Datadog::CI::Test?
26
+
27
+ def active_span: () -> Datadog::CI::Span?
28
+
29
+ def deactivate_test: (Datadog::CI::Test test) -> void
30
+
31
+ def deactivate_test_session: () -> void
32
+
33
+ def deactivate_test_module: () -> void
34
+
35
+ def deactivate_test_suite: (String test_suite_name) -> void
36
+
37
+ private
38
+
39
+ def null_span: () -> Datadog::CI::Span
40
+
41
+ def skip_tracing: (?untyped block) -> untyped
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,85 @@
1
+ module Datadog
2
+ module CI
3
+ module TestVisibility
4
+ class Recorder
5
+ @test_suite_level_visibility_enabled: bool
6
+
7
+ @environment_tags: Hash[String, String]
8
+ @local_context: Datadog::CI::TestVisibility::Context::Local
9
+ @global_context: Datadog::CI::TestVisibility::Context::Global
10
+
11
+ @null_span: Datadog::CI::NullSpan
12
+
13
+ attr_reader environment_tags: Hash[String, String]
14
+ attr_reader test_suite_level_visibility_enabled: bool
15
+
16
+ def initialize: (?test_suite_level_visibility_enabled: bool) -> void
17
+
18
+ def trace_test: (String span_name, String test_suite_name, ?service: String?, ?tags: Hash[untyped, untyped]) ?{ (Datadog::CI::Span span) -> untyped } -> untyped
19
+
20
+ def trace: (String span_type, String span_name, ?tags: Hash[untyped, untyped]) ?{ (Datadog::CI::Span span) -> untyped } -> untyped
21
+
22
+ def start_test_session: (?service: String?, ?tags: Hash[untyped, untyped]) -> Datadog::CI::Span
23
+
24
+ def start_test_module: (String test_module_name, ?service: String?, ?tags: Hash[untyped, untyped]) -> Datadog::CI::Span
25
+
26
+ def start_test_suite: (String test_suite_name, ?service: String?, ?tags: Hash[untyped, untyped]) -> Datadog::CI::Span
27
+
28
+ def active_test_session: () -> Datadog::CI::TestSession?
29
+
30
+ def active_test_module: () -> Datadog::CI::TestModule?
31
+
32
+ def active_test_suite: (String test_suite_name) -> Datadog::CI::TestSuite?
33
+
34
+ def active_test: () -> Datadog::CI::Test?
35
+
36
+ def active_span: () -> Datadog::CI::Span?
37
+
38
+ def deactivate_test: (Datadog::CI::Test test) -> void
39
+
40
+ def deactivate_test_session: () -> void
41
+
42
+ def deactivate_test_module: () -> void
43
+
44
+ def deactivate_test_suite: (String test_suite_name) -> void
45
+
46
+ private
47
+
48
+ def create_datadog_span: (String span_name, ?span_options: Hash[untyped, untyped], ?tags: Hash[untyped, untyped]) ?{ (Datadog::CI::Span span) -> untyped } -> untyped
49
+
50
+ def set_trace_origin: (Datadog::Tracing::TraceOperation trace) -> untyped
51
+
52
+ def build_test: (Datadog::Tracing::SpanOperation tracer_span, Hash[untyped, untyped] tags) -> Datadog::CI::Test
53
+
54
+ def build_test_session: (Datadog::Tracing::SpanOperation tracer_span, Hash[untyped, untyped] tags) -> Datadog::CI::TestSession
55
+
56
+ def build_test_module: (Datadog::Tracing::SpanOperation tracer_span, Hash[untyped, untyped] tags) -> Datadog::CI::TestModule
57
+
58
+ def build_test_suite: (Datadog::Tracing::SpanOperation tracer_span, Hash[untyped, untyped] tags) -> Datadog::CI::TestSuite
59
+
60
+ def build_span: (Datadog::Tracing::SpanOperation tracer_span, Hash[untyped, untyped] tags) -> Datadog::CI::Span
61
+
62
+ def build_span_options: (String? service_name, String span_type, ?Hash[Symbol, untyped] other_options) -> Hash[Symbol, untyped]
63
+
64
+ def set_initial_tags: (Datadog::CI::Span ci_span, Hash[untyped, untyped] tags) -> void
65
+
66
+ # the type (Datadog::CI::TestSession | Datadog::Tracing::SpanOperation) screams of wrong/mising abstraction
67
+ def set_session_context: (Hash[untyped, untyped] tags, ?Datadog::CI::TestSession | Datadog::Tracing::SpanOperation? test_session) -> void
68
+
69
+ def set_suite_context: (Hash[untyped, untyped] tags, ?span: Datadog::Tracing::SpanOperation, ?name: String) -> void
70
+
71
+ def set_module_context: (Hash[untyped, untyped] tags, ?Datadog::CI::TestModule | Datadog::Tracing::SpanOperation? test_module) -> void
72
+
73
+ def null_span: () -> Datadog::CI::Span
74
+
75
+ def skip_tracing: (?untyped block) -> untyped
76
+
77
+ def start_datadog_tracer_span: (String span_name, Hash[untyped, untyped] span_options) ?{ (untyped) -> untyped } -> untyped
78
+
79
+ def set_inherited_globals: (Hash[untyped, untyped] tags) -> void
80
+
81
+ def validate_test_suite_level_visibility_correctness: (Datadog::CI::Test test) -> void
82
+ end
83
+ end
84
+ end
85
+ end
data/sig/datadog/ci.rbs CHANGED
@@ -18,6 +18,8 @@ module Datadog
18
18
 
19
19
  def self.active_test: () -> Datadog::CI::Test?
20
20
 
21
+ def self.active_test_suite: (String test_suite_name) -> Datadog::CI::TestSuite?
22
+
21
23
  def self.active_span: (String span_type) -> Datadog::CI::Span?
22
24
 
23
25
  def self.deactivate_test: (Datadog::CI::Test test) -> void
@@ -30,6 +32,6 @@ module Datadog
30
32
 
31
33
  def self.components: () -> Datadog::CI::Configuration::Components
32
34
 
33
- def self.recorder: () -> Datadog::CI::Recorder
35
+ def self.recorder: () -> Datadog::CI::TestVisibility::Recorder
34
36
  end
35
37
  end
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.5.0
4
+ version: 0.6.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: 2023-12-06 00:00:00.000000000 Z
11
+ date: 2024-01-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: msgpack
@@ -44,9 +44,8 @@ files:
44
44
  - lib/datadog/ci.rb
45
45
  - lib/datadog/ci/concurrent_span.rb
46
46
  - lib/datadog/ci/configuration/components.rb
47
+ - lib/datadog/ci/configuration/extensions.rb
47
48
  - lib/datadog/ci/configuration/settings.rb
48
- - lib/datadog/ci/context/global.rb
49
- - lib/datadog/ci/context/local.rb
50
49
  - lib/datadog/ci/contrib/cucumber/configuration/settings.rb
51
50
  - lib/datadog/ci/contrib/cucumber/ext.rb
52
51
  - lib/datadog/ci/contrib/cucumber/formatter.rb
@@ -56,14 +55,19 @@ files:
56
55
  - lib/datadog/ci/contrib/integration.rb
57
56
  - lib/datadog/ci/contrib/minitest/configuration/settings.rb
58
57
  - lib/datadog/ci/contrib/minitest/ext.rb
58
+ - lib/datadog/ci/contrib/minitest/helpers.rb
59
59
  - lib/datadog/ci/contrib/minitest/hooks.rb
60
60
  - lib/datadog/ci/contrib/minitest/integration.rb
61
61
  - lib/datadog/ci/contrib/minitest/patcher.rb
62
+ - lib/datadog/ci/contrib/minitest/plugin.rb
63
+ - lib/datadog/ci/contrib/minitest/runnable.rb
62
64
  - lib/datadog/ci/contrib/rspec/configuration/settings.rb
63
65
  - lib/datadog/ci/contrib/rspec/example.rb
66
+ - lib/datadog/ci/contrib/rspec/example_group.rb
64
67
  - lib/datadog/ci/contrib/rspec/ext.rb
65
68
  - lib/datadog/ci/contrib/rspec/integration.rb
66
69
  - lib/datadog/ci/contrib/rspec/patcher.rb
70
+ - lib/datadog/ci/contrib/rspec/runner.rb
67
71
  - lib/datadog/ci/contrib/settings.rb
68
72
  - lib/datadog/ci/ext/app_types.rb
69
73
  - lib/datadog/ci/ext/environment.rb
@@ -90,15 +94,17 @@ files:
90
94
  - lib/datadog/ci/ext/settings.rb
91
95
  - lib/datadog/ci/ext/test.rb
92
96
  - lib/datadog/ci/ext/transport.rb
93
- - lib/datadog/ci/extensions.rb
94
97
  - lib/datadog/ci/null_span.rb
95
- - lib/datadog/ci/recorder.rb
96
98
  - lib/datadog/ci/span.rb
97
99
  - lib/datadog/ci/test.rb
98
100
  - lib/datadog/ci/test_module.rb
99
101
  - lib/datadog/ci/test_session.rb
100
102
  - lib/datadog/ci/test_suite.rb
103
+ - lib/datadog/ci/test_visibility/context/global.rb
104
+ - lib/datadog/ci/test_visibility/context/local.rb
101
105
  - lib/datadog/ci/test_visibility/flush.rb
106
+ - lib/datadog/ci/test_visibility/null_recorder.rb
107
+ - lib/datadog/ci/test_visibility/recorder.rb
102
108
  - lib/datadog/ci/test_visibility/serializers/base.rb
103
109
  - lib/datadog/ci/test_visibility/serializers/factories/test_level.rb
104
110
  - lib/datadog/ci/test_visibility/serializers/factories/test_suite_level.rb
@@ -122,9 +128,8 @@ files:
122
128
  - sig/datadog/ci.rbs
123
129
  - sig/datadog/ci/concurrent_span.rbs
124
130
  - sig/datadog/ci/configuration/components.rbs
131
+ - sig/datadog/ci/configuration/extensions.rbs
125
132
  - sig/datadog/ci/configuration/settings.rbs
126
- - sig/datadog/ci/context/global.rbs
127
- - sig/datadog/ci/context/local.rbs
128
133
  - sig/datadog/ci/contrib/cucumber/configuration/settings.rbs
129
134
  - sig/datadog/ci/contrib/cucumber/ext.rbs
130
135
  - sig/datadog/ci/contrib/cucumber/formatter.rbs
@@ -134,14 +139,19 @@ files:
134
139
  - sig/datadog/ci/contrib/integration.rbs
135
140
  - sig/datadog/ci/contrib/minitest/configuration/settings.rbs
136
141
  - sig/datadog/ci/contrib/minitest/ext.rbs
142
+ - sig/datadog/ci/contrib/minitest/helpers.rbs
137
143
  - sig/datadog/ci/contrib/minitest/hooks.rbs
138
144
  - sig/datadog/ci/contrib/minitest/integration.rbs
139
145
  - sig/datadog/ci/contrib/minitest/patcher.rbs
146
+ - sig/datadog/ci/contrib/minitest/plugin.rbs
147
+ - sig/datadog/ci/contrib/minitest/runnable.rbs
140
148
  - sig/datadog/ci/contrib/rspec/configuration/settings.rbs
141
149
  - sig/datadog/ci/contrib/rspec/example.rbs
150
+ - sig/datadog/ci/contrib/rspec/example_group.rbs
142
151
  - sig/datadog/ci/contrib/rspec/ext.rbs
143
152
  - sig/datadog/ci/contrib/rspec/integration.rbs
144
153
  - sig/datadog/ci/contrib/rspec/patcher.rbs
154
+ - sig/datadog/ci/contrib/rspec/runner.rbs
145
155
  - sig/datadog/ci/contrib/settings.rbs
146
156
  - sig/datadog/ci/ext/app_types.rbs
147
157
  - sig/datadog/ci/ext/environment.rbs
@@ -168,15 +178,17 @@ files:
168
178
  - sig/datadog/ci/ext/settings.rbs
169
179
  - sig/datadog/ci/ext/test.rbs
170
180
  - sig/datadog/ci/ext/transport.rbs
171
- - sig/datadog/ci/extensions.rbs
172
181
  - sig/datadog/ci/null_span.rbs
173
- - sig/datadog/ci/recorder.rbs
174
182
  - sig/datadog/ci/span.rbs
175
183
  - sig/datadog/ci/test.rbs
176
184
  - sig/datadog/ci/test_module.rbs
177
185
  - sig/datadog/ci/test_session.rbs
178
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
179
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
180
192
  - sig/datadog/ci/test_visibility/serializers/base.rbs
181
193
  - sig/datadog/ci/test_visibility/serializers/factories/test_level.rbs
182
194
  - sig/datadog/ci/test_visibility/serializers/factories/test_suite_level.rbs
@@ -223,7 +235,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
223
235
  - !ruby/object:Gem::Version
224
236
  version: 2.0.0
225
237
  requirements: []
226
- rubygems_version: 3.4.21
238
+ rubygems_version: 3.4.22
227
239
  signing_key:
228
240
  specification_version: 4
229
241
  summary: Datadog CI visibility for your ruby application
@@ -1,80 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Datadog
4
- module CI
5
- module Context
6
- # This context is shared between threads and represents the current test session and test module.
7
- class Global
8
- def initialize
9
- # we are using Monitor instead of Mutex because it is reentrant
10
- @mutex = Monitor.new
11
-
12
- @test_session = nil
13
- @test_module = nil
14
- @test_suites = {}
15
- end
16
-
17
- def fetch_or_activate_test_suite(test_suite_name, &block)
18
- @mutex.synchronize do
19
- @test_suites[test_suite_name] ||= block.call
20
- end
21
- end
22
-
23
- def fetch_or_activate_test_module(&block)
24
- @mutex.synchronize do
25
- @test_module ||= block.call
26
- end
27
- end
28
-
29
- def fetch_or_activate_test_session(&block)
30
- @mutex.synchronize do
31
- @test_session ||= block.call
32
- end
33
- end
34
-
35
- def active_test_module
36
- @test_module
37
- end
38
-
39
- def active_test_session
40
- @test_session
41
- end
42
-
43
- def active_test_suite(test_suite_name)
44
- @mutex.synchronize { @test_suites[test_suite_name] }
45
- end
46
-
47
- def service
48
- @mutex.synchronize do
49
- # thank you RBS for this weirdness
50
- test_session = @test_session
51
- test_session.service if test_session
52
- end
53
- end
54
-
55
- def inheritable_session_tags
56
- @mutex.synchronize do
57
- test_session = @test_session
58
- if test_session
59
- test_session.inheritable_tags
60
- else
61
- {}
62
- end
63
- end
64
- end
65
-
66
- def deactivate_test_session!
67
- @mutex.synchronize { @test_session = nil }
68
- end
69
-
70
- def deactivate_test_module!
71
- @mutex.synchronize { @test_module = nil }
72
- end
73
-
74
- def deactivate_test_suite!(test_suite_name)
75
- @mutex.synchronize { @test_suites.delete(test_suite_name) }
76
- end
77
- end
78
- end
79
- end
80
- end
@@ -1,50 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Datadog
4
- module CI
5
- module Context
6
- class Local
7
- def initialize
8
- @key = :datadog_ci_active_test
9
-
10
- self.active_test = nil
11
- end
12
-
13
- def activate_test!(test)
14
- raise "Nested tests are not supported. Currently active test: #{active_test}" unless active_test.nil?
15
-
16
- if block_given?
17
- begin
18
- self.active_test = test
19
- yield
20
- ensure
21
- self.active_test = nil
22
- end
23
- else
24
- self.active_test = test
25
- end
26
- end
27
-
28
- def deactivate_test!(test)
29
- return if active_test.nil?
30
-
31
- if active_test == test
32
- self.active_test = nil
33
- else
34
- raise "Trying to deactivate test #{test}, but currently active test is #{active_test}"
35
- end
36
- end
37
-
38
- def active_test
39
- Thread.current[@key]
40
- end
41
-
42
- private
43
-
44
- def active_test=(test)
45
- Thread.current[@key] = test
46
- end
47
- end
48
- end
49
- end
50
- end
@@ -1,19 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "datadog/core/configuration/settings"
4
- require "datadog/core/configuration/components"
5
-
6
- require_relative "configuration/settings"
7
- require_relative "configuration/components"
8
-
9
- module Datadog
10
- module CI
11
- # Extends Datadog tracing with CI features
12
- module Extensions
13
- def self.activate!
14
- Core::Configuration::Settings.extend(CI::Configuration::Settings)
15
- Core::Configuration::Components.prepend(CI::Configuration::Components)
16
- end
17
- end
18
- end
19
- end