Skip to content

Commit 0c471c8

Browse files
committed
Feat: integrate regression analysis into combined report pipeline
Update combine_all_reports.py to orchestrate baseline comparison: - Add 10 new CLI arguments for baseline data: --baseline-pytest-dir, --baseline-gtest-dir, --baseline-pytest-run-number, etc. - Collect baseline pytest and gtest reports from baseline directories - Call analyze_regressions() to compare current vs baseline results - Pass regression_data to both HTML and Excel report generators - Add baseline metadata (run numbers, dates) to report metadata - Deduplicate system info entries by hostname using a seen-set Signed-off-by: Wilczynski, Andrzej <andrzej.wilczynski@intel.com>
1 parent 12d1795 commit 0c471c8

File tree

1 file changed

+79
-7
lines changed

1 file changed

+79
-7
lines changed

.github/scripts/combine_all_reports.py

Lines changed: 79 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
parse_pytest_html,
1717
parse_system_info,
1818
)
19+
from report_generators.regression_analyzer import analyze_regressions
1920

2021

2122
def collect_pytest_reports(pytest_dir):
@@ -61,22 +62,25 @@ def collect_gtest_reports(gtest_dir):
6162

6263

6364
def collect_system_info(system_info_dir):
64-
"""Collect and parse system information files."""
65-
system_info_list = []
66-
65+
"""Collect and parse system information files, deduplicated by hostname."""
6766
if not system_info_dir or not Path(system_info_dir).exists():
68-
return system_info_list
67+
return []
6968

7069
info_files = list(Path(system_info_dir).rglob("system_info.txt"))
7170
print(f"Found {len(info_files)} system info files")
7271

72+
seen = {} # hostname -> info dict
7373
for info_file in info_files:
7474
try:
7575
info = parse_system_info(info_file)
76-
system_info_list.append(info)
76+
hostname = info.get("hostname", "unknown")
77+
if hostname not in seen:
78+
seen[hostname] = info
7779
except Exception as e:
7880
print(f"Error parsing {info_file}: {e}")
7981

82+
system_info_list = list(seen.values())
83+
print(f"Unique hosts: {len(system_info_list)}")
8084
return system_info_list
8185

8286

@@ -93,6 +97,16 @@ def build_test_metadata(args):
9397
"gtest_run_number": args.gtest_run_number,
9498
"gtest_branch": args.gtest_branch,
9599
"gtest_run_url": args.gtest_run_url,
100+
"baseline_pytest_run_id": args.baseline_pytest_run_id,
101+
"baseline_pytest_run_date": args.baseline_pytest_run_date,
102+
"baseline_pytest_run_number": args.baseline_pytest_run_number,
103+
"baseline_pytest_branch": args.baseline_pytest_branch,
104+
"baseline_pytest_run_url": args.baseline_pytest_run_url,
105+
"baseline_gtest_run_id": args.baseline_gtest_run_id,
106+
"baseline_gtest_run_date": args.baseline_gtest_run_date,
107+
"baseline_gtest_run_number": args.baseline_gtest_run_number,
108+
"baseline_gtest_branch": args.baseline_gtest_branch,
109+
"baseline_gtest_run_url": args.baseline_gtest_run_url,
96110
}
97111

98112

@@ -123,6 +137,28 @@ def main():
123137
parser.add_argument("--gtest-branch", help="GTest workflow branch")
124138
parser.add_argument("--gtest-run-url", help="GTest workflow run URL")
125139

140+
# Baseline (regression comparison) arguments
141+
parser.add_argument(
142+
"--baseline-pytest-dir",
143+
help="Directory containing baseline pytest HTML reports for regression comparison",
144+
)
145+
parser.add_argument(
146+
"--baseline-gtest-dir",
147+
help="Directory containing baseline gtest log files for regression comparison",
148+
)
149+
parser.add_argument("--baseline-pytest-run-id", help="Baseline pytest run ID")
150+
parser.add_argument("--baseline-pytest-run-date", help="Baseline pytest run date")
151+
parser.add_argument(
152+
"--baseline-pytest-run-number", help="Baseline pytest run number"
153+
)
154+
parser.add_argument("--baseline-pytest-branch", help="Baseline pytest branch")
155+
parser.add_argument("--baseline-pytest-run-url", help="Baseline pytest run URL")
156+
parser.add_argument("--baseline-gtest-run-id", help="Baseline gtest run ID")
157+
parser.add_argument("--baseline-gtest-run-date", help="Baseline gtest run date")
158+
parser.add_argument("--baseline-gtest-run-number", help="Baseline gtest run number")
159+
parser.add_argument("--baseline-gtest-branch", help="Baseline gtest branch")
160+
parser.add_argument("--baseline-gtest-run-url", help="Baseline gtest run URL")
161+
126162
args = parser.parse_args()
127163

128164
# Validate input directories
@@ -152,15 +188,51 @@ def main():
152188
print("Error: No test data found in either pytest or gtest directories")
153189
sys.exit(1)
154190

191+
# Collect baseline data for regression comparison
192+
regression_data = None
193+
baseline_pytest_dir = args.baseline_pytest_dir
194+
baseline_gtest_dir = args.baseline_gtest_dir
195+
196+
if baseline_pytest_dir or baseline_gtest_dir:
197+
baseline_pytest = []
198+
baseline_gtest = []
199+
if baseline_pytest_dir and Path(baseline_pytest_dir).exists():
200+
print("Collecting baseline pytest reports...")
201+
baseline_pytest = collect_pytest_reports(baseline_pytest_dir)
202+
if baseline_gtest_dir and Path(baseline_gtest_dir).exists():
203+
print("Collecting baseline gtest reports...")
204+
baseline_gtest = collect_gtest_reports(baseline_gtest_dir)
205+
206+
if baseline_pytest or baseline_gtest:
207+
print("Analyzing regressions...")
208+
regression_data = analyze_regressions(
209+
pytest_data, gtest_data, baseline_pytest, baseline_gtest
210+
)
211+
print(
212+
f" Regressions: {len(regression_data['regressions'])}, "
213+
f"Fixes: {len(regression_data['fixes'])}, "
214+
f"New failures: {len(regression_data['new_failures'])}"
215+
)
216+
155217
# Generate reports
156218
print("\nGenerating Excel report...")
157219
generate_excel_report(
158-
pytest_data, gtest_data, args.output_excel, system_info_list, test_metadata
220+
pytest_data,
221+
gtest_data,
222+
args.output_excel,
223+
system_info_list,
224+
test_metadata,
225+
regression_data,
159226
)
160227

161228
print("Generating HTML report...")
162229
generate_html_report(
163-
pytest_data, gtest_data, args.output_html, system_info_list, test_metadata
230+
pytest_data,
231+
gtest_data,
232+
args.output_html,
233+
system_info_list,
234+
test_metadata,
235+
regression_data,
164236
)
165237

166238
# Print summary

0 commit comments

Comments
 (0)