@@ -115,70 +115,32 @@ def run
115
115
end
116
116
end
117
117
118
- sig { params ( cask_content : String ) . returns ( T ::Hash [ T ::Hash [ Symbol , T . any ( Symbol , String ) ] , Float ] ) }
119
- def filter_runners ( cask_content )
120
- # Retrieve arguments from `depends_on macos:`
121
- required_macos = case cask_content
122
- when /depends_on\s +macos:\s +\[ ([^\] ]+)\] /
123
- T . must ( Regexp . last_match ( 1 ) ) . scan ( /\s *(?:"([=<>]=)\s +)?:([^\s ",]+)"?,?\s */ ) . map do |match |
124
- {
125
- version : T . must ( match [ 1 ] ) . to_sym ,
126
- comparator : match [ 0 ] || "==" ,
127
- }
128
- end
129
- when /depends_on\s +macos:\s +"?:([^\s "]+)"?/ # e.g. `depends_on macos: :big_sur`
130
- [
131
- {
132
- version : T . must ( Regexp . last_match ( 1 ) ) . to_sym ,
133
- comparator : "==" ,
134
- } ,
135
- ]
136
- when /depends_on\s +macos:\s +"([=<>]=)\s +:([^\s "]+)"/ # e.g. `depends_on macos: ">= :monterey"`
137
- [
138
- {
139
- version : T . must ( Regexp . last_match ( 2 ) ) . to_sym ,
140
- comparator : Regexp . last_match ( 1 ) ,
141
- } ,
142
- ]
143
- when /depends_on\s +macos:/
144
- # In this case, `depends_on macos:` is present but wasn't matched by the
145
- # previous regexes. We want this to visibly fail so we can address the
146
- # shortcoming instead of quietly defaulting to `RUNNERS`.
147
- odie "Unhandled `depends_on macos` argument"
148
- else
149
- [ ]
118
+ sig { params ( cask : Cask ::Cask ) . returns ( T ::Hash [ T ::Hash [ Symbol , T . any ( Symbol , String ) ] , Float ] ) }
119
+ def filter_runners ( cask )
120
+ filtered_macos_runners = RUNNERS . select do |runner , _ |
121
+ cask . depends_on . macos . present? &&
122
+ cask . depends_on . macos . allows? ( MacOSVersion . from_symbol ( T . must ( runner [ :symbol ] ) . to_sym ) )
150
123
end
151
124
152
- filtered_runners = RUNNERS . select do |runner , _ |
153
- required_macos . any? do |r |
154
- MacOSVersion . from_symbol ( runner . fetch ( :symbol ) . to_sym ) . compare (
155
- r . fetch ( :comparator ) ,
156
- MacOSVersion . from_symbol ( r . fetch ( :version ) . to_sym ) ,
157
- )
158
- end
125
+ filtered_runners = if filtered_macos_runners . any?
126
+ filtered_macos_runners
127
+ else
128
+ RUNNERS . dup
159
129
end
160
- filtered_runners = RUNNERS . dup if filtered_runners . empty?
161
130
162
- archs = architectures ( cask_content :)
131
+ archs = architectures ( cask :)
163
132
filtered_runners . select! do |runner , _ |
164
133
archs . include? ( runner . fetch ( :arch ) )
165
134
end
166
135
167
- RUNNERS
136
+ filtered_runners
168
137
end
169
138
170
- sig { params ( cask_content : BasicObject ) . returns ( T ::Array [ Symbol ] ) }
171
- def architectures ( cask_content :)
172
- case cask_content
173
- when /depends_on\s +arch:\s +:arm64/
174
- [ :arm ]
175
- when /depends_on\s +arch:\s +:x86_64/
176
- [ :intel ]
177
- when /\b arch\b / , /\b on_(arm|intel)\b /
178
- [ :arm , :intel ]
179
- else
180
- RUNNERS . keys . map { |r | r . fetch ( :arch ) } . uniq . sort
181
- end
139
+ sig { params ( cask : Cask ::Cask ) . returns ( T ::Array [ Symbol ] ) }
140
+ def architectures ( cask :)
141
+ return RUNNERS . keys . map { |r | r . fetch ( :arch ) . to_sym } . uniq . sort if cask . depends_on . arch . blank?
142
+
143
+ cask . depends_on . arch . map { |arch | arch [ :type ] } . uniq . sort
182
144
end
183
145
184
146
sig {
@@ -190,16 +152,12 @@ def random_runner(available_runners = ARM_RUNNERS)
190
152
. first
191
153
end
192
154
193
- sig { params ( cask_content : String ) . returns ( [ T ::Array [ T ::Hash [ Symbol , T . any ( Symbol , String ) ] ] , T ::Boolean ] ) }
194
- def runners ( cask_content :)
195
- filtered_runners = filter_runners ( cask_content )
155
+ sig { params ( cask : Cask :: Cask ) . returns ( [ T ::Array [ T ::Hash [ Symbol , T . any ( Symbol , String ) ] ] , T ::Boolean ] ) }
156
+ def runners ( cask :)
157
+ filtered_runners = filter_runners ( cask )
196
158
197
- macos_version_found = cask_content . match? ( /\b MacOS\s *\. version\b /m )
198
159
filtered_macos_found = filtered_runners . keys . any? do |runner |
199
- (
200
- macos_version_found &&
201
- cask_content . include? ( runner [ :symbol ] . inspect )
202
- ) || cask_content . include? ( "on_#{ runner [ :symbol ] } " )
160
+ cask . to_hash_with_variations [ "variations" ] . key? ( T . must ( runner [ :symbol ] ) . to_sym )
203
161
end
204
162
205
163
if filtered_macos_found
@@ -254,11 +212,9 @@ def generate_matrix(tap, labels: [], cask_names: [], skip_install: false, new_ca
254
212
cask_files_to_check . flat_map do |path |
255
213
cask_token = path . basename ( ".rb" )
256
214
257
- audit_args = [ "--online" ]
215
+ audit_args = [ "--online" , "--signing" ]
258
216
audit_args << "--new" if T . must ( changed_files [ :added_files ] ) . include? ( path ) || new_cask
259
217
260
- audit_args << "--signing"
261
-
262
218
audit_exceptions = [ ]
263
219
264
220
audit_exceptions << %w[ homepage_https_availability ] if labels . include? ( "ci-skip-homepage" )
@@ -279,10 +235,10 @@ def generate_matrix(tap, labels: [], cask_names: [], skip_install: false, new_ca
279
235
280
236
audit_args << "--except" << audit_exceptions . join ( "," ) if audit_exceptions . any?
281
237
282
- cask_content = path . read
238
+ cask = Cask :: CaskLoader . load ( path . expand_path )
283
239
284
- runners , multi_os = runners ( cask_content :)
285
- runners . product ( architectures ( cask_content :) ) . filter_map do |runner , arch |
240
+ runners , multi_os = runners ( cask :)
241
+ runners . product ( architectures ( cask :) ) . filter_map do |runner , arch |
286
242
native_runner_arch = arch == runner . fetch ( :arch )
287
243
# If it's just a single OS test then we can just use the two real arch runners.
288
244
next if !native_runner_arch && !multi_os
0 commit comments