From 32ab5e41bab84db5f35d9ccf6ad48ecfc04f4d7c Mon Sep 17 00:00:00 2001 From: Borys Babusenko Date: Tue, 2 May 2023 13:40:58 +0200 Subject: [PATCH] Fix leakbot command instructio for CI="true" Resolves: Shopify/shopify#421914 --- ruby/lib/minitest/queue/runner.rb | 10 +- ruby/test/integration/minitest_bisect_test.rb | 94 ++++++++++++++++++- 2 files changed, 101 insertions(+), 3 deletions(-) diff --git a/ruby/lib/minitest/queue/runner.rb b/ruby/lib/minitest/queue/runner.rb index 153e2646..05fc925c 100644 --- a/ruby/lib/minitest/queue/runner.rb +++ b/ruby/lib/minitest/queue/runner.rb @@ -170,7 +170,7 @@ def bisect_command exit! 1 else step(green('The following command should reproduce the leak on your machine:'), collapsed: false) - command = %w(bundle exec minitest-queue --queue - run) + command = reproduce_command command << "-I#{load_paths}" if load_paths command += argv @@ -582,6 +582,14 @@ def retry? ENV["BUILDKITE_RETRY_COUNT"].to_i > 0 || ENV["SEMAPHORE_PIPELINE_RERUN"] == "true" end + + def reproduce_command + if ENV['CI'] != 'true' || queue.is_a?(CI::Queue::File) + %w(bundle exec minitest-queue --queue - run --build local --worker local) + else + %w(bundle exec minitest-queue --queue - run) + end + end end end end diff --git a/ruby/test/integration/minitest_bisect_test.rb b/ruby/test/integration/minitest_bisect_test.rb index 9786365a..2f4025a9 100644 --- a/ruby/test/integration/minitest_bisect_test.rb +++ b/ruby/test/integration/minitest_bisect_test.rb @@ -15,6 +15,96 @@ def test_bisect run_bisect('log/leaky_test_order.log', 'LeakyTest#test_sensible_to_leak') end + assert_empty err + expected_output = strip_heredoc <<-EOS + --- Testing the failing test in isolation + LeakyTest#test_sensible_to_leak PASS + --- Run #1, 45 suspects left + LeakyTest#test_useless_0 PASS + LeakyTest#test_useless_1 PASS + LeakyTest#test_useless_2 PASS + LeakyTest#test_useless_3 PASS + LeakyTest#test_useless_4 PASS + LeakyTest#test_useless_5 PASS + LeakyTest#test_useless_6 PASS + LeakyTest#test_useless_7 PASS + LeakyTest#test_useless_8 PASS + LeakyTest#test_useless_9 PASS + LeakyTest#test_introduce_leak PASS + LeakyTest#test_useless_10 PASS + LeakyTest#test_useless_11 PASS + LeakyTest#test_useless_12 PASS + LeakyTest#test_useless_13 PASS + LeakyTest#test_useless_14 PASS + LeakyTest#test_useless_15 PASS + LeakyTest#test_useless_16 PASS + LeakyTest#test_useless_17 PASS + LeakyTest#test_useless_18 PASS + LeakyTest#test_useless_19 PASS + LeakyTest#test_useless_20 PASS + LeakyTest#test_useless_21 PASS + LeakyTest#test_sensible_to_leak FAIL + + --- Run #2, 23 suspects left + LeakyTest#test_useless_0 PASS + LeakyTest#test_useless_1 PASS + LeakyTest#test_useless_2 PASS + LeakyTest#test_useless_3 PASS + LeakyTest#test_useless_4 PASS + LeakyTest#test_useless_5 PASS + LeakyTest#test_useless_6 PASS + LeakyTest#test_useless_7 PASS + LeakyTest#test_useless_8 PASS + LeakyTest#test_useless_9 PASS + LeakyTest#test_introduce_leak PASS + LeakyTest#test_useless_10 PASS + LeakyTest#test_sensible_to_leak FAIL + + --- Run #3, 12 suspects left + LeakyTest#test_useless_0 PASS + LeakyTest#test_useless_1 PASS + LeakyTest#test_useless_2 PASS + LeakyTest#test_useless_3 PASS + LeakyTest#test_useless_4 PASS + LeakyTest#test_useless_5 PASS + LeakyTest#test_sensible_to_leak PASS + + --- Run #4, 6 suspects left + LeakyTest#test_useless_6 PASS + LeakyTest#test_useless_7 PASS + LeakyTest#test_useless_8 PASS + LeakyTest#test_sensible_to_leak PASS + + --- Run #5, 3 suspects left + LeakyTest#test_useless_9 PASS + LeakyTest#test_introduce_leak PASS + LeakyTest#test_sensible_to_leak FAIL + + --- Run #6, 2 suspects left + LeakyTest#test_useless_9 PASS + LeakyTest#test_sensible_to_leak PASS + + --- Final validation + LeakyTest#test_introduce_leak PASS + LeakyTest#test_sensible_to_leak FAIL + +++ The following command should reproduce the leak on your machine: + + cat < '1' }, + { 'BUILDKITE' => '1', 'CI' => ci.to_s }, exe, 'bisect', '--queue', test_order_file, '--failing-test', failing_test,