ci-queue 0.27.0 → 0.29.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Rakefile +3 -1
- data/dev.yml +1 -1
- data/lib/ci/queue/configuration.rb +4 -2
- data/lib/ci/queue/redis/build_record.rb +18 -1
- data/lib/ci/queue/version.rb +1 -1
- data/lib/minitest/queue/build_status_reporter.rb +4 -0
- data/lib/minitest/queue/runner.rb +14 -0
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7d223652a052d2cf2828d73baa3755a832ea90bee64ea40054d3a063ddb1a517
|
4
|
+
data.tar.gz: 69ff5cabeca011f4fa7fee60a534eda64336e9ab4a55e7d660d7c5b0001a0268
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c00238032c5e41dc30f74138cd92dc87523fd1e0386efa839dc4013eeb77640c035df42bfa5296a0ed58fd06fb2e00e1c72a3e05eae5f9a156749128e3b5fe4c
|
7
|
+
data.tar.gz: b1cdabd74fad311aee9ca745d38da22fa0c086f2e8f6a4494fbbd5b4fbab0aa0672d037e2e555843947e5dc5d4a3e66e5297ed7eaf051ec88c07400d57a3b12f
|
data/Rakefile
CHANGED
@@ -6,7 +6,9 @@ require 'ci/queue/version'
|
|
6
6
|
Rake::TestTask.new(:test) do |t|
|
7
7
|
t.libs << 'test'
|
8
8
|
t.libs << 'lib'
|
9
|
-
|
9
|
+
selected_files = ENV["TEST_FILES"].to_s.strip.split(/\s+/)
|
10
|
+
selected_files = nil if selected_files.empty?
|
11
|
+
t.test_files = selected_files || FileList['test/**/*_test.rb'] - FileList['test/fixtures/**/*_test.rb']
|
10
12
|
end
|
11
13
|
|
12
14
|
task :default => :test
|
data/dev.yml
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
module CI
|
3
3
|
module Queue
|
4
4
|
class Configuration
|
5
|
-
attr_accessor :timeout, :worker_id, :max_requeues, :grind_count, :failure_file
|
5
|
+
attr_accessor :timeout, :worker_id, :max_requeues, :grind_count, :failure_file, :export_flaky_tests_file
|
6
6
|
attr_accessor :requeue_tolerance, :namespace, :failing_test, :statsd_endpoint
|
7
7
|
attr_accessor :max_test_duration, :max_test_duration_percentile, :track_test_duration
|
8
8
|
attr_accessor :max_test_failed, :redis_ttl
|
@@ -35,7 +35,8 @@ module CI
|
|
35
35
|
namespace: nil, seed: nil, flaky_tests: [], statsd_endpoint: nil, max_consecutive_failures: nil,
|
36
36
|
grind_count: nil, max_duration: nil, failure_file: nil, max_test_duration: nil,
|
37
37
|
max_test_duration_percentile: 0.5, track_test_duration: false, max_test_failed: nil,
|
38
|
-
queue_init_timeout: nil, redis_ttl: 8 * 60 * 60, report_timeout: nil, inactive_workers_timeout: nil
|
38
|
+
queue_init_timeout: nil, redis_ttl: 8 * 60 * 60, report_timeout: nil, inactive_workers_timeout: nil,
|
39
|
+
export_flaky_tests_file: nil
|
39
40
|
)
|
40
41
|
@build_id = build_id
|
41
42
|
@circuit_breakers = [CircuitBreaker::Disabled]
|
@@ -59,6 +60,7 @@ module CI
|
|
59
60
|
@redis_ttl = redis_ttl
|
60
61
|
@report_timeout = report_timeout
|
61
62
|
@inactive_workers_timeout = inactive_workers_timeout
|
63
|
+
@export_flaky_tests_file = export_flaky_tests_file
|
62
64
|
end
|
63
65
|
|
64
66
|
def queue_init_timeout
|
@@ -48,10 +48,23 @@ module CI
|
|
48
48
|
end
|
49
49
|
|
50
50
|
def record_success(id, stats: nil)
|
51
|
-
redis.pipelined do |pipeline|
|
51
|
+
error_reports_deleted_count, requeued_count, _ = redis.pipelined do |pipeline|
|
52
52
|
pipeline.hdel(key('error-reports'), id.dup.force_encoding(Encoding::BINARY))
|
53
|
+
pipeline.hget(key('requeues-count'), id.b)
|
53
54
|
record_stats(stats, pipeline: pipeline)
|
54
55
|
end
|
56
|
+
record_flaky(id) if error_reports_deleted_count.to_i > 0 || requeued_count.to_i > 0
|
57
|
+
nil
|
58
|
+
end
|
59
|
+
|
60
|
+
def record_flaky(id, stats: nil)
|
61
|
+
redis.pipelined do |pipeline|
|
62
|
+
pipeline.sadd?(
|
63
|
+
key('flaky-reports'),
|
64
|
+
id.b
|
65
|
+
)
|
66
|
+
pipeline.expire(key('flaky-reports'), config.redis_ttl)
|
67
|
+
end
|
55
68
|
nil
|
56
69
|
end
|
57
70
|
|
@@ -65,6 +78,10 @@ module CI
|
|
65
78
|
redis.hgetall(key('error-reports'))
|
66
79
|
end
|
67
80
|
|
81
|
+
def flaky_reports
|
82
|
+
redis.smembers(key('flaky-reports'))
|
83
|
+
end
|
84
|
+
|
68
85
|
def fetch_stats(stat_names)
|
69
86
|
counts = redis.pipelined do |pipeline|
|
70
87
|
stat_names.each { |c| pipeline.hvals(key(c)) }
|
data/lib/ci/queue/version.rb
CHANGED
@@ -213,6 +213,11 @@ module Minitest
|
|
213
213
|
File.write(queue_config.failure_file, failures)
|
214
214
|
end
|
215
215
|
|
216
|
+
if queue_config.export_flaky_tests_file
|
217
|
+
failures = reporter.flaky_reports.to_json
|
218
|
+
File.write(queue_config.export_flaky_tests_file, failures)
|
219
|
+
end
|
220
|
+
|
216
221
|
reporter.report
|
217
222
|
exit! reporter.success? ? 0 : 1
|
218
223
|
end
|
@@ -481,6 +486,15 @@ module Minitest
|
|
481
486
|
queue_config.failure_file = file
|
482
487
|
end
|
483
488
|
|
489
|
+
help = <<~EOS
|
490
|
+
Defines a file where flaky tests during the execution are written to in json format.
|
491
|
+
Defaults to disabled.
|
492
|
+
EOS
|
493
|
+
opts.separator ""
|
494
|
+
opts.on('--export-flaky-tests-file FILE', help) do |file|
|
495
|
+
queue_config.export_flaky_tests_file = file
|
496
|
+
end
|
497
|
+
|
484
498
|
help = <<~EOS
|
485
499
|
Defines after how many consecutive failures the worker will be considered unhealthy and terminate itself.
|
486
500
|
Defaults to disabled.
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ci-queue
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.29.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jean Boussier
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-05-
|
11
|
+
date: 2023-05-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -239,7 +239,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
239
239
|
- !ruby/object:Gem::Version
|
240
240
|
version: '0'
|
241
241
|
requirements: []
|
242
|
-
rubygems_version: 3.4.
|
242
|
+
rubygems_version: 3.4.13
|
243
243
|
signing_key:
|
244
244
|
specification_version: 4
|
245
245
|
summary: Distribute tests over many workers using a queue
|