datadog-ci 0.8.3 → 1.0.0.beta2

Sign up to get free protection for your applications and to get access to all the features.
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'