1
0
mirror of https://github.com/discourse/discourse.git synced 2025-03-09 14:34:35 +00:00
Alan Guo Xiang Tan 5897709a90
DEV: Use runtime info to split test files for parallel testing ()
Using the runtime information, we will be able to more efficiently group
the test files across the test processes hence leading to better
utilization of resources.
2023-06-12 09:07:17 +08:00

95 lines
2.3 KiB
Ruby
Executable File

#!/usr/bin/env ruby
# frozen_string_literal: true
ENV["RAILS_ENV"] ||= "test"
require "./lib/turbo_tests"
require "optparse"
requires = []
formatters = []
verbose = false
fail_fast = nil
seed = rand(2**16)
profile = false
profile_print_slowest_examples_count = 10
use_runtime_info = nil
OptionParser
.new do |opts|
opts.on("-r", "--require PATH", "Require a file.") { |filename| requires << filename }
opts.on("-f", "--format FORMATTER", "Choose a formatter.") do |name|
formatters << { name: name, outputs: [] }
end
opts.on("-o", "--out FILE", "Write output to a file instead of $stdout") do |filename|
formatters << { name: "progress", outputs: [] } if formatters.empty?
formatters.last[:outputs] << filename
end
opts.on("-v", "--verbose", "More output") { verbose = true }
opts.on(
"-p",
"--profile=[COUNT]",
"Benchmark the runtime of each example and list the slowest examples (default: 10)",
) do |count|
profile = true
profile_print_slowest_examples_count = count.to_i if count
end
opts.on("--fail-fast=[N]") do |n|
n =
begin
Integer(n)
rescue StandardError
nil
end
fail_fast = (n.nil? || n < 1) ? 1 : n
end
opts.on("--seed SEED", "The seed for the random order") { |s| seed = s.to_i }
opts.on("--use-runtime-info", "Use runtime info for tests group splitting") do
use_runtime_info = true
end
end
.parse!(ARGV)
requires.each { |f| require(f) }
formatters << { name: "progress", outputs: [] } if formatters.empty?
formatters.each { |formatter| formatter[:outputs] << "-" if formatter[:outputs].empty? }
if ARGV.empty?
files = TurboTests::Runner.default_spec_folders
use_runtime_info = true if use_runtime_info.nil?
else
files = ARGV
use_runtime_info = false if use_runtime_info.nil?
end
puts "::group::Run turbo_rspec" if ENV["GITHUB_ACTIONS"]
puts "Running turbo_rspec (seed: #{seed}) using files in: #{files}"
puts "::endgroup::" if ENV["GITHUB_ACTIONS"]
success =
TurboTests::Runner.run(
formatters: formatters,
files: files,
verbose: verbose,
fail_fast: fail_fast,
use_runtime_info: use_runtime_info,
seed: seed.to_s,
profile:,
profile_print_slowest_examples_count:,
)
if success
exit 0
else
exit 1
end