datadog-ci 1.0.0.beta2 → 1.0.0.beta4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (31) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +106 -72
  3. data/ext/datadog_cov/datadog_cov.c +36 -10
  4. data/lib/datadog/ci/configuration/components.rb +21 -2
  5. data/lib/datadog/ci/configuration/settings.rb +9 -3
  6. data/lib/datadog/ci/contrib/cucumber/formatter.rb +4 -1
  7. data/lib/datadog/ci/contrib/minitest/patcher.rb +2 -2
  8. data/lib/datadog/ci/contrib/minitest/test.rb +105 -0
  9. data/lib/datadog/ci/contrib/rspec/example.rb +2 -0
  10. data/lib/datadog/ci/contrib/rspec/knapsack_pro/extension.rb +30 -0
  11. data/lib/datadog/ci/contrib/rspec/knapsack_pro/runner.rb +57 -0
  12. data/lib/datadog/ci/contrib/rspec/patcher.rb +17 -1
  13. data/lib/datadog/ci/ext/environment.rb +5 -0
  14. data/lib/datadog/ci/ext/settings.rb +1 -0
  15. data/lib/datadog/ci/ext/test.rb +3 -1
  16. data/lib/datadog/ci/itr/coverage/writer.rb +7 -1
  17. data/lib/datadog/ci/itr/runner.rb +30 -6
  18. data/lib/datadog/ci/itr/skippable.rb +4 -2
  19. data/lib/datadog/ci/span.rb +7 -0
  20. data/lib/datadog/ci/test.rb +18 -0
  21. data/lib/datadog/ci/test_visibility/serializers/base.rb +3 -2
  22. data/lib/datadog/ci/test_visibility/serializers/factories/test_level.rb +3 -3
  23. data/lib/datadog/ci/test_visibility/serializers/factories/test_suite_level.rb +6 -6
  24. data/lib/datadog/ci/test_visibility/serializers/test_v2.rb +14 -2
  25. data/lib/datadog/ci/test_visibility/transport.rb +5 -1
  26. data/lib/datadog/ci/transport/remote_settings_api.rb +4 -2
  27. data/lib/datadog/ci/utils/bundle.rb +26 -0
  28. data/lib/datadog/ci/utils/test_run.rb +12 -0
  29. data/lib/datadog/ci/version.rb +1 -1
  30. metadata +10 -7
  31. data/lib/datadog/ci/contrib/minitest/hooks.rb +0 -77
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "knapsack_pro/extensions/rspec_extension"
4
+
5
+ require_relative "runner"
6
+
7
+ module Datadog
8
+ module CI
9
+ module Contrib
10
+ module RSpec
11
+ # Instrument RSpec::Core::Example
12
+ module KnapsackPro
13
+ module Extension
14
+ def self.included(base)
15
+ base.singleton_class.prepend(ClassMethods)
16
+ end
17
+
18
+ module ClassMethods
19
+ def setup!
20
+ super
21
+
22
+ ::RSpec::Core::Runner.include(Datadog::CI::Contrib::RSpec::KnapsackPro::Runner)
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,57 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../../../ext/test"
4
+ require_relative "../ext"
5
+
6
+ module Datadog
7
+ module CI
8
+ module Contrib
9
+ module RSpec
10
+ module KnapsackPro
11
+ module Runner
12
+ def self.included(base)
13
+ base.prepend(InstanceMethods)
14
+ end
15
+
16
+ module InstanceMethods
17
+ def knapsack__run_specs(*)
18
+ return super unless datadog_configuration[:enabled]
19
+
20
+ test_session = CI.start_test_session(
21
+ tags: {
22
+ CI::Ext::Test::TAG_FRAMEWORK => Ext::FRAMEWORK,
23
+ CI::Ext::Test::TAG_FRAMEWORK_VERSION => CI::Contrib::RSpec::Integration.version.to_s
24
+ },
25
+ service: datadog_configuration[:service_name]
26
+ )
27
+
28
+ test_module = CI.start_test_module(Ext::FRAMEWORK)
29
+
30
+ result = super
31
+ return result unless test_module && test_session
32
+
33
+ if result != 0
34
+ test_module.failed!
35
+ test_session.failed!
36
+ else
37
+ test_module.passed!
38
+ test_session.passed!
39
+ end
40
+ test_module.finish
41
+ test_session.finish
42
+
43
+ result
44
+ end
45
+
46
+ private
47
+
48
+ def datadog_configuration
49
+ Datadog.configuration.ci[:rspec]
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
@@ -21,19 +21,35 @@ module Datadog
21
21
  end
22
22
 
23
23
  def patch
24
+ # ci-queue test runner instrumentation
25
+ # https://github.com/Shopify/ci-queue
24
26
  if ci_queue?
25
27
  ::RSpec::Queue::Runner.include(Runner)
26
28
  end
27
29
 
30
+ # Knapsack Pro test runner instrumentation
31
+ # https://github.com/KnapsackPro/knapsack_pro-ruby
32
+ if knapsack_pro?
33
+ require_relative "knapsack_pro/extension"
34
+ ::KnapsackPro::Extensions::RSpecExtension.include(KnapsackPro::Extension)
35
+ end
36
+
28
37
  ::RSpec::Core::Runner.include(Runner)
29
38
  ::RSpec::Core::Example.include(Example)
30
39
  ::RSpec::Core::ExampleGroup.include(ExampleGroup)
31
40
  end
32
41
 
33
42
  def ci_queue?
34
- # ::RSpec::Queue::Runner is a ci-queue runner
35
43
  defined?(::RSpec::Queue::Runner)
36
44
  end
45
+
46
+ def knapsack_pro?
47
+ knapsack_version = Gem.loaded_specs["knapsack_pro"]&.version
48
+
49
+ # additional instrumentation is needed for KnapsackPro version 7 and later
50
+ defined?(::KnapsackPro) &&
51
+ knapsack_version && knapsack_version >= Gem::Version.new("7")
52
+ end
37
53
  end
38
54
  end
39
55
  end
@@ -23,6 +23,11 @@ module Datadog
23
23
  TAG_NODE_NAME = "ci.node.name"
24
24
  TAG_CI_ENV_VARS = "_dd.ci.env_vars"
25
25
 
26
+ POSSIBLE_BUNDLE_LOCATIONS = [
27
+ "vendor/bundle",
28
+ ".bundle"
29
+ ].freeze
30
+
26
31
  module_function
27
32
 
28
33
  def tags(env)
@@ -12,6 +12,7 @@ module Datadog
12
12
  ENV_FORCE_TEST_LEVEL_VISIBILITY = "DD_CIVISIBILITY_FORCE_TEST_LEVEL_VISIBILITY"
13
13
  ENV_ITR_ENABLED = "DD_CIVISIBILITY_ITR_ENABLED"
14
14
  ENV_GIT_METADATA_UPLOAD_ENABLED = "DD_CIVISIBILITY_GIT_METADATA_UPLOAD_ENABLED"
15
+ ENV_ITR_CODE_COVERAGE_EXCLUDED_BUNDLE_PATH = "DD_CIVISIBILITY_ITR_CODE_COVERAGE_EXCLUDED_BUNDLE_PATH"
15
16
 
16
17
  # Source: https://docs.datadoghq.com/getting_started/site/
17
18
  DD_SITE_ALLOWLIST = [
@@ -8,7 +8,6 @@ module Datadog
8
8
  module Test
9
9
  CONTEXT_ORIGIN = "ciapp-test"
10
10
 
11
- TAG_ARGUMENTS = "test.arguments"
12
11
  TAG_FRAMEWORK = "test.framework"
13
12
  TAG_FRAMEWORK_VERSION = "test.framework_version"
14
13
  TAG_NAME = "test.name"
@@ -29,6 +28,8 @@ module Datadog
29
28
  TAG_ITR_TEST_SKIPPING_COUNT = "test.itr.tests_skipping.count"
30
29
  TAG_ITR_SKIPPED_BY_ITR = "test.skipped_by_itr"
31
30
  TAG_ITR_TESTS_SKIPPED = "_dd.ci.itr.tests_skipped"
31
+ TAG_ITR_UNSKIPPABLE = "test.itr.unskippable"
32
+ TAG_ITR_FORCED_RUN = "test.itr.forced_run"
32
33
 
33
34
  # Code coverage tags
34
35
  TAG_CODE_COVERAGE_ENABLED = "test.code_coverage.enabled"
@@ -58,6 +59,7 @@ module Datadog
58
59
  # we use test skipping for Ruby
59
60
  ITR_TEST_SKIPPING_MODE = "test"
60
61
  ITR_TEST_SKIP_REASON = "Skipped by Datadog's intelligent test runner"
62
+ ITR_UNSKIPPABLE_OPTION = :datadog_itr_unskippable
61
63
 
62
64
  # test status as recognized by Datadog
63
65
  module Status
@@ -58,9 +58,15 @@ module Datadog
58
58
  def perform(*events)
59
59
  responses = transport.send_events(events)
60
60
 
61
- loop_back_off! if responses.find(&:server_error?)
61
+ if responses.find(&:server_error?)
62
+ loop_back_off!
63
+ Datadog.logger.warn { "Encountered server error while sending coverage events" }
64
+ end
62
65
 
63
66
  nil
67
+ rescue => e
68
+ Datadog.logger.warn { "Error while sending coverage events: #{e}" }
69
+ loop_back_off!
64
70
  end
65
71
 
66
72
  def stop(force_stop = false, timeout = @shutdown_timeout)
@@ -27,13 +27,22 @@ module Datadog
27
27
 
28
28
  def initialize(
29
29
  dd_env:,
30
+ config_tags: {},
30
31
  api: nil,
31
32
  coverage_writer: nil,
32
- enabled: false
33
+ enabled: false,
34
+ bundle_location: nil
33
35
  )
34
36
  @enabled = enabled
35
37
  @api = api
36
38
  @dd_env = dd_env
39
+ @config_tags = config_tags || {}
40
+
41
+ @bundle_location = if bundle_location && !File.absolute_path?(bundle_location)
42
+ File.join(Git::LocalRepository.root, bundle_location)
43
+ else
44
+ bundle_location
45
+ end
37
46
 
38
47
  @test_skipping_enabled = false
39
48
  @code_coverage_enabled = false
@@ -41,7 +50,7 @@ module Datadog
41
50
  @coverage_writer = coverage_writer
42
51
 
43
52
  @correlation_id = nil
44
- @skippable_tests = []
53
+ @skippable_tests = Set.new
45
54
 
46
55
  @skipped_tests_count = 0
47
56
  @mutex = Mutex.new
@@ -127,6 +136,11 @@ module Datadog
127
136
 
128
137
  skippable_test_id = Utils::TestRun.skippable_test_id(test.name, test.test_suite_name, test.parameters)
129
138
  if @skippable_tests.include?(skippable_test_id)
139
+ if forked?
140
+ Datadog.logger.warn { "ITR is not supported for forking test runners yet" }
141
+ return
142
+ end
143
+
130
144
  test.set_tag(Ext::Test::TAG_ITR_SKIPPED_BY_ITR, "true")
131
145
 
132
146
  Datadog.logger.debug { "Marked test as skippable: #{skippable_test_id}" }
@@ -136,13 +150,13 @@ module Datadog
136
150
  end
137
151
 
138
152
  def count_skipped_test(test)
153
+ return if !test.skipped? || !test.skipped_by_itr?
154
+
139
155
  if forked?
140
156
  Datadog.logger.warn { "ITR is not supported for forking test runners yet" }
141
157
  return
142
158
  end
143
159
 
144
- return if !test.skipped? || !test.skipped_by_itr?
145
-
146
160
  @mutex.synchronize do
147
161
  @skipped_tests_count += 1
148
162
  end
@@ -151,6 +165,9 @@ module Datadog
151
165
  def write_test_session_tags(test_session)
152
166
  return if !enabled?
153
167
 
168
+ Datadog.logger.debug { "Finished ITR session with test skipping enabled: #{@test_skipping_enabled}" }
169
+ Datadog.logger.debug { "#{@skipped_tests_count} tests were skipped" }
170
+
154
171
  test_session.set_tag(Ext::Test::TAG_ITR_TESTS_SKIPPED, @skipped_tests_count.positive?.to_s)
155
172
  test_session.set_tag(Ext::Test::TAG_ITR_TEST_SKIPPING_COUNT, @skipped_tests_count)
156
173
  end
@@ -167,7 +184,10 @@ module Datadog
167
184
  end
168
185
 
169
186
  def coverage_collector
170
- Thread.current[:dd_coverage_collector] ||= Coverage::DDCov.new(root: Git::LocalRepository.root)
187
+ Thread.current[:dd_coverage_collector] ||= Coverage::DDCov.new(
188
+ root: Git::LocalRepository.root,
189
+ ignored_path: @bundle_location
190
+ )
171
191
  end
172
192
 
173
193
  def load_datadog_cov!
@@ -191,11 +211,15 @@ module Datadog
191
211
  # we can only request skippable tests if git metadata is already uploaded
192
212
  git_tree_upload_worker.wait_until_done
193
213
 
194
- skippable_response = Skippable.new(api: @api, dd_env: @dd_env).fetch_skippable_tests(test_session)
214
+ skippable_response =
215
+ Skippable.new(api: @api, dd_env: @dd_env, config_tags: @config_tags)
216
+ .fetch_skippable_tests(test_session)
217
+
195
218
  @correlation_id = skippable_response.correlation_id
196
219
  @skippable_tests = skippable_response.tests
197
220
 
198
221
  Datadog.logger.debug { "Fetched skippable tests: \n #{@skippable_tests}" }
222
+ Datadog.logger.debug { "Found #{@skippable_tests.count} skippable tests." }
199
223
  Datadog.logger.debug { "ITR correlation ID: #{@correlation_id}" }
200
224
  end
201
225
  end
@@ -57,9 +57,10 @@ module Datadog
57
57
  end
58
58
  end
59
59
 
60
- def initialize(dd_env:, api: nil)
60
+ def initialize(dd_env:, api: nil, config_tags: {})
61
61
  @api = api
62
62
  @dd_env = dd_env
63
+ @config_tags = config_tags
63
64
  end
64
65
 
65
66
  def fetch_skippable_tests(test_session)
@@ -94,7 +95,8 @@ module Datadog
94
95
  Ext::Test::TAG_OS_ARCHITECTURE => test_session.os_architecture,
95
96
  Ext::Test::TAG_OS_VERSION => test_session.os_version,
96
97
  Ext::Test::TAG_RUNTIME_NAME => test_session.runtime_name,
97
- Ext::Test::TAG_RUNTIME_VERSION => test_session.runtime_version
98
+ Ext::Test::TAG_RUNTIME_VERSION => test_session.runtime_version,
99
+ "custom" => @config_tags
98
100
  }
99
101
  }
100
102
  }
@@ -102,6 +102,13 @@ module Datadog
102
102
  tracer_span.set_tag(key, value)
103
103
  end
104
104
 
105
+ # Removes tag by key.
106
+ # @param [String] key the key of the tag.
107
+ # @return [void]
108
+ def clear_tag(key)
109
+ tracer_span.clear_tag(key)
110
+ end
111
+
105
112
  # Sets metric value by key.
106
113
  # @param [String] key the key of the metric.
107
114
  # @param [Numeric] value the value of the metric.
@@ -69,6 +69,24 @@ module Datadog
69
69
  get_tag(Ext::Test::TAG_ITR_SKIPPED_BY_ITR) == "true"
70
70
  end
71
71
 
72
+ # Marks this test as unskippable by the intelligent test runner.
73
+ # This must be done before the test execution starts.
74
+ #
75
+ # Examples of tests that should be unskippable:
76
+ # - tests that read files from disk
77
+ # - tests that make network requests
78
+ # - tests that call external processes
79
+ # - tests that use forking or threading
80
+ #
81
+ # @return [void]
82
+ def itr_unskippable!
83
+ set_tag(Ext::Test::TAG_ITR_UNSKIPPABLE, "true")
84
+ if skipped_by_itr?
85
+ clear_tag(Ext::Test::TAG_ITR_SKIPPED_BY_ITR)
86
+ set_tag(Ext::Test::TAG_ITR_FORCED_RUN, "true")
87
+ end
88
+ end
89
+
72
90
  # Sets the status of the span to "pass".
73
91
  # @return [void]
74
92
  def passed!
@@ -28,11 +28,12 @@ module Datadog
28
28
  "duration"
29
29
  ].freeze
30
30
 
31
- attr_reader :trace, :span, :meta
31
+ attr_reader :trace, :span, :meta, :options
32
32
 
33
- def initialize(trace, span)
33
+ def initialize(trace, span, options: {})
34
34
  @trace = trace
35
35
  @span = span
36
+ @options = options
36
37
 
37
38
  @meta = @span.meta.reject { |key, _| Ext::Test::TRANSIENT_TAGS.include?(key) }
38
39
 
@@ -14,12 +14,12 @@ module Datadog
14
14
  module TestLevel
15
15
  module_function
16
16
 
17
- def serializer(trace, span)
17
+ def serializer(trace, span, options: {})
18
18
  case span.type
19
19
  when Datadog::CI::Ext::AppTypes::TYPE_TEST
20
- Serializers::TestV1.new(trace, span)
20
+ Serializers::TestV1.new(trace, span, options: options)
21
21
  else
22
- Serializers::Span.new(trace, span)
22
+ Serializers::Span.new(trace, span, options: options)
23
23
  end
24
24
  end
25
25
  end
@@ -15,18 +15,18 @@ module Datadog
15
15
  module TestSuiteLevel
16
16
  module_function
17
17
 
18
- def serializer(trace, span)
18
+ def serializer(trace, span, options: {})
19
19
  case span.type
20
20
  when Datadog::CI::Ext::AppTypes::TYPE_TEST
21
- Serializers::TestV2.new(trace, span)
21
+ Serializers::TestV2.new(trace, span, options: options)
22
22
  when Datadog::CI::Ext::AppTypes::TYPE_TEST_SESSION
23
- Serializers::TestSession.new(trace, span)
23
+ Serializers::TestSession.new(trace, span, options: options)
24
24
  when Datadog::CI::Ext::AppTypes::TYPE_TEST_MODULE
25
- Serializers::TestModule.new(trace, span)
25
+ Serializers::TestModule.new(trace, span, options: options)
26
26
  when Datadog::CI::Ext::AppTypes::TYPE_TEST_SUITE
27
- Serializers::TestSuite.new(trace, span)
27
+ Serializers::TestSuite.new(trace, span, options: options)
28
28
  else
29
- Serializers::Span.new(trace, span)
29
+ Serializers::Span.new(trace, span, options: options)
30
30
  end
31
31
  end
32
32
  end
@@ -10,22 +10,34 @@ module Datadog
10
10
  class TestV2 < TestV1
11
11
  CONTENT_FIELDS = (["test_session_id", "test_module_id", "test_suite_id"] + TestV1::CONTENT_FIELDS).freeze
12
12
 
13
+ CONTENT_FIELDS_WITH_ITR_CORRELATION_ID = (CONTENT_FIELDS + ["itr_correlation_id"]).freeze
14
+
13
15
  CONTENT_MAP_SIZE = calculate_content_map_size(CONTENT_FIELDS)
14
16
 
17
+ CONTENT_MAP_SIZE_WITH_ITR_CORRELATION_ID = calculate_content_map_size(CONTENT_FIELDS_WITH_ITR_CORRELATION_ID)
18
+
15
19
  REQUIRED_FIELDS = (["test_session_id", "test_module_id", "test_suite_id"] + TestV1::REQUIRED_FIELDS).freeze
16
20
 
17
21
  def content_fields
18
- CONTENT_FIELDS
22
+ return CONTENT_FIELDS if itr_correlation_id.nil?
23
+
24
+ CONTENT_FIELDS_WITH_ITR_CORRELATION_ID
19
25
  end
20
26
 
21
27
  def content_map_size
22
- CONTENT_MAP_SIZE
28
+ return CONTENT_MAP_SIZE if itr_correlation_id.nil?
29
+
30
+ CONTENT_MAP_SIZE_WITH_ITR_CORRELATION_ID
23
31
  end
24
32
 
25
33
  def version
26
34
  2
27
35
  end
28
36
 
37
+ def itr_correlation_id
38
+ options[:itr_correlation_id]
39
+ end
40
+
29
41
  private
30
42
 
31
43
  def required_fields
@@ -45,7 +45,7 @@ module Datadog
45
45
  end
46
46
 
47
47
  def encode_span(trace, span)
48
- serializer = serializers_factory.serializer(trace, span)
48
+ serializer = serializers_factory.serializer(trace, span, options: {itr_correlation_id: itr&.correlation_id})
49
49
 
50
50
  if serializer.valid?
51
51
  encoded = encoder.encode(serializer)
@@ -98,6 +98,10 @@ module Datadog
98
98
 
99
99
  packer.write("events")
100
100
  end
101
+
102
+ def itr
103
+ @itr ||= Datadog::CI.send(:itr_runner)
104
+ end
101
105
  end
102
106
  end
103
107
  end
@@ -51,9 +51,10 @@ module Datadog
51
51
  end
52
52
  end
53
53
 
54
- def initialize(dd_env:, api: nil)
54
+ def initialize(dd_env:, api: nil, config_tags: {})
55
55
  @api = api
56
56
  @dd_env = dd_env
57
+ @config_tags = config_tags || {}
57
58
  end
58
59
 
59
60
  def fetch_library_settings(test_session)
@@ -90,7 +91,8 @@ module Datadog
90
91
  Ext::Test::TAG_OS_ARCHITECTURE => test_session.os_architecture,
91
92
  Ext::Test::TAG_OS_VERSION => test_session.os_version,
92
93
  Ext::Test::TAG_RUNTIME_NAME => test_session.runtime_name,
93
- Ext::Test::TAG_RUNTIME_VERSION => test_session.runtime_version
94
+ Ext::Test::TAG_RUNTIME_VERSION => test_session.runtime_version,
95
+ "custom" => @config_tags
94
96
  }
95
97
  }
96
98
  }
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../ext/environment"
4
+ require_relative "../git/local_repository"
5
+
6
+ module Datadog
7
+ module CI
8
+ module Utils
9
+ module Bundle
10
+ def self.location
11
+ require "bundler"
12
+ bundle_path = Bundler.bundle_path.to_s
13
+ bundle_path if bundle_path&.start_with?(Datadog::CI::Git::LocalRepository.root)
14
+ rescue => e
15
+ Datadog.logger.warn("Failed to find bundled gems location: #{e}")
16
+
17
+ Ext::Environment::POSSIBLE_BUNDLE_LOCATIONS.each do |location|
18
+ path = File.join(Datadog::CI::Git::LocalRepository.root, location)
19
+ return path if File.directory?(path)
20
+ end
21
+ nil
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -22,6 +22,18 @@ module Datadog
22
22
  }
23
23
  )
24
24
  end
25
+
26
+ def self.custom_configuration(env_tags)
27
+ return {} if env_tags.nil?
28
+
29
+ res = {}
30
+ env_tags.each do |tag, value|
31
+ next unless tag.start_with?("test.configuration.")
32
+
33
+ res[tag.sub("test.configuration.", "")] = value
34
+ end
35
+ res
36
+ end
25
37
  end
26
38
  end
27
39
  end
@@ -6,7 +6,7 @@ module Datadog
6
6
  MAJOR = "1"
7
7
  MINOR = "0"
8
8
  PATCH = "0"
9
- PRE = "beta2"
9
+ PRE = "beta4"
10
10
  BUILD = nil
11
11
  # PRE and BUILD above are modified for dev gems during gem build GHA workflow
12
12
 
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: 1.0.0.beta2
4
+ version: 1.0.0.beta4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Datadog, Inc.
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-04-24 00:00:00.000000000 Z
11
+ date: 2024-05-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: datadog
@@ -77,17 +77,19 @@ files:
77
77
  - lib/datadog/ci/contrib/minitest/configuration/settings.rb
78
78
  - lib/datadog/ci/contrib/minitest/ext.rb
79
79
  - lib/datadog/ci/contrib/minitest/helpers.rb
80
- - lib/datadog/ci/contrib/minitest/hooks.rb
81
80
  - lib/datadog/ci/contrib/minitest/integration.rb
82
81
  - lib/datadog/ci/contrib/minitest/patcher.rb
83
82
  - lib/datadog/ci/contrib/minitest/reporter.rb
84
83
  - lib/datadog/ci/contrib/minitest/runnable.rb
85
84
  - lib/datadog/ci/contrib/minitest/runner.rb
85
+ - lib/datadog/ci/contrib/minitest/test.rb
86
86
  - lib/datadog/ci/contrib/rspec/configuration/settings.rb
87
87
  - lib/datadog/ci/contrib/rspec/example.rb
88
88
  - lib/datadog/ci/contrib/rspec/example_group.rb
89
89
  - lib/datadog/ci/contrib/rspec/ext.rb
90
90
  - lib/datadog/ci/contrib/rspec/integration.rb
91
+ - lib/datadog/ci/contrib/rspec/knapsack_pro/extension.rb
92
+ - lib/datadog/ci/contrib/rspec/knapsack_pro/runner.rb
91
93
  - lib/datadog/ci/contrib/rspec/patcher.rb
92
94
  - lib/datadog/ci/contrib/rspec/runner.rb
93
95
  - lib/datadog/ci/contrib/settings.rb
@@ -156,6 +158,7 @@ files:
156
158
  - lib/datadog/ci/transport/gzip.rb
157
159
  - lib/datadog/ci/transport/http.rb
158
160
  - lib/datadog/ci/transport/remote_settings_api.rb
161
+ - lib/datadog/ci/utils/bundle.rb
159
162
  - lib/datadog/ci/utils/configuration.rb
160
163
  - lib/datadog/ci/utils/git.rb
161
164
  - lib/datadog/ci/utils/parsing.rb
@@ -170,7 +173,7 @@ metadata:
170
173
  changelog_uri: https://github.com/DataDog/datadog-ci-rb/blob/main/CHANGELOG.md
171
174
  homepage_uri: https://github.com/DataDog/datadog-ci-rb
172
175
  source_code_uri: https://github.com/DataDog/datadog-ci-rb
173
- post_install_message:
176
+ post_install_message:
174
177
  rdoc_options: []
175
178
  require_paths:
176
179
  - lib
@@ -188,8 +191,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
188
191
  - !ruby/object:Gem::Version
189
192
  version: 2.0.0
190
193
  requirements: []
191
- rubygems_version: 3.5.6
192
- signing_key:
194
+ rubygems_version: 3.4.19
195
+ signing_key:
193
196
  specification_version: 4
194
197
  summary: Datadog CI visibility for your ruby application
195
198
  test_files: []