datadog-ci 0.1.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 +7 -0
- data/CHANGELOG.md +30 -0
- data/LICENSE +6 -0
- data/LICENSE-3rdparty.csv +2 -0
- data/LICENSE.Apache +200 -0
- data/LICENSE.BSD3 +24 -0
- data/NOTICE +4 -0
- data/README.md +125 -0
- data/lib/datadog/ci/configuration/components.rb +32 -0
- data/lib/datadog/ci/configuration/settings.rb +51 -0
- data/lib/datadog/ci/contrib/cucumber/configuration/settings.rb +36 -0
- data/lib/datadog/ci/contrib/cucumber/ext.rb +22 -0
- data/lib/datadog/ci/contrib/cucumber/formatter.rb +94 -0
- data/lib/datadog/ci/contrib/cucumber/instrumentation.rb +28 -0
- data/lib/datadog/ci/contrib/cucumber/integration.rb +47 -0
- data/lib/datadog/ci/contrib/cucumber/patcher.rb +27 -0
- data/lib/datadog/ci/contrib/minitest/configuration/settings.rb +36 -0
- data/lib/datadog/ci/contrib/minitest/ext.rb +21 -0
- data/lib/datadog/ci/contrib/minitest/hooks.rb +66 -0
- data/lib/datadog/ci/contrib/minitest/integration.rb +46 -0
- data/lib/datadog/ci/contrib/minitest/patcher.rb +26 -0
- data/lib/datadog/ci/contrib/rspec/configuration/settings.rb +36 -0
- data/lib/datadog/ci/contrib/rspec/example.rb +70 -0
- data/lib/datadog/ci/contrib/rspec/ext.rb +21 -0
- data/lib/datadog/ci/contrib/rspec/integration.rb +50 -0
- data/lib/datadog/ci/contrib/rspec/patcher.rb +27 -0
- data/lib/datadog/ci/ext/app_types.rb +11 -0
- data/lib/datadog/ci/ext/environment/extractor.rb +101 -0
- data/lib/datadog/ci/ext/environment/providers/appveyor.rb +98 -0
- data/lib/datadog/ci/ext/environment/providers/azure.rb +109 -0
- data/lib/datadog/ci/ext/environment/providers/base.rb +115 -0
- data/lib/datadog/ci/ext/environment/providers/bitbucket.rb +69 -0
- data/lib/datadog/ci/ext/environment/providers/bitrise.rb +77 -0
- data/lib/datadog/ci/ext/environment/providers/buddy.rb +69 -0
- data/lib/datadog/ci/ext/environment/providers/buildkite.rb +95 -0
- data/lib/datadog/ci/ext/environment/providers/circleci.rb +82 -0
- data/lib/datadog/ci/ext/environment/providers/codefresh.rb +49 -0
- data/lib/datadog/ci/ext/environment/providers/github_actions.rb +76 -0
- data/lib/datadog/ci/ext/environment/providers/gitlab.rb +119 -0
- data/lib/datadog/ci/ext/environment/providers/jenkins.rb +74 -0
- data/lib/datadog/ci/ext/environment/providers/local_git.rb +170 -0
- data/lib/datadog/ci/ext/environment/providers/teamcity.rb +29 -0
- data/lib/datadog/ci/ext/environment/providers/travis.rb +65 -0
- data/lib/datadog/ci/ext/environment/providers/user_defined_tags.rb +62 -0
- data/lib/datadog/ci/ext/environment/providers.rb +52 -0
- data/lib/datadog/ci/ext/environment.rb +82 -0
- data/lib/datadog/ci/ext/git.rb +37 -0
- data/lib/datadog/ci/ext/settings.rb +12 -0
- data/lib/datadog/ci/ext/test.rb +37 -0
- data/lib/datadog/ci/extensions.rb +19 -0
- data/lib/datadog/ci/flush.rb +38 -0
- data/lib/datadog/ci/test.rb +82 -0
- data/lib/datadog/ci/utils/git.rb +22 -0
- data/lib/datadog/ci/version.rb +28 -0
- data/lib/datadog/ci.rb +24 -0
- data/sig/datadog/ci/configuration/components.rbs +11 -0
- data/sig/datadog/ci/configuration/settings.rbs +14 -0
- data/sig/datadog/ci/contrib/cucumber/configuration/settings.rbs +12 -0
- data/sig/datadog/ci/contrib/cucumber/ext.rbs +25 -0
- data/sig/datadog/ci/contrib/cucumber/formatter.rbs +35 -0
- data/sig/datadog/ci/contrib/cucumber/instrumentation.rbs +16 -0
- data/sig/datadog/ci/contrib/cucumber/integration.rbs +25 -0
- data/sig/datadog/ci/contrib/cucumber/patcher.rbs +15 -0
- data/sig/datadog/ci/contrib/minitest/configuration/settings.rbs +12 -0
- data/sig/datadog/ci/contrib/minitest/ext.rbs +23 -0
- data/sig/datadog/ci/contrib/minitest/hooks.rbs +19 -0
- data/sig/datadog/ci/contrib/minitest/integration.rbs +25 -0
- data/sig/datadog/ci/contrib/minitest/patcher.rbs +15 -0
- data/sig/datadog/ci/contrib/rspec/configuration/settings.rbs +12 -0
- data/sig/datadog/ci/contrib/rspec/example.rbs +20 -0
- data/sig/datadog/ci/contrib/rspec/ext.rbs +23 -0
- data/sig/datadog/ci/contrib/rspec/integration.rbs +25 -0
- data/sig/datadog/ci/contrib/rspec/patcher.rbs +15 -0
- data/sig/datadog/ci/ext/app_types.rbs +9 -0
- data/sig/datadog/ci/ext/environment/extractor.rbs +27 -0
- data/sig/datadog/ci/ext/environment/providers/appveyor.rbs +48 -0
- data/sig/datadog/ci/ext/environment/providers/azure.rbs +56 -0
- data/sig/datadog/ci/ext/environment/providers/base.rbs +69 -0
- data/sig/datadog/ci/ext/environment/providers/bitbucket.rbs +37 -0
- data/sig/datadog/ci/ext/environment/providers/bitrise.rbs +41 -0
- data/sig/datadog/ci/ext/environment/providers/buddy.rbs +37 -0
- data/sig/datadog/ci/ext/environment/providers/buildkite.rbs +45 -0
- data/sig/datadog/ci/ext/environment/providers/circleci.rbs +41 -0
- data/sig/datadog/ci/ext/environment/providers/codefresh.rbs +25 -0
- data/sig/datadog/ci/ext/environment/providers/github_actions.rbs +37 -0
- data/sig/datadog/ci/ext/environment/providers/gitlab.rbs +57 -0
- data/sig/datadog/ci/ext/environment/providers/jenkins.rbs +35 -0
- data/sig/datadog/ci/ext/environment/providers/local_git.rbs +66 -0
- data/sig/datadog/ci/ext/environment/providers/teamcity.rbs +17 -0
- data/sig/datadog/ci/ext/environment/providers/travis.rbs +35 -0
- data/sig/datadog/ci/ext/environment/providers/user_defined_tags.rbs +33 -0
- data/sig/datadog/ci/ext/environment/providers.rbs +13 -0
- data/sig/datadog/ci/ext/environment.rbs +44 -0
- data/sig/datadog/ci/ext/git.rbs +53 -0
- data/sig/datadog/ci/ext/settings.rbs +9 -0
- data/sig/datadog/ci/ext/test.rbs +43 -0
- data/sig/datadog/ci/extensions.rbs +7 -0
- data/sig/datadog/ci/flush.rbs +15 -0
- data/sig/datadog/ci/test.rbs +18 -0
- data/sig/datadog/ci/utils/git.rbs +11 -0
- data/sig/datadog/ci/version.rbs +16 -0
- data/sig/datadog/ci.rbs +7 -0
- metadata +154 -0
@@ -0,0 +1,82 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "git"
|
4
|
+
require_relative "environment/extractor"
|
5
|
+
|
6
|
+
module Datadog
|
7
|
+
module CI
|
8
|
+
module Ext
|
9
|
+
# Defines constants for CI tags
|
10
|
+
module Environment
|
11
|
+
TAG_JOB_NAME = "ci.job.name"
|
12
|
+
TAG_JOB_URL = "ci.job.url"
|
13
|
+
TAG_PIPELINE_ID = "ci.pipeline.id"
|
14
|
+
TAG_PIPELINE_NAME = "ci.pipeline.name"
|
15
|
+
TAG_PIPELINE_NUMBER = "ci.pipeline.number"
|
16
|
+
TAG_PIPELINE_URL = "ci.pipeline.url"
|
17
|
+
TAG_PROVIDER_NAME = "ci.provider.name"
|
18
|
+
TAG_STAGE_NAME = "ci.stage.name"
|
19
|
+
TAG_WORKSPACE_PATH = "ci.workspace_path"
|
20
|
+
TAG_NODE_LABELS = "ci.node.labels"
|
21
|
+
TAG_NODE_NAME = "ci.node.name"
|
22
|
+
TAG_CI_ENV_VARS = "_dd.ci.env_vars"
|
23
|
+
|
24
|
+
HEX_NUMBER_REGEXP = /[0-9a-f]{40}/i.freeze
|
25
|
+
|
26
|
+
module_function
|
27
|
+
|
28
|
+
def tags(env)
|
29
|
+
# Extract metadata from CI provider environment variables
|
30
|
+
tags = Environment::Extractor.new(env).tags
|
31
|
+
|
32
|
+
# If user defined metadata is defined, overwrite
|
33
|
+
tags.merge!(
|
34
|
+
Environment::Extractor.new(env, provider_klass: Providers::UserDefinedTags).tags
|
35
|
+
)
|
36
|
+
|
37
|
+
# Fill out tags from local git as fallback
|
38
|
+
local_git_tags = Environment::Extractor.new(env, provider_klass: Providers::LocalGit).tags
|
39
|
+
local_git_tags.each do |key, value|
|
40
|
+
tags[key] ||= value
|
41
|
+
end
|
42
|
+
|
43
|
+
ensure_post_conditions(tags)
|
44
|
+
|
45
|
+
tags
|
46
|
+
end
|
47
|
+
|
48
|
+
def ensure_post_conditions(tags)
|
49
|
+
validate_repository_url(tags[Git::TAG_REPOSITORY_URL])
|
50
|
+
validate_git_sha(tags[Git::TAG_COMMIT_SHA])
|
51
|
+
end
|
52
|
+
|
53
|
+
def validate_repository_url(repo_url)
|
54
|
+
return if !repo_url.nil? && !repo_url.empty?
|
55
|
+
|
56
|
+
Datadog.logger.error("DD_GIT_REPOSITORY_URL is not set or empty; no repo URL was automatically extracted")
|
57
|
+
end
|
58
|
+
|
59
|
+
def validate_git_sha(git_sha)
|
60
|
+
message = "DD_GIT_COMMIT_SHA must be a full-length git SHA."
|
61
|
+
|
62
|
+
if git_sha.nil? || git_sha.empty?
|
63
|
+
message += " No value was set and no SHA was automatically extracted."
|
64
|
+
Datadog.logger.error(message)
|
65
|
+
return
|
66
|
+
end
|
67
|
+
|
68
|
+
if git_sha.length < Git::SHA_LENGTH
|
69
|
+
message += " Expected SHA length #{Git::SHA_LENGTH}, was #{git_sha.length}."
|
70
|
+
Datadog.logger.error(message)
|
71
|
+
return
|
72
|
+
end
|
73
|
+
|
74
|
+
unless HEX_NUMBER_REGEXP =~ git_sha
|
75
|
+
message += " Expected SHA to be a valid HEX number, got #{git_sha}."
|
76
|
+
Datadog.logger.error(message)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Datadog
|
4
|
+
module CI
|
5
|
+
module Ext
|
6
|
+
# Defines constants for Git tags
|
7
|
+
module Git
|
8
|
+
SHA_LENGTH = 40
|
9
|
+
|
10
|
+
TAG_BRANCH = "git.branch"
|
11
|
+
TAG_REPOSITORY_URL = "git.repository_url"
|
12
|
+
TAG_TAG = "git.tag"
|
13
|
+
|
14
|
+
TAG_COMMIT_AUTHOR_DATE = "git.commit.author.date"
|
15
|
+
TAG_COMMIT_AUTHOR_EMAIL = "git.commit.author.email"
|
16
|
+
TAG_COMMIT_AUTHOR_NAME = "git.commit.author.name"
|
17
|
+
TAG_COMMIT_COMMITTER_DATE = "git.commit.committer.date"
|
18
|
+
TAG_COMMIT_COMMITTER_EMAIL = "git.commit.committer.email"
|
19
|
+
TAG_COMMIT_COMMITTER_NAME = "git.commit.committer.name"
|
20
|
+
TAG_COMMIT_MESSAGE = "git.commit.message"
|
21
|
+
TAG_COMMIT_SHA = "git.commit.sha"
|
22
|
+
|
23
|
+
ENV_REPOSITORY_URL = "DD_GIT_REPOSITORY_URL"
|
24
|
+
ENV_COMMIT_SHA = "DD_GIT_COMMIT_SHA"
|
25
|
+
ENV_BRANCH = "DD_GIT_BRANCH"
|
26
|
+
ENV_TAG = "DD_GIT_TAG"
|
27
|
+
ENV_COMMIT_MESSAGE = "DD_GIT_COMMIT_MESSAGE"
|
28
|
+
ENV_COMMIT_AUTHOR_NAME = "DD_GIT_COMMIT_AUTHOR_NAME"
|
29
|
+
ENV_COMMIT_AUTHOR_EMAIL = "DD_GIT_COMMIT_AUTHOR_EMAIL"
|
30
|
+
ENV_COMMIT_AUTHOR_DATE = "DD_GIT_COMMIT_AUTHOR_DATE"
|
31
|
+
ENV_COMMIT_COMMITTER_NAME = "DD_GIT_COMMIT_COMMITTER_NAME"
|
32
|
+
ENV_COMMIT_COMMITTER_EMAIL = "DD_GIT_COMMIT_COMMITTER_EMAIL"
|
33
|
+
ENV_COMMIT_COMMITTER_DATE = "DD_GIT_COMMIT_COMMITTER_DATE"
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Datadog
|
4
|
+
module CI
|
5
|
+
module Ext
|
6
|
+
# Defines constants for test tags
|
7
|
+
module Test
|
8
|
+
CONTEXT_ORIGIN = "ciapp-test"
|
9
|
+
|
10
|
+
TAG_ARGUMENTS = "test.arguments"
|
11
|
+
TAG_FRAMEWORK = "test.framework"
|
12
|
+
TAG_FRAMEWORK_VERSION = "test.framework_version"
|
13
|
+
TAG_NAME = "test.name"
|
14
|
+
TAG_SKIP_REASON = "test.skip_reason" # DEV: Not populated yet
|
15
|
+
TAG_STATUS = "test.status"
|
16
|
+
TAG_SUITE = "test.suite"
|
17
|
+
TAG_TRAITS = "test.traits"
|
18
|
+
TAG_TYPE = "test.type"
|
19
|
+
|
20
|
+
# Environment runtime tags
|
21
|
+
TAG_OS_ARCHITECTURE = "os.architecture"
|
22
|
+
TAG_OS_PLATFORM = "os.platform"
|
23
|
+
TAG_RUNTIME_NAME = "runtime.name"
|
24
|
+
TAG_RUNTIME_VERSION = "runtime.version"
|
25
|
+
|
26
|
+
# TODO: is there a better place for SPAN_KIND?
|
27
|
+
TAG_SPAN_KIND = "span.kind"
|
28
|
+
|
29
|
+
module Status
|
30
|
+
PASS = "pass"
|
31
|
+
FAIL = "fail"
|
32
|
+
SKIP = "skip"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "datadog/core/configuration/settings"
|
4
|
+
require "datadog/core/configuration/components"
|
5
|
+
|
6
|
+
require_relative "configuration/settings"
|
7
|
+
require_relative "configuration/components"
|
8
|
+
|
9
|
+
module Datadog
|
10
|
+
module CI
|
11
|
+
# Extends Datadog tracing with CI features
|
12
|
+
module Extensions
|
13
|
+
def self.activate!
|
14
|
+
Core::Configuration::Settings.extend(CI::Configuration::Settings)
|
15
|
+
Core::Configuration::Components.prepend(CI::Configuration::Components)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "datadog/tracing/metadata/ext"
|
4
|
+
require "datadog/tracing/flush"
|
5
|
+
|
6
|
+
module Datadog
|
7
|
+
module CI
|
8
|
+
module Flush
|
9
|
+
# Common behavior for CI flushing
|
10
|
+
module Tagging
|
11
|
+
# Decorate a trace with CI tags
|
12
|
+
def get_trace(trace_op)
|
13
|
+
trace = trace_op.flush!
|
14
|
+
|
15
|
+
# Origin tag is required on every span
|
16
|
+
trace.spans.each do |span|
|
17
|
+
span.set_tag(
|
18
|
+
Tracing::Metadata::Ext::Distributed::TAG_ORIGIN,
|
19
|
+
trace.origin
|
20
|
+
)
|
21
|
+
end
|
22
|
+
|
23
|
+
trace
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
# Consumes only completed traces (where all spans have finished)
|
28
|
+
class Finished < Tracing::Flush::Finished
|
29
|
+
prepend Tagging
|
30
|
+
end
|
31
|
+
|
32
|
+
# Performs partial trace flushing to avoid large traces residing in memory for too long
|
33
|
+
class Partial < Tracing::Flush::Partial
|
34
|
+
prepend Tagging
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,82 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "datadog/tracing/contrib/analytics"
|
4
|
+
|
5
|
+
require_relative "ext/app_types"
|
6
|
+
require_relative "ext/test"
|
7
|
+
require_relative "ext/environment"
|
8
|
+
|
9
|
+
require "rbconfig"
|
10
|
+
|
11
|
+
module Datadog
|
12
|
+
module CI
|
13
|
+
# Common behavior for CI tests
|
14
|
+
module Test
|
15
|
+
# Creates a new span for a CI test
|
16
|
+
def self.trace(span_name, options = {})
|
17
|
+
span_options = {
|
18
|
+
span_type: Ext::AppTypes::TYPE_TEST
|
19
|
+
}.merge(options[:span_options] || {})
|
20
|
+
|
21
|
+
if block_given?
|
22
|
+
Tracing.trace(span_name, **span_options) do |span, trace|
|
23
|
+
set_tags!(trace, span, options)
|
24
|
+
yield(span, trace)
|
25
|
+
end
|
26
|
+
else
|
27
|
+
span = Tracing.trace(span_name, **span_options)
|
28
|
+
trace = Tracing.active_trace
|
29
|
+
set_tags!(trace, span, options)
|
30
|
+
span
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
# Adds tags to a CI test span.
|
35
|
+
def self.set_tags!(trace, span, tags = {})
|
36
|
+
tags ||= {}
|
37
|
+
|
38
|
+
# Set default tags
|
39
|
+
trace.origin = Ext::Test::CONTEXT_ORIGIN if trace
|
40
|
+
Datadog::Tracing::Contrib::Analytics.set_measured(span)
|
41
|
+
span.set_tag(Ext::Test::TAG_SPAN_KIND, Ext::AppTypes::TYPE_TEST)
|
42
|
+
|
43
|
+
# Set environment tags
|
44
|
+
@environment_tags ||= Ext::Environment.tags(ENV)
|
45
|
+
@environment_tags.each { |k, v| span.set_tag(k, v) }
|
46
|
+
|
47
|
+
# Set contextual tags
|
48
|
+
span.set_tag(Ext::Test::TAG_FRAMEWORK, tags[:framework]) if tags[:framework]
|
49
|
+
span.set_tag(Ext::Test::TAG_FRAMEWORK_VERSION, tags[:framework_version]) if tags[:framework_version]
|
50
|
+
span.set_tag(Ext::Test::TAG_NAME, tags[:test_name]) if tags[:test_name]
|
51
|
+
span.set_tag(Ext::Test::TAG_SUITE, tags[:test_suite]) if tags[:test_suite]
|
52
|
+
span.set_tag(Ext::Test::TAG_TYPE, tags[:test_type]) if tags[:test_type]
|
53
|
+
|
54
|
+
set_environment_runtime_tags!(span)
|
55
|
+
|
56
|
+
span
|
57
|
+
end
|
58
|
+
|
59
|
+
def self.passed!(span)
|
60
|
+
span.set_tag(Ext::Test::TAG_STATUS, Ext::Test::Status::PASS)
|
61
|
+
end
|
62
|
+
|
63
|
+
def self.failed!(span, exception = nil)
|
64
|
+
span.status = 1
|
65
|
+
span.set_tag(Ext::Test::TAG_STATUS, Ext::Test::Status::FAIL)
|
66
|
+
span.set_error(exception) unless exception.nil?
|
67
|
+
end
|
68
|
+
|
69
|
+
def self.skipped!(span, exception = nil)
|
70
|
+
span.set_tag(Ext::Test::TAG_STATUS, Ext::Test::Status::SKIP)
|
71
|
+
span.set_error(exception) unless exception.nil?
|
72
|
+
end
|
73
|
+
|
74
|
+
private_class_method def self.set_environment_runtime_tags!(span)
|
75
|
+
span.set_tag(Ext::Test::TAG_OS_ARCHITECTURE, ::RbConfig::CONFIG["host_cpu"])
|
76
|
+
span.set_tag(Ext::Test::TAG_OS_PLATFORM, ::RbConfig::CONFIG["host_os"])
|
77
|
+
span.set_tag(Ext::Test::TAG_RUNTIME_NAME, Core::Environment::Ext::LANG_ENGINE)
|
78
|
+
span.set_tag(Ext::Test::TAG_RUNTIME_VERSION, Core::Environment::Ext::ENGINE_VERSION)
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Datadog
|
4
|
+
module CI
|
5
|
+
module Utils
|
6
|
+
module Git
|
7
|
+
def self.normalize_ref(ref)
|
8
|
+
return nil if ref.nil?
|
9
|
+
|
10
|
+
refs = %r{^refs/(heads/)?}
|
11
|
+
origin = %r{^origin/}
|
12
|
+
tags = %r{^tags/}
|
13
|
+
ref.gsub(refs, "").gsub(origin, "").gsub(tags, "")
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.is_git_tag?(ref)
|
17
|
+
!ref.nil? && ref.include?("tags/")
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Datadog
|
4
|
+
module CI
|
5
|
+
module VERSION
|
6
|
+
MAJOR = "0"
|
7
|
+
MINOR = "1"
|
8
|
+
PATCH = "0"
|
9
|
+
PRE = nil
|
10
|
+
BUILD = nil
|
11
|
+
# PRE and BUILD above are modified for dev gems during gem build GHA workflow
|
12
|
+
|
13
|
+
STRING = [MAJOR, MINOR, PATCH, PRE, BUILD].compact.join(".")
|
14
|
+
|
15
|
+
MINIMUM_RUBY_VERSION = "2.1.0"
|
16
|
+
|
17
|
+
# Restrict the installation of this gem with untested future versions of Ruby.
|
18
|
+
#
|
19
|
+
# This prevents crashes in the native extension code and sends a clear signal to the
|
20
|
+
# user that this version of the gem is untested for the host Ruby version.
|
21
|
+
#
|
22
|
+
# To allow testing with the next unreleased version of Ruby, the version check is performed
|
23
|
+
# as `< #{MAXIMUM_RUBY_VERSION}`, meaning prereleases of MAXIMUM_RUBY_VERSION are allowed
|
24
|
+
# but not stable MAXIMUM_RUBY_VERSION releases.
|
25
|
+
MAXIMUM_RUBY_VERSION = "3.4"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
data/lib/datadog/ci.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "ddtrace"
|
4
|
+
require_relative "ci/version"
|
5
|
+
|
6
|
+
require "datadog/core"
|
7
|
+
|
8
|
+
module Datadog
|
9
|
+
# Namespace for Datadog CI instrumentation:
|
10
|
+
# e.g. rspec, cucumber, etc...
|
11
|
+
module CI
|
12
|
+
class Error < StandardError; end
|
13
|
+
# Your code goes here...
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
# Integrations
|
18
|
+
require_relative "ci/contrib/cucumber/integration"
|
19
|
+
require_relative "ci/contrib/rspec/integration"
|
20
|
+
require_relative "ci/contrib/minitest/integration"
|
21
|
+
|
22
|
+
# Extensions
|
23
|
+
require_relative "ci/extensions"
|
24
|
+
Datadog::CI::Extensions.activate!
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Datadog
|
2
|
+
module CI
|
3
|
+
module Configuration
|
4
|
+
module Settings
|
5
|
+
extend Datadog::Core::Configuration::Options::ClassMethods
|
6
|
+
extend Datadog::Core::Configuration::Base::ClassMethods
|
7
|
+
|
8
|
+
def self.extended: (untyped base) -> untyped
|
9
|
+
|
10
|
+
def self.add_settings!: (untyped base) -> untyped
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Datadog
|
2
|
+
module CI
|
3
|
+
module Contrib
|
4
|
+
module Cucumber
|
5
|
+
module Ext
|
6
|
+
APP: String
|
7
|
+
|
8
|
+
ENV_ENABLED: String
|
9
|
+
|
10
|
+
ENV_OPERATION_NAME: String
|
11
|
+
|
12
|
+
FRAMEWORK: String
|
13
|
+
|
14
|
+
OPERATION_NAME: String
|
15
|
+
|
16
|
+
SERVICE_NAME: String
|
17
|
+
|
18
|
+
STEP_SPAN_TYPE: String
|
19
|
+
|
20
|
+
TEST_TYPE: String
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module Datadog
|
2
|
+
module CI
|
3
|
+
module Contrib
|
4
|
+
module Cucumber
|
5
|
+
class Formatter
|
6
|
+
private
|
7
|
+
|
8
|
+
attr_reader config: untyped
|
9
|
+
|
10
|
+
attr_reader current_feature_span: untyped
|
11
|
+
|
12
|
+
attr_reader current_step_span: untyped
|
13
|
+
|
14
|
+
public
|
15
|
+
|
16
|
+
def initialize: (untyped config) -> void
|
17
|
+
|
18
|
+
def bind_events: (untyped config) -> untyped
|
19
|
+
|
20
|
+
def on_test_case_started: (untyped event) -> untyped
|
21
|
+
|
22
|
+
def on_test_case_finished: (untyped event) -> (nil | untyped)
|
23
|
+
|
24
|
+
def on_test_step_started: (untyped event) -> untyped
|
25
|
+
|
26
|
+
def on_test_step_finished: (untyped event) -> (nil | untyped)
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def configuration: () -> untyped
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Datadog
|
2
|
+
module CI
|
3
|
+
module Contrib
|
4
|
+
module Cucumber
|
5
|
+
module Instrumentation
|
6
|
+
def self.included: (untyped base) -> untyped
|
7
|
+
module InstanceMethods : Cucumber::Runtime
|
8
|
+
attr_reader datadog_formatter: CI::Contrib::Cucumber::Formatter
|
9
|
+
|
10
|
+
def formatters: () -> untyped
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Datadog
|
2
|
+
module CI
|
3
|
+
module Contrib
|
4
|
+
module Cucumber
|
5
|
+
class Integration
|
6
|
+
extend Datadog::Tracing::Contrib::Integration
|
7
|
+
|
8
|
+
MINIMUM_VERSION: Gem::Version
|
9
|
+
|
10
|
+
def self.version: () -> untyped
|
11
|
+
|
12
|
+
def self.loaded?: () -> bool
|
13
|
+
|
14
|
+
def self.compatible?: () -> bool
|
15
|
+
|
16
|
+
def auto_instrument?: () -> false
|
17
|
+
|
18
|
+
def new_configuration: () -> untyped
|
19
|
+
|
20
|
+
def patcher: () -> untyped
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Datadog
|
2
|
+
module CI
|
3
|
+
module Contrib
|
4
|
+
module Minitest
|
5
|
+
module Ext
|
6
|
+
APP: String
|
7
|
+
|
8
|
+
ENV_ENABLED: String
|
9
|
+
|
10
|
+
ENV_OPERATION_NAME: String
|
11
|
+
|
12
|
+
FRAMEWORK: String
|
13
|
+
|
14
|
+
OPERATION_NAME: String
|
15
|
+
|
16
|
+
SERVICE_NAME: String
|
17
|
+
|
18
|
+
TEST_TYPE: String
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Datadog
|
2
|
+
module CI
|
3
|
+
module Contrib
|
4
|
+
module Minitest
|
5
|
+
module Hooks : ::Minitest::Test
|
6
|
+
include ::Minitest::Test::LifecycleHooks
|
7
|
+
|
8
|
+
def before_setup: () -> (nil | untyped)
|
9
|
+
|
10
|
+
def after_teardown: () -> untyped
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
def configuration: () -> untyped
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Datadog
|
2
|
+
module CI
|
3
|
+
module Contrib
|
4
|
+
module Minitest
|
5
|
+
class Integration
|
6
|
+
extend Datadog::Tracing::Contrib::Integration
|
7
|
+
|
8
|
+
MINIMUM_VERSION: untyped
|
9
|
+
|
10
|
+
def self.version: () -> untyped
|
11
|
+
|
12
|
+
def self.loaded?: () -> untyped
|
13
|
+
|
14
|
+
def compatible?: () -> bool
|
15
|
+
|
16
|
+
def auto_instrument?: () -> false
|
17
|
+
|
18
|
+
def new_configuration: () -> untyped
|
19
|
+
|
20
|
+
def patcher: () -> untyped
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|