Port Homebrew::DevCmd::DetermineTestRunners

This commit is contained in:
Douglas Eichelberger 2024-03-21 08:10:59 -07:00
parent 9297a850aa
commit 19f9c52652
2 changed files with 44 additions and 44 deletions

View File

@ -1,62 +1,62 @@
# typed: strict # typed: strict
# frozen_string_literal: true # frozen_string_literal: true
require "abstract_command"
require "cli/parser" require "cli/parser"
require "test_runner_formula" require "test_runner_formula"
require "github_runner_matrix" require "github_runner_matrix"
module Homebrew module Homebrew
sig { returns(Homebrew::CLI::Parser) } module DevCmd
def self.determine_test_runners_args class DetermineTestRunners < AbstractCommand
Homebrew::CLI::Parser.new do cmd_args do
usage_banner <<~EOS usage_banner <<~EOS
`determine-test-runners` {<testing-formulae> [<deleted-formulae>]|--all-supported} `determine-test-runners` {<testing-formulae> [<deleted-formulae>]|--all-supported}
Determines the runners used to test formulae or their dependents. For internal use in Homebrew taps. Determines the runners used to test formulae or their dependents. For internal use in Homebrew taps.
EOS EOS
switch "--all-supported", switch "--all-supported",
description: "Instead of selecting runners based on the chosen formula, return all supported runners." description: "Instead of selecting runners based on the chosen formula, return all supported runners."
switch "--eval-all", switch "--eval-all",
description: "Evaluate all available formulae, whether installed or not, to determine testing " \ description: "Evaluate all available formulae, whether installed or not, to determine testing " \
"dependents.", "dependents.",
env: :eval_all env: :eval_all
switch "--dependents", switch "--dependents",
description: "Determine runners for testing dependents. Requires `--eval-all` or `HOMEBREW_EVAL_ALL`.", description: "Determine runners for testing dependents. Requires `--eval-all` or `HOMEBREW_EVAL_ALL`.",
depends_on: "--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! hide_from_man_page!
end end
end
sig { void } sig { override.void }
def self.determine_test_runners def run
args = determine_test_runners_args.parse 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? testing_formulae = args.named.first&.split(",").to_a
raise Homebrew::CLI::MinNamedArgumentsError, 1 testing_formulae.map! { |name| TestRunnerFormula.new(Formulary.factory(name), eval_all: args.eval_all?) }
elsif args.all_supported? && !args.no_named? .freeze
raise UsageError, "`--all-supported` is mutually exclusive to other arguments." deleted_formulae = args.named.second&.split(",").to_a.freeze
end 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 ohai "Runners", JSON.pretty_generate(runners)
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) github_output = ENV.fetch("GITHUB_OUTPUT")
File.open(github_output, "a") do |f|
github_output = ENV.fetch("GITHUB_OUTPUT") f.puts("runners=#{runners.to_json}")
File.open(github_output, "a") do |f| f.puts("runners_present=#{runners.present?}")
f.puts("runners=#{runners.to_json}") end
f.puts("runners_present=#{runners.present?}") end
end end
end end
end end

View File

@ -3,7 +3,7 @@
require "dev-cmd/determine-test-runners" require "dev-cmd/determine-test-runners"
require "cmd/shared_examples/args_parse" require "cmd/shared_examples/args_parse"
RSpec.describe "brew determine-test-runners" do RSpec.describe Homebrew::DevCmd::DetermineTestRunners do
def get_runners(file) def get_runners(file)
runner_line = File.open(file).first runner_line = File.open(file).first
json_text = runner_line[/runners=(.*)/, 1] json_text = runner_line[/runners=(.*)/, 1]