| 
									
										
										
										
											2023-04-03 22:27:46 +08:00
										 |  |  | # typed: strict | 
					
						
							| 
									
										
										
										
											2023-04-03 20:36:45 +08:00
										 |  |  | # frozen_string_literal: true | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-03-21 08:10:59 -07:00
										 |  |  | require "abstract_command" | 
					
						
							| 
									
										
										
										
											2023-04-05 01:18:11 +08:00
										 |  |  | require "test_runner_formula" | 
					
						
							| 
									
										
										
										
											2023-04-05 03:52:26 +08:00
										 |  |  | require "github_runner_matrix" | 
					
						
							| 
									
										
										
										
											2023-04-03 20:36:45 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | module Homebrew | 
					
						
							| 
									
										
										
										
											2024-03-21 08:10:59 -07:00
										 |  |  |   module DevCmd | 
					
						
							|  |  |  |     class DetermineTestRunners < AbstractCommand | 
					
						
							|  |  |  |       cmd_args do | 
					
						
							|  |  |  |         usage_banner <<~EOS | 
					
						
							|  |  |  |           `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. | 
					
						
							|  |  |  |         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", | 
					
						
							| 
									
										
										
										
											2025-06-03 11:06:35 -04:00
										 |  |  |                description: "Determine runners for testing dependents. " \ | 
					
						
							| 
									
										
										
										
											2025-08-02 23:27:59 -04:00
										 |  |  |                             "Requires `--eval-all` or `HOMEBREW_EVAL_ALL=1` to be set.", | 
					
						
							| 
									
										
										
										
											2024-03-21 08:10:59 -07:00
										 |  |  |                depends_on:  "--eval-all" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         named_args max: 2
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         conflicts "--all-supported", "--dependents" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         hide_from_man_page! | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       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 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-03 17:43:22 -08:00
										 |  |  |         testing_formulae = args.named.first&.split(",").to_a.map do |name| | 
					
						
							|  |  |  |           TestRunnerFormula.new(Formulary.factory(name), eval_all: args.eval_all?) | 
					
						
							| 
									
										
										
										
											2024-12-03 17:53:00 -08:00
										 |  |  |         end.freeze | 
					
						
							| 
									
										
										
										
											2024-03-21 08:10:59 -07:00
										 |  |  |         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| | 
					
						
							|  |  |  |           f.puts("runners=#{runners.to_json}") | 
					
						
							|  |  |  |           f.puts("runners_present=#{runners.present?}") | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       end | 
					
						
							| 
									
										
										
										
											2023-04-04 13:54:35 +08:00
										 |  |  |     end | 
					
						
							| 
									
										
										
										
											2023-04-03 20:36:45 +08:00
										 |  |  |   end | 
					
						
							|  |  |  | end |