buildkite-test_collector 1.0.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.
@@ -0,0 +1,84 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "timeout"
4
+ require "tmpdir"
5
+
6
+ require_relative "test_collector/version"
7
+ require_relative "test_collector/logger"
8
+
9
+ module Buildkite
10
+ module TestCollector
11
+ class Error < StandardError; end
12
+ class TimeoutError < ::Timeout::Error; end
13
+
14
+ DEFAULT_URL = "https://analytics-api.buildkite.com/v1/uploads"
15
+
16
+ class << self
17
+ attr_accessor :api_token
18
+ attr_accessor :url
19
+ attr_accessor :uploader
20
+ attr_accessor :session
21
+ attr_accessor :debug_enabled
22
+ attr_accessor :debug_filepath
23
+ attr_accessor :tracing_enabled
24
+ end
25
+
26
+ def self.configure(hook:, token: nil, url: nil, debug_enabled: false, debug_filepath: nil, tracing_enabled: true)
27
+ self.api_token = token || ENV["BUILDKITE_ANALYTICS_TOKEN"]
28
+ self.url = url || DEFAULT_URL
29
+ self.debug_enabled = debug_enabled || !!(ENV["BUILDKITE_ANALYTICS_DEBUG_ENABLED"])
30
+ self.debug_filepath = debug_filepath || ENV["BUILDKITE_ANALYTICS_DEBUG_FILEPATH"] || Dir.tmpdir
31
+ self.tracing_enabled = tracing_enabled
32
+
33
+ self.hook_into(hook)
34
+ end
35
+
36
+ def self.hook_into(hook)
37
+ file = "test_collector/library_hooks/#{hook}"
38
+ require_relative file
39
+ rescue LoadError
40
+ raise ArgumentError.new("#{hook.inspect} is not a supported Buildkite Analytics Test library hook.")
41
+ end
42
+
43
+ def self.annotate(content)
44
+ tracer = Buildkite::TestCollector::Uploader.tracer
45
+ tracer&.enter("annotation", **{ content: content })
46
+ tracer&.leave
47
+ end
48
+
49
+ def self.log_formatter
50
+ @log_formatter ||= Buildkite::TestCollector::Logger::Formatter.new
51
+ end
52
+
53
+ def self.log_formatter=(log_formatter)
54
+ @log_formatter = log_formatter
55
+ logger.formatter = log_formatter
56
+ end
57
+
58
+ def self.logger=(logger)
59
+ @logger = logger
60
+ end
61
+
62
+ def self.logger
63
+ return @logger if defined?(@logger)
64
+
65
+ debug_mode = ENV.fetch("BUILDKITE_ANALYTICS_DEBUG_ENABLED") do
66
+ $DEBUG
67
+ end
68
+
69
+ level = !!debug_mode ? ::Logger::DEBUG : ::Logger::WARN
70
+ @logger ||= Buildkite::TestCollector::Logger.new($stderr, level: level)
71
+ end
72
+
73
+ def self.enable_tracing!
74
+ return unless self.tracing_enabled
75
+
76
+ Buildkite::TestCollector::Network.configure
77
+ Buildkite::TestCollector::Object.configure
78
+
79
+ ActiveSupport::Notifications.subscribe("sql.active_record") do |name, start, finish, id, payload|
80
+ Buildkite::TestCollector::Uploader.tracer&.backfill(:sql, finish - start, **{ query: payload[:sql] })
81
+ end
82
+ end
83
+ end
84
+ end
@@ -0,0 +1,7 @@
1
+ module Minitest
2
+ def self.plugin_buildkite_collector_init(options)
3
+ if Buildkite::TestCollector.respond_to?(:uploader)
4
+ self.reporter << Buildkite::TestCollector::MinitestPlugin::Reporter.new(options[:io], options)
5
+ end
6
+ end
7
+ end
metadata ADDED
@@ -0,0 +1,139 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: buildkite-test_collector
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Buildkite
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2022-06-02 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activesupport
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '5.2'
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '8'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: '5.2'
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '8'
33
+ - !ruby/object:Gem::Dependency
34
+ name: websocket
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '1.2'
40
+ type: :runtime
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '1.2'
47
+ - !ruby/object:Gem::Dependency
48
+ name: rspec-core
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '3.10'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '3.10'
61
+ - !ruby/object:Gem::Dependency
62
+ name: rspec-expectations
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '3.10'
68
+ type: :development
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: '3.10'
75
+ description:
76
+ email:
77
+ - support+analytics@buildkite.com
78
+ executables: []
79
+ extensions: []
80
+ extra_rdoc_files: []
81
+ files:
82
+ - ".gitignore"
83
+ - ".rspec"
84
+ - CHANGELOG.md
85
+ - CODE_OF_CONDUCT.md
86
+ - Gemfile
87
+ - Gemfile.lock
88
+ - LICENSE.txt
89
+ - README.md
90
+ - Rakefile
91
+ - bin/console
92
+ - bin/setup
93
+ - buildkite-test_collector.gemspec
94
+ - buildkite.yaml
95
+ - lib/buildkite/test_collector.rb
96
+ - lib/buildkite/test_collector/ci.rb
97
+ - lib/buildkite/test_collector/http_client.rb
98
+ - lib/buildkite/test_collector/library_hooks/minitest.rb
99
+ - lib/buildkite/test_collector/library_hooks/rspec.rb
100
+ - lib/buildkite/test_collector/logger.rb
101
+ - lib/buildkite/test_collector/minitest_plugin.rb
102
+ - lib/buildkite/test_collector/minitest_plugin/reporter.rb
103
+ - lib/buildkite/test_collector/minitest_plugin/trace.rb
104
+ - lib/buildkite/test_collector/network.rb
105
+ - lib/buildkite/test_collector/object.rb
106
+ - lib/buildkite/test_collector/rspec_plugin/reporter.rb
107
+ - lib/buildkite/test_collector/rspec_plugin/trace.rb
108
+ - lib/buildkite/test_collector/session.rb
109
+ - lib/buildkite/test_collector/socket_connection.rb
110
+ - lib/buildkite/test_collector/tracer.rb
111
+ - lib/buildkite/test_collector/uploader.rb
112
+ - lib/buildkite/test_collector/version.rb
113
+ - lib/minitest/buildkite_collector_plugin.rb
114
+ homepage: https://github.com/buildkite/test-collector-ruby
115
+ licenses:
116
+ - MIT
117
+ metadata:
118
+ homepage_uri: https://github.com/buildkite/test-collector-ruby
119
+ source_code_uri: https://github.com/buildkite/test-collector-ruby
120
+ post_install_message:
121
+ rdoc_options: []
122
+ require_paths:
123
+ - lib
124
+ required_ruby_version: !ruby/object:Gem::Requirement
125
+ requirements:
126
+ - - ">="
127
+ - !ruby/object:Gem::Version
128
+ version: 2.3.0
129
+ required_rubygems_version: !ruby/object:Gem::Requirement
130
+ requirements:
131
+ - - ">="
132
+ - !ruby/object:Gem::Version
133
+ version: '0'
134
+ requirements: []
135
+ rubygems_version: 3.1.4
136
+ signing_key:
137
+ specification_version: 4
138
+ summary: Track test executions and report to Buildkite Test Analytics
139
+ test_files: []