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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +42 -0
- data/LICENSE-3rdparty.csv +1 -1
- data/README.md +40 -55
- data/ext/datadog_cov/datadog_cov.c +192 -0
- data/ext/datadog_cov/extconf.rb +18 -0
- data/lib/datadog/ci/configuration/components.rb +43 -9
- data/lib/datadog/ci/configuration/settings.rb +7 -1
- data/lib/datadog/ci/contrib/cucumber/configuration/settings.rb +0 -15
- data/lib/datadog/ci/contrib/cucumber/ext.rb +1 -5
- data/lib/datadog/ci/contrib/cucumber/formatter.rb +13 -18
- data/lib/datadog/ci/contrib/cucumber/integration.rb +1 -2
- data/lib/datadog/ci/contrib/cucumber/patcher.rb +3 -0
- data/lib/datadog/ci/contrib/cucumber/step.rb +27 -0
- data/lib/datadog/ci/contrib/minitest/configuration/settings.rb +0 -15
- data/lib/datadog/ci/contrib/minitest/ext.rb +1 -5
- data/lib/datadog/ci/contrib/minitest/helpers.rb +1 -2
- data/lib/datadog/ci/contrib/minitest/hooks.rb +4 -2
- data/lib/datadog/ci/contrib/minitest/integration.rb +1 -1
- data/lib/datadog/ci/contrib/rspec/configuration/settings.rb +0 -15
- data/lib/datadog/ci/contrib/rspec/example.rb +25 -23
- data/lib/datadog/ci/contrib/rspec/ext.rb +0 -4
- data/lib/datadog/ci/contrib/rspec/integration.rb +1 -2
- data/lib/datadog/ci/contrib/settings.rb +0 -3
- data/lib/datadog/ci/ext/environment/providers/base.rb +1 -1
- data/lib/datadog/ci/ext/environment/providers/bitbucket.rb +1 -1
- data/lib/datadog/ci/ext/environment/providers/local_git.rb +8 -79
- data/lib/datadog/ci/ext/environment.rb +11 -16
- data/lib/datadog/ci/ext/settings.rb +1 -0
- data/lib/datadog/ci/ext/test.rb +5 -0
- data/lib/datadog/ci/ext/transport.rb +12 -0
- data/lib/datadog/ci/git/local_repository.rb +238 -0
- data/lib/datadog/ci/git/packfiles.rb +70 -0
- data/lib/datadog/ci/git/search_commits.rb +77 -0
- data/lib/datadog/ci/git/tree_uploader.rb +90 -0
- data/lib/datadog/ci/git/upload_packfile.rb +66 -0
- data/lib/datadog/ci/git/user.rb +29 -0
- data/lib/datadog/ci/itr/coverage/ddcov.rb +14 -0
- data/lib/datadog/ci/itr/coverage/event.rb +81 -0
- data/lib/datadog/ci/itr/coverage/transport.rb +42 -0
- data/lib/datadog/ci/itr/coverage/writer.rb +108 -0
- data/lib/datadog/ci/itr/runner.rb +143 -6
- data/lib/datadog/ci/itr/skippable.rb +106 -0
- data/lib/datadog/ci/span.rb +9 -0
- data/lib/datadog/ci/test.rb +20 -14
- data/lib/datadog/ci/test_module.rb +2 -2
- data/lib/datadog/ci/test_session.rb +2 -2
- data/lib/datadog/ci/test_suite.rb +2 -2
- data/lib/datadog/ci/test_visibility/context/global.rb +1 -3
- data/lib/datadog/ci/test_visibility/null_recorder.rb +5 -2
- data/lib/datadog/ci/test_visibility/recorder.rb +63 -8
- data/lib/datadog/ci/test_visibility/serializers/base.rb +1 -1
- data/lib/datadog/ci/test_visibility/serializers/factories/test_level.rb +1 -1
- data/lib/datadog/ci/test_visibility/serializers/factories/test_suite_level.rb +1 -1
- data/lib/datadog/ci/test_visibility/transport.rb +11 -54
- data/lib/datadog/ci/transport/api/agentless.rb +8 -1
- data/lib/datadog/ci/transport/api/base.rb +23 -0
- data/lib/datadog/ci/transport/api/builder.rb +9 -1
- data/lib/datadog/ci/transport/api/evp_proxy.rb +8 -0
- data/lib/datadog/ci/transport/event_platform_transport.rb +88 -0
- data/lib/datadog/ci/transport/http.rb +43 -6
- data/lib/datadog/ci/transport/remote_settings_api.rb +12 -6
- data/lib/datadog/ci/utils/configuration.rb +2 -2
- data/lib/datadog/ci/utils/git.rb +6 -67
- data/lib/datadog/ci/utils/parsing.rb +16 -0
- data/lib/datadog/ci/utils/test_run.rb +13 -0
- data/lib/datadog/ci/version.rb +5 -5
- data/lib/datadog/ci/worker.rb +35 -0
- data/lib/datadog/ci.rb +4 -0
- metadata +36 -4
data/lib/datadog/ci/utils/git.rb
CHANGED
@@ -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
|
@@ -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
|
data/lib/datadog/ci/version.rb
CHANGED
@@ -3,16 +3,16 @@
|
|
3
3
|
module Datadog
|
4
4
|
module CI
|
5
5
|
module VERSION
|
6
|
-
MAJOR = "
|
7
|
-
MINOR = "
|
8
|
-
PATCH = "
|
9
|
-
PRE =
|
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.
|
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
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.
|
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-
|
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.
|
181
|
+
version: 2.7.0
|
150
182
|
- - "<"
|
151
183
|
- !ruby/object:Gem::Version
|
152
184
|
version: '3.4'
|