diff --git a/Library/Homebrew/dev-cmd/determine-test-runners.rb b/Library/Homebrew/dev-cmd/determine-test-runners.rb index 9a94f20ca9..72a63260a0 100644 --- a/Library/Homebrew/dev-cmd/determine-test-runners.rb +++ b/Library/Homebrew/dev-cmd/determine-test-runners.rb @@ -1,62 +1,62 @@ # typed: strict # frozen_string_literal: true +require "abstract_command" require "cli/parser" require "test_runner_formula" require "github_runner_matrix" module Homebrew - sig { returns(Homebrew::CLI::Parser) } - def self.determine_test_runners_args - Homebrew::CLI::Parser.new do - usage_banner <<~EOS - `determine-test-runners` { []|--all-supported} + module DevCmd + class DetermineTestRunners < AbstractCommand + cmd_args do + usage_banner <<~EOS + `determine-test-runners` { []|--all-supported} - Determines the runners used to test formulae or their dependents. For internal use in Homebrew taps. - EOS - switch "--all-supported", - description: "Instead of selecting runners based on the chosen formula, return all supported runners." - switch "--eval-all", - description: "Evaluate all available formulae, whether installed or not, to determine testing " \ - "dependents.", - env: :eval_all - switch "--dependents", - description: "Determine runners for testing dependents. Requires `--eval-all` or `HOMEBREW_EVAL_ALL`.", - depends_on: "--eval-all" + Determines the runners used to test formulae or their dependents. For internal use in Homebrew taps. + EOS + switch "--all-supported", + description: "Instead of selecting runners based on the chosen formula, return all supported runners." + switch "--eval-all", + description: "Evaluate all available formulae, whether installed or not, to determine testing " \ + "dependents.", + env: :eval_all + switch "--dependents", + description: "Determine runners for testing dependents. Requires `--eval-all` or `HOMEBREW_EVAL_ALL`.", + depends_on: "--eval-all" - named_args max: 2 + named_args max: 2 - conflicts "--all-supported", "--dependents" + conflicts "--all-supported", "--dependents" - hide_from_man_page! - end - end + hide_from_man_page! + end - sig { void } - def self.determine_test_runners - args = determine_test_runners_args.parse + sig { override.void } + def run + if args.no_named? && !args.all_supported? + raise Homebrew::CLI::MinNamedArgumentsError, 1 + elsif args.all_supported? && !args.no_named? + raise UsageError, "`--all-supported` is mutually exclusive to other arguments." + end - if args.no_named? && !args.all_supported? - raise Homebrew::CLI::MinNamedArgumentsError, 1 - elsif args.all_supported? && !args.no_named? - raise UsageError, "`--all-supported` is mutually exclusive to other arguments." - end + testing_formulae = args.named.first&.split(",").to_a + testing_formulae.map! { |name| TestRunnerFormula.new(Formulary.factory(name), eval_all: args.eval_all?) } + .freeze + deleted_formulae = args.named.second&.split(",").to_a.freeze + runner_matrix = GitHubRunnerMatrix.new(testing_formulae, deleted_formulae, + all_supported: args.all_supported?, + dependent_matrix: args.dependents?) + runners = runner_matrix.active_runner_specs_hash - testing_formulae = args.named.first&.split(",").to_a - testing_formulae.map! { |name| TestRunnerFormula.new(Formulary.factory(name), eval_all: args.eval_all?) } - .freeze - deleted_formulae = args.named.second&.split(",").to_a.freeze - runner_matrix = GitHubRunnerMatrix.new(testing_formulae, deleted_formulae, - all_supported: args.all_supported?, - dependent_matrix: args.dependents?) - runners = runner_matrix.active_runner_specs_hash + ohai "Runners", JSON.pretty_generate(runners) - ohai "Runners", JSON.pretty_generate(runners) - - github_output = ENV.fetch("GITHUB_OUTPUT") - File.open(github_output, "a") do |f| - f.puts("runners=#{runners.to_json}") - f.puts("runners_present=#{runners.present?}") + github_output = ENV.fetch("GITHUB_OUTPUT") + File.open(github_output, "a") do |f| + f.puts("runners=#{runners.to_json}") + f.puts("runners_present=#{runners.present?}") + end + end end end end diff --git a/Library/Homebrew/test/dev-cmd/determine-test-runners_spec.rb b/Library/Homebrew/test/dev-cmd/determine-test-runners_spec.rb index 4241778350..ed6b374b37 100644 --- a/Library/Homebrew/test/dev-cmd/determine-test-runners_spec.rb +++ b/Library/Homebrew/test/dev-cmd/determine-test-runners_spec.rb @@ -3,7 +3,7 @@ require "dev-cmd/determine-test-runners" require "cmd/shared_examples/args_parse" -RSpec.describe "brew determine-test-runners" do +RSpec.describe Homebrew::DevCmd::DetermineTestRunners do def get_runners(file) runner_line = File.open(file).first json_text = runner_line[/runners=(.*)/, 1]