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.
- 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'
|