Skip to content

Commit 0a7c79f

Browse files
aristathclaude
andcommitted
Wrap file-level coverage changes in collapsible details
The file-level coverage changes (new files, improved, degraded) are now wrapped in a <details> element to keep the PR comment concise by default. The summary shows the total number of files with changes, and users can expand to see the full breakdown. Example: "📊 File-level Coverage Changes (42 files)" 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
1 parent 2eabc57 commit 0a7c79f

1 file changed

Lines changed: 30 additions & 15 deletions

File tree

.github/workflows/code-coverage.yml

Lines changed: 30 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -321,49 +321,64 @@ jobs:
321321
322322
// Build detailed changes section
323323
let detailedChanges = '';
324+
let hasChanges = false;
325+
326+
// Build inner content for details
327+
let changesContent = '';
324328
325329
// New files with coverage
326330
if (changesJson.new_files && changesJson.new_files.length > 0) {
327-
detailedChanges += '\n### 🆕 New Files\n\n';
328-
detailedChanges += '| Class | Coverage | Lines |\n';
329-
detailedChanges += '|-------|----------|-------|\n';
331+
hasChanges = true;
332+
changesContent += '\n### 🆕 New Files\n\n';
333+
changesContent += '| Class | Coverage | Lines |\n';
334+
changesContent += '|-------|----------|-------|\n';
330335
for (const file of changesJson.new_files.slice(0, 10)) { // Limit to 10
331336
const emoji = file.coverage >= 80 ? '🟢' : file.coverage >= 60 ? '🟡' : '🔴';
332-
detailedChanges += `| ${emoji} \`${file.class}\` | ${file.coverage.toFixed(2)}% | ${file.lines} |\n`;
337+
changesContent += `| ${emoji} \`${file.class}\` | ${file.coverage.toFixed(2)}% | ${file.lines} |\n`;
333338
}
334339
if (changesJson.new_files.length > 10) {
335-
detailedChanges += `\n_... and ${changesJson.new_files.length - 10} more new files_\n`;
340+
changesContent += `\n_... and ${changesJson.new_files.length - 10} more new files_\n`;
336341
}
337342
}
338343
339344
// Improved coverage
340345
if (changesJson.improved && changesJson.improved.length > 0) {
341-
detailedChanges += '\n### 📈 Coverage Improved\n\n';
342-
detailedChanges += '| Class | Before | After | Change |\n';
343-
detailedChanges += '|-------|--------|-------|--------|\n';
346+
hasChanges = true;
347+
changesContent += '\n### 📈 Coverage Improved\n\n';
348+
changesContent += '| Class | Before | After | Change |\n';
349+
changesContent += '|-------|--------|-------|--------|\n';
344350
const sortedImproved = changesJson.improved.sort((a, b) => b.diff - a.diff);
345351
for (const file of sortedImproved.slice(0, 10)) { // Limit to 10
346-
detailedChanges += `| \`${file.class}\` | ${file.old.toFixed(2)}% | ${file.new.toFixed(2)}% | +${file.diff.toFixed(2)}% |\n`;
352+
changesContent += `| \`${file.class}\` | ${file.old.toFixed(2)}% | ${file.new.toFixed(2)}% | +${file.diff.toFixed(2)}% |\n`;
347353
}
348354
if (changesJson.improved.length > 10) {
349-
detailedChanges += `\n_... and ${changesJson.improved.length - 10} more improvements_\n`;
355+
changesContent += `\n_... and ${changesJson.improved.length - 10} more improvements_\n`;
350356
}
351357
}
352358
353359
// Degraded coverage
354360
if (changesJson.degraded && changesJson.degraded.length > 0) {
355-
detailedChanges += '\n### 📉 Coverage Decreased\n\n';
356-
detailedChanges += '| Class | Before | After | Change |\n';
357-
detailedChanges += '|-------|--------|-------|--------|\n';
361+
hasChanges = true;
362+
changesContent += '\n### 📉 Coverage Decreased\n\n';
363+
changesContent += '| Class | Before | After | Change |\n';
364+
changesContent += '|-------|--------|-------|--------|\n';
358365
const sortedDegraded = changesJson.degraded.sort((a, b) => a.diff - b.diff);
359366
for (const file of sortedDegraded.slice(0, 10)) { // Limit to 10
360-
detailedChanges += `| \`${file.class}\` | ${file.old.toFixed(2)}% | ${file.new.toFixed(2)}% | ${file.diff.toFixed(2)}% |\n`;
367+
changesContent += `| \`${file.class}\` | ${file.old.toFixed(2)}% | ${file.new.toFixed(2)}% | ${file.diff.toFixed(2)}% |\n`;
361368
}
362369
if (changesJson.degraded.length > 10) {
363-
detailedChanges += `\n_... and ${changesJson.degraded.length - 10} more decreases_\n`;
370+
changesContent += `\n_... and ${changesJson.degraded.length - 10} more decreases_\n`;
364371
}
365372
}
366373
374+
// Wrap in collapsible details if there are changes
375+
if (hasChanges) {
376+
const totalFiles = (changesJson.new_files?.length || 0) +
377+
(changesJson.improved?.length || 0) +
378+
(changesJson.degraded?.length || 0);
379+
detailedChanges = `\n<details>\n<summary>📊 File-level Coverage Changes (${totalFiles} files)</summary>\n${changesContent}\n</details>\n`;
380+
}
381+
367382
const comment = `## ${status} Code Coverage Report
368383
369384
| Metric | Value |

0 commit comments

Comments
 (0)