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