From 7c8105b30a874d20e39bca6222ac0d802eff8a1e Mon Sep 17 00:00:00 2001 From: Hartley McGuire Date: Tue, 11 Mar 2025 16:23:12 -0400 Subject: [PATCH] Dump JSON directly to file instead of buffering Buffering the whole string will use much more memory, and for large test suites with lots of failures the reporter is more likely to OOM. --- ruby/lib/minitest/queue/build_status_reporter.rb | 4 ++-- ruby/lib/minitest/queue/runner.rb | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/ruby/lib/minitest/queue/build_status_reporter.rb b/ruby/lib/minitest/queue/build_status_reporter.rb index cd947539..2f17bed2 100644 --- a/ruby/lib/minitest/queue/build_status_reporter.rb +++ b/ruby/lib/minitest/queue/build_status_reporter.rb @@ -101,11 +101,11 @@ def progress end def write_failure_file(file) - File.write(file, error_reports.map(&:to_h).to_json) + JSON.dump(error_reports.map(&:to_h), File.open(file, 'w')) end def write_flaky_tests_file(file) - File.write(file, flaky_reports.to_json) + JSON.dump(flaky_reports, File.open(file, 'w')) end private diff --git a/ruby/lib/minitest/queue/runner.rb b/ruby/lib/minitest/queue/runner.rb index 31183a82..79c1a917 100644 --- a/ruby/lib/minitest/queue/runner.rb +++ b/ruby/lib/minitest/queue/runner.rb @@ -323,7 +323,7 @@ def display_warnings(build) warnings = build.pop_warnings.map do |type, attributes| attributes.merge(type: type) end.compact - File.write(queue_config.warnings_file, warnings.to_json) + JSON.dump(warnings, File.open(queue_config.warnings_file, 'w')) end def run_tests_in_fork(queue)