datadog-ci 0.2.0 → 0.4.0

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