@@ -119,6 +119,49 @@ def compare_builds(merged_data):
119
119
return result
120
120
121
121
122
+ def forecast_tests (merged_data , kbuild , checkout ):
123
+ """
124
+ Forecast tests for a given kbuild and checkout.
125
+ """
126
+ tests = []
127
+ jobs = merged_data .get ("scheduler" , [])
128
+ for job in jobs :
129
+ kind = job .get ("event" , {}).get ("kind" )
130
+ if kind != "kbuild" :
131
+ continue
132
+ if job .get ("event" , {}).get ("name" ) != kbuild :
133
+ continue
134
+ scheduler_rules = job .get ("rules" , [])
135
+ job_name = job .get ("job" )
136
+ job_data = merged_data .get ("jobs" , {}).get (job_name , {})
137
+ job_rules = job_data .get ("rules" , [])
138
+ # we might have rules in scheduler entries too
139
+ scheduler_rules = job .get ("rules" , [])
140
+ node = {
141
+ "kind" : "kbuild" ,
142
+ "data" : {
143
+ "kernel_revision" : {
144
+ "tree" : checkout .get ("tree" ),
145
+ "branch" : checkout .get ("branch" ),
146
+ "version" : {
147
+ "version" : 6 ,
148
+ "patchlevel" : 16 ,
149
+ "extra" : "-rc3-973-gb7d1bbd97f77"
150
+ },
151
+ }
152
+ },
153
+ }
154
+ if not validate_rules (node , job_rules ) or not validate_rules (node , scheduler_rules ):
155
+ continue
156
+ # runtime/name in scheduler
157
+ runtime = job .get ("runtime" , {}).get ("name" )
158
+ platforms = job .get ("platforms" , [])
159
+ test_name = f"{ job_name } ({ runtime } ) { platforms } "
160
+ tests .append (test_name )
161
+
162
+ return tests
163
+
164
+
122
165
# pylint: disable=too-many-branches disable=too-many-locals
123
166
def do_forecast (merged_data ):
124
167
"""
@@ -172,7 +215,12 @@ def do_forecast(merged_data):
172
215
}
173
216
if not validate_rules (node , job_rules ) or not validate_rules (node , scheduler_rules ):
174
217
continue
175
- checkout ["kbuilds" ].append (job_name )
218
+ tests = forecast_tests (merged_data , job_name , checkout )
219
+ kbuild = {
220
+ "name" : job_name ,
221
+ "tests" : tests
222
+ }
223
+ checkout ["kbuilds" ].append (kbuild )
176
224
checkout ["kbuilds_identical" ] = compare_builds (merged_data )
177
225
178
226
# print the results
@@ -185,7 +233,10 @@ def do_forecast(merged_data):
185
233
print (f" Number of builds: { num_builds } " )
186
234
print (" Builds:" )
187
235
for build in checkout ["kbuilds" ]:
188
- print (f" - { build } " )
236
+ print (f" - { build ['name' ]} " )
237
+ print (f" Number of tests: { len (build .get ('tests' , []))} " )
238
+ for test in build .get ('tests' , []):
239
+ print (f" - { test } " )
189
240
else :
190
241
print (" No builds found for this checkout" )
191
242
0 commit comments