knapsack_pro 7.13.0 → 7.14.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:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 113e9ca31d058ab9623d6a0bb278768ad0a864db8bb8776440d00ceb2a648b37
|
4
|
+
data.tar.gz: '084be6d88bf072c8ece112b3de2a6707b240816e993f039701cd68e7920f7988'
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 97015f7b3db931f3a9f68e7ef59aecb99f0befa5202b148d5aa56736d256048c842c00babc265c47c583534f2a0dafc488c49b748b4b3084f93a2d42f6013d84
|
7
|
+
data.tar.gz: 62fd8be74b14f402840ea4b9b6866a9ac008daa09d279e2cee21bd3f513d8f746f635c770c83e65db36139aa6e9ebb362301794e6aad70a9d59796dd86167d90
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,21 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
### 7.14.0
|
4
|
+
|
5
|
+
* Improve debugging for hanging CI nodes: show hanging spec files in the RSpec output and a command to reproduce the current batch of tests.
|
6
|
+
|
7
|
+
https://github.com/KnapsackPro/knapsack_pro-ruby/pull/287
|
8
|
+
|
9
|
+
https://github.com/KnapsackPro/knapsack_pro-ruby/compare/v7.13.1...v7.14.0
|
10
|
+
|
11
|
+
### 7.13.1
|
12
|
+
|
13
|
+
* Fix handling signals for non-RSpec test runners
|
14
|
+
|
15
|
+
https://github.com/KnapsackPro/knapsack_pro-ruby/pull/286
|
16
|
+
|
17
|
+
https://github.com/KnapsackPro/knapsack_pro-ruby/compare/v7.13.0...v7.13.1
|
18
|
+
|
3
19
|
### 7.13.0
|
4
20
|
|
5
21
|
* Add `KNAPSACK_PRO_FALLBACK_MODE_ERROR_EXIT_CODE` to specify a custom exit code whenever Knapsack Pro fails because Fallback Mode cannot be used
|
@@ -59,12 +59,15 @@ module KnapsackPro
|
|
59
59
|
Signal.trap(signal) {
|
60
60
|
puts "#{signal} signal has been received. Terminating Knapsack Pro..."
|
61
61
|
@@terminate_process = true
|
62
|
-
|
62
|
+
post_trap_signals
|
63
63
|
log_threads
|
64
64
|
}
|
65
65
|
end
|
66
66
|
end
|
67
67
|
|
68
|
+
def post_trap_signals
|
69
|
+
end
|
70
|
+
|
68
71
|
def log_threads
|
69
72
|
threads = Thread.list
|
70
73
|
|
@@ -74,6 +77,8 @@ module KnapsackPro
|
|
74
77
|
puts 'Use the following backtrace(s) to find the line of code that got stuck if the CI node hung and terminated your tests.'
|
75
78
|
puts 'How to read the backtrace: https://knapsackpro.com/perma/ruby/backtrace-debugging'
|
76
79
|
|
80
|
+
log_current_tests(threads)
|
81
|
+
|
77
82
|
threads.each do |thread|
|
78
83
|
puts
|
79
84
|
if thread == Thread.main
|
@@ -92,6 +97,10 @@ module KnapsackPro
|
|
92
97
|
|
93
98
|
$stdout.flush
|
94
99
|
end
|
100
|
+
|
101
|
+
def log_current_tests(threads)
|
102
|
+
# implement in a child class if you need to log more info
|
103
|
+
end
|
95
104
|
end
|
96
105
|
end
|
97
106
|
end
|
@@ -117,6 +117,31 @@ module KnapsackPro
|
|
117
117
|
|
118
118
|
private
|
119
119
|
|
120
|
+
def post_trap_signals
|
121
|
+
RSpec.world.wants_to_quit = true
|
122
|
+
|
123
|
+
log_current_batch_rspec_command
|
124
|
+
end
|
125
|
+
|
126
|
+
def log_current_tests(threads)
|
127
|
+
threads.each do |thread|
|
128
|
+
next unless thread.backtrace
|
129
|
+
|
130
|
+
spec_file_lines = thread.backtrace.select { |line| line.include?('_spec.rb') }
|
131
|
+
next if spec_file_lines.empty?
|
132
|
+
|
133
|
+
puts
|
134
|
+
if thread == Thread.main
|
135
|
+
puts "Running specs in the main thread:"
|
136
|
+
else
|
137
|
+
puts "Non-main thread inspect: #{thread.inspect}"
|
138
|
+
puts "Running specs in non-main thread:"
|
139
|
+
end
|
140
|
+
puts spec_file_lines.join("\n")
|
141
|
+
puts
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
120
145
|
def pre_run_setup
|
121
146
|
ENV['KNAPSACK_PRO_QUEUE_RECORDING_ENABLED'] = 'true'
|
122
147
|
ENV['KNAPSACK_PRO_QUEUE_ID'] = KnapsackPro::Config::EnvGenerator.set_queue_id
|
@@ -161,6 +186,21 @@ module KnapsackPro
|
|
161
186
|
test_file_paths
|
162
187
|
end
|
163
188
|
|
189
|
+
def log_current_batch_rspec_command
|
190
|
+
test_file_paths = @queue.current_batch&.test_file_paths
|
191
|
+
return unless test_file_paths
|
192
|
+
|
193
|
+
puts
|
194
|
+
puts '=' * 80
|
195
|
+
|
196
|
+
order_option = @adapter_class.order_option(@cli_args)
|
197
|
+
printable_args = @rspec_pure.args_with_seed_option_added_when_viable(order_option, @rspec_runner.knapsack__seed, @cli_args)
|
198
|
+
messages = @rspec_pure.rspec_command(printable_args, test_file_paths, :batch_finished)
|
199
|
+
messages.each do |message|
|
200
|
+
puts message
|
201
|
+
end
|
202
|
+
end
|
203
|
+
|
164
204
|
def log_rspec_batch_command(test_file_paths)
|
165
205
|
order_option = @adapter_class.order_option(@cli_args)
|
166
206
|
printable_args = @rspec_pure.args_with_seed_option_added_when_viable(order_option, @rspec_runner.knapsack__seed, @cli_args)
|
data/lib/knapsack_pro/version.rb
CHANGED
@@ -1403,12 +1403,16 @@ describe "#{KnapsackPro::Runners::Queue::RSpecRunner} - Integration tests", :cle
|
|
1403
1403
|
OUTPUT
|
1404
1404
|
)
|
1405
1405
|
|
1406
|
+
expect(actual.stdout).to include('To retry the last batch of tests fetched from the Queue API, please run the following command on your machine:')
|
1407
|
+
expect(actual.stdout).to include('bundle exec rspec --format documentation --default-path spec_integration "spec_integration/b_spec.rb" "spec_integration/c_spec.rb"')
|
1406
1408
|
|
1407
1409
|
expect(actual.stdout).to include('Use the following backtrace(s) to find the line of code that got stuck if the CI node hung and terminated your tests.')
|
1410
|
+
expect(actual.stdout).to include('Running specs in the main thread:')
|
1411
|
+
expect(actual.stdout).to include('Running specs in non-main thread:')
|
1408
1412
|
expect(actual.stdout).to include('Main thread backtrace:')
|
1409
|
-
expect(actual.stdout
|
1413
|
+
expect(actual.stdout.scan(/spec_integration\/b_spec\.rb:7:in .*kill/).size).to eq 2
|
1410
1414
|
expect(actual.stdout).to include('Non-main thread backtrace:')
|
1411
|
-
expect(actual.stdout
|
1415
|
+
expect(actual.stdout.scan(/spec_integration\/a_spec\.rb:6:in .*sleep/).size).to eq 2
|
1412
1416
|
|
1413
1417
|
|
1414
1418
|
expect(actual.exit_code).to eq 1
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: knapsack_pro
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 7.
|
4
|
+
version: 7.14.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- ArturT
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2025-01-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -433,7 +433,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
433
433
|
- !ruby/object:Gem::Version
|
434
434
|
version: '0'
|
435
435
|
requirements: []
|
436
|
-
rubygems_version: 3.5.
|
436
|
+
rubygems_version: 3.5.11
|
437
437
|
signing_key:
|
438
438
|
specification_version: 4
|
439
439
|
summary: Knapsack Pro splits tests across parallel CI nodes and ensures each parallel
|