Generate JSON output for GitHub Actions artifacts.
(self)
| 495 | return "\n".join(lines) |
| 496 | |
| 497 | def generate_json(self) -> dict[str, Any]: |
| 498 | """Generate JSON output for GitHub Actions artifacts.""" |
| 499 | total_time = self.get_total_time() |
| 500 | phases = self.get_phase_times() |
| 501 | fastled_headers = self.get_fastled_headers() |
| 502 | top_ops = self.get_top_operations(20) |
| 503 | |
| 504 | warnings: list[str] = [] |
| 505 | |
| 506 | # Check for slow headers |
| 507 | for name, time_ms in fastled_headers: |
| 508 | if time_ms > 150: |
| 509 | warnings.append(f"Header {name} exceeds 150ms ({time_ms:.1f}ms)") |
| 510 | elif time_ms > 50: |
| 511 | warnings.append(f"Header {name} exceeds 50ms ({time_ms:.1f}ms)") |
| 512 | |
| 513 | # Check template instantiation |
| 514 | template_time = phases.get("Templates", 0) |
| 515 | if total_time > 0 and template_time / total_time > 0.15: |
| 516 | warnings.append( |
| 517 | f"Template instantiation time is high ({template_time / total_time * 100:.1f}%)" |
| 518 | ) |
| 519 | |
| 520 | return { |
| 521 | "total_time": total_time, |
| 522 | "phases": phases, |
| 523 | "top_headers": [ |
| 524 | {"name": name, "time": time} for name, time in fastled_headers[:20] |
| 525 | ], |
| 526 | "top_operations": [ |
| 527 | {"type": op_type, "detail": detail, "time": time} |
| 528 | for op_type, detail, time in top_ops |
| 529 | ], |
| 530 | "warnings": warnings, |
| 531 | "timestamp": datetime.now().isoformat(), |
| 532 | } |
| 533 | |
| 534 | |
| 535 | def compile_with_trace( |
no test coverage detected