buildkite-test_collector 2.4.0 → 2.6.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 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