9595 pattern : report-*
9696 merge-multiple : true
9797
98- - name : Generate matrix summary
98+ - name : Generate detailed report
9999 run : |
100100 {
101101 echo "## Kernel Conformance Matrix"
@@ -119,6 +119,79 @@ jobs:
119119 echo "| $kernel | $tier1/$tier1_total | $tier2/$tier2_total | $tier3/$tier3_total | $tier4/$tier4_total | $total/$total_tests |"
120120 fi
121121 done
122+
123+ echo ""
124+ echo "---"
125+ echo ""
126+
127+ # Detailed failure breakdown per kernel
128+ for report in reports/*-report.json; do
129+ if [ -f "$report" ]; then
130+ kernel=$(basename "$report" -report.json)
131+ impl=$(jq -r '.implementation // "unknown"' "$report" 2>/dev/null)
132+ lang=$(jq -r '.language // "unknown"' "$report" 2>/dev/null)
133+ protocol=$(jq -r '.protocol_version // "unknown"' "$report" 2>/dev/null)
134+
135+ failures=$(jq '[.results[] | select(.result.status != "pass" and .result.status != "unsupported")] | length' "$report" 2>/dev/null || echo "0")
136+ skipped=$(jq '[.results[] | select(.result.status == "unsupported")] | length' "$report" 2>/dev/null || echo "0")
137+
138+ if [ "$failures" != "0" ] || [ "$skipped" != "0" ]; then
139+ echo "<details>"
140+ echo "<summary><strong>$kernel</strong> ($impl) - $failures failures, $skipped skipped</summary>"
141+ echo ""
142+ echo "**Language:** $lang | **Protocol:** $protocol"
143+ echo ""
144+
145+ if [ "$failures" != "0" ]; then
146+ echo "#### Failures"
147+ echo ""
148+ echo "| Test | Message Type | Likely Source | Reason |"
149+ echo "|------|--------------|---------------|--------|"
150+ jq -r '.results[] | select(.result.status == "fail" or .result.status == "timeout") | "| \(.name) | `\(.message_type)` | \(.result.kind // "unknown") | \(.result.reason // "timeout") |"' "$report" 2>/dev/null
151+ echo ""
152+ fi
153+
154+ if [ "$skipped" != "0" ]; then
155+ echo "#### Skipped (Not Implemented)"
156+ echo ""
157+ jq -r '.results[] | select(.result.status == "unsupported") | "- **\(.name)**: \(.description)"' "$report" 2>/dev/null
158+ echo ""
159+ fi
160+
161+ echo "</details>"
162+ echo ""
163+ fi
164+ fi
165+ done
166+
167+ # Cross-kernel comparison for failing tests
168+ echo "---"
169+ echo ""
170+ echo "### Test Results by Message Type"
171+ echo ""
172+ echo "| Test | Message Type |$(for r in reports/*-report.json; do kernel=$(basename "$r" -report.json); echo -n " $kernel |"; done)"
173+ echo "|------|--------------|$(for r in reports/*-report.json; do echo -n "--------|"; done)"
174+
175+ # Get all unique test names
176+ all_tests=$(jq -r '.results[].name' reports/*-report.json 2>/dev/null | sort -u)
177+ for test in $all_tests; do
178+ msg_type=$(jq -r --arg t "$test" '.results[] | select(.name == $t) | .message_type' reports/*-report.json 2>/dev/null | head -1)
179+ echo -n "| $test | \`$msg_type\` |"
180+ for report in reports/*-report.json; do
181+ if [ -f "$report" ]; then
182+ status=$(jq -r --arg t "$test" '.results[] | select(.name == $t) | .result.status' "$report" 2>/dev/null)
183+ case "$status" in
184+ pass) echo -n " ✅ |" ;;
185+ fail) echo -n " ❌ |" ;;
186+ unsupported) echo -n " ⏭️ |" ;;
187+ timeout) echo -n " ⏱️ |" ;;
188+ partial_pass) echo -n " ⚠️ |" ;;
189+ *) echo -n " - |" ;;
190+ esac
191+ fi
192+ done
193+ echo ""
194+ done
122195 } | tee -a $GITHUB_STEP_SUMMARY > summary.md
123196
124197 - name : Comment on PR
0 commit comments