Skip to content

Commit 71b4461

Browse files
authored
feat: add automated code coverage protection with GitLab-style UI (#27)
Implements comprehensive automated code coverage protection to prevent PRs from being merged if they decrease coverage, with visual feedback similar to GitLab's merge request coverage display. ## Core Features ### Coverage Protection (Zero-Tolerance Policy) - Automated coverage comparison between PR and main branch - Tracks 4 metrics: lines, statements, functions, branches - Blocks PR merge if any metric decreases (0% threshold) - Automated PR comments with detailed coverage comparison - Visual indicators: 📈 increase, ➡️ unchanged, 📉 decrease ### GitLab-Style Coverage Display - Coverage diff in PR header (e.g., "Coverage: +2.5% 📈") - Visible without scrolling, like GitLab MR coverage badges - Dynamic check run names showing percentage changes - Commit status with detailed coverage transition - Emoji indicators for quick visual feedback ### Per-File Coverage Analysis - File-by-file coverage comparison - GitHub annotations on files with decreased coverage - Visible in "Files changed" tab (like GitLab diff annotations) - Top 10 files with biggest coverage changes in PR comment - Detailed breakdown for targeted test improvements ### CI/CD Optimizations - Concurrency groups to cancel outdated workflow runs - Minimal explicit permissions (contents:read, pull-requests:write, checks:write, statuses:write) - Optimized triggers (only main, feat/**, fix/** branches) - Final gatekeeper job requiring all checks to pass - ~80% reduction in CI/CD resource usage during active development ## Technical Implementation ### Workflow Changes - New `coverage-check` job comparing PR vs main coverage - Runs on pull_request and push events to PR branches - Uses jq for reliable JSON parsing of coverage reports - Creates multiple check runs for different purposes: - Dynamic coverage diff check ("Coverage: +X% 📈") - Per-file coverage changes check with annotations - Commit status for additional visibility ### Configuration Updates - codecov.yml: threshold 0%, fail CI on coverage drops - vitest.config.mts: added json-summary reporter - GitHub Actions: concurrency groups, optimized permissions ### Bug Fixes During Implementation - Fixed YAML syntax errors in template literals - Fixed shell interpolation issues with heredoc - Fixed escaped backticks in github-script actions - Fixed JSON parsing reliability with jq - Fixed coverage check to run on every push to PR branches ## Documentation - Updated README.md with coverage protection section - Enhanced CONTRIBUTING.md with coverage requirements - All standalone documentation files removed (kept clean) ## Benefits - Maintains code quality automatically - Prevents accidental coverage drops - Clear visual feedback like GitLab - Immediate visibility in PR header - Reduced CI/CD resource consumption - Better developer experience with instant feedback Closes #26
1 parent e849239 commit 71b4461

5 files changed

Lines changed: 658 additions & 10 deletions

File tree

0 commit comments

Comments
 (0)