Skip to content

Commit 6af51d6

Browse files
committed
kci: Add tests in forecasting
Signed-off-by: Denys Fedoryshchenko <denys.f@collabora.com>
1 parent f82aa04 commit 6af51d6

File tree

1 file changed

+53
-2
lines changed

1 file changed

+53
-2
lines changed

kernelci/cli/config.py

Lines changed: 53 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,49 @@ def compare_builds(merged_data):
119119
return result
120120

121121

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+
122165
# pylint: disable=too-many-branches disable=too-many-locals
123166
def do_forecast(merged_data):
124167
"""
@@ -172,7 +215,12 @@ def do_forecast(merged_data):
172215
}
173216
if not validate_rules(node, job_rules) or not validate_rules(node, scheduler_rules):
174217
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)
176224
checkout["kbuilds_identical"] = compare_builds(merged_data)
177225

178226
# print the results
@@ -185,7 +233,10 @@ def do_forecast(merged_data):
185233
print(f" Number of builds: {num_builds}")
186234
print(" Builds:")
187235
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}")
189240
else:
190241
print(" No builds found for this checkout")
191242

0 commit comments

Comments
 (0)