@@ -127,33 +127,61 @@ def run
127127
128128 sig { params ( cask : Cask ::Cask ) . returns ( T ::Hash [ T ::Hash [ Symbol , T . any ( Symbol , String ) ] , Float ] ) }
129129 def filter_runners ( cask )
130- filtered_macos_runners = RUNNERS . select do | runner , _ |
131- runner [ :symbol ] != :linux &&
130+ filtered_runners = if cask . supports_macos?
131+ filtered_macos_runners = MACOS_RUNNERS . select do | runner , _ |
132132 cask . depends_on . macos . present? &&
133133 cask . depends_on . macos . allows? ( MacOSVersion . from_symbol ( T . must ( runner [ :symbol ] ) . to_sym ) )
134- end
134+ end
135+
136+ return MACOS_RUNNERS . dup if filtered_macos_runners . none?
135137
136- filtered_runners = if filtered_macos_runners . any?
137138 filtered_macos_runners
138- else
139- RUNNERS . dup
140139 end
141140
142- filtered_runners = filtered_runners . merge ( LINUX_RUNNERS ) if cask . supports_linux?
143-
144141 archs = architectures ( cask :)
142+ odebug "Architectures macOS: #{ archs } " if archs . any?
145143 filtered_runners . select! do |runner , _ |
146144 archs . include? ( runner . fetch ( :arch ) )
147145 end
148146
147+ odebug "Filtered runners: #{ filtered_runners . keys . map { |r | r [ :name ] } } " if filtered_runners . any?
148+ if cask . supports_linux?
149+ filtered_linux_runners = LINUX_RUNNERS . dup
150+
151+ archs = architectures ( cask :, os : :linux , arch : :intel )
152+ filtered_linux_runners . select! do |runner , _ |
153+ archs . include? ( runner . fetch ( :arch ) )
154+ end
155+
156+ filtered_runners . merge! ( filtered_linux_runners )
157+ end
158+
159+ odebug "Architectures linux: #{ archs } " if archs . any?
160+ odebug "Filtered runners: #{ filtered_runners . keys . map { |r | r [ :name ] } } " if filtered_runners . any?
161+
149162 filtered_runners
150163 end
151164
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?
165+ sig { params ( cask : Cask ::Cask , os : Symbol , arch : Symbol ) . returns ( T ::Array [ Symbol ] ) }
166+ def architectures ( cask :, os : :macos , arch : :arm )
167+ architectures = [ ]
168+ begin
169+ tag = Utils ::Bottles ::Tag . new ( system : os , arch : arch )
170+ Homebrew ::SimulateSystem . with_tag ( tag ) do
171+ cask . refresh
172+
173+ if cask . depends_on . arch . blank?
174+ architectures = RUNNERS . keys . map { |r | r . fetch ( :arch ) . to_sym } . uniq . sort
175+ next
176+ end
177+
178+ architectures = cask . depends_on . arch . map { |arch | arch [ :type ] }
179+ end
180+ rescue ::Cask ::CaskInvalidError
181+ # Can't read cask for this system-arch combination.
182+ end
155183
156- cask . depends_on . arch . map { | arch | arch [ :type ] } . uniq . sort
184+ architectures
157185 end
158186
159187 sig {
@@ -255,7 +283,7 @@ def generate_matrix(tap, labels: [], cask_names: [], skip_install: false, new_ca
255283 native_runner_arch = arch == runner . fetch ( :arch )
256284 # we don't need to run simulated archs on Linux
257285 next if runner . fetch ( :symbol ) == :linux && !native_runner_arch
258- # we don't need to run simulated archs on macOS
286+ # we don't need to run simulated archs on macOS Sequoia
259287 next if runner . fetch ( :symbol ) == :sequoia && !native_runner_arch
260288
261289 # If it's just a single OS test then we can just use the two real arch runners.
0 commit comments