knapsack_pro 5.6.0 → 6.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.
- checksums.yaml +4 -4
- data/.circleci/config.yml +2 -0
- data/CHANGELOG.md +18 -0
- data/README.md +1 -1
- data/bin/test +15 -0
- data/knapsack_pro.gemspec +5 -5
- data/lib/knapsack_pro/adapters/base_adapter.rb +8 -0
- data/lib/knapsack_pro/adapters/rspec_adapter.rb +74 -44
- data/lib/knapsack_pro/base_allocator_builder.rb +6 -25
- data/lib/knapsack_pro/formatters/rspec_queue_summary_formatter.rb +6 -3
- data/lib/knapsack_pro/formatters/time_tracker.rb +161 -0
- data/lib/knapsack_pro/formatters/time_tracker_fetcher.rb +12 -0
- data/lib/knapsack_pro/presenter.rb +3 -2
- data/lib/knapsack_pro/report.rb +13 -9
- data/lib/knapsack_pro/runners/queue/rspec_runner.rb +25 -14
- data/lib/knapsack_pro/runners/rspec_runner.rb +19 -3
- data/lib/knapsack_pro/tracker.rb +1 -9
- data/lib/knapsack_pro/version.rb +1 -1
- data/lib/knapsack_pro.rb +0 -1
- data/spec/knapsack_pro/adapters/base_adapter_spec.rb +12 -0
- data/spec/knapsack_pro/adapters/rspec_adapter_spec.rb +143 -158
- data/spec/knapsack_pro/base_allocator_builder_spec.rb +22 -48
- data/spec/knapsack_pro/client/connection_spec.rb +54 -7
- data/spec/knapsack_pro/formatters/time_tracker_specs.rb +453 -0
- data/spec/knapsack_pro/runners/queue/rspec_runner_spec.rb +71 -32
- data/spec/knapsack_pro/runners/rspec_runner_spec.rb +2 -5
- data/spec/knapsack_pro/tracker_spec.rb +0 -21
- metadata +9 -7
- data/lib/knapsack_pro/extensions/time.rb +0 -9
- data/spec/knapsack_pro/extensions/time_spec.rb +0 -5
@@ -6,6 +6,7 @@ describe KnapsackPro::Runners::Queue::RSpecRunner do
|
|
6
6
|
|
7
7
|
require KnapsackPro.root + '/lib/knapsack_pro/formatters/rspec_queue_summary_formatter'
|
8
8
|
require KnapsackPro.root + '/lib/knapsack_pro/formatters/rspec_queue_profile_formatter_extension'
|
9
|
+
require KnapsackPro.root + '/lib/knapsack_pro/formatters/time_tracker'
|
9
10
|
end
|
10
11
|
|
11
12
|
describe '.run' do
|
@@ -45,7 +46,13 @@ describe KnapsackPro::Runners::Queue::RSpecRunner do
|
|
45
46
|
status: :next,
|
46
47
|
runner: runner,
|
47
48
|
can_initialize_queue: true,
|
48
|
-
args: [
|
49
|
+
args: [
|
50
|
+
'--example-arg', 'example-value',
|
51
|
+
'--format', 'progress',
|
52
|
+
'--format', 'KnapsackPro::Formatters::RSpecQueueSummaryFormatter',
|
53
|
+
'--format', 'KnapsackPro::Formatters::TimeTracker',
|
54
|
+
'--default-path', 'fake-test-dir',
|
55
|
+
],
|
49
56
|
exitstatus: 0,
|
50
57
|
all_test_file_paths: [],
|
51
58
|
}
|
@@ -71,7 +78,12 @@ describe KnapsackPro::Runners::Queue::RSpecRunner do
|
|
71
78
|
status: :next,
|
72
79
|
runner: runner,
|
73
80
|
can_initialize_queue: true,
|
74
|
-
args: [
|
81
|
+
args: [
|
82
|
+
'--format', 'documentation',
|
83
|
+
'--format', 'KnapsackPro::Formatters::RSpecQueueSummaryFormatter',
|
84
|
+
'--format', 'KnapsackPro::Formatters::TimeTracker',
|
85
|
+
'--default-path', 'fake-test-dir',
|
86
|
+
],
|
75
87
|
exitstatus: 0,
|
76
88
|
all_test_file_paths: [],
|
77
89
|
}
|
@@ -97,7 +109,12 @@ describe KnapsackPro::Runners::Queue::RSpecRunner do
|
|
97
109
|
status: :next,
|
98
110
|
runner: runner,
|
99
111
|
can_initialize_queue: true,
|
100
|
-
args: [
|
112
|
+
args: [
|
113
|
+
'-f', 'd',
|
114
|
+
'--format', 'KnapsackPro::Formatters::RSpecQueueSummaryFormatter',
|
115
|
+
'--format', 'KnapsackPro::Formatters::TimeTracker',
|
116
|
+
'--default-path', 'fake-test-dir',
|
117
|
+
],
|
101
118
|
exitstatus: 0,
|
102
119
|
all_test_file_paths: [],
|
103
120
|
}
|
@@ -123,7 +140,12 @@ describe KnapsackPro::Runners::Queue::RSpecRunner do
|
|
123
140
|
status: :next,
|
124
141
|
runner: runner,
|
125
142
|
can_initialize_queue: true,
|
126
|
-
args: [
|
143
|
+
args: [
|
144
|
+
'-fMyCustomFormatter',
|
145
|
+
'--format', 'KnapsackPro::Formatters::RSpecQueueSummaryFormatter',
|
146
|
+
'--format', 'KnapsackPro::Formatters::TimeTracker',
|
147
|
+
'--default-path', 'fake-test-dir',
|
148
|
+
],
|
127
149
|
exitstatus: 0,
|
128
150
|
all_test_file_paths: [],
|
129
151
|
}
|
@@ -165,7 +187,12 @@ describe KnapsackPro::Runners::Queue::RSpecRunner do
|
|
165
187
|
status: :next,
|
166
188
|
runner: runner,
|
167
189
|
can_initialize_queue: true,
|
168
|
-
args: [
|
190
|
+
args: [
|
191
|
+
'--format', 'progress',
|
192
|
+
'--format', 'KnapsackPro::Formatters::RSpecQueueSummaryFormatter',
|
193
|
+
'--format', 'KnapsackPro::Formatters::TimeTracker',
|
194
|
+
'--default-path', 'fake-test-dir',
|
195
|
+
],
|
169
196
|
exitstatus: 0,
|
170
197
|
all_test_file_paths: [],
|
171
198
|
}
|
@@ -219,12 +246,7 @@ describe KnapsackPro::Runners::Queue::RSpecRunner do
|
|
219
246
|
|
220
247
|
expect(ENV).to receive(:[]=).with('KNAPSACK_PRO_SUBSET_QUEUE_ID', subset_queue_id)
|
221
248
|
|
222
|
-
|
223
|
-
expect(KnapsackPro).to receive(:tracker).twice.and_return(tracker)
|
224
|
-
expect(tracker).to receive(:reset!)
|
225
|
-
expect(tracker).to receive(:set_prerun_tests).with(test_file_paths)
|
226
|
-
|
227
|
-
expect(described_class).to receive(:ensure_spec_opts_have_rspec_queue_summary_formatter)
|
249
|
+
expect(described_class).to receive(:ensure_spec_opts_have_knapsack_pro_formatters)
|
228
250
|
options = double
|
229
251
|
expect(RSpec::Core::ConfigurationOptions).to receive(:new).with([
|
230
252
|
'--no-color',
|
@@ -241,8 +263,6 @@ describe KnapsackPro::Runners::Queue::RSpecRunner do
|
|
241
263
|
|
242
264
|
expect(KnapsackPro::Hooks::Queue).to receive(:call_after_subset_queue)
|
243
265
|
|
244
|
-
expect(KnapsackPro::Report).to receive(:save_subset_queue_to_file)
|
245
|
-
|
246
266
|
configuration = double
|
247
267
|
expect(rspec_core_runner).to receive(:configuration).twice.and_return(configuration)
|
248
268
|
expect(configuration).to receive(:seed_used?).and_return(true)
|
@@ -344,12 +364,7 @@ describe KnapsackPro::Runners::Queue::RSpecRunner do
|
|
344
364
|
|
345
365
|
expect(ENV).to receive(:[]=).with('KNAPSACK_PRO_SUBSET_QUEUE_ID', subset_queue_id)
|
346
366
|
|
347
|
-
|
348
|
-
expect(KnapsackPro).to receive(:tracker).twice.and_return(tracker)
|
349
|
-
expect(tracker).to receive(:reset!)
|
350
|
-
expect(tracker).to receive(:set_prerun_tests).with(test_file_paths)
|
351
|
-
|
352
|
-
expect(described_class).to receive(:ensure_spec_opts_have_rspec_queue_summary_formatter)
|
367
|
+
expect(described_class).to receive(:ensure_spec_opts_have_knapsack_pro_formatters)
|
353
368
|
options = double
|
354
369
|
expect(RSpec::Core::ConfigurationOptions).to receive(:new).with([
|
355
370
|
'--no-color',
|
@@ -361,16 +376,14 @@ describe KnapsackPro::Runners::Queue::RSpecRunner do
|
|
361
376
|
expect(RSpec::Core::Runner).to receive(:new).with(options).and_return(rspec_core_runner)
|
362
377
|
expect(rspec_core_runner).to receive(:run).with($stderr, $stdout).and_raise SystemExit
|
363
378
|
expect(KnapsackPro::Hooks::Queue).to receive(:call_before_subset_queue)
|
364
|
-
allow(KnapsackPro::Report).to receive(:save_subset_queue_to_file)
|
365
379
|
allow(KnapsackPro::Hooks::Queue).to receive(:call_after_subset_queue)
|
366
380
|
allow(KnapsackPro::Hooks::Queue).to receive(:call_after_queue)
|
367
381
|
allow(KnapsackPro::Formatters::RSpecQueueSummaryFormatter).to receive(:print_exit_summary)
|
368
382
|
expect(Kernel).to receive(:exit).with(1)
|
369
383
|
end
|
370
384
|
|
371
|
-
it 'does not call #
|
385
|
+
it 'does not call #rspec_clear_examples' do
|
372
386
|
expect(described_class).not_to receive(:rspec_clear_examples)
|
373
|
-
expect(KnapsackPro::Report).not_to receive(:save_subset_queue_to_file)
|
374
387
|
expect { subject }.to raise_error SystemExit
|
375
388
|
end
|
376
389
|
|
@@ -411,7 +424,14 @@ describe KnapsackPro::Runners::Queue::RSpecRunner do
|
|
411
424
|
expect(KnapsackPro::Formatters::RSpecQueueProfileFormatterExtension).to receive(:print_summary)
|
412
425
|
|
413
426
|
expect(KnapsackPro::Hooks::Queue).to receive(:call_after_queue)
|
414
|
-
|
427
|
+
|
428
|
+
time_tracker = instance_double(KnapsackPro::Formatters::TimeTracker)
|
429
|
+
times = all_test_file_paths.map do |path|
|
430
|
+
[{ path: path, time_execution: 1.0 }]
|
431
|
+
end
|
432
|
+
expect(time_tracker).to receive(:queue).and_return(times)
|
433
|
+
expect(KnapsackPro::Formatters::TimeTrackerFetcher).to receive(:call).and_return(time_tracker)
|
434
|
+
expect(KnapsackPro::Report).to receive(:save_node_queue_to_api).with(times)
|
415
435
|
|
416
436
|
expect(logger).to receive(:info)
|
417
437
|
.with('To retry all the tests assigned to this CI node, please run the following command on your machine:')
|
@@ -448,7 +468,15 @@ describe KnapsackPro::Runners::Queue::RSpecRunner do
|
|
448
468
|
|
449
469
|
it do
|
450
470
|
expect(KnapsackPro::Hooks::Queue).to receive(:call_after_queue)
|
451
|
-
|
471
|
+
|
472
|
+
time_tracker = instance_double(KnapsackPro::Formatters::TimeTracker)
|
473
|
+
times = all_test_file_paths.map do |path|
|
474
|
+
[{ path: path, time_execution: 0.0 }]
|
475
|
+
end
|
476
|
+
expect(time_tracker).to receive(:queue).and_return(times)
|
477
|
+
expect(KnapsackPro::Formatters::TimeTrackerFetcher).to receive(:call).and_return(time_tracker)
|
478
|
+
expect(KnapsackPro::Report).to receive(:save_node_queue_to_api).with(times)
|
479
|
+
|
452
480
|
expect(KnapsackPro).to_not receive(:logger)
|
453
481
|
|
454
482
|
expect(subject).to eq({
|
@@ -460,29 +488,40 @@ describe KnapsackPro::Runners::Queue::RSpecRunner do
|
|
460
488
|
end
|
461
489
|
end
|
462
490
|
|
463
|
-
describe '.
|
464
|
-
subject { described_class.
|
491
|
+
describe '.ensure_spec_opts_have_knapsack_pro_formatters' do
|
492
|
+
subject { described_class.ensure_spec_opts_have_knapsack_pro_formatters }
|
465
493
|
|
466
494
|
context 'when `SPEC_OPTS` is set' do
|
467
|
-
context 'when `SPEC_OPTS` has
|
495
|
+
context 'when `SPEC_OPTS` has RSpecQueueSummaryFormatter' do
|
468
496
|
before do
|
469
497
|
stub_const('ENV', { 'SPEC_OPTS' => '--format json --format KnapsackPro::Formatters::RSpecQueueSummaryFormatter' })
|
470
498
|
end
|
471
499
|
|
472
|
-
it '
|
500
|
+
it 'adds TimeTracker' do
|
501
|
+
subject
|
502
|
+
expect(ENV['SPEC_OPTS']).to eq '--format json --format KnapsackPro::Formatters::RSpecQueueSummaryFormatter --format KnapsackPro::Formatters::TimeTracker'
|
503
|
+
end
|
504
|
+
end
|
505
|
+
|
506
|
+
context 'when `SPEC_OPTS` has TimeTracker' do
|
507
|
+
before do
|
508
|
+
stub_const('ENV', { 'SPEC_OPTS' => '--format json --format KnapsackPro::Formatters::TimeTracker' })
|
509
|
+
end
|
510
|
+
|
511
|
+
it 'adds RSpecQueueSummaryFormatter' do
|
473
512
|
subject
|
474
|
-
expect(ENV['SPEC_OPTS']).to eq '--format json --format KnapsackPro::Formatters::RSpecQueueSummaryFormatter'
|
513
|
+
expect(ENV['SPEC_OPTS']).to eq '--format json --format KnapsackPro::Formatters::TimeTracker --format KnapsackPro::Formatters::RSpecQueueSummaryFormatter'
|
475
514
|
end
|
476
515
|
end
|
477
516
|
|
478
|
-
context 'when `SPEC_OPTS` has no
|
517
|
+
context 'when `SPEC_OPTS` has no Knapsack Pro formatters' do
|
479
518
|
before do
|
480
519
|
stub_const('ENV', { 'SPEC_OPTS' => '--format json' })
|
481
520
|
end
|
482
521
|
|
483
|
-
it 'adds
|
522
|
+
it 'adds RSpecQueueSummaryFormatter and TimeTracker to `SPEC_OPTS`' do
|
484
523
|
subject
|
485
|
-
expect(ENV['SPEC_OPTS']).to eq '--format json --format KnapsackPro::Formatters::RSpecQueueSummaryFormatter'
|
524
|
+
expect(ENV['SPEC_OPTS']).to eq '--format json --format KnapsackPro::Formatters::RSpecQueueSummaryFormatter --format KnapsackPro::Formatters::TimeTracker'
|
486
525
|
end
|
487
526
|
end
|
488
527
|
end
|
@@ -42,14 +42,11 @@ describe KnapsackPro::Runners::RSpecRunner do
|
|
42
42
|
expect(KnapsackPro::Adapters::RSpecAdapter).to receive(:verify_bind_method_called).ordered
|
43
43
|
expect(KnapsackPro::Adapters::RSpecAdapter).to receive(:ensure_no_tag_option_when_rspec_split_by_test_examples_enabled!).with(['--profile', '--color']).ordered
|
44
44
|
|
45
|
-
tracker = instance_double(KnapsackPro::Tracker)
|
46
|
-
expect(KnapsackPro).to receive(:tracker).and_return(tracker)
|
47
|
-
expect(tracker).to receive(:set_prerun_tests).with(test_file_paths)
|
48
|
-
|
49
45
|
expect(Rake::Task).to receive(:[]).with('knapsack_pro:rspec_run').at_least(1).and_return(task)
|
50
46
|
|
51
47
|
expect(RSpec::Core::RakeTask).to receive(:new).with('knapsack_pro:rspec_run').and_yield(task_config)
|
52
|
-
expect(
|
48
|
+
expect(RSpec::Core::ConfigurationOptions).to receive_message_chain(:new, :options).and_return({})
|
49
|
+
expect(task_config).to receive(:rspec_opts=).with('--profile --color --format progress --format KnapsackPro::Formatters::TimeTracker --default-path fake-test-dir spec/a_spec.rb spec/b_spec.rb[1:1]')
|
53
50
|
expect(task_config).to receive(:pattern=).with([])
|
54
51
|
end
|
55
52
|
|
@@ -177,29 +177,8 @@ describe KnapsackPro::Tracker do
|
|
177
177
|
|
178
178
|
it_behaves_like 'default trakcer attributes'
|
179
179
|
|
180
|
-
it "global time since beginning won't be reset" do
|
181
|
-
expect(tracker.global_time_since_beginning).to be >= 0.1
|
182
|
-
end
|
183
|
-
|
184
180
|
it 'resets prerun_tests_loaded to false' do
|
185
181
|
expect(tracker.prerun_tests_loaded).to be false
|
186
182
|
end
|
187
183
|
end
|
188
|
-
|
189
|
-
|
190
|
-
describe '#unexecuted_test_files' do
|
191
|
-
before do
|
192
|
-
tracker.set_prerun_tests(['a_spec.rb', 'b_spec.rb', 'c_spec.rb'])
|
193
|
-
|
194
|
-
# measure execution time for b_spec.rb
|
195
|
-
tracker.current_test_path = 'b_spec.rb'
|
196
|
-
tracker.start_timer
|
197
|
-
sleep 0.1
|
198
|
-
tracker.stop_timer
|
199
|
-
end
|
200
|
-
|
201
|
-
it 'returns test files without measured time' do
|
202
|
-
expect(tracker.unexecuted_test_files).to eq(['a_spec.rb', 'c_spec.rb'])
|
203
|
-
end
|
204
|
-
end
|
205
184
|
end
|
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:
|
4
|
+
version: 6.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- ArturT
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-11-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -183,7 +183,7 @@ description: Run tests in parallel across CI server nodes based on tests executi
|
|
183
183
|
time. Thanks to that your CI build time is as fast as possible. It works with many
|
184
184
|
CI providers.
|
185
185
|
email:
|
186
|
-
-
|
186
|
+
- support@knapsackpro.com
|
187
187
|
executables:
|
188
188
|
- knapsack_pro
|
189
189
|
extensions: []
|
@@ -201,6 +201,7 @@ files:
|
|
201
201
|
- README.md
|
202
202
|
- Rakefile
|
203
203
|
- bin/knapsack_pro
|
204
|
+
- bin/test
|
204
205
|
- knapsack_pro.gemspec
|
205
206
|
- lib/knapsack_pro.rb
|
206
207
|
- lib/knapsack_pro/adapters/base_adapter.rb
|
@@ -239,10 +240,11 @@ files:
|
|
239
240
|
- lib/knapsack_pro/crypto/decryptor.rb
|
240
241
|
- lib/knapsack_pro/crypto/digestor.rb
|
241
242
|
- lib/knapsack_pro/crypto/encryptor.rb
|
242
|
-
- lib/knapsack_pro/extensions/time.rb
|
243
243
|
- lib/knapsack_pro/formatters/rspec_json_formatter.rb
|
244
244
|
- lib/knapsack_pro/formatters/rspec_queue_profile_formatter_extension.rb
|
245
245
|
- lib/knapsack_pro/formatters/rspec_queue_summary_formatter.rb
|
246
|
+
- lib/knapsack_pro/formatters/time_tracker.rb
|
247
|
+
- lib/knapsack_pro/formatters/time_tracker_fetcher.rb
|
246
248
|
- lib/knapsack_pro/hooks/queue.rb
|
247
249
|
- lib/knapsack_pro/logger_wrapper.rb
|
248
250
|
- lib/knapsack_pro/mask_string.rb
|
@@ -335,7 +337,7 @@ files:
|
|
335
337
|
- spec/knapsack_pro/crypto/decryptor_spec.rb
|
336
338
|
- spec/knapsack_pro/crypto/digestor_spec.rb
|
337
339
|
- spec/knapsack_pro/crypto/encryptor_spec.rb
|
338
|
-
- spec/knapsack_pro/
|
340
|
+
- spec/knapsack_pro/formatters/time_tracker_specs.rb
|
339
341
|
- spec/knapsack_pro/hooks/queue_spec.rb
|
340
342
|
- spec/knapsack_pro/logger_wrapper_spec.rb
|
341
343
|
- spec/knapsack_pro/presenter_spec.rb
|
@@ -388,7 +390,7 @@ licenses:
|
|
388
390
|
metadata:
|
389
391
|
bug_tracker_uri: https://github.com/KnapsackPro/knapsack_pro-ruby/issues
|
390
392
|
changelog_uri: https://github.com/KnapsackPro/knapsack_pro-ruby/blob/master/CHANGELOG.md
|
391
|
-
documentation_uri: https://docs.knapsackpro.com/
|
393
|
+
documentation_uri: https://docs.knapsackpro.com/knapsack_pro-ruby/guide/
|
392
394
|
homepage_uri: https://knapsackpro.com
|
393
395
|
source_code_uri: https://github.com/KnapsackPro/knapsack_pro-ruby
|
394
396
|
post_install_message:
|
@@ -455,7 +457,7 @@ test_files:
|
|
455
457
|
- spec/knapsack_pro/crypto/decryptor_spec.rb
|
456
458
|
- spec/knapsack_pro/crypto/digestor_spec.rb
|
457
459
|
- spec/knapsack_pro/crypto/encryptor_spec.rb
|
458
|
-
- spec/knapsack_pro/
|
460
|
+
- spec/knapsack_pro/formatters/time_tracker_specs.rb
|
459
461
|
- spec/knapsack_pro/hooks/queue_spec.rb
|
460
462
|
- spec/knapsack_pro/logger_wrapper_spec.rb
|
461
463
|
- spec/knapsack_pro/presenter_spec.rb
|