datadog-ci 0.2.0 → 0.3.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +16 -1
- data/lib/datadog/ci/configuration/components.rb +46 -25
- data/lib/datadog/ci/ext/environment/providers/appveyor.rb +4 -0
- data/lib/datadog/ci/ext/environment/providers/aws_code_pipeline.rb +39 -0
- data/lib/datadog/ci/ext/environment/providers/azure.rb +4 -0
- data/lib/datadog/ci/ext/environment/providers/base.rb +4 -0
- data/lib/datadog/ci/ext/environment/providers/bitbucket.rb +4 -0
- data/lib/datadog/ci/ext/environment/providers/bitrise.rb +4 -0
- data/lib/datadog/ci/ext/environment/providers/buddy.rb +4 -0
- data/lib/datadog/ci/ext/environment/providers/buildkite.rb +4 -0
- data/lib/datadog/ci/ext/environment/providers/circleci.rb +4 -0
- data/lib/datadog/ci/ext/environment/providers/codefresh.rb +4 -0
- data/lib/datadog/ci/ext/environment/providers/github_actions.rb +4 -0
- data/lib/datadog/ci/ext/environment/providers/gitlab.rb +4 -0
- data/lib/datadog/ci/ext/environment/providers/jenkins.rb +4 -0
- data/lib/datadog/ci/ext/environment/providers/teamcity.rb +4 -0
- data/lib/datadog/ci/ext/environment/providers/travis.rb +4 -0
- data/lib/datadog/ci/ext/environment/providers.rb +16 -14
- data/lib/datadog/ci/ext/transport.rb +5 -0
- data/lib/datadog/ci/test_visibility/transport.rb +11 -29
- data/lib/datadog/ci/transport/api/base.rb +36 -0
- data/lib/datadog/ci/transport/api/builder.rb +46 -0
- data/lib/datadog/ci/transport/api/ci_test_cycle.rb +30 -0
- data/lib/datadog/ci/transport/api/evp_proxy.rb +44 -0
- data/lib/datadog/ci/transport/gzip.rb +4 -2
- data/lib/datadog/ci/transport/http.rb +25 -101
- data/lib/datadog/ci/version.rb +1 -1
- data/sig/datadog/ci/configuration/components.rbs +3 -1
- data/sig/datadog/ci/ext/environment/providers/aws_code_pipeline.rbs +19 -0
- data/sig/datadog/ci/ext/environment/providers/base.rbs +2 -0
- data/sig/datadog/ci/ext/environment/providers.rbs +1 -1
- data/sig/datadog/ci/ext/transport.rbs +8 -0
- data/sig/datadog/ci/test_visibility/transport.rbs +7 -11
- data/sig/datadog/ci/transport/api/base.rbs +21 -0
- data/sig/datadog/ci/transport/api/builder.rbs +12 -0
- data/sig/datadog/ci/transport/api/ci_test_cycle.rbs +21 -0
- data/sig/datadog/ci/transport/api/evp_proxy.rbs +19 -0
- data/sig/datadog/ci/transport/http.rbs +12 -37
- metadata +13 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ce3b4502404f6faa6b05421763ced6582071c9ad025937219b59ba8c63c39175
|
4
|
+
data.tar.gz: 7a341aa75161299cb04a29f745e172ef5ca4fec3a24f536ec96e08119de11a97
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6058fbf497f43040a588018a2104055a303849d5616d063412dae4dab1e5247098e9ecd1b0b718776a51bc090f137d2bcf19cc78d252c7968c9cd6e4723ad902
|
7
|
+
data.tar.gz: 3c8d8eb9a34266a690a0dd5103d344b80df5175c703a414b1bc8255dc3c2732d723960e786765f2686fdcaaff5f009b675942c5e39dbd4a6fc9e58a38653051e
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,16 @@
|
|
1
1
|
## [Unreleased]
|
2
2
|
|
3
|
+
## [0.3.0] - 2023-10-25
|
4
|
+
|
5
|
+
### Added
|
6
|
+
|
7
|
+
* Add AWS CodePipeline support for automatic CI tags extraction ([#54][])
|
8
|
+
* Support test visibility protocol via Datadog Agent with EVP proxy ([#51][])
|
9
|
+
|
10
|
+
### Changed
|
11
|
+
|
12
|
+
* Migrate to Net::HTTP adapter from Core module of ddtrace gem ([#49][])
|
13
|
+
|
3
14
|
## [0.2.0] - 2023-10-05
|
4
15
|
|
5
16
|
### Added
|
@@ -36,7 +47,8 @@
|
|
36
47
|
|
37
48
|
* Ruby versions < 2.7 no longer supported ([#8][])
|
38
49
|
|
39
|
-
[Unreleased]: https://github.com/DataDog/datadog-ci-rb/compare/v0.
|
50
|
+
[Unreleased]: https://github.com/DataDog/datadog-ci-rb/compare/v0.3.0...main
|
51
|
+
[0.3.0]: https://github.com/DataDog/datadog-ci-rb/compare/v0.2.0...v0.3.0
|
40
52
|
[0.2.0]: https://github.com/DataDog/datadog-ci-rb/compare/v0.1.1...v0.2.0
|
41
53
|
[0.1.1]: https://github.com/DataDog/datadog-ci-rb/compare/v0.1.0...v0.1.1
|
42
54
|
|
@@ -51,3 +63,6 @@
|
|
51
63
|
[#31]: https://github.com/DataDog/datadog-ci-rb/issues/31
|
52
64
|
[#33]: https://github.com/DataDog/datadog-ci-rb/issues/33
|
53
65
|
[#40]: https://github.com/DataDog/datadog-ci-rb/issues/40
|
66
|
+
[#49]: https://github.com/DataDog/datadog-ci-rb/issues/49
|
67
|
+
[#51]: https://github.com/DataDog/datadog-ci-rb/issues/51
|
68
|
+
[#54]: https://github.com/DataDog/datadog-ci-rb/issues/54
|
@@ -1,7 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require "datadog/core/configuration/agent_settings_resolver"
|
4
|
+
require "datadog/core/remote/negotiation"
|
5
|
+
|
6
|
+
require_relative "../ext/transport"
|
3
7
|
require_relative "../test_visibility/flush"
|
4
8
|
require_relative "../test_visibility/transport"
|
9
|
+
require_relative "../transport/api/builder"
|
5
10
|
|
6
11
|
module Datadog
|
7
12
|
module CI
|
@@ -17,25 +22,13 @@ module Datadog
|
|
17
22
|
end
|
18
23
|
|
19
24
|
def activate_ci!(settings)
|
20
|
-
|
25
|
+
test_visibility_transport = nil
|
26
|
+
agent_settings = Datadog::Core::Configuration::AgentSettingsResolver.call(settings)
|
21
27
|
|
22
28
|
if settings.ci.agentless_mode_enabled
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
# Tests are running without CI visibility enabled
|
27
|
-
|
28
|
-
Datadog.logger.error(
|
29
|
-
"DATADOG CONFIGURATION - CI VISIBILITY - ATTENTION - " \
|
30
|
-
"Agentless mode was enabled but DD_API_KEY is not set: CI visibility is disabled. " \
|
31
|
-
"Please make sure to set valid api key in DD_API_KEY environment variable"
|
32
|
-
)
|
33
|
-
|
34
|
-
settings.ci.enabled = false
|
35
|
-
return
|
36
|
-
else
|
37
|
-
agentless_transport = build_agentless_transport(settings)
|
38
|
-
end
|
29
|
+
test_visibility_transport = build_agentless_transport(settings)
|
30
|
+
elsif can_use_evp_proxy?(settings, agent_settings)
|
31
|
+
test_visibility_transport = build_evp_proxy_transport(settings, agent_settings)
|
39
32
|
end
|
40
33
|
|
41
34
|
# Deactivate telemetry
|
@@ -51,8 +44,8 @@ module Datadog
|
|
51
44
|
settings.tracing.test_mode.trace_flush = settings.ci.trace_flush || CI::TestVisibility::Flush::Finished.new
|
52
45
|
|
53
46
|
writer_options = settings.ci.writer_options
|
54
|
-
if
|
55
|
-
writer_options[:transport] =
|
47
|
+
if test_visibility_transport
|
48
|
+
writer_options[:transport] = test_visibility_transport
|
56
49
|
writer_options[:shutdown_timeout] = 60
|
57
50
|
|
58
51
|
settings.tracing.test_mode.async = true
|
@@ -61,15 +54,43 @@ module Datadog
|
|
61
54
|
settings.tracing.test_mode.writer_options = writer_options
|
62
55
|
end
|
63
56
|
|
57
|
+
def can_use_evp_proxy?(settings, agent_settings)
|
58
|
+
Datadog::Core::Remote::Negotiation.new(settings, agent_settings).endpoint?(
|
59
|
+
Ext::Transport::EVP_PROXY_PATH_PREFIX
|
60
|
+
)
|
61
|
+
end
|
62
|
+
|
64
63
|
def build_agentless_transport(settings)
|
65
|
-
|
66
|
-
|
67
|
-
|
64
|
+
if settings.api_key.nil?
|
65
|
+
# agentless mode is requested but no API key is provided -
|
66
|
+
# we cannot continue and log an error
|
67
|
+
# Tests are running without CI visibility enabled
|
68
|
+
|
69
|
+
Datadog.logger.error(
|
70
|
+
"DATADOG CONFIGURATION - CI VISIBILITY - ATTENTION - " \
|
71
|
+
"Agentless mode was enabled but DD_API_KEY is not set: CI visibility is disabled. " \
|
72
|
+
"Please make sure to set valid api key in DD_API_KEY environment variable"
|
73
|
+
)
|
74
|
+
|
75
|
+
settings.ci.enabled = false
|
76
|
+
|
77
|
+
nil
|
78
|
+
else
|
79
|
+
Datadog.logger.debug("CI visibility configured to use agentless transport")
|
80
|
+
|
81
|
+
Datadog::CI::TestVisibility::Transport.new(
|
82
|
+
api: Transport::Api::Builder.build_ci_test_cycle_api(settings),
|
83
|
+
dd_env: settings.env
|
84
|
+
)
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
def build_evp_proxy_transport(settings, agent_settings)
|
89
|
+
Datadog.logger.debug("CI visibility configured to use agent transport via EVP proxy")
|
68
90
|
|
69
91
|
Datadog::CI::TestVisibility::Transport.new(
|
70
|
-
|
71
|
-
|
72
|
-
env: settings.env
|
92
|
+
api: Transport::Api::Builder.build_evp_proxy_api(agent_settings),
|
93
|
+
dd_env: settings.env
|
73
94
|
)
|
74
95
|
end
|
75
96
|
end
|
@@ -10,6 +10,10 @@ module Datadog
|
|
10
10
|
# Appveyor: https://www.appveyor.com/
|
11
11
|
# Environment variables docs: https://www.appveyor.com/docs/environment-variables/
|
12
12
|
class Appveyor < Base
|
13
|
+
def self.handles?(env)
|
14
|
+
env.key?("APPVEYOR")
|
15
|
+
end
|
16
|
+
|
13
17
|
def provider_name
|
14
18
|
"appveyor"
|
15
19
|
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "base"
|
4
|
+
|
5
|
+
module Datadog
|
6
|
+
module CI
|
7
|
+
module Ext
|
8
|
+
module Environment
|
9
|
+
module Providers
|
10
|
+
# AWS CodePipeline: https://aws.amazon.com/codepipeline/
|
11
|
+
# Environment variables docs: https://docs.aws.amazon.com/codepipeline/latest/userguide/actions-variables.html
|
12
|
+
# AWS CodeBuild: https://aws.amazon.com/codebuild/
|
13
|
+
# Environment variable docs: https://docs.aws.amazon.com/codebuild/latest/userguide/build-env-ref-env-vars.html
|
14
|
+
class AwsCodePipeline < Base
|
15
|
+
def self.handles?(env)
|
16
|
+
!env["CODEBUILD_INITIATOR"].nil? && env["CODEBUILD_INITIATOR"].start_with?("codepipeline")
|
17
|
+
end
|
18
|
+
|
19
|
+
def provider_name
|
20
|
+
"awscodepipeline"
|
21
|
+
end
|
22
|
+
|
23
|
+
def pipeline_id
|
24
|
+
env["DD_PIPELINE_EXECUTION_ID"]
|
25
|
+
end
|
26
|
+
|
27
|
+
def ci_env_vars
|
28
|
+
{
|
29
|
+
"CODEBUILD_BUILD_ARN" => env["CODEBUILD_BUILD_ARN"],
|
30
|
+
"DD_PIPELINE_EXECUTION_ID" => env["DD_PIPELINE_EXECUTION_ID"],
|
31
|
+
"DD_ACTION_EXECUTION_ID" => env["DD_ACTION_EXECUTION_ID"]
|
32
|
+
}.to_json
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -12,6 +12,10 @@ module Datadog
|
|
12
12
|
# Azure Pipelines: https://azure.microsoft.com/en-us/products/devops/pipelines
|
13
13
|
# Environment variables docs: https://learn.microsoft.com/en-us/azure/devops/pipelines/build/variables?view=azure-devops&tabs=yaml
|
14
14
|
class Azure < Base
|
15
|
+
def self.handles?(env)
|
16
|
+
env.key?("TF_BUILD")
|
17
|
+
end
|
18
|
+
|
15
19
|
def provider_name
|
16
20
|
"azurepipelines"
|
17
21
|
end
|
@@ -10,6 +10,10 @@ module Datadog
|
|
10
10
|
# Bitbucket Pipelines: https://bitbucket.org/product/features/pipelines
|
11
11
|
# Environment variables docs: https://support.atlassian.com/bitbucket-cloud/docs/variables-and-secrets/
|
12
12
|
class Bitbucket < Base
|
13
|
+
def self.handles?(env)
|
14
|
+
env.key?("BITBUCKET_COMMIT")
|
15
|
+
end
|
16
|
+
|
13
17
|
# overridden methods
|
14
18
|
def provider_name
|
15
19
|
"bitbucket"
|
@@ -10,6 +10,10 @@ module Datadog
|
|
10
10
|
# Bitrise: https://bitrise.io/
|
11
11
|
# Environment variables docs: https://devcenter.bitrise.io/en/references/available-environment-variables.html
|
12
12
|
class Bitrise < Base
|
13
|
+
def self.handles?(env)
|
14
|
+
env.key?("BITRISE_BUILD_SLUG")
|
15
|
+
end
|
16
|
+
|
13
17
|
def provider_name
|
14
18
|
"bitrise"
|
15
19
|
end
|
@@ -10,6 +10,10 @@ module Datadog
|
|
10
10
|
# Buddy: https://buddy.works/
|
11
11
|
# Environment variables docs: https://buddy.works/docs/pipelines/environment-variables
|
12
12
|
class Buddy < Base
|
13
|
+
def self.handles?(env)
|
14
|
+
env.key?("BUDDY")
|
15
|
+
end
|
16
|
+
|
13
17
|
def provider_name
|
14
18
|
"buddy"
|
15
19
|
end
|
@@ -12,6 +12,10 @@ module Datadog
|
|
12
12
|
# Buildkite: https://buildkite.com/
|
13
13
|
# Environment variables docs: https://buildkite.com/docs/pipelines/environment-variables
|
14
14
|
class Buildkite < Base
|
15
|
+
def self.handles?(env)
|
16
|
+
env.key?("BUILDKITE")
|
17
|
+
end
|
18
|
+
|
15
19
|
def provider_name
|
16
20
|
"buildkite"
|
17
21
|
end
|
@@ -12,6 +12,10 @@ module Datadog
|
|
12
12
|
# Circle CI: https://circleci.com/
|
13
13
|
# Environment variables docs: https://circleci.com/docs/variables/#built-in-environment-variables
|
14
14
|
class Circleci < Base
|
15
|
+
def self.handles?(env)
|
16
|
+
env.key?("CIRCLECI")
|
17
|
+
end
|
18
|
+
|
15
19
|
def provider_name
|
16
20
|
"circleci"
|
17
21
|
end
|
@@ -12,6 +12,10 @@ module Datadog
|
|
12
12
|
# Codefresh: https://codefresh.io/
|
13
13
|
# Environment variables docs: https://codefresh.io/docs/docs/pipelines/variables/#export-variables-to-all-steps-with-cf_export
|
14
14
|
class Codefresh < Base
|
15
|
+
def self.handles?(env)
|
16
|
+
env.key?("CF_BUILD_ID")
|
17
|
+
end
|
18
|
+
|
15
19
|
def provider_name
|
16
20
|
"codefresh"
|
17
21
|
end
|
@@ -12,6 +12,10 @@ module Datadog
|
|
12
12
|
# Github Actions: https://github.com/features/actions
|
13
13
|
# Environment variables docs: https://docs.github.com/en/actions/learn-github-actions/variables#default-environment-variables
|
14
14
|
class GithubActions < Base
|
15
|
+
def self.handles?(env)
|
16
|
+
env.key?("GITHUB_SHA")
|
17
|
+
end
|
18
|
+
|
15
19
|
def provider_name
|
16
20
|
"github"
|
17
21
|
end
|
@@ -10,6 +10,10 @@ module Datadog
|
|
10
10
|
# Gitlab CI: https://docs.gitlab.com/ee/ci/
|
11
11
|
# Environment variables docs: https://docs.gitlab.com/ee/ci/variables/predefined_variables.html
|
12
12
|
class Gitlab < Base
|
13
|
+
def self.handles?(env)
|
14
|
+
env.key?("GITLAB_CI")
|
15
|
+
end
|
16
|
+
|
13
17
|
def provider_name
|
14
18
|
"gitlab"
|
15
19
|
end
|
@@ -13,6 +13,10 @@ module Datadog
|
|
13
13
|
# Jenkins: https://www.jenkins.io/
|
14
14
|
# Environment variables docs: https://www.jenkins.io/doc/book/pipeline/jenkinsfile/#using-environment-variables
|
15
15
|
class Jenkins < Base
|
16
|
+
def self.handles?(env)
|
17
|
+
env.key?("JENKINS_URL")
|
18
|
+
end
|
19
|
+
|
16
20
|
def provider_name
|
17
21
|
"jenkins"
|
18
22
|
end
|
@@ -10,6 +10,10 @@ module Datadog
|
|
10
10
|
# Teamcity: https://www.jetbrains.com/teamcity/
|
11
11
|
# Environment variables docs: https://www.jetbrains.com/help/teamcity/predefined-build-parameters.html
|
12
12
|
class Teamcity < Base
|
13
|
+
def self.handles?(env)
|
14
|
+
env.key?("TEAMCITY_VERSION")
|
15
|
+
end
|
16
|
+
|
13
17
|
def provider_name
|
14
18
|
"teamcity"
|
15
19
|
end
|
@@ -10,6 +10,10 @@ module Datadog
|
|
10
10
|
# Travis CI: https://www.travis-ci.com/
|
11
11
|
# Environment variables docs: https://docs.travis-ci.com/user/environment-variables#default-environment-variables
|
12
12
|
class Travis < Base
|
13
|
+
def self.handles?(env)
|
14
|
+
env.key?("TRAVIS")
|
15
|
+
end
|
16
|
+
|
13
17
|
def provider_name
|
14
18
|
"travisci"
|
15
19
|
end
|
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
require_relative "providers/base"
|
4
4
|
require_relative "providers/appveyor"
|
5
|
+
require_relative "providers/aws_code_pipeline"
|
5
6
|
require_relative "providers/azure"
|
6
7
|
require_relative "providers/bitbucket"
|
7
8
|
require_relative "providers/bitrise"
|
@@ -24,23 +25,24 @@ module Datadog
|
|
24
25
|
module Environment
|
25
26
|
module Providers
|
26
27
|
PROVIDERS = [
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
28
|
+
Providers::Appveyor,
|
29
|
+
Providers::AwsCodePipeline,
|
30
|
+
Providers::Azure,
|
31
|
+
Providers::Bitbucket,
|
32
|
+
Providers::Bitrise,
|
33
|
+
Providers::Buddy,
|
34
|
+
Providers::Buildkite,
|
35
|
+
Providers::Circleci,
|
36
|
+
Providers::Codefresh,
|
37
|
+
Providers::GithubActions,
|
38
|
+
Providers::Gitlab,
|
39
|
+
Providers::Jenkins,
|
40
|
+
Providers::Teamcity,
|
41
|
+
Providers::Travis
|
40
42
|
]
|
41
43
|
|
42
44
|
def self.for_environment(env)
|
43
|
-
|
45
|
+
provider_klass = PROVIDERS.find { |klass| klass.handles?(env) }
|
44
46
|
provider_klass = Providers::Base if provider_klass.nil?
|
45
47
|
|
46
48
|
provider_klass.new(env)
|
@@ -4,10 +4,15 @@ module Datadog
|
|
4
4
|
module CI
|
5
5
|
module Ext
|
6
6
|
module Transport
|
7
|
+
DEFAULT_DD_SITE = "datadoghq.com"
|
8
|
+
|
7
9
|
HEADER_DD_API_KEY = "DD-API-KEY"
|
8
10
|
HEADER_CONTENT_TYPE = "Content-Type"
|
9
11
|
HEADER_CONTENT_ENCODING = "Content-Encoding"
|
12
|
+
HEADER_EVP_SUBDOMAIN = "X-Datadog-EVP-Subdomain"
|
13
|
+
HEADER_CONTAINER_ID = "Datadog-Container-ID"
|
10
14
|
|
15
|
+
EVP_PROXY_PATH_PREFIX = "/evp_proxy/v2/"
|
11
16
|
TEST_VISIBILITY_INTAKE_HOST_PREFIX = "citestcycle-intake"
|
12
17
|
TEST_VISIBILITY_INTAKE_PATH = "/api/v2/citestcycle"
|
13
18
|
|
@@ -9,7 +9,6 @@ require "datadog/core/chunker"
|
|
9
9
|
|
10
10
|
require_relative "serializers/factories/test_level"
|
11
11
|
require_relative "../ext/transport"
|
12
|
-
require_relative "../transport/http"
|
13
12
|
|
14
13
|
module Datadog
|
15
14
|
module CI
|
@@ -20,33 +19,20 @@ module Datadog
|
|
20
19
|
DEFAULT_MAX_PAYLOAD_SIZE = 5 * 1024 * 1024
|
21
20
|
|
22
21
|
attr_reader :serializers_factory,
|
23
|
-
:
|
22
|
+
:api,
|
24
23
|
:max_payload_size,
|
25
|
-
:
|
26
|
-
:env
|
24
|
+
:dd_env
|
27
25
|
|
28
26
|
def initialize(
|
29
|
-
|
30
|
-
|
31
|
-
env: nil,
|
27
|
+
api:,
|
28
|
+
dd_env: nil,
|
32
29
|
serializers_factory: Datadog::CI::TestVisibility::Serializers::Factories::TestLevel,
|
33
30
|
max_payload_size: DEFAULT_MAX_PAYLOAD_SIZE
|
34
31
|
)
|
35
32
|
@serializers_factory = serializers_factory
|
36
|
-
@api_key = api_key
|
37
33
|
@max_payload_size = max_payload_size
|
38
|
-
@
|
39
|
-
|
40
|
-
uri = URI.parse(url)
|
41
|
-
|
42
|
-
raise "Invalid agentless mode URL: #{url}" if uri.host.nil?
|
43
|
-
|
44
|
-
@http = Datadog::CI::Transport::HTTP.new(
|
45
|
-
host: uri.host,
|
46
|
-
port: uri.port,
|
47
|
-
ssl: uri.scheme == "https" || uri.port == 443,
|
48
|
-
compress: true
|
49
|
-
)
|
34
|
+
@dd_env = dd_env
|
35
|
+
@api = api
|
50
36
|
end
|
51
37
|
|
52
38
|
def send_traces(traces)
|
@@ -82,13 +68,9 @@ module Datadog
|
|
82
68
|
private
|
83
69
|
|
84
70
|
def send_payload(encoded_payload)
|
85
|
-
|
71
|
+
api.request(
|
86
72
|
path: Datadog::CI::Ext::Transport::TEST_VISIBILITY_INTAKE_PATH,
|
87
|
-
payload: encoded_payload
|
88
|
-
headers: {
|
89
|
-
Ext::Transport::HEADER_DD_API_KEY => api_key,
|
90
|
-
Ext::Transport::HEADER_CONTENT_TYPE => Ext::Transport::CONTENT_TYPE_MESSAGEPACK
|
91
|
-
}
|
73
|
+
payload: encoded_payload
|
92
74
|
)
|
93
75
|
end
|
94
76
|
|
@@ -141,12 +123,12 @@ module Datadog
|
|
141
123
|
packer.write_map_header(1)
|
142
124
|
|
143
125
|
packer.write("*")
|
144
|
-
metadata_fields_count =
|
126
|
+
metadata_fields_count = dd_env ? 4 : 3
|
145
127
|
packer.write_map_header(metadata_fields_count)
|
146
128
|
|
147
|
-
if
|
129
|
+
if dd_env
|
148
130
|
packer.write("env")
|
149
|
-
packer.write(
|
131
|
+
packer.write(dd_env)
|
150
132
|
end
|
151
133
|
|
152
134
|
packer.write("runtime-id")
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "../../ext/transport"
|
4
|
+
|
5
|
+
module Datadog
|
6
|
+
module CI
|
7
|
+
module Transport
|
8
|
+
module Api
|
9
|
+
class Base
|
10
|
+
attr_reader :http
|
11
|
+
|
12
|
+
def initialize(http:)
|
13
|
+
@http = http
|
14
|
+
end
|
15
|
+
|
16
|
+
def request(path:, payload:, verb: "post")
|
17
|
+
http.request(
|
18
|
+
path: path,
|
19
|
+
payload: payload,
|
20
|
+
verb: verb,
|
21
|
+
headers: headers
|
22
|
+
)
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
def headers
|
28
|
+
{
|
29
|
+
Ext::Transport::HEADER_CONTENT_TYPE => Ext::Transport::CONTENT_TYPE_MESSAGEPACK
|
30
|
+
}
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "ci_test_cycle"
|
4
|
+
require_relative "evp_proxy"
|
5
|
+
require_relative "../http"
|
6
|
+
require_relative "../../ext/transport"
|
7
|
+
|
8
|
+
module Datadog
|
9
|
+
module CI
|
10
|
+
module Transport
|
11
|
+
module Api
|
12
|
+
module Builder
|
13
|
+
def self.build_ci_test_cycle_api(settings)
|
14
|
+
dd_site = settings.site || Ext::Transport::DEFAULT_DD_SITE
|
15
|
+
url = settings.ci.agentless_url ||
|
16
|
+
"https://#{Ext::Transport::TEST_VISIBILITY_INTAKE_HOST_PREFIX}.#{dd_site}:443"
|
17
|
+
|
18
|
+
uri = URI.parse(url)
|
19
|
+
raise "Invalid agentless mode URL: #{url}" if uri.host.nil?
|
20
|
+
|
21
|
+
http = Datadog::CI::Transport::HTTP.new(
|
22
|
+
host: uri.host,
|
23
|
+
port: uri.port,
|
24
|
+
ssl: uri.scheme == "https" || uri.port == 443,
|
25
|
+
compress: true
|
26
|
+
)
|
27
|
+
|
28
|
+
CiTestCycle.new(api_key: settings.api_key, http: http)
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.build_evp_proxy_api(agent_settings)
|
32
|
+
http = Datadog::CI::Transport::HTTP.new(
|
33
|
+
host: agent_settings.hostname,
|
34
|
+
port: agent_settings.port,
|
35
|
+
ssl: agent_settings.ssl,
|
36
|
+
timeout: agent_settings.timeout_seconds,
|
37
|
+
compress: false
|
38
|
+
)
|
39
|
+
|
40
|
+
EvpProxy.new(http: http)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "base"
|
4
|
+
require_relative "../../ext/transport"
|
5
|
+
|
6
|
+
module Datadog
|
7
|
+
module CI
|
8
|
+
module Transport
|
9
|
+
module Api
|
10
|
+
class CiTestCycle < Base
|
11
|
+
attr_reader :api_key
|
12
|
+
|
13
|
+
def initialize(api_key:, http:)
|
14
|
+
@api_key = api_key
|
15
|
+
|
16
|
+
super(http: http)
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def headers
|
22
|
+
headers = super
|
23
|
+
headers[Ext::Transport::HEADER_DD_API_KEY] = api_key
|
24
|
+
headers
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "datadog/core/environment/container"
|
4
|
+
|
5
|
+
require_relative "base"
|
6
|
+
require_relative "../../ext/transport"
|
7
|
+
|
8
|
+
module Datadog
|
9
|
+
module CI
|
10
|
+
module Transport
|
11
|
+
module Api
|
12
|
+
class EvpProxy < Base
|
13
|
+
def request(path:, payload:, verb: "post")
|
14
|
+
path = "#{Ext::Transport::EVP_PROXY_PATH_PREFIX}#{path.sub(/^\//, "")}"
|
15
|
+
|
16
|
+
super(
|
17
|
+
path: path,
|
18
|
+
payload: payload,
|
19
|
+
verb: verb
|
20
|
+
)
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def container_id
|
26
|
+
return @container_id if defined?(@container_id)
|
27
|
+
|
28
|
+
@container_id = Datadog::Core::Environment::Container.container_id
|
29
|
+
end
|
30
|
+
|
31
|
+
def headers
|
32
|
+
headers = super
|
33
|
+
headers[Ext::Transport::HEADER_EVP_SUBDOMAIN] = Ext::Transport::TEST_VISIBILITY_INTAKE_HOST_PREFIX
|
34
|
+
|
35
|
+
c_id = container_id
|
36
|
+
headers[Ext::Transport::HEADER_CONTAINER_ID] = c_id unless c_id.nil?
|
37
|
+
|
38
|
+
headers
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -10,9 +10,11 @@ module Datadog
|
|
10
10
|
module_function
|
11
11
|
|
12
12
|
def compress(input)
|
13
|
-
|
13
|
+
sio = StringIO.new
|
14
|
+
gzip_writer = Zlib::GzipWriter.new(sio, Zlib::DEFAULT_COMPRESSION, Zlib::DEFAULT_STRATEGY)
|
14
15
|
gzip_writer << input
|
15
|
-
gzip_writer.close
|
16
|
+
gzip_writer.close
|
17
|
+
sio.string
|
16
18
|
end
|
17
19
|
end
|
18
20
|
end
|
@@ -1,6 +1,9 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "
|
3
|
+
require "delegate"
|
4
|
+
require "datadog/core/transport/http/adapters/net"
|
5
|
+
require "datadog/core/transport/http/env"
|
6
|
+
require "datadog/core/transport/request"
|
4
7
|
|
5
8
|
require_relative "gzip"
|
6
9
|
require_relative "../ext/transport"
|
@@ -26,126 +29,47 @@ module Datadog
|
|
26
29
|
@compress = compress.nil? ? false : compress
|
27
30
|
end
|
28
31
|
|
29
|
-
def request(path:, payload:, headers:,
|
30
|
-
raise "Unknown method #{method}" unless respond_to?(method, true)
|
31
|
-
|
32
|
+
def request(path:, payload:, headers:, verb: "post")
|
32
33
|
if compress
|
33
34
|
headers[Ext::Transport::HEADER_CONTENT_ENCODING] = Ext::Transport::CONTENT_ENCODING_GZIP
|
34
35
|
payload = Gzip.compress(payload)
|
35
36
|
end
|
36
37
|
|
37
38
|
Datadog.logger.debug do
|
38
|
-
"Sending #{
|
39
|
+
"Sending #{verb} request: host=#{host}; port=#{port}; ssl_enabled=#{ssl}; " \
|
39
40
|
"compression_enabled=#{compress}; path=#{path}; payload_size=#{payload.size}"
|
40
41
|
end
|
41
42
|
|
42
|
-
|
43
|
+
ResponseDecorator.new(
|
44
|
+
adapter.call(
|
45
|
+
build_env(path: path, payload: payload, headers: headers, verb: verb)
|
46
|
+
)
|
47
|
+
)
|
43
48
|
end
|
44
49
|
|
45
50
|
private
|
46
51
|
|
47
|
-
def
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
52
|
+
def build_env(path:, payload:, headers:, verb:)
|
53
|
+
env = Datadog::Core::Transport::HTTP::Env.new(
|
54
|
+
Datadog::Core::Transport::Request.new
|
55
|
+
)
|
56
|
+
env.body = payload
|
57
|
+
env.path = path
|
58
|
+
env.headers = headers
|
59
|
+
env.verb = verb
|
60
|
+
env
|
54
61
|
end
|
55
62
|
|
56
|
-
def
|
57
|
-
|
58
|
-
post.body = payload
|
59
|
-
|
60
|
-
http_response = open do |http|
|
61
|
-
http.request(post)
|
62
|
-
end
|
63
|
-
|
64
|
-
Response.new(http_response)
|
65
|
-
rescue => e
|
66
|
-
Datadog.logger.debug("Unable to send events: #{e}")
|
67
|
-
|
68
|
-
InternalErrorResponse.new(e)
|
63
|
+
def adapter
|
64
|
+
@adapter ||= Datadog::Core::Transport::HTTP::Adapters::Net.new(host, port, timeout: timeout, ssl: ssl)
|
69
65
|
end
|
70
66
|
|
71
|
-
#
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
def initialize(http_response)
|
76
|
-
@http_response = http_response
|
77
|
-
end
|
78
|
-
|
79
|
-
def payload
|
80
|
-
http_response.body
|
81
|
-
end
|
82
|
-
|
83
|
-
def code
|
84
|
-
http_response.code.to_i
|
85
|
-
end
|
86
|
-
|
87
|
-
def ok?
|
88
|
-
code.between?(200, 299)
|
89
|
-
end
|
90
|
-
|
91
|
-
def unsupported?
|
92
|
-
code == 415
|
93
|
-
end
|
94
|
-
|
95
|
-
def not_found?
|
96
|
-
code == 404
|
97
|
-
end
|
98
|
-
|
99
|
-
def client_error?
|
100
|
-
code.between?(400, 499)
|
101
|
-
end
|
102
|
-
|
103
|
-
def server_error?
|
104
|
-
code.between?(500, 599)
|
105
|
-
end
|
106
|
-
|
107
|
-
def internal_error?
|
108
|
-
false
|
109
|
-
end
|
110
|
-
|
67
|
+
# this is needed because Datadog::Tracing::Writer is not fully compatiple with Datadog::Core::Transport
|
68
|
+
# TODO: remove before 1.0 when CI implements its own worker
|
69
|
+
class ResponseDecorator < ::SimpleDelegator
|
111
70
|
def trace_count
|
112
71
|
0
|
113
72
|
end
|
114
|
-
|
115
|
-
def inspect
|
116
|
-
"#{self.class} ok?:#{ok?} unsupported?:#{unsupported?}, " \
|
117
|
-
"not_found?:#{not_found?}, client_error?:#{client_error?}, " \
|
118
|
-
"server_error?:#{server_error?}, internal_error?:#{internal_error?}, " \
|
119
|
-
"payload:#{payload}"
|
120
|
-
end
|
121
|
-
end
|
122
|
-
|
123
|
-
class InternalErrorResponse < Response
|
124
|
-
class DummyNetHTTPResponse
|
125
|
-
def body
|
126
|
-
""
|
127
|
-
end
|
128
|
-
|
129
|
-
def code
|
130
|
-
"-1"
|
131
|
-
end
|
132
|
-
end
|
133
|
-
|
134
|
-
attr_reader :error
|
135
|
-
|
136
|
-
def initialize(error)
|
137
|
-
super(DummyNetHTTPResponse.new)
|
138
|
-
|
139
|
-
@error = error
|
140
|
-
end
|
141
|
-
|
142
|
-
def internal_error?
|
143
|
-
true
|
144
|
-
end
|
145
|
-
|
146
|
-
def inspect
|
147
|
-
"#{super}, error_class:#{error.class}, error:#{error}"
|
148
|
-
end
|
149
73
|
end
|
150
74
|
end
|
151
75
|
end
|
data/lib/datadog/ci/version.rb
CHANGED
@@ -6,7 +6,9 @@ module Datadog
|
|
6
6
|
|
7
7
|
def activate_ci!: (untyped settings) -> untyped
|
8
8
|
|
9
|
-
def build_agentless_transport: (untyped settings) -> Datadog::CI::TestVisibility::Transport
|
9
|
+
def build_agentless_transport: (untyped settings) -> Datadog::CI::TestVisibility::Transport?
|
10
|
+
def build_evp_proxy_transport: (untyped settings, untyped agent_settings) -> Datadog::CI::TestVisibility::Transport
|
11
|
+
def can_use_evp_proxy?: (untyped settings, untyped agent_settings) -> bool
|
10
12
|
end
|
11
13
|
end
|
12
14
|
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Datadog
|
2
|
+
module CI
|
3
|
+
module Ext
|
4
|
+
module Environment
|
5
|
+
module Providers
|
6
|
+
class AwsCodePipeline < Base
|
7
|
+
def self.handles?: (Hash[String, String?] env) -> bool
|
8
|
+
|
9
|
+
def provider_name: () -> "awscodepipeline"
|
10
|
+
|
11
|
+
def pipeline_id: () -> String?
|
12
|
+
|
13
|
+
def ci_env_vars: () -> String?
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -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"
|
@@ -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
|
9
|
-
attr_reader
|
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
|
-
@
|
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
|
-
|
21
|
-
|
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::
|
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::
|
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: (?
|
20
|
+
def request: (?verb: String, payload: String, headers: Hash[String, String], path: String) -> ResponseDecorator
|
16
21
|
|
17
22
|
private
|
18
23
|
|
19
|
-
def
|
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
|
-
|
26
|
+
def build_env: (payload: String, headers: Hash[String, String], path: String, verb: String) -> Datadog::Core::Transport::HTTP::Env
|
35
27
|
|
36
|
-
|
37
|
-
|
38
|
-
def
|
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
|
+
|
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.
|
4
|
+
version: 0.3.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-
|
11
|
+
date: 2023-10-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: msgpack
|
@@ -67,6 +67,7 @@ files:
|
|
67
67
|
- lib/datadog/ci/ext/environment/extractor.rb
|
68
68
|
- lib/datadog/ci/ext/environment/providers.rb
|
69
69
|
- lib/datadog/ci/ext/environment/providers/appveyor.rb
|
70
|
+
- lib/datadog/ci/ext/environment/providers/aws_code_pipeline.rb
|
70
71
|
- lib/datadog/ci/ext/environment/providers/azure.rb
|
71
72
|
- lib/datadog/ci/ext/environment/providers/base.rb
|
72
73
|
- lib/datadog/ci/ext/environment/providers/bitbucket.rb
|
@@ -94,6 +95,10 @@ files:
|
|
94
95
|
- lib/datadog/ci/test_visibility/serializers/span.rb
|
95
96
|
- lib/datadog/ci/test_visibility/serializers/test_v1.rb
|
96
97
|
- lib/datadog/ci/test_visibility/transport.rb
|
98
|
+
- lib/datadog/ci/transport/api/base.rb
|
99
|
+
- lib/datadog/ci/transport/api/builder.rb
|
100
|
+
- lib/datadog/ci/transport/api/ci_test_cycle.rb
|
101
|
+
- lib/datadog/ci/transport/api/evp_proxy.rb
|
97
102
|
- lib/datadog/ci/transport/gzip.rb
|
98
103
|
- lib/datadog/ci/transport/http.rb
|
99
104
|
- lib/datadog/ci/utils/git.rb
|
@@ -124,6 +129,7 @@ files:
|
|
124
129
|
- sig/datadog/ci/ext/environment/extractor.rbs
|
125
130
|
- sig/datadog/ci/ext/environment/providers.rbs
|
126
131
|
- sig/datadog/ci/ext/environment/providers/appveyor.rbs
|
132
|
+
- sig/datadog/ci/ext/environment/providers/aws_code_pipeline.rbs
|
127
133
|
- sig/datadog/ci/ext/environment/providers/azure.rbs
|
128
134
|
- sig/datadog/ci/ext/environment/providers/base.rbs
|
129
135
|
- sig/datadog/ci/ext/environment/providers/bitbucket.rbs
|
@@ -151,6 +157,10 @@ files:
|
|
151
157
|
- sig/datadog/ci/test_visibility/serializers/span.rbs
|
152
158
|
- sig/datadog/ci/test_visibility/serializers/test_v1.rbs
|
153
159
|
- sig/datadog/ci/test_visibility/transport.rbs
|
160
|
+
- sig/datadog/ci/transport/api/base.rbs
|
161
|
+
- sig/datadog/ci/transport/api/builder.rbs
|
162
|
+
- sig/datadog/ci/transport/api/ci_test_cycle.rbs
|
163
|
+
- sig/datadog/ci/transport/api/evp_proxy.rbs
|
154
164
|
- sig/datadog/ci/transport/gzip.rbs
|
155
165
|
- sig/datadog/ci/transport/http.rbs
|
156
166
|
- sig/datadog/ci/utils/git.rbs
|
@@ -181,7 +191,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
181
191
|
- !ruby/object:Gem::Version
|
182
192
|
version: 2.0.0
|
183
193
|
requirements: []
|
184
|
-
rubygems_version: 3.4.
|
194
|
+
rubygems_version: 3.4.21
|
185
195
|
signing_key:
|
186
196
|
specification_version: 4
|
187
197
|
summary: Datadog CI visibility for your ruby application
|