datadog-ci 0.2.0 → 0.4.0

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 (59) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +40 -1
  3. data/README.md +36 -36
  4. data/lib/datadog/ci/configuration/components.rb +51 -25
  5. data/lib/datadog/ci/context/local.rb +50 -0
  6. data/lib/datadog/ci/contrib/cucumber/formatter.rb +23 -29
  7. data/lib/datadog/ci/contrib/minitest/hooks.rb +16 -25
  8. data/lib/datadog/ci/contrib/rspec/example.rb +14 -18
  9. data/lib/datadog/ci/ext/environment/extractor.rb +5 -10
  10. data/lib/datadog/ci/ext/environment/providers/appveyor.rb +4 -0
  11. data/lib/datadog/ci/ext/environment/providers/aws_code_pipeline.rb +39 -0
  12. data/lib/datadog/ci/ext/environment/providers/azure.rb +4 -0
  13. data/lib/datadog/ci/ext/environment/providers/base.rb +4 -0
  14. data/lib/datadog/ci/ext/environment/providers/bitbucket.rb +4 -0
  15. data/lib/datadog/ci/ext/environment/providers/bitrise.rb +4 -0
  16. data/lib/datadog/ci/ext/environment/providers/buddy.rb +4 -0
  17. data/lib/datadog/ci/ext/environment/providers/buildkite.rb +4 -0
  18. data/lib/datadog/ci/ext/environment/providers/circleci.rb +4 -0
  19. data/lib/datadog/ci/ext/environment/providers/codefresh.rb +4 -0
  20. data/lib/datadog/ci/ext/environment/providers/github_actions.rb +17 -4
  21. data/lib/datadog/ci/ext/environment/providers/gitlab.rb +4 -0
  22. data/lib/datadog/ci/ext/environment/providers/jenkins.rb +4 -0
  23. data/lib/datadog/ci/ext/environment/providers/teamcity.rb +4 -0
  24. data/lib/datadog/ci/ext/environment/providers/travis.rb +4 -0
  25. data/lib/datadog/ci/ext/environment/providers.rb +16 -14
  26. data/lib/datadog/ci/ext/transport.rb +5 -0
  27. data/lib/datadog/ci/recorder.rb +82 -46
  28. data/lib/datadog/ci/span.rb +107 -0
  29. data/lib/datadog/ci/test.rb +26 -0
  30. data/lib/datadog/ci/test_visibility/transport.rb +11 -29
  31. data/lib/datadog/ci/transport/api/base.rb +36 -0
  32. data/lib/datadog/ci/transport/api/builder.rb +46 -0
  33. data/lib/datadog/ci/transport/api/ci_test_cycle.rb +30 -0
  34. data/lib/datadog/ci/transport/api/evp_proxy.rb +44 -0
  35. data/lib/datadog/ci/transport/gzip.rb +4 -2
  36. data/lib/datadog/ci/transport/http.rb +25 -101
  37. data/lib/datadog/ci/utils/url.rb +15 -0
  38. data/lib/datadog/ci/version.rb +1 -1
  39. data/lib/datadog/ci.rb +193 -4
  40. data/sig/datadog/ci/configuration/components.rbs +7 -1
  41. data/sig/datadog/ci/context/local.rbs +21 -0
  42. data/sig/datadog/ci/ext/environment/extractor.rbs +0 -2
  43. data/sig/datadog/ci/ext/environment/providers/aws_code_pipeline.rbs +19 -0
  44. data/sig/datadog/ci/ext/environment/providers/base.rbs +2 -0
  45. data/sig/datadog/ci/ext/environment/providers/github_actions.rbs +5 -0
  46. data/sig/datadog/ci/ext/environment/providers.rbs +1 -1
  47. data/sig/datadog/ci/ext/transport.rbs +8 -0
  48. data/sig/datadog/ci/recorder.rbs +20 -8
  49. data/sig/datadog/ci/span.rbs +35 -0
  50. data/sig/datadog/ci/test.rbs +7 -0
  51. data/sig/datadog/ci/test_visibility/transport.rbs +7 -11
  52. data/sig/datadog/ci/transport/api/base.rbs +21 -0
  53. data/sig/datadog/ci/transport/api/builder.rbs +12 -0
  54. data/sig/datadog/ci/transport/api/ci_test_cycle.rbs +21 -0
  55. data/sig/datadog/ci/transport/api/evp_proxy.rbs +19 -0
  56. data/sig/datadog/ci/transport/http.rbs +12 -37
  57. data/sig/datadog/ci/utils/url.rbs +9 -0
  58. data/sig/datadog/ci.rbs +15 -3
  59. metadata +21 -3
@@ -2,12 +2,20 @@ module Datadog
2
2
  module CI
3
3
  module Ext
4
4
  module Transport
5
+ DEFAULT_DD_SITE: "datadoghq.com"
6
+
5
7
  HEADER_DD_API_KEY: "DD-API-KEY"
6
8
 
7
9
  HEADER_CONTENT_TYPE: "Content-Type"
8
10
 
9
11
  HEADER_CONTENT_ENCODING: "Content-Encoding"
10
12
 
13
+ HEADER_EVP_SUBDOMAIN: "X-Datadog-EVP-Subdomain"
14
+
15
+ HEADER_CONTAINER_ID: "Datadog-Container-ID"
16
+
17
+ EVP_PROXY_PATH_PREFIX: "/evp_proxy/v2/"
18
+
11
19
  TEST_VISIBILITY_INTAKE_HOST_PREFIX: "citestcycle-intake"
12
20
 
13
21
  TEST_VISIBILITY_INTAKE_PATH: "/api/v2/citestcycle"
@@ -1,18 +1,30 @@
1
1
  module Datadog
2
2
  module CI
3
- module Recorder
4
- self.@environment_tags: Hash[String, String]
3
+ class Recorder
4
+ @environment_tags: Hash[String, String]
5
+ @local_context: Datadog::CI::Context::Local
5
6
 
6
- def self.trace: (untyped span_name, ?::Hash[untyped, untyped] options) ?{ (untyped, untyped) -> untyped } -> untyped
7
- def self.set_tags!: (untyped trace, untyped span, ?::Hash[untyped, untyped] tags) -> untyped
7
+ attr_reader environment_tags: Hash[String, String]
8
8
 
9
- def self.passed!: (untyped span) -> untyped
9
+ def trace_test: (String span_name, ?service_name: String?, ?operation_name: String, ?tags: Hash[untyped, untyped]) ?{ (Datadog::CI::Test span) -> untyped } -> untyped
10
10
 
11
- def self.failed!: (untyped span, ?untyped? exception) -> untyped
11
+ def trace: (String span_type, String span_name, ?tags: Hash[untyped, untyped]) ?{ (Datadog::CI::Span span) -> untyped } -> untyped
12
12
 
13
- def self.skipped!: (untyped span, ?untyped? exception) -> untyped
13
+ def active_test: () -> Datadog::CI::Test?
14
14
 
15
- def self.set_environment_runtime_tags!: (untyped span) -> untyped
15
+ def active_span: () -> Datadog::CI::Span?
16
+
17
+ def deactivate_test: (Datadog::CI::Test test) -> void
18
+
19
+ def create_datadog_span: (String span_name, ?span_options: Hash[untyped, untyped], ?tags: Hash[untyped, untyped]) ?{ (Datadog::CI::Span span) -> untyped } -> untyped
20
+
21
+ def set_trace_origin: (Datadog::Tracing::TraceOperation trace) -> untyped
22
+
23
+ private
24
+
25
+ def build_test: (Datadog::Tracing::SpanOperation tracer_span, Hash[untyped, untyped] tags) -> Datadog::CI::Test
26
+
27
+ def build_span: (Datadog::Tracing::SpanOperation tracer_span, Hash[untyped, untyped] tags) -> Datadog::CI::Span
16
28
  end
17
29
  end
18
30
  end
@@ -0,0 +1,35 @@
1
+ module Datadog
2
+ module CI
3
+ class Span
4
+ @tracer_span: Datadog::Tracing::SpanOperation
5
+
6
+ attr_reader tracer_span: Datadog::Tracing::SpanOperation
7
+
8
+ def initialize: (Datadog::Tracing::SpanOperation tracer_span) -> void
9
+
10
+ def name: () -> String
11
+
12
+ def passed!: () -> void
13
+
14
+ def failed!: (?exception: untyped?) -> void
15
+
16
+ def skipped!: (?exception: untyped?, ?reason: String?) -> void
17
+
18
+ def get_tag: (String key) -> untyped?
19
+
20
+ def set_tag: (String key, untyped? value) -> void
21
+
22
+ def set_metric: (String key, untyped value) -> void
23
+
24
+ def set_tags: (Hash[untyped, untyped] tags) -> void
25
+
26
+ def finish: () -> void
27
+
28
+ def span_type: () -> String
29
+
30
+ def set_environment_runtime_tags: () -> void
31
+
32
+ def set_default_tags: () -> void
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,7 @@
1
+ module Datadog
2
+ module CI
3
+ class Test < Span
4
+ def finish: () -> void
5
+ end
6
+ end
7
+ end
@@ -5,30 +5,26 @@ module Datadog
5
5
  DEFAULT_MAX_PAYLOAD_SIZE: Integer
6
6
 
7
7
  attr_reader serializers_factory: singleton(Datadog::CI::TestVisibility::Serializers::Factories::TestLevel)
8
- attr_reader api_key: String
9
- attr_reader env: String?
10
- attr_reader http: Datadog::CI::Transport::HTTP
8
+ attr_reader dd_env: String?
9
+ attr_reader api: Datadog::CI::Transport::Api::Base
11
10
  attr_reader max_payload_size: Integer
12
11
 
13
- @api_key: String
14
- @env: String?
15
- @http: Datadog::CI::Transport::HTTP
12
+ @dd_env: String?
16
13
  @serializers_factory: singleton(Datadog::CI::TestVisibility::Serializers::Factories::TestLevel)
17
14
  @max_payload_size: Integer
18
15
 
19
16
  def initialize: (
20
- api_key: String,
21
- url: ::String,
22
- ?env: ::String?,
17
+ api: Datadog::CI::Transport::Api::Base,
18
+ ?dd_env: ::String?,
23
19
  ?serializers_factory: singleton(Datadog::CI::TestVisibility::Serializers::Factories::TestLevel),
24
20
  ?max_payload_size: Integer
25
21
  ) -> void
26
22
 
27
- def send_traces: (Array[Datadog::Tracing::TraceSegment] traces) -> ::Array[Datadog::CI::Transport::HTTP::Response]
23
+ def send_traces: (Array[Datadog::Tracing::TraceSegment] traces) -> ::Array[Datadog::CI::Transport::HTTP::ResponseDecorator]
28
24
 
29
25
  private
30
26
 
31
- def send_payload: (String encoded_payload) -> Datadog::CI::Transport::HTTP::Response
27
+ def send_payload: (String encoded_payload) -> Datadog::CI::Transport::HTTP::ResponseDecorator
32
28
  def pack_events: (Array[String] encoded_events) -> String
33
29
  def encode_traces: (Array[Datadog::Tracing::TraceSegment] traces) -> ::Array[String]
34
30
  def encode_span: (Datadog::Tracing::TraceSegment trace, Datadog::Tracing::Span span) -> String?
@@ -0,0 +1,21 @@
1
+ module Datadog
2
+ module CI
3
+ module Transport
4
+ module Api
5
+ class Base
6
+ attr_reader http: Datadog::CI::Transport::HTTP
7
+
8
+ @http: Datadog::CI::Transport::HTTP
9
+
10
+ def initialize: (http: Datadog::CI::Transport::HTTP) -> void
11
+
12
+ def request: (path: String, payload: String, ?verb: ::String) -> untyped
13
+
14
+ private
15
+
16
+ def headers: () -> Hash[String, String]
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,12 @@
1
+ module Datadog
2
+ module CI
3
+ module Transport
4
+ module Api
5
+ module Builder
6
+ def self.build_ci_test_cycle_api: (untyped settings) -> Datadog::CI::Transport::Api::CiTestCycle
7
+ def self.build_evp_proxy_api: (untyped agent_settings) -> Datadog::CI::Transport::Api::EvpProxy
8
+ end
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,21 @@
1
+ module Datadog
2
+ module CI
3
+ module Transport
4
+ module Api
5
+ class CiTestCycle < Base
6
+ attr_reader api_key: String
7
+
8
+ @api_key: String
9
+
10
+ def initialize: (api_key: String, http: Datadog::CI::Transport::HTTP) -> void
11
+
12
+ def request: (path: String, payload: String, ?verb: ::String) -> Datadog::CI::Transport::HTTP::ResponseDecorator
13
+
14
+ private
15
+
16
+ def headers: () -> Hash[String, String]
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,19 @@
1
+ module Datadog
2
+ module CI
3
+ module Transport
4
+ module Api
5
+ class EvpProxy < Base
6
+ @container_id: String?
7
+
8
+ def request: (path: String, payload: String, ?verb: ::String) -> Datadog::CI::Transport::HTTP::ResponseDecorator
9
+
10
+ private
11
+
12
+ def container_id: () -> String?
13
+
14
+ def headers: () -> Hash[String, String]
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -1,7 +1,12 @@
1
+ class SimpleDelegator
2
+ end
3
+
1
4
  module Datadog
2
5
  module CI
3
6
  module Transport
4
7
  class HTTP
8
+ @adapter: Datadog::Core::Transport::HTTP::Adapters::Net
9
+
5
10
  attr_reader host: String
6
11
  attr_reader port: Integer?
7
12
  attr_reader ssl: bool
@@ -12,50 +17,20 @@ module Datadog
12
17
 
13
18
  def initialize: (host: String, ?port: Integer?, ?ssl: bool, ?timeout: Integer, ?compress: bool) -> void
14
19
 
15
- def request: (?method: String, payload: String, headers: Hash[String, String], path: String) -> Response
20
+ def request: (?verb: String, payload: String, headers: Hash[String, String], path: String) -> ResponseDecorator
16
21
 
17
22
  private
18
23
 
19
- def open: () { (::Net::HTTP) -> Net::HTTPResponse } -> Net::HTTPResponse
20
-
21
- def post: (payload: String, headers: Hash[String, String], path: String) -> Response
22
-
23
- class Response
24
- attr_reader http_response: (Net::HTTPResponse | InternalErrorResponse::DummyNetHTTPResponse)
25
-
26
- def initialize: ((Net::HTTPResponse | InternalErrorResponse::DummyNetHTTPResponse) http_response) -> void
27
-
28
- def payload: () -> String
29
-
30
- def code: () -> Integer
31
-
32
- def ok?: () -> bool
24
+ def adapter: () -> Datadog::Core::Transport::HTTP::Adapters::Net
33
25
 
34
- def unsupported?: () -> bool
26
+ def build_env: (payload: String, headers: Hash[String, String], path: String, verb: String) -> Datadog::Core::Transport::HTTP::Env
35
27
 
36
- def not_found?: () -> bool
37
-
38
- def client_error?: () -> bool
39
-
40
- def server_error?: () -> bool
41
-
42
- def internal_error?: () -> bool
43
-
44
- def inspect: () -> ::String
45
- end
46
-
47
- class InternalErrorResponse < Response
48
- class DummyNetHTTPResponse
49
- def body: () -> ""
50
- def code: () -> "-1"
51
- end
52
-
53
- attr_reader error: StandardError
54
- @error: StandardError
55
-
56
- def initialize: (StandardError error) -> void
28
+ class ResponseDecorator < ::SimpleDelegator
29
+ def initialize: (untyped anything) -> void
30
+ def trace_count: () -> Integer
57
31
  end
58
32
  end
59
33
  end
60
34
  end
61
35
  end
36
+
@@ -0,0 +1,9 @@
1
+ module Datadog
2
+ module CI
3
+ module Utils
4
+ module Url
5
+ def self.filter_sensitive_info: (String? url) -> String?
6
+ end
7
+ end
8
+ end
9
+ end
data/sig/datadog/ci.rbs CHANGED
@@ -1,7 +1,19 @@
1
1
  module Datadog
2
2
  module CI
3
- # See the writing guide of rbs: https://github.com/ruby/rbs#guides
4
- class Error < StandardError
5
- end
3
+ def self.trace_test: (String span_name, ?service_name: String?, ?operation_name: String, ?tags: Hash[untyped, untyped]) ?{ (Datadog::CI::Test test) -> untyped } -> untyped
4
+
5
+ def self.start_test: (String span_name, ?service_name: String?, ?operation_name: String, ?tags: Hash[untyped, untyped]) -> Datadog::CI::Test
6
+
7
+ def self.trace: (String span_type, String span_name, ?tags: Hash[untyped, untyped]) ?{ (Datadog::CI::Span span) -> untyped } -> untyped
8
+
9
+ def self.active_test: () -> Datadog::CI::Test?
10
+
11
+ def self.active_span: (String span_type) -> Datadog::CI::Span?
12
+
13
+ def self.deactivate_test: (Datadog::CI::Test test) -> void
14
+
15
+ def self.components: () -> Datadog::CI::Configuration::Components
16
+
17
+ def self.recorder: () -> Datadog::CI::Recorder
6
18
  end
7
19
  end
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: 0.2.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Datadog, Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-10-05 00:00:00.000000000 Z
11
+ date: 2023-11-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: msgpack
@@ -44,6 +44,7 @@ files:
44
44
  - lib/datadog/ci.rb
45
45
  - lib/datadog/ci/configuration/components.rb
46
46
  - lib/datadog/ci/configuration/settings.rb
47
+ - lib/datadog/ci/context/local.rb
47
48
  - lib/datadog/ci/contrib/cucumber/configuration/settings.rb
48
49
  - lib/datadog/ci/contrib/cucumber/ext.rb
49
50
  - lib/datadog/ci/contrib/cucumber/formatter.rb
@@ -67,6 +68,7 @@ files:
67
68
  - lib/datadog/ci/ext/environment/extractor.rb
68
69
  - lib/datadog/ci/ext/environment/providers.rb
69
70
  - lib/datadog/ci/ext/environment/providers/appveyor.rb
71
+ - lib/datadog/ci/ext/environment/providers/aws_code_pipeline.rb
70
72
  - lib/datadog/ci/ext/environment/providers/azure.rb
71
73
  - lib/datadog/ci/ext/environment/providers/base.rb
72
74
  - lib/datadog/ci/ext/environment/providers/bitbucket.rb
@@ -88,19 +90,27 @@ files:
88
90
  - lib/datadog/ci/ext/transport.rb
89
91
  - lib/datadog/ci/extensions.rb
90
92
  - lib/datadog/ci/recorder.rb
93
+ - lib/datadog/ci/span.rb
94
+ - lib/datadog/ci/test.rb
91
95
  - lib/datadog/ci/test_visibility/flush.rb
92
96
  - lib/datadog/ci/test_visibility/serializers/base.rb
93
97
  - lib/datadog/ci/test_visibility/serializers/factories/test_level.rb
94
98
  - lib/datadog/ci/test_visibility/serializers/span.rb
95
99
  - lib/datadog/ci/test_visibility/serializers/test_v1.rb
96
100
  - lib/datadog/ci/test_visibility/transport.rb
101
+ - lib/datadog/ci/transport/api/base.rb
102
+ - lib/datadog/ci/transport/api/builder.rb
103
+ - lib/datadog/ci/transport/api/ci_test_cycle.rb
104
+ - lib/datadog/ci/transport/api/evp_proxy.rb
97
105
  - lib/datadog/ci/transport/gzip.rb
98
106
  - lib/datadog/ci/transport/http.rb
99
107
  - lib/datadog/ci/utils/git.rb
108
+ - lib/datadog/ci/utils/url.rb
100
109
  - lib/datadog/ci/version.rb
101
110
  - sig/datadog/ci.rbs
102
111
  - sig/datadog/ci/configuration/components.rbs
103
112
  - sig/datadog/ci/configuration/settings.rbs
113
+ - sig/datadog/ci/context/local.rbs
104
114
  - sig/datadog/ci/contrib/cucumber/configuration/settings.rbs
105
115
  - sig/datadog/ci/contrib/cucumber/ext.rbs
106
116
  - sig/datadog/ci/contrib/cucumber/formatter.rbs
@@ -124,6 +134,7 @@ files:
124
134
  - sig/datadog/ci/ext/environment/extractor.rbs
125
135
  - sig/datadog/ci/ext/environment/providers.rbs
126
136
  - sig/datadog/ci/ext/environment/providers/appveyor.rbs
137
+ - sig/datadog/ci/ext/environment/providers/aws_code_pipeline.rbs
127
138
  - sig/datadog/ci/ext/environment/providers/azure.rbs
128
139
  - sig/datadog/ci/ext/environment/providers/base.rbs
129
140
  - sig/datadog/ci/ext/environment/providers/bitbucket.rbs
@@ -145,15 +156,22 @@ files:
145
156
  - sig/datadog/ci/ext/transport.rbs
146
157
  - sig/datadog/ci/extensions.rbs
147
158
  - sig/datadog/ci/recorder.rbs
159
+ - sig/datadog/ci/span.rbs
160
+ - sig/datadog/ci/test.rbs
148
161
  - sig/datadog/ci/test_visibility/flush.rbs
149
162
  - sig/datadog/ci/test_visibility/serializers/base.rbs
150
163
  - sig/datadog/ci/test_visibility/serializers/factories/test_level.rbs
151
164
  - sig/datadog/ci/test_visibility/serializers/span.rbs
152
165
  - sig/datadog/ci/test_visibility/serializers/test_v1.rbs
153
166
  - sig/datadog/ci/test_visibility/transport.rbs
167
+ - sig/datadog/ci/transport/api/base.rbs
168
+ - sig/datadog/ci/transport/api/builder.rbs
169
+ - sig/datadog/ci/transport/api/ci_test_cycle.rbs
170
+ - sig/datadog/ci/transport/api/evp_proxy.rbs
154
171
  - sig/datadog/ci/transport/gzip.rbs
155
172
  - sig/datadog/ci/transport/http.rbs
156
173
  - sig/datadog/ci/utils/git.rbs
174
+ - sig/datadog/ci/utils/url.rbs
157
175
  - sig/datadog/ci/version.rbs
158
176
  homepage: https://github.com/DataDog/datadog-ci-rb
159
177
  licenses:
@@ -181,7 +199,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
181
199
  - !ruby/object:Gem::Version
182
200
  version: 2.0.0
183
201
  requirements: []
184
- rubygems_version: 3.4.18
202
+ rubygems_version: 3.4.21
185
203
  signing_key:
186
204
  specification_version: 4
187
205
  summary: Datadog CI visibility for your ruby application