diff --git a/json_to_md.py b/json_to_md.py index 8ac3d013..bbe48b6d 100644 --- a/json_to_md.py +++ b/json_to_md.py @@ -70,38 +70,50 @@ def json_to_md_nested(json_path, md_path, allure_dir=None): f.write("\n") - from collections import defaultdict - if "collectors" in data: f.write("## 📚 Collectés\n") - # Grouper par dossier principal (ex: ci-reports/allure → groupe = 'ci-reports/allure') grouped = defaultdict(list) for collector in data["collectors"]: nodeid = collector.get("nodeid", "unknown") path = nodeid.split("::")[0] - parts = path.split("/") - if len(parts) >= 2: - group_key = f"{parts[0]}/{parts[1]}" - else: - group_key = parts[0] - grouped[group_key].append(collector) + main_folder = path.split("/")[0] if "/" in path else path + grouped[main_folder].append(collector) - # Trier les groupes par le second niveau du chemin (ex: allure, coverage) - sorted_keys = sorted(grouped.keys(), key=lambda x: x.split("/")[1] if "/" in x else x) - - for group in sorted_keys: - collectors = grouped[group] + for folder, collectors in grouped.items(): + # Outcome global du dossier has_fail = any(c.get("outcome") != "passed" for c in collectors) - emoji = "✅" if not has_fail else "❌" - f.write(f"
\n{emoji} {group}\n\n") + folder_emoji = "✅" if not has_fail else "❌" + f.write(f"
\n{folder_emoji} {folder} ({len(collectors)} tests)\n\n") + + # Résumé des outputs (optionnel : uniquement pour les failed ou all) + outputs = [] for collector in collectors: outcome = collector.get("outcome", "unknown") - icon = "✅" if outcome == "passed" else "❌" nodeid = collector.get("nodeid", "unknown") short_node = nodeid.split("[")[0] - f.write(f"
\n{icon} {short_node}\n\n") + results = collector.get("result", []) + if outcome != "passed" and results: + outputs.append(f"### ❌ {short_node}\n```\n" + "\n".join( + f"{k}: {v}" if isinstance(item, dict) else str(item) + for item in results + for k, v in item.items() if isinstance(item, dict) + ) + "\n```") + + if outputs: + f.write("### 🧾 Résumé des erreurs ou résultats\n\n") + for out in outputs: + f.write(out + "\n") + + # Détail complet de tous les tests (triés) + collectors_sorted = sorted(collectors, key=lambda c: c.get("nodeid", "").split("[")[0]) + for collector in collectors_sorted: + outcome = collector.get("outcome", "unknown") + emoji = "✅" if outcome == "passed" else "❌" + nodeid = collector.get("nodeid", "unknown") + short_node = nodeid.split("[")[0] + f.write(f"
\n{emoji} {short_node}\n\n") f.write(f"- **outcome:** `{outcome}`\n") results = collector.get("result", []) if results: