@@ -13,15 +13,25 @@ class GenerateCaskCiMatrix < AbstractCommand
13
13
MAX_JOBS = 256
14
14
15
15
# Weight for each arch must add up to 1.0.
16
- INTEL_RUNNERS = T . let ( {
16
+ X86_MACOS_RUNNERS = T . let ( {
17
17
{ symbol : :sequoia , name : "macos-15-intel" , arch : :intel } => 1.0 ,
18
18
} . freeze , T ::Hash [ T ::Hash [ Symbol , T . any ( Symbol , String ) ] , Float ] )
19
- ARM_RUNNERS = T . let ( {
19
+ X86_LINUX_RUNNERS = T . let ( {
20
+ { symbol : :linux , name : "ubuntu-24.04" , arch : :intel } => 1.0 ,
21
+ } . freeze , T ::Hash [ T ::Hash [ Symbol , T . any ( Symbol , String ) ] , Float ] )
22
+ ARM_MACOS_RUNNERS = T . let ( {
20
23
{ symbol : :sonoma , name : "macos-14" , arch : :arm } => 0.0 ,
21
24
{ symbol : :sequoia , name : "macos-15" , arch : :arm } => 0.0 ,
22
25
{ symbol : :tahoe , name : "macos-26" , arch : :arm } => 1.0 ,
23
26
} . freeze , T ::Hash [ T ::Hash [ Symbol , T . any ( Symbol , String ) ] , Float ] )
24
- RUNNERS = T . let ( INTEL_RUNNERS . merge ( ARM_RUNNERS ) . freeze ,
27
+ ARM_LINUX_RUNNERS = T . let ( {
28
+ { symbol : :linux , name : "ubuntu-24.04-arm" , arch : :arm } => 1.0 ,
29
+ } . freeze , T ::Hash [ T ::Hash [ Symbol , T . any ( Symbol , String ) ] , Float ] )
30
+ MACOS_RUNNERS = T . let ( X86_MACOS_RUNNERS . merge ( ARM_MACOS_RUNNERS ) . freeze ,
31
+ T ::Hash [ T ::Hash [ Symbol , T . any ( Symbol , String ) ] , Float ] )
32
+ LINUX_RUNNERS = T . let ( X86_LINUX_RUNNERS . merge ( ARM_LINUX_RUNNERS ) . freeze ,
33
+ T ::Hash [ T ::Hash [ Symbol , T . any ( Symbol , String ) ] , Float ] )
34
+ RUNNERS = T . let ( MACOS_RUNNERS . merge ( LINUX_RUNNERS ) . freeze ,
25
35
T ::Hash [ T ::Hash [ Symbol , T . any ( Symbol , String ) ] , Float ] )
26
36
27
37
cmd_args do
@@ -57,7 +67,8 @@ def run
57
67
pr_url = args . named if args . url?
58
68
syntax_only = args . syntax_only?
59
69
60
- repository = ENV . fetch ( "GITHUB_REPOSITORY" , nil )
70
+ # repository = ENV.fetch("GITHUB_REPOSITORY", nil)
71
+ repository = "homebrew/homebrew-cask" # For testing outside GitHub Actions
61
72
raise UsageError , "The `$GITHUB_REPOSITORY` environment variable must be set." if repository . blank?
62
73
63
74
tap = T . let ( Tap . fetch ( repository ) , Tap )
@@ -118,7 +129,8 @@ def run
118
129
sig { params ( cask : Cask ::Cask ) . returns ( T ::Hash [ T ::Hash [ Symbol , T . any ( Symbol , String ) ] , Float ] ) }
119
130
def filter_runners ( cask )
120
131
filtered_macos_runners = RUNNERS . select do |runner , _ |
121
- cask . depends_on . macos . present? &&
132
+ runner [ :symbol ] != :linux &&
133
+ cask . depends_on . macos . present? &&
122
134
cask . depends_on . macos . allows? ( MacOSVersion . from_symbol ( T . must ( runner [ :symbol ] ) . to_sym ) )
123
135
end
124
136
@@ -128,6 +140,8 @@ def filter_runners(cask)
128
140
RUNNERS . dup
129
141
end
130
142
143
+ filtered_runners = filtered_runners . merge ( LINUX_RUNNERS ) if linux? ( cask :)
144
+
131
145
archs = architectures ( cask :)
132
146
filtered_runners . select! do |runner , _ |
133
147
archs . include? ( runner . fetch ( :arch ) )
@@ -143,11 +157,18 @@ def architectures(cask:)
143
157
cask . depends_on . arch . map { |arch | arch [ :type ] } . uniq . sort
144
158
end
145
159
160
+ sig { params ( cask : Cask ::Cask ) . returns ( T ::Boolean ) }
161
+ def linux? ( cask :)
162
+ return true if cask . font?
163
+
164
+ cask . supports_linux?
165
+ end
166
+
146
167
sig {
147
168
params ( available_runners : T ::Hash [ T ::Hash [ Symbol , T . any ( Symbol , String ) ] ,
148
169
Float ] ) . returns ( T ::Hash [ Symbol , T . any ( Symbol , String ) ] )
149
170
}
150
- def random_runner ( available_runners = ARM_RUNNERS )
171
+ def random_runner ( available_runners = ARM_MACOS_RUNNERS )
151
172
T . must ( available_runners . max_by { |( _ , weight ) | rand ** ( 1.0 / weight ) } )
152
173
. first
153
174
end
@@ -240,6 +261,8 @@ def generate_matrix(tap, labels: [], cask_names: [], skip_install: false, new_ca
240
261
runners , multi_os = runners ( cask :)
241
262
runners . product ( architectures ( cask :) ) . filter_map do |runner , arch |
242
263
native_runner_arch = arch == runner . fetch ( :arch )
264
+ # we don't need to run simulated archs on Linux
265
+ next if runner . fetch ( :symbol ) == :linux && !native_runner_arch
243
266
# If it's just a single OS test then we can just use the two real arch runners.
244
267
next if !native_runner_arch && !multi_os
245
268
0 commit comments