buildkite-test_collector 2.4.0 → 2.6.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d1d5188350d19431be80e4d9680a9a561d4ae25f64549d5be488607d1882a5c1
4
- data.tar.gz: aece9ddaddba6792fcf2fa91f8642e5be3712bf118f154f6e152f0cbad5aa9eb
3
+ metadata.gz: 0e8ff4ceff4d825291a8878bf19a912362d45c36d6750c5e14628f446cec0bbd
4
+ data.tar.gz: 215441296a3c91547b0c43b062893239fbe5bae5ca2e1a80cca7b2ec65277e77
5
5
  SHA512:
6
- metadata.gz: 6eb7578e7cad14c2088b6bb522eb3548cccd6de33dd09952fc4d4fd8638a707f9abaa8b68060fefd3eab212ab7a23d114cba0f4155e9394b13277b1b67719652
7
- data.tar.gz: 6d1f20581f34336eb39e22a753661d5cd9b9feaf05a7773ca6d3171ec50ef335a61ec6697f9baeab4526810e0ed400981fae1738a78637179fbadae452a1995d
6
+ metadata.gz: d31e59e76f2dc92ef5951f9d97663f14cb84d9ba1256c8586931146151222c7ce3769a8913517910312d0a75a7cafb3488f0b9690257c4fc6686fbf37cbed9ee
7
+ data.tar.gz: 995fc9e592b74a41385058c4eac868e9639f6ef9bfb2ba9068cd156fd6ab5d90bf40aca86a9ab9c8560cf7c9ba80c4f172747a948e4e219976c680d035eae0af
data/CHANGELOG.md CHANGED
@@ -1,8 +1,16 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## v2.6.0
4
+
5
+ - Trace spans can be filtered by minimum duration #215 - @pda
6
+
7
+ ## v2.5.0
8
+
9
+ - Remove ActiveSupport as a primary dependancy #212 - @pat
10
+
3
11
  ## v2.4.0
4
12
 
5
- - Feature release: Output links to Test Analytic tests within the rspec log @meghan-kradolfer
13
+ - Feature release: Output links to Test Analytic tests within the rspec log #209 - @meghan-kradolfer
6
14
 
7
15
  ## v2.3.2
8
16
 
data/Gemfile.lock CHANGED
@@ -1,8 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- buildkite-test_collector (2.4.0)
5
- activesupport (>= 4.2)
4
+ buildkite-test_collector (2.6.0)
6
5
 
7
6
  GEM
8
7
  remote: https://rubygems.org/
@@ -38,6 +37,7 @@ PLATFORMS
38
37
  ruby
39
38
 
40
39
  DEPENDENCIES
40
+ activesupport (>= 4.2)
41
41
  buildkite-test_collector!
42
42
  rake (~> 13.0)
43
43
  rspec (~> 3.0)
@@ -24,8 +24,7 @@ Gem::Specification.new do |spec|
24
24
 
25
25
  spec.required_ruby_version = Gem::Requirement.new(">= 2.3.0")
26
26
 
27
- spec.add_dependency "activesupport", ">= 4.2"
28
-
27
+ spec.add_development_dependency "activesupport", ">= 4.2"
29
28
  spec.add_development_dependency "rspec-core", '~> 3.10'
30
29
  spec.add_development_dependency "rspec-expectations", '~> 3.10'
31
30
  end
@@ -40,6 +40,7 @@ class Buildkite::TestCollector::CI
40
40
  "language_version" => RUBY_VERSION,
41
41
  "version" => Buildkite::TestCollector::VERSION,
42
42
  "collector" => "ruby-#{Buildkite::TestCollector::NAME}",
43
+ "trace_min_duration" => Buildkite::TestCollector.trace_min_duration&.to_s,
43
44
  }.select { |_, value| !value.nil? }
44
45
  end
45
46
 
@@ -16,7 +16,9 @@ RSpec.configure do |config|
16
16
  end
17
17
 
18
18
  config.around(:each) do |example|
19
- tracer = Buildkite::TestCollector::Tracer.new
19
+ tracer = Buildkite::TestCollector::Tracer.new(
20
+ min_duration: Buildkite::TestCollector.trace_min_duration,
21
+ )
20
22
 
21
23
  # The _buildkite prefix here is added as a safeguard against name collisions
22
24
  # as we are in the main thread
@@ -38,7 +38,7 @@ module Buildkite::TestCollector::MinitestPlugin
38
38
  failure_reason: failure_reason,
39
39
  failure_expanded: failure_expanded,
40
40
  history: history,
41
- ).with_indifferent_access.select { |_, value| !value.nil? }
41
+ ).select { |_, value| !value.nil? }
42
42
  end
43
43
 
44
44
  private
@@ -9,7 +9,11 @@ require_relative "minitest_plugin/trace"
9
9
  module Buildkite::TestCollector::MinitestPlugin
10
10
  def before_setup
11
11
  super
12
- tracer = Buildkite::TestCollector::Tracer.new
12
+
13
+ tracer = Buildkite::TestCollector::Tracer.new(
14
+ min_duration: Buildkite::TestCollector.trace_min_duration,
15
+ )
16
+
13
17
  # The _buildkite prefix here is added as a safeguard against name collisions
14
18
  # as we are in the main thread
15
19
  Thread.current[:_buildkite_tracer] = tracer
@@ -40,6 +40,10 @@ module Buildkite::TestCollector::RSpecPlugin
40
40
  RSpec::Core::MultipleExceptionError
41
41
  ]
42
42
 
43
+ def blank?(string)
44
+ string.nil? || string.strip.empty?
45
+ end
46
+
43
47
  def failure_info(notification)
44
48
  failure_expanded = []
45
49
 
@@ -73,9 +77,9 @@ module Buildkite::TestCollector::RSpecPlugin
73
77
  def format_message_lines(message_lines)
74
78
  message_lines.map! { |l| strip_diff_colors(l) }
75
79
  # the first line is sometimes blank, depending on the error reported
76
- message_lines.shift if message_lines.first.blank?
80
+ message_lines.shift if blank?(message_lines.first)
77
81
  # the last line is sometimes blank, depending on the error reported
78
- message_lines.pop if message_lines.last.blank?
82
+ message_lines.pop if blank?(message_lines.last)
79
83
  message_lines
80
84
  end
81
85
 
@@ -32,7 +32,7 @@ module Buildkite::TestCollector::RSpecPlugin
32
32
  failure_reason: failure_reason,
33
33
  failure_expanded: failure_expanded,
34
34
  history: history,
35
- ).with_indifferent_access.select { |_, value| !value.nil? }
35
+ ).select { |_, value| !value.nil? }
36
36
  end
37
37
 
38
38
  private
@@ -60,7 +60,7 @@ module Buildkite::TestCollector::RSpecPlugin
60
60
  end
61
61
 
62
62
  def shared_example?
63
- example.metadata[:shared_group_inclusion_backtrace].any?
63
+ !example.metadata[:shared_group_inclusion_backtrace].empty?
64
64
  end
65
65
 
66
66
  def shared_example_call_location
@@ -10,7 +10,7 @@ module Buildkite::TestCollector::TestLinksPlugin
10
10
 
11
11
  def dump_failures(notification)
12
12
  # Do not display summary if no failed examples
13
- return unless notification.failed_examples.present?
13
+ return if notification.failed_examples.empty?
14
14
 
15
15
  # Check if a Test Analytics token is set
16
16
  return unless Buildkite::TestCollector.api_token
@@ -35,21 +35,30 @@ module Buildkite::TestCollector
35
35
  @children = []
36
36
  end
37
37
 
38
+ def duration
39
+ raise IncompleteSpan if end_at.nil?
40
+
41
+ end_at - start_at
42
+ end
43
+
38
44
  def as_hash
39
45
  {
40
46
  section: section,
41
47
  start_at: start_at,
42
48
  end_at: end_at,
43
- duration: end_at - start_at,
49
+ duration: duration,
44
50
  detail: detail,
45
51
  children: children.map(&:as_hash),
46
- }.with_indifferent_access
52
+ }
47
53
  end
54
+
55
+ class IncompleteSpan < StandardError; end
48
56
  end
49
57
 
50
- def initialize
58
+ def initialize(min_duration: nil)
51
59
  @top = Span.new(:top, MonotonicTime.call, nil, {})
52
60
  @stack = [@top]
61
+ @min_duration = min_duration
53
62
  end
54
63
 
55
64
  def enter(section, **detail)
@@ -60,11 +69,16 @@ module Buildkite::TestCollector
60
69
 
61
70
  def leave
62
71
  current_span.end_at = MonotonicTime.call
72
+ duration = current_span.duration
63
73
  @stack.pop
74
+ current_span.children.pop if @min_duration && duration < @min_duration
75
+ nil # avoid ambiguous return type/value
64
76
  end
65
77
 
66
78
  def backfill(section, duration, **detail)
67
- new_entry = Span.new(section, MonotonicTime.call - duration, MonotonicTime.call, detail)
79
+ return if @min_duration && duration < @min_duration
80
+ now = MonotonicTime.call
81
+ new_entry = Span.new(section, now - duration, now, detail)
68
82
  current_span.children << new_entry
69
83
  end
70
84
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Buildkite
4
4
  module TestCollector
5
- VERSION = "2.4.0"
5
+ VERSION = "2.6.0"
6
6
  NAME = "buildkite-test_collector"
7
7
  end
8
8
  end
@@ -8,14 +8,11 @@ end
8
8
  require "json"
9
9
  require "logger"
10
10
  require "net/http"
11
+ require "openssl"
11
12
  require "time"
12
13
  require "timeout"
13
14
  require "tmpdir"
14
15
 
15
- require "active_support/core_ext/object/blank"
16
- require "active_support/core_ext/hash/indifferent_access"
17
- require "active_support/notifications"
18
-
19
16
  require_relative "test_collector/version"
20
17
  require_relative "test_collector/error"
21
18
  require_relative "test_collector/ci"
@@ -41,6 +38,7 @@ module Buildkite
41
38
  attr_accessor :artifact_path
42
39
  attr_accessor :env
43
40
  attr_accessor :batch_size
41
+ attr_accessor :trace_min_duration
44
42
  end
45
43
 
46
44
  def self.configure(hook:, token: nil, url: nil, tracing_enabled: true, artifact_path: nil, env: {})
@@ -50,6 +48,12 @@ module Buildkite
50
48
  self.artifact_path = artifact_path
51
49
  self.env = env
52
50
  self.batch_size = ENV.fetch("BUILDKITE_ANALYTICS_UPLOAD_BATCH_SIZE") { DEFAULT_UPLOAD_BATCH_SIZE }.to_i
51
+
52
+ trace_min_ms_string = ENV["BUILDKITE_ANALYTICS_TRACE_MIN_MS"]
53
+ self.trace_min_duration = if trace_min_ms_string && !trace_min_ms_string.empty?
54
+ Float(trace_min_ms_string) / 1000
55
+ end
56
+
53
57
  self.hook_into(hook)
54
58
  end
55
59
 
@@ -72,6 +76,10 @@ module Buildkite
72
76
  Buildkite::TestCollector::Network.configure
73
77
  Buildkite::TestCollector::Object.configure
74
78
 
79
+ return unless defined?(ActiveSupport)
80
+
81
+ require "active_support/notifications"
82
+
75
83
  ActiveSupport::Notifications.subscribe("sql.active_record") do |name, start, finish, id, payload|
76
84
  Buildkite::TestCollector::Uploader.tracer&.backfill(:sql, finish - start, **{ query: payload[:sql] })
77
85
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: buildkite-test_collector
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.4.0
4
+ version: 2.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Buildkite
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-11-14 00:00:00.000000000 Z
11
+ date: 2024-03-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -17,7 +17,7 @@ dependencies:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '4.2'
20
- type: :runtime
20
+ type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
@@ -115,7 +115,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
115
115
  - !ruby/object:Gem::Version
116
116
  version: '0'
117
117
  requirements: []
118
- rubygems_version: 3.3.22
118
+ rubygems_version: 3.4.10
119
119
  signing_key:
120
120
  specification_version: 4
121
121
  summary: Track test executions and report to Buildkite Test Analytics