@@ -67,7 +67,8 @@ def run
6767 pr_url = args . named if args . url?
6868 syntax_only = args . syntax_only?
6969
70- repository = ENV . fetch ( "GITHUB_REPOSITORY" , nil )
70+ # repository = ENV.fetch("GITHUB_REPOSITORY", nil)
71+ repository = "homebrew/homebrew-cask" # For testing outside of GitHub Actions
7172 raise UsageError , "The `$GITHUB_REPOSITORY` environment variable must be set." if repository . blank?
7273
7374 tap = T . let ( Tap . fetch ( repository ) , Tap )
@@ -127,33 +128,62 @@ def run
127128
128129 sig { params ( cask : Cask ::Cask ) . returns ( T ::Hash [ T ::Hash [ Symbol , T . any ( Symbol , String ) ] , Float ] ) }
129130 def filter_runners ( cask )
130- filtered_macos_runners = RUNNERS . select do |runner , _ |
131- runner [ :symbol ] != :linux &&
132- cask . depends_on . macos . present? &&
133- cask . depends_on . macos . allows? ( MacOSVersion . from_symbol ( T . must ( runner [ :symbol ] ) . to_sym ) )
134- end
135131
136- filtered_runners = if filtered_macos_runners . any?
132+ filtered_runners = if cask . supports_macos?
133+ filtered_macos_runners = MACOS_RUNNERS . select do |runner , _ |
134+ cask . depends_on . macos . present? &&
135+ cask . depends_on . macos . allows? ( MacOSVersion . from_symbol ( T . must ( runner [ :symbol ] ) . to_sym ) )
136+ end
137+
138+ return MACOS_RUNNERS . dup unless filtered_macos_runners . any?
139+
137140 filtered_macos_runners
138- else
139- RUNNERS . dup
140141 end
141142
142- filtered_runners = filtered_runners . merge ( LINUX_RUNNERS ) if cask . supports_linux?
143-
144143 archs = architectures ( cask :)
144+ odebug "Architectures macOS: #{ archs } " if archs . any?
145145 filtered_runners . select! do |runner , _ |
146146 archs . include? ( runner . fetch ( :arch ) )
147147 end
148148
149+ odebug "Filtered runners: #{ filtered_runners . keys . map { |r | r [ :name ] } } " if filtered_runners . any?
150+ if cask . supports_linux?
151+ filtered_linux_runners = LINUX_RUNNERS . dup
152+
153+ archs = architectures ( cask :, os : :linux , arch : :intel )
154+ filtered_linux_runners . select! do |runner , _ |
155+ archs . include? ( runner . fetch ( :arch ) )
156+ end
157+
158+ filtered_runners . merge! ( filtered_linux_runners )
159+ end
160+
161+ odebug "Architectures linux: #{ archs } " if archs . any?
162+ odebug "Filtered runners: #{ filtered_runners . keys . map { |r | r [ :name ] } } " if filtered_runners . any?
163+
149164 filtered_runners
150165 end
151166
152- sig { params ( cask : Cask ::Cask ) . returns ( T ::Array [ Symbol ] ) }
153- def architectures ( cask :)
154- return RUNNERS . keys . map { |r | r . fetch ( :arch ) . to_sym } . uniq . sort if cask . depends_on . arch . blank?
167+ sig { params ( cask : Cask ::Cask , os : Symbol , arch : Symbol ) . returns ( T ::Array [ Symbol ] ) }
168+ def architectures ( cask :, os : :macos , arch : :arm )
169+ architectures = [ ]
170+ begin
171+ tag = Utils ::Bottles ::Tag . new ( system : os , arch : arch )
172+ Homebrew ::SimulateSystem . with_tag ( tag ) do
173+ cask . refresh
174+
175+ if cask . depends_on . arch . blank?
176+ architectures = RUNNERS . keys . map { |r | r . fetch ( :arch ) . to_sym } . uniq . sort
177+ next
178+ end
179+
180+ architectures = cask . depends_on . arch . map { |arch | arch [ :type ] }
181+ end
182+ rescue ::Cask ::CaskInvalidError => e
183+ # Can't read cask for this system-arch combination.
184+ end
155185
156- cask . depends_on . arch . map { | arch | arch [ :type ] } . uniq . sort
186+ return architectures
157187 end
158188
159189 sig {
@@ -255,7 +285,7 @@ def generate_matrix(tap, labels: [], cask_names: [], skip_install: false, new_ca
255285 native_runner_arch = arch == runner . fetch ( :arch )
256286 # we don't need to run simulated archs on Linux
257287 next if runner . fetch ( :symbol ) == :linux && !native_runner_arch
258- # we don't need to run simulated archs on macOS
288+ # we don't need to run simulated archs on macOS Sequoia
259289 next if runner . fetch ( :symbol ) == :sequoia && !native_runner_arch
260290
261291 # If it's just a single OS test then we can just use the two real arch runners.
0 commit comments