knapsack_pro 7.5.1 → 7.6.1

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: 1c0358e24e8030869e858b896df6bbb3188433fcd973e073e773e6f6735b481a
4
- data.tar.gz: 33c9a7233e1fc1c14450d3e72eea10568bbab8dd37c90df93db37253db78b8b3
3
+ metadata.gz: 11356d7eace33ba43c1dec527436091c103ac8b5d6c9bd2ae28851294854d4df
4
+ data.tar.gz: 15717cbb12d7d9143be84504464ecd32a25841bb984e70ec88ec6b3c05b0dcbe
5
5
  SHA512:
6
- metadata.gz: 43966d1dc8df454ede86e53226927e43f7d622e7605a04b1eb6331ca33e8e1c5e5ab7ba3e1ed9e9616088bd729cf95baf5aa28503ab36062828869ef5d5a8943
7
- data.tar.gz: f1ace143ed62bbbb8d210470990cbf44baeef4473c23d5a303ad28fbf9aa8708ad04c95f920639af588406a7541542c2db8a04db7021c7144a583cc6c120ba41
6
+ metadata.gz: 5a12e300c1a6a7427836b2a62d71b7ccb35174c31d444ac77fdd19847a7b9b85fc805adb9bd966329d0c7e21e58c233230e63e8943b14bad6b9267236c69ee3a
7
+ data.tar.gz: 3ac187d311a35d343c5c6fd86c667049642638862d5dff4d68ecff91d63191b05a1206881d24efebd3163d92cbd69e08bd8d0a4b129f69bf45b348dde49662be
data/CHANGELOG.md CHANGED
@@ -2,9 +2,29 @@
2
2
 
3
3
  ### UNRELEASED
4
4
 
5
+ ### 7.6.1
6
+
7
+ * Add support for the Timecop 0.9.9 gem version so that we could track proper tests' execution time when `Process.clock_gettime` is mocked.
8
+
9
+ https://github.com/KnapsackPro/knapsack_pro-ruby/pull/262
10
+
11
+ https://github.com/KnapsackPro/knapsack_pro-ruby/compare/v7.6.0...v7.6.1
12
+
13
+ ### 7.6.0
14
+
15
+ * Avoid starting an unnecessary process in Queue Mode.
16
+ * Fix: the terminal is returned to the user correctly (output looks good) when you use CTRL+C
17
+ * Improvement: the backtrace looks better when something fails (for example, the gem handles an OS signal)
18
+
19
+ https://github.com/KnapsackPro/knapsack_pro-ruby/pull/260
20
+
21
+ https://github.com/KnapsackPro/knapsack_pro-ruby/compare/v7.5.1...v7.6.0
22
+
5
23
  ### 7.5.1
6
24
 
7
- Revert to 7.4.0.
25
+ * Revert to 7.4.0.
26
+
27
+ https://github.com/KnapsackPro/knapsack_pro-ruby/compare/v7.5.0...v7.5.1
8
28
 
9
29
  ### 7.5.0
10
30
 
@@ -233,6 +253,34 @@ https://github.com/KnapsackPro/knapsack_pro-ruby/compare/v6.0.4...v7.0.0
233
253
 
234
254
  https://github.com/KnapsackPro/knapsack_pro-ruby/pull/236
235
255
 
256
+ __(breaking change)__ for SimpleCov and Minitest in Knapsack Pro Queue Mode users.
257
+
258
+ Please add the following to your configuration:
259
+
260
+ ```ruby
261
+ KnapsackPro::Hooks::Queue.after_queue do
262
+ SimpleCov.result.format!
263
+ end
264
+ ```
265
+
266
+ The full example:
267
+
268
+ ```ruby
269
+ # test/test_helper.rb
270
+ require 'knapsack_pro'
271
+ require 'simplecov'
272
+
273
+ SimpleCov.start
274
+
275
+ KnapsackPro::Hooks::Queue.before_queue do |queue_id|
276
+ SimpleCov.command_name("minitest_ci_node_#{KnapsackPro::Config::Env.ci_node_index}")
277
+ end
278
+
279
+ KnapsackPro::Hooks::Queue.after_queue do
280
+ SimpleCov.result.format!
281
+ end
282
+ ```
283
+
236
284
  https://github.com/KnapsackPro/knapsack_pro-ruby/compare/v6.0.3...v6.0.4
237
285
 
238
286
  ### 6.0.3
data/knapsack_pro.gemspec CHANGED
@@ -38,5 +38,5 @@ Gem::Specification.new do |spec|
38
38
  spec.add_development_dependency 'pry', '~> 0'
39
39
  spec.add_development_dependency 'vcr', '>= 6.0'
40
40
  spec.add_development_dependency 'webmock', '>= 3.13'
41
- spec.add_development_dependency 'timecop', '>= 0.9.4'
41
+ spec.add_development_dependency 'timecop', '>= 0.9.9'
42
42
  end
@@ -145,7 +145,7 @@ module KnapsackPro
145
145
  end
146
146
 
147
147
  def now
148
- Process.clock_gettime(Process::CLOCK_MONOTONIC)
148
+ KnapsackPro::Utils.time_now
149
149
  end
150
150
  end
151
151
  end
@@ -155,7 +155,7 @@ module KnapsackPro
155
155
  end
156
156
 
157
157
  def now_without_mock_time
158
- Process.clock_gettime(Process::CLOCK_MONOTONIC)
158
+ KnapsackPro::Utils.time_now
159
159
  end
160
160
  end
161
161
  end
@@ -5,5 +5,13 @@ module KnapsackPro
5
5
  def self.unsymbolize(obj)
6
6
  JSON.parse(obj.to_json)
7
7
  end
8
+
9
+ def self.time_now
10
+ if defined?(Timecop) && Process.respond_to?(:clock_gettime_without_mock)
11
+ Process.clock_gettime_without_mock(Process::CLOCK_MONOTONIC)
12
+ else
13
+ Process.clock_gettime(Process::CLOCK_MONOTONIC)
14
+ end
15
+ end
8
16
  end
9
17
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module KnapsackPro
4
- VERSION = '7.5.1'
4
+ VERSION = '7.6.1'
5
5
  end
@@ -5,14 +5,7 @@ require 'knapsack_pro'
5
5
  namespace :knapsack_pro do
6
6
  namespace :queue do
7
7
  task :cucumber, [:cucumber_args] do |_, args|
8
- Kernel.system("RAILS_ENV=test RACK_ENV=test #{$PROGRAM_NAME} 'knapsack_pro:queue:cucumber_go[#{args[:cucumber_args]}]'")
9
- exitstatus = $?.exitstatus
10
- if exitstatus.nil?
11
- puts 'Something went wrong. Most likely, the process has been killed. Knapsack Pro has been terminated.'
12
- Kernel.exit(1)
13
- else
14
- Kernel.exit(exitstatus)
15
- end
8
+ Kernel.exec("RAILS_ENV=test RACK_ENV=test #{$PROGRAM_NAME} 'knapsack_pro:queue:cucumber_go[#{args[:cucumber_args]}]'")
16
9
  end
17
10
 
18
11
  task :cucumber_go, [:cucumber_args] do |_, args|
@@ -5,14 +5,7 @@ require 'knapsack_pro'
5
5
  namespace :knapsack_pro do
6
6
  namespace :queue do
7
7
  task :minitest, [:minitest_args] do |_, args|
8
- Kernel.system("RAILS_ENV=test RACK_ENV=test #{$PROGRAM_NAME} 'knapsack_pro:queue:minitest_go[#{args[:minitest_args]}]'")
9
- exitstatus = $?.exitstatus
10
- if exitstatus.nil?
11
- puts 'Something went wrong. Most likely, the process has been killed. Knapsack Pro has been terminated.'
12
- Kernel.exit(1)
13
- else
14
- Kernel.exit(exitstatus)
15
- end
8
+ Kernel.exec("RAILS_ENV=test RACK_ENV=test #{$PROGRAM_NAME} 'knapsack_pro:queue:minitest_go[#{args[:minitest_args]}]'")
16
9
  end
17
10
 
18
11
  task :minitest_go, [:minitest_args] do |_, args|
@@ -5,14 +5,7 @@ require 'knapsack_pro'
5
5
  namespace :knapsack_pro do
6
6
  namespace :queue do
7
7
  task :rspec, [:rspec_args] do |_, args|
8
- Kernel.system("RAILS_ENV=test RACK_ENV=test #{$PROGRAM_NAME} 'knapsack_pro:queue:rspec_go[#{args[:rspec_args]}]'")
9
- exitstatus = $?.exitstatus
10
- if exitstatus.nil?
11
- puts 'Something went wrong. Most likely, the process has been killed. Knapsack Pro has been terminated.'
12
- Kernel.exit(1)
13
- else
14
- Kernel.exit(exitstatus)
15
- end
8
+ Kernel.exec("RAILS_ENV=test RACK_ENV=test #{$PROGRAM_NAME} 'knapsack_pro:queue:rspec_go[#{args[:rspec_args]}]'")
16
9
  end
17
10
 
18
11
  task :rspec_go, [:rspec_args] do |_, args|
@@ -18,18 +18,23 @@ describe "#{KnapsackPro::Runners::Queue::RSpecRunner} - Integration tests", :cle
18
18
  # @param spec_batches Array[Array[String]]
19
19
  def generate_specs(spec_helper, rspec_options, spec_batches)
20
20
  ENV['TEST__RSPEC_OPTIONS'] = rspec_options
21
+ generate_spec_helper(spec_helper)
22
+ paths = generate_spec_files(spec_batches.flatten)
23
+ stub_spec_batches(
24
+ spec_batches.map { _1.map(&:path) }
25
+ )
26
+ end
21
27
 
28
+ def generate_spec_helper(spec_helper)
22
29
  spec_helper_path = "#{SPEC_DIRECTORY}/spec_helper.rb"
23
30
  File.open(spec_helper_path, 'w') { |file| file.write(spec_helper) }
31
+ end
24
32
 
25
- paths = spec_batches.flatten.map do |spec_item|
33
+ def generate_spec_files(specs)
34
+ specs.map do |spec_item|
26
35
  File.open(spec_item.path, 'w') { |file| file.write(spec_item.content) }
27
36
  spec_item.path
28
37
  end
29
-
30
- stub_spec_batches(
31
- spec_batches.map { _1.map(&:path) }
32
- )
33
38
  end
34
39
 
35
40
  def create_rails_helper_file(rails_helper)
@@ -73,8 +78,9 @@ describe "#{KnapsackPro::Runners::Queue::RSpecRunner} - Integration tests", :cle
73
78
  SPEC
74
79
  end
75
80
 
81
+ let(:command) { 'ruby spec/integration/runners/queue/rspec_runner.rb' }
82
+
76
83
  subject do
77
- command = 'ruby spec/integration/runners/queue/rspec_runner.rb'
78
84
  stdout, stderr, status = Open3.capture3(command)
79
85
  log_command_result(stdout, stderr, status)
80
86
  OpenStruct.new(stdout: stdout, stderr: stderr, exit_code: status.exitstatus)
@@ -2537,4 +2543,28 @@ describe "#{KnapsackPro::Runners::Queue::RSpecRunner} - Integration tests", :cle
2537
2543
  expect(actual.exit_code).to eq 0
2538
2544
  end
2539
2545
  end
2546
+
2547
+ context 'when rspec is run without knapsack_pro' do
2548
+ let(:spec) { Spec.new('a_spec.rb', <<~SPEC) }
2549
+ require_relative "spec_helper.rb"
2550
+
2551
+ describe 'A_describe' do
2552
+ it 'A1 test example' do
2553
+ expect(1).to eq 1
2554
+ end
2555
+ end
2556
+ SPEC
2557
+
2558
+ let(:command) { "bundle exec rspec #{spec.path}" }
2559
+
2560
+ it 'runs successfully' do
2561
+ generate_spec_helper(spec_helper_with_knapsack)
2562
+ generate_spec_files([spec])
2563
+
2564
+ actual = subject
2565
+
2566
+ expect(actual.stdout).to include('1 example, 0 failures')
2567
+ expect(actual.exit_code).to eq 0
2568
+ end
2569
+ end
2540
2570
  end
@@ -16,4 +16,40 @@ describe KnapsackPro::Utils do
16
16
  ])
17
17
  end
18
18
  end
19
+
20
+ describe '.time_now' do
21
+ subject { described_class.time_now }
22
+
23
+ context 'when Timecop does not mock the time' do
24
+ it do
25
+ now = Process.clock_gettime(Process::CLOCK_MONOTONIC)
26
+ expect(subject).to be_within(0.001).of(now)
27
+ end
28
+ end
29
+
30
+ context 'when Timecop does mock the process clock' do
31
+ around(:example) do |ex|
32
+ unless Gem::Version.new(Timecop::VERSION) >= Gem::Version.new('0.9.9')
33
+ raise 'Timecop >= 0.9.9 is required to run this test. Please run: bundle update'
34
+ end
35
+
36
+ if Gem::Version.new(Timecop::VERSION) >= Gem::Version.new('0.9.10')
37
+ Timecop.mock_process_clock = true
38
+ ex.run
39
+ Timecop.mock_process_clock = false
40
+ else
41
+ ex.run
42
+ end
43
+ end
44
+
45
+ it do
46
+ now = Process.clock_gettime(Process::CLOCK_MONOTONIC)
47
+
48
+ time = Time.local(2020, 1, 31)
49
+ Timecop.travel(time) do
50
+ expect(subject).to be_within(0.001).of(now)
51
+ end
52
+ end
53
+ end
54
+ end
19
55
  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: 7.5.1
4
+ version: 7.6.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - ArturT
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-05-28 00:00:00.000000000 Z
11
+ date: 2024-06-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -170,14 +170,14 @@ dependencies:
170
170
  requirements:
171
171
  - - ">="
172
172
  - !ruby/object:Gem::Version
173
- version: 0.9.4
173
+ version: 0.9.9
174
174
  type: :development
175
175
  prerelease: false
176
176
  version_requirements: !ruby/object:Gem::Requirement
177
177
  requirements:
178
178
  - - ">="
179
179
  - !ruby/object:Gem::Version
180
- version: 0.9.4
180
+ version: 0.9.9
181
181
  description: Knapsack Pro wraps your current test runner(s) and works with your existing
182
182
  CI infrastructure to parallelize tests optimally. It dynamically splits your tests
183
183
  based on up-to-date test execution data. It's designed from the ground up for CI
@@ -415,7 +415,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
415
415
  - !ruby/object:Gem::Version
416
416
  version: '0'
417
417
  requirements: []
418
- rubygems_version: 3.4.10
418
+ rubygems_version: 3.5.9
419
419
  signing_key:
420
420
  specification_version: 4
421
421
  summary: Knapsack Pro splits tests across parallel CI nodes and ensures each parallel