COVERAGE SYSTEM - nself-org/cli GitHub Wiki

nself Coverage System

Complete documentation of nself's test coverage infrastructure for achieving and maintaining 100% coverage.

Overview

nself has implemented a comprehensive test coverage system to track, report, and enforce 100% test coverage across the entire codebase.

Current Status: โœ… 100% Coverage Achieved

System Architecture

Components

Coverage System
โ”œโ”€โ”€ Collection (collect-coverage.sh)
โ”‚   โ”œโ”€โ”€ Runs all test suites
โ”‚   โ”œโ”€โ”€ Uses kcov for bash coverage
โ”‚   โ””โ”€โ”€ Aggregates coverage data
โ”‚
โ”œโ”€โ”€ Reporting (generate-coverage-report.sh)
โ”‚   โ”œโ”€โ”€ Text reports
โ”‚   โ”œโ”€โ”€ HTML reports
โ”‚   โ”œโ”€โ”€ JSON data
โ”‚   โ””โ”€โ”€ SVG badges
โ”‚
โ”œโ”€โ”€ Verification (verify-coverage.sh)
โ”‚   โ”œโ”€โ”€ Enforces requirements
โ”‚   โ”œโ”€โ”€ Fails CI if below threshold
โ”‚   โ””โ”€โ”€ Shows gap analysis
โ”‚
โ”œโ”€โ”€ History Tracking (track-coverage-history.sh)
โ”‚   โ”œโ”€โ”€ Stores coverage per commit
โ”‚   โ”œโ”€โ”€ Generates trend charts
โ”‚   โ””โ”€โ”€ Tracks progress over time
โ”‚
โ””โ”€โ”€ Diff Analysis (coverage-diff.sh)
    โ”œโ”€โ”€ Compares branches
    โ”œโ”€โ”€ Shows PR impact
    โ””โ”€โ”€ Identifies coverage changes

File Structure

nself/
โ”œโ”€โ”€ src/scripts/coverage/                 # Coverage scripts
โ”‚   โ”œโ”€โ”€ collect-coverage.sh              # Main collection script
โ”‚   โ”œโ”€โ”€ generate-coverage-report.sh      # Report generator
โ”‚   โ”œโ”€โ”€ verify-coverage.sh               # Requirement enforcer
โ”‚   โ”œโ”€โ”€ track-coverage-history.sh        # History tracker
โ”‚   โ”œโ”€โ”€ coverage-diff.sh                 # Diff analyzer
โ”‚   โ”œโ”€โ”€ install-coverage-tools.sh        # Tool installer
โ”‚   โ”œโ”€โ”€ pre-commit-hook.sh               # Git hook template
โ”‚   โ”œโ”€โ”€ README.md                        # Script documentation
โ”‚   โ””โ”€โ”€ QUICK-REFERENCE.md               # Quick commands
โ”‚
โ”œโ”€โ”€ coverage/                            # Generated coverage data
โ”‚   โ”œโ”€โ”€ data/                            # Raw coverage from tests
โ”‚   โ”‚   โ”œโ”€โ”€ unit/                        # Unit test coverage
โ”‚   โ”‚   โ”œโ”€โ”€ integration/                 # Integration coverage
โ”‚   โ”‚   โ”œโ”€โ”€ security/                    # Security coverage
โ”‚   โ”‚   โ””โ”€โ”€ e2e/                         # E2E coverage
โ”‚   โ”œโ”€โ”€ reports/                         # Generated reports
โ”‚   โ”‚   โ”œโ”€โ”€ coverage.txt                 # Text report
โ”‚   โ”‚   โ”œโ”€โ”€ coverage.json                # JSON data
โ”‚   โ”‚   โ”œโ”€โ”€ badge.svg                    # Badge
โ”‚   โ”‚   โ”œโ”€โ”€ summary.txt                  # Quick summary
โ”‚   โ”‚   โ”œโ”€โ”€ trend.txt                    # Trend report
โ”‚   โ”‚   โ””โ”€โ”€ html/                        # HTML reports
โ”‚   โ”‚       โ””โ”€โ”€ index.html               # Main HTML report
โ”‚   โ””โ”€โ”€ .coverage-history.json           # Historical data
โ”‚
โ”œโ”€โ”€ docs/development/                    # Coverage documentation
โ”‚   โ”œโ”€โ”€ COVERAGE-GUIDE.md                # Complete guide
โ”‚   โ”œโ”€โ”€ COVERAGE-DASHBOARD.md            # Live dashboard
โ”‚   โ””โ”€โ”€ COVERAGE-SYSTEM.md               # This file
โ”‚
โ””โ”€โ”€ .github/workflows/
    โ””โ”€โ”€ coverage.yml                     # CI/CD workflow

Coverage Metrics

Tracked Metrics

  1. Line Coverage: Percentage of code lines executed by tests
  2. Branch Coverage: Percentage of decision branches taken
  3. Function Coverage: Percentage of functions called
  4. Test Count: Total number of tests
  5. Pass Rate: Percentage of tests passing
  6. Execution Time: Test suite duration

Requirements

Metric Required Warning Action
Line Coverage 100.0% - CI fails โŒ
Branch Coverage 95.0% < 95% Warning only โš ๏ธ
Function Coverage 100.0% < 100% Warning only โš ๏ธ

Workflow

Standard Workflow

# 1. Collect coverage from all test suites
./src/scripts/coverage/collect-coverage.sh

# 2. Generate reports in multiple formats
./src/scripts/coverage/generate-coverage-report.sh

# 3. Track in history for trend analysis
./src/scripts/coverage/track-coverage-history.sh track

# 4. Verify requirements (fails if < 100%)
./src/scripts/coverage/verify-coverage.sh

Developer Workflow

# Make code changes
vim src/lib/auth/oauth.sh

# Run relevant tests
./src/tests/run-init-tests.sh

# Check coverage
./src/scripts/coverage/collect-coverage.sh
./src/scripts/coverage/verify-coverage.sh

# If coverage < 100%, add tests
vim src/tests/unit/test-oauth.sh

# Verify again
./src/scripts/coverage/collect-coverage.sh
./src/scripts/coverage/verify-coverage.sh

# Commit when coverage is good
git commit -am "feat: add oauth feature with tests"

CI/CD Workflow

  1. On Push/PR: Coverage workflow runs automatically
  2. Collection: All test suites run with coverage tracking
  3. Reporting: Reports generated and uploaded as artifacts
  4. Verification: CI fails if coverage < 100%
  5. PR Comment: Coverage summary posted to PR
  6. Badge Update: Coverage badge updated on main branch
  7. History: Coverage entry added to history

Report Types

1. Text Report

Terminal-friendly summary with:

  • Overall coverage percentage
  • Line/branch/function breakdown
  • Progress bar visualization
  • Test statistics
  • Coverage by module
  • Gap analysis

Location: coverage/reports/coverage.txt

Usage:

cat coverage/reports/coverage.txt

2. HTML Report

Interactive browser-based report with:

  • File browser with coverage percentages
  • Line-by-line coverage highlighting
  • Branch coverage visualization
  • Test execution counts
  • Uncovered code identification

Location: coverage/reports/html/index.html

Usage:

open coverage/reports/html/index.html

3. JSON Report

Machine-readable data for:

  • Automation
  • Integration with other tools
  • Custom reporting
  • API consumption

Location: coverage/reports/coverage.json

Usage:

jq '.overall' coverage/reports/coverage.json

4. Coverage Badge

SVG badge showing:

  • Current coverage percentage
  • Color-coded (green = 100%, yellow = 80-99%, red < 80%)

Location: coverage/reports/badge.svg

Usage:

![Coverage](https://img.shields.io/badge/coverage-100%25-brightgreen)

CI/CD Integration

GitHub Actions

Workflow: .github/workflows/coverage.yml

Triggers:

  • Push to main or develop
  • Pull requests
  • Manual workflow dispatch

Jobs:

  1. coverage - Main coverage job

    • Install coverage tools
    • Run tests with coverage
    • Generate reports
    • Verify requirements
    • Upload to Codecov
    • Upload artifacts
    • Comment on PR
    • Update badge
  2. coverage-summary - Summary job

    • Download artifacts
    • Display summary
    • Report final status

PR Integration

Pull requests automatically receive:

  1. Coverage Comment:

    ## ๐Ÿ“Š Coverage Report
    
    **Overall Coverage:** 100.0%
    **Target:** 100%
    **Gap:** 0.0%
    
    ๐ŸŽ‰ **100% Coverage Achieved!**
  2. Coverage Diff:

    • Shows coverage change vs base branch
    • Identifies new uncovered code
    • Prevents coverage decreases
  3. Status Check:

    • โœ… Pass if coverage >= 100%
    • โŒ Fail if coverage < 100%

Pre-Commit Hook

Optional git hook to verify coverage before commit.

Installation:

cp src/scripts/coverage/pre-commit-hook.sh .git/hooks/pre-commit
chmod +x .git/hooks/pre-commit

Behavior:

  • Runs coverage verification
  • Blocks commit if coverage < 100%
  • Can be bypassed with SKIP_COVERAGE_CHECK=true

History Tracking

Coverage History

Coverage data is tracked over time in .coverage-history.json:

{
  "version": "1.0",
  "created": "2026-01-31T21:45:00Z",
  "commits": [
    {
      "sha": "af3ad41",
      "date": "2026-01-31",
      "coverage": 100.0,
      "tests": 700
    },
    {
      "sha": "5184aa5",
      "date": "2026-01-30",
      "coverage": 65.0,
      "tests": 445
    }
  ]
}

Trend Analysis

View coverage trends:

# Show trend chart
./src/scripts/coverage/track-coverage-history.sh show

# Generate trend report
./src/scripts/coverage/track-coverage-history.sh report

Output:

Coverage Trend:

Commit    Date           Coverage   Change
--------------------------------------------------
af3ad41   2026-01-31     100.0%     +35.0%
5184aa5   2026-01-30      65.0%      +5.0%
b0af0e0   2026-01-29      60.0%      +0.0%

Coverage Tools

Required Tools

  1. Bash 3.2+ - Shell execution (built-in)
  2. bc - Mathematical calculations (built-in on most systems)

Optional Tools (Enhanced Functionality)

  1. kcov - Bash code coverage collection

    # Ubuntu/Debian
    sudo apt-get install kcov
    
    # macOS
    brew install kcov
  2. lcov - Coverage data merging

    sudo apt-get install lcov  # Linux
    brew install lcov          # macOS
  3. jq - JSON processing

    sudo apt-get install jq    # Linux
    brew install jq            # macOS

Tool Installation

Quick install all tools:

./src/scripts/coverage/install-coverage-tools.sh

Fallback Mode

If coverage tools aren't available:

  • Scripts use manual instrumentation
  • Coverage still works (slower)
  • Reduced accuracy but functional

Best Practices

1. Test Before Commit

# Always verify coverage before committing
./src/scripts/coverage/verify-coverage.sh

2. View Uncovered Code

# Generate HTML report to see what's uncovered
./src/scripts/coverage/generate-coverage-report.sh
open coverage/reports/html/index.html

# Red lines = uncovered code
# Write tests for red lines

3. Maintain 100%

# Coverage should never decrease
# Add tests when adding code
# Review coverage diff in PRs
./src/scripts/coverage/coverage-diff.sh diff main HEAD

4. Use Pre-Commit Hook

# Install hook to catch coverage issues early
cp src/scripts/coverage/pre-commit-hook.sh .git/hooks/pre-commit
chmod +x .git/hooks/pre-commit

5. Review Coverage Dashboard

# Regularly check dashboard for gaps
cat docs/development/COVERAGE-DASHBOARD.md

Troubleshooting

Common Issues

Issue Cause Solution
kcov not found Tool not installed Run install-coverage-tools.sh
No coverage data Collection not run Run collect-coverage.sh first
Coverage < 100% Missing tests View HTML report, add tests
Test failures Code errors Fix tests before collecting coverage
Wrong permissions File mode issues Check script permissions (755)

Debug Mode

Run scripts with debug output:

bash -x ./src/scripts/coverage/collect-coverage.sh

Skip Verification

Emergency bypass (NOT recommended):

SKIP_COVERAGE_CHECK=true git commit

Maintenance

Regular Tasks

  1. Weekly: Review coverage dashboard
  2. Per PR: Check coverage diff
  3. Per Release: Verify 100% coverage
  4. Monthly: Review trend history

Updating Scripts

When modifying coverage scripts:

  1. Test on Ubuntu and macOS
  2. Ensure backward compatibility
  3. Update documentation
  4. Test CI/CD integration
  5. Update quick reference

Resources

Documentation

Scripts

  • collect-coverage.sh - Collection
  • generate-coverage-report.sh - Reporting
  • verify-coverage.sh - Verification
  • track-coverage-history.sh - History
  • coverage-diff.sh - Diff analysis

External Tools

Future Enhancements

Planned Features

  • Mutation testing integration
  • Performance benchmarking coverage
  • Load testing coverage
  • Chaos engineering coverage
  • Coverage heat maps
  • Interactive trend visualization
  • Coverage prediction models
  • Automated coverage improvement suggestions

Summary

nself's coverage system provides:

โœ… Comprehensive tracking across all test suites โœ… Multiple report formats (text, HTML, JSON, badge) โœ… CI/CD integration with automatic verification โœ… Historical tracking for trend analysis โœ… PR integration with coverage diffs โœ… Developer tools for local verification โœ… 100% coverage achieved and maintained

Goal: Maintain 100% test coverage to ensure reliability and quality.

Status: ๐ŸŽ‰ 100% Coverage Achieved! โœ…

โš ๏ธ **GitHub.com Fallback** โš ๏ธ