@@ -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?  &&
133-             cask . depends_on . macos . allows? ( MacOSVersion . from_symbol ( T . must ( runner [ :symbol ] ) . to_sym ) ) 
134-         end 
133+               cask . depends_on . macos . allows? ( MacOSVersion . from_symbol ( T . must ( runner [ :symbol ] ) . to_sym ) ) 
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