datadog-ci 0.8.3 → 1.0.0.beta2

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 (70) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +42 -0
  3. data/LICENSE-3rdparty.csv +1 -1
  4. data/README.md +40 -55
  5. data/ext/datadog_cov/datadog_cov.c +192 -0
  6. data/ext/datadog_cov/extconf.rb +18 -0
  7. data/lib/datadog/ci/configuration/components.rb +43 -9
  8. data/lib/datadog/ci/configuration/settings.rb +7 -1
  9. data/lib/datadog/ci/contrib/cucumber/configuration/settings.rb +0 -15
  10. data/lib/datadog/ci/contrib/cucumber/ext.rb +1 -5
  11. data/lib/datadog/ci/contrib/cucumber/formatter.rb +13 -18
  12. data/lib/datadog/ci/contrib/cucumber/integration.rb +1 -2
  13. data/lib/datadog/ci/contrib/cucumber/patcher.rb +3 -0
  14. data/lib/datadog/ci/contrib/cucumber/step.rb +27 -0
  15. data/lib/datadog/ci/contrib/minitest/configuration/settings.rb +0 -15
  16. data/lib/datadog/ci/contrib/minitest/ext.rb +1 -5
  17. data/lib/datadog/ci/contrib/minitest/helpers.rb +1 -2
  18. data/lib/datadog/ci/contrib/minitest/hooks.rb +4 -2
  19. data/lib/datadog/ci/contrib/minitest/integration.rb +1 -1
  20. data/lib/datadog/ci/contrib/rspec/configuration/settings.rb +0 -15
  21. data/lib/datadog/ci/contrib/rspec/example.rb +25 -23
  22. data/lib/datadog/ci/contrib/rspec/ext.rb +0 -4
  23. data/lib/datadog/ci/contrib/rspec/integration.rb +1 -2
  24. data/lib/datadog/ci/contrib/settings.rb +0 -3
  25. data/lib/datadog/ci/ext/environment/providers/base.rb +1 -1
  26. data/lib/datadog/ci/ext/environment/providers/bitbucket.rb +1 -1
  27. data/lib/datadog/ci/ext/environment/providers/local_git.rb +8 -79
  28. data/lib/datadog/ci/ext/environment.rb +11 -16
  29. data/lib/datadog/ci/ext/settings.rb +1 -0
  30. data/lib/datadog/ci/ext/test.rb +5 -0
  31. data/lib/datadog/ci/ext/transport.rb +12 -0
  32. data/lib/datadog/ci/git/local_repository.rb +238 -0
  33. data/lib/datadog/ci/git/packfiles.rb +70 -0
  34. data/lib/datadog/ci/git/search_commits.rb +77 -0
  35. data/lib/datadog/ci/git/tree_uploader.rb +90 -0
  36. data/lib/datadog/ci/git/upload_packfile.rb +66 -0
  37. data/lib/datadog/ci/git/user.rb +29 -0
  38. data/lib/datadog/ci/itr/coverage/ddcov.rb +14 -0
  39. data/lib/datadog/ci/itr/coverage/event.rb +81 -0
  40. data/lib/datadog/ci/itr/coverage/transport.rb +42 -0
  41. data/lib/datadog/ci/itr/coverage/writer.rb +108 -0
  42. data/lib/datadog/ci/itr/runner.rb +143 -6
  43. data/lib/datadog/ci/itr/skippable.rb +106 -0
  44. data/lib/datadog/ci/span.rb +9 -0
  45. data/lib/datadog/ci/test.rb +20 -14
  46. data/lib/datadog/ci/test_module.rb +2 -2
  47. data/lib/datadog/ci/test_session.rb +2 -2
  48. data/lib/datadog/ci/test_suite.rb +2 -2
  49. data/lib/datadog/ci/test_visibility/context/global.rb +1 -3
  50. data/lib/datadog/ci/test_visibility/null_recorder.rb +5 -2
  51. data/lib/datadog/ci/test_visibility/recorder.rb +63 -8
  52. data/lib/datadog/ci/test_visibility/serializers/base.rb +1 -1
  53. data/lib/datadog/ci/test_visibility/serializers/factories/test_level.rb +1 -1
  54. data/lib/datadog/ci/test_visibility/serializers/factories/test_suite_level.rb +1 -1
  55. data/lib/datadog/ci/test_visibility/transport.rb +11 -54
  56. data/lib/datadog/ci/transport/api/agentless.rb +8 -1
  57. data/lib/datadog/ci/transport/api/base.rb +23 -0
  58. data/lib/datadog/ci/transport/api/builder.rb +9 -1
  59. data/lib/datadog/ci/transport/api/evp_proxy.rb +8 -0
  60. data/lib/datadog/ci/transport/event_platform_transport.rb +88 -0
  61. data/lib/datadog/ci/transport/http.rb +43 -6
  62. data/lib/datadog/ci/transport/remote_settings_api.rb +12 -6
  63. data/lib/datadog/ci/utils/configuration.rb +2 -2
  64. data/lib/datadog/ci/utils/git.rb +6 -67
  65. data/lib/datadog/ci/utils/parsing.rb +16 -0
  66. data/lib/datadog/ci/utils/test_run.rb +13 -0
  67. data/lib/datadog/ci/version.rb +5 -5
  68. data/lib/datadog/ci/worker.rb +35 -0
  69. data/lib/datadog/ci.rb +4 -0
  70. metadata +36 -4
@@ -7,6 +7,12 @@ module Datadog
7
7
  module CI
8
8
  module Utils
9
9
  module Git
10
+ def self.valid_commit_sha?(sha)
11
+ return false if sha.nil?
12
+
13
+ sha.match?(/\A[0-9a-f]{40}\Z/) || sha.match?(/\A[0-9a-f]{64}\Z/)
14
+ end
15
+
10
16
  def self.normalize_ref(ref)
11
17
  return nil if ref.nil?
12
18
 
@@ -19,73 +25,6 @@ module Datadog
19
25
  def self.is_git_tag?(ref)
20
26
  !ref.nil? && ref.include?("tags/")
21
27
  end
22
-
23
- def self.root
24
- return @root if defined?(@root)
25
-
26
- @root = exec_git_command("git rev-parse --show-toplevel")
27
- rescue => e
28
- Datadog.logger.debug(
29
- "Unable to read git root: #{e.class.name} #{e.message} at #{Array(e.backtrace).first}"
30
- )
31
- @root = nil
32
- end
33
-
34
- def self.relative_to_root(path)
35
- return nil if path.nil?
36
-
37
- git_root = root
38
- return path if git_root.nil?
39
-
40
- path = Pathname.new(File.expand_path(path))
41
- git_root = Pathname.new(git_root)
42
-
43
- path.relative_path_from(git_root).to_s
44
- end
45
-
46
- def self.repository_name
47
- return @repository_name if defined?(@repository_name)
48
-
49
- git_remote_url = exec_git_command("git ls-remote --get-url origin")
50
-
51
- # return git repository name from remote url without .git extension
52
- last_path_segment = git_remote_url.split("/").last if git_remote_url
53
- @repository_name = last_path_segment.gsub(".git", "") if last_path_segment
54
- @repository_name ||= current_folder_name
55
- rescue => e
56
- Datadog.logger.debug(
57
- "Unable to get git remote: #{e.class.name} #{e.message} at #{Array(e.backtrace).first}"
58
- )
59
- @repository_name = current_folder_name
60
- end
61
-
62
- def self.current_folder_name
63
- root_folder = root
64
- if root_folder.nil?
65
- File.basename(Dir.pwd)
66
- else
67
- File.basename(root_folder)
68
- end
69
- end
70
-
71
- def self.exec_git_command(cmd)
72
- out, status = Open3.capture2e(cmd)
73
-
74
- raise "Failed to run git command #{cmd}: #{out}" unless status.success?
75
-
76
- # Sometimes Encoding.default_external is somehow set to US-ASCII which breaks
77
- # commit messages with UTF-8 characters like emojis
78
- # We force output's encoding to be UTF-8 in this case
79
- # This is safe to do as UTF-8 is compatible with US-ASCII
80
- if Encoding.default_external == Encoding::US_ASCII
81
- out = out.force_encoding(Encoding::UTF_8)
82
- end
83
- out.strip! # There's always a "\n" at the end of the command output
84
-
85
- return nil if out.empty?
86
-
87
- out
88
- end
89
28
  end
90
29
  end
91
30
  end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "open3"
4
+ require "pathname"
5
+
6
+ module Datadog
7
+ module CI
8
+ module Utils
9
+ module Parsing
10
+ def self.convert_to_bool(value)
11
+ value.to_s.downcase == "true"
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -9,6 +9,19 @@ module Datadog
9
9
 
10
10
  @command = "#{$0} #{ARGV.join(" ")}"
11
11
  end
12
+
13
+ def self.skippable_test_id(test_name, suite, parameters = nil)
14
+ "#{suite}.#{test_name}.#{parameters}"
15
+ end
16
+
17
+ def self.test_parameters(arguments: {}, metadata: {})
18
+ JSON.generate(
19
+ {
20
+ arguments: arguments,
21
+ metadata: metadata
22
+ }
23
+ )
24
+ end
12
25
  end
13
26
  end
14
27
  end
@@ -3,16 +3,16 @@
3
3
  module Datadog
4
4
  module CI
5
5
  module VERSION
6
- MAJOR = "0"
7
- MINOR = "8"
8
- PATCH = "3"
9
- PRE = nil
6
+ MAJOR = "1"
7
+ MINOR = "0"
8
+ PATCH = "0"
9
+ PRE = "beta2"
10
10
  BUILD = nil
11
11
  # PRE and BUILD above are modified for dev gems during gem build GHA workflow
12
12
 
13
13
  STRING = [MAJOR, MINOR, PATCH, PRE, BUILD].compact.join(".")
14
14
 
15
- MINIMUM_RUBY_VERSION = "2.1.0"
15
+ MINIMUM_RUBY_VERSION = "2.7.0"
16
16
 
17
17
  # Restrict the installation of this gem with untested future versions of Ruby.
18
18
  #
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "datadog/core/worker"
4
+ require "datadog/core/workers/async"
5
+
6
+ # general purpose async worker for CI
7
+ # executes given task once in separate thread
8
+ module Datadog
9
+ module CI
10
+ class Worker < Datadog::Core::Worker
11
+ include Datadog::Core::Workers::Async::Thread
12
+
13
+ DEFAULT_SHUTDOWN_TIMEOUT = 60
14
+ DEFAULT_WAIT_TIMEOUT = 60
15
+
16
+ def stop(timeout = DEFAULT_SHUTDOWN_TIMEOUT)
17
+ join(timeout)
18
+ end
19
+
20
+ def wait_until_done(timeout = DEFAULT_WAIT_TIMEOUT)
21
+ join(timeout)
22
+ end
23
+
24
+ def done?
25
+ started? && !running?
26
+ end
27
+ end
28
+
29
+ class DummyWorker < Worker
30
+ def initialize
31
+ super { nil }
32
+ end
33
+ end
34
+ end
35
+ end
data/lib/datadog/ci.rb CHANGED
@@ -364,6 +364,10 @@ module Datadog
364
364
  def recorder
365
365
  components.ci_recorder
366
366
  end
367
+
368
+ def itr_runner
369
+ components.itr
370
+ end
367
371
  end
368
372
  end
369
373
  end
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: datadog-ci
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.3
4
+ version: 1.0.0.beta2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Datadog, Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-03-20 00:00:00.000000000 Z
11
+ date: 2024-04-24 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: datadog
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 2.0.0.beta2
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 2.0.0.beta2
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: msgpack
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -31,7 +45,8 @@ description: |2
31
45
  email:
32
46
  - dev@datadoghq.com
33
47
  executables: []
34
- extensions: []
48
+ extensions:
49
+ - ext/datadog_cov/extconf.rb
35
50
  extra_rdoc_files: []
36
51
  files:
37
52
  - CHANGELOG.md
@@ -41,6 +56,8 @@ files:
41
56
  - LICENSE.BSD3
42
57
  - NOTICE
43
58
  - README.md
59
+ - ext/datadog_cov/datadog_cov.c
60
+ - ext/datadog_cov/extconf.rb
44
61
  - lib/datadog/ci.rb
45
62
  - lib/datadog/ci/codeowners/matcher.rb
46
63
  - lib/datadog/ci/codeowners/parser.rb
@@ -55,6 +72,7 @@ files:
55
72
  - lib/datadog/ci/contrib/cucumber/instrumentation.rb
56
73
  - lib/datadog/ci/contrib/cucumber/integration.rb
57
74
  - lib/datadog/ci/contrib/cucumber/patcher.rb
75
+ - lib/datadog/ci/contrib/cucumber/step.rb
58
76
  - lib/datadog/ci/contrib/integration.rb
59
77
  - lib/datadog/ci/contrib/minitest/configuration/settings.rb
60
78
  - lib/datadog/ci/contrib/minitest/ext.rb
@@ -98,7 +116,18 @@ files:
98
116
  - lib/datadog/ci/ext/settings.rb
99
117
  - lib/datadog/ci/ext/test.rb
100
118
  - lib/datadog/ci/ext/transport.rb
119
+ - lib/datadog/ci/git/local_repository.rb
120
+ - lib/datadog/ci/git/packfiles.rb
121
+ - lib/datadog/ci/git/search_commits.rb
122
+ - lib/datadog/ci/git/tree_uploader.rb
123
+ - lib/datadog/ci/git/upload_packfile.rb
124
+ - lib/datadog/ci/git/user.rb
125
+ - lib/datadog/ci/itr/coverage/ddcov.rb
126
+ - lib/datadog/ci/itr/coverage/event.rb
127
+ - lib/datadog/ci/itr/coverage/transport.rb
128
+ - lib/datadog/ci/itr/coverage/writer.rb
101
129
  - lib/datadog/ci/itr/runner.rb
130
+ - lib/datadog/ci/itr/skippable.rb
102
131
  - lib/datadog/ci/span.rb
103
132
  - lib/datadog/ci/test.rb
104
133
  - lib/datadog/ci/test_module.rb
@@ -123,13 +152,16 @@ files:
123
152
  - lib/datadog/ci/transport/api/base.rb
124
153
  - lib/datadog/ci/transport/api/builder.rb
125
154
  - lib/datadog/ci/transport/api/evp_proxy.rb
155
+ - lib/datadog/ci/transport/event_platform_transport.rb
126
156
  - lib/datadog/ci/transport/gzip.rb
127
157
  - lib/datadog/ci/transport/http.rb
128
158
  - lib/datadog/ci/transport/remote_settings_api.rb
129
159
  - lib/datadog/ci/utils/configuration.rb
130
160
  - lib/datadog/ci/utils/git.rb
161
+ - lib/datadog/ci/utils/parsing.rb
131
162
  - lib/datadog/ci/utils/test_run.rb
132
163
  - lib/datadog/ci/version.rb
164
+ - lib/datadog/ci/worker.rb
133
165
  homepage: https://github.com/DataDog/datadog-ci-rb
134
166
  licenses:
135
167
  - BSD-3-Clause
@@ -146,7 +178,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
146
178
  requirements:
147
179
  - - ">="
148
180
  - !ruby/object:Gem::Version
149
- version: 2.1.0
181
+ version: 2.7.0
150
182
  - - "<"
151
183
  - !ruby/object:Gem::Version
152
184
  version: '3.4'