{"id":37147666,"url":"https://github.com/chapati-systems/covpeek","last_synced_at":"2026-01-14T17:25:23.792Z","repository":{"id":324306709,"uuid":"1091239792","full_name":"Chapati-Systems/covpeek","owner":"Chapati-Systems","description":"Cross-language Coverage Report CLI Parser in Go","archived":false,"fork":false,"pushed_at":"2025-12-24T20:40:51.000Z","size":110,"stargazers_count":7,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-12-26T10:43:03.860Z","etag":null,"topics":["coverage","coverage-report","go","go-coverage","golang","lcov","lcov-file-parser","lcov-report","python-coverage"],"latest_commit_sha":null,"homepage":"https://chapati.systems/covpeek/","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Chapati-Systems.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-11-06T18:40:45.000Z","updated_at":"2025-12-24T20:40:52.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/Chapati-Systems/covpeek","commit_stats":null,"previous_names":["chapati-systems/covpeek"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/Chapati-Systems/covpeek","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Chapati-Systems%2Fcovpeek","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Chapati-Systems%2Fcovpeek/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Chapati-Systems%2Fcovpeek/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Chapati-Systems%2Fcovpeek/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Chapati-Systems","download_url":"https://codeload.github.com/Chapati-Systems/covpeek/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Chapati-Systems%2Fcovpeek/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28427482,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T16:38:47.836Z","status":"ssl_error","status_checked_at":"2026-01-14T16:34:59.695Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["coverage","coverage-report","go","go-coverage","golang","lcov","lcov-file-parser","lcov-report","python-coverage"],"created_at":"2026-01-14T17:25:23.082Z","updated_at":"2026-01-14T17:25:23.784Z","avatar_url":"https://github.com/Chapati-Systems.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# covpeek\n\n![Coverage](coverage-badge.svg)\n\nCross-language Coverage Report CLI Parser in Go\n\nParse coverage reports from Rust, Go, TypeScript, JavaScript, and Python with one unified tool.\n\n## Demo\n\n[![asciicast](https://asciinema.org/a/754207.svg)](https://asciinema.org/a/754207)\n\n## Features\n\n- **Multi-language Support**: Parses coverage files from:\n  - **Rust**: LCOV format (`.lcov`, `.info`) generated by grcov or tarpaulin\n  - **Go**: Native coverage format (`.out`)\n  - **TypeScript/JavaScript**: LCOV format (`lcov.info`) generated by nyc (Istanbul)\n  - **Python**: Cobertura XML and JSON formats\n  \n- **Auto-detection**: Automatically detects coverage file format by extension or content\n- **Multiple Output Formats**: Table (default), JSON, CSV\n- **Interactive TUI**: Explore coverage data with a terminal user interface\n- **Robust Parsing**: Handles malformed lines gracefully with warnings\n- **High Test Coverage**: \u003e80% test coverage for all parser modules\n- **Direct Upload**: Upload coverage reports directly to SonarQube and Codecov platforms\n- **CI Integration**: Check coverage thresholds for continuous integration\n- **Coverage Diff**: Compare coverage between git commits\n\n## Install\n\n### From Source\n\n```bash\ngit clone https://github.com/Chapati-Systems/covpeek.git\ncd covpeek\ngo build -o covpeek ./cmd/covpeek\n```\n\n### Using Go Install\n\n```bash\ngo install github.com/Chapati-Systems/covpeek/cmd/covpeek@latest\n```\n\n### Pre-built Binaries\n\nDownload from [GitHub Releases](https://github.com/Chapati-Systems/covpeek/releases).\n\n## Usage\n\n### Parse a Coverage File\n\nParse a coverage file and display summary table:\n\n    covpeek --file coverage.lcov\n\nParse with different output formats:\n\n    # Table format (default) - sorted by coverage descending\n    covpeek --file coverage.lcov --output table\n    \n    # JSON format for programmatic use\n    covpeek --file lcov.info --output json\n    \n    # CSV format for spreadsheet import\n    covpeek --file coverage.out --output csv\n\nLaunch interactive TUI for exploring coverage data:\n\n    covpeek --file coverage.lcov --tui\n\nForce a specific format (bypass auto-detection):\n\n    covpeek --file coverage.txt --format lcov\n    covpeek --file coverage.dat --format go\n\nFilter files below coverage threshold:\n\n    covpeek --file coverage.lcov --below 80\n\n### Generate Coverage Badge\n\nGenerate an SVG badge for embedding in README or dashboards:\n\n    covpeek badge --file coverage.lcov --output coverage-badge.svg\n\nAuto-detect coverage file:\n\n    covpeek badge --output coverage-badge.svg\n\nCustomize label and style:\n\n    covpeek badge --file coverage.out --label \"test coverage\" --style plastic --output badge.svg\n\nSupported styles: `flat`, `plastic`, `flat-square`\n\n### Upload Coverage Reports\n\nUpload parsed coverage reports directly to popular platforms like SonarQube and Codecov:\n\n    # Upload to SonarQube\n    covpeek upload --to sonarqube --project-key myproject --file coverage/lcov.info --token $SONAR_TOKEN\n\n    # Upload to Codecov\n    covpeek upload --to codecov --repo-token $CODECOV_TOKEN\n\nAuto-detect coverage file:\n\n    covpeek upload --to codecov --repo-token $CODECOV_TOKEN\n\nCustom SonarQube server URL:\n\n    covpeek upload --to sonarqube --project-key myproj --url https://sonar.mycompany.com/ --token $SONAR_TOKEN\n\n### CI Integration\n\nCheck total coverage against minimum threshold:\n\n    covpeek ci --min 80\n\n### Compare Coverage Between Commits\n\nCompare coverage reports from two git commits:\n\n    covpeek diff --file coverage/lcov.info --commit-a HEAD~5 --commit-b HEAD\n\n### Generate Coverage Badge\n\nGenerate an SVG badge for embedding in README or dashboards:\n\n    covpeek badge --file coverage.lcov --output coverage-badge.svg\n\nAuto-detect coverage file:\n\n    covpeek badge --output coverage-badge.svg\n\nCustomize label and style:\n\n    covpeek badge --file coverage.out --label \"test coverage\" --style plastic --output badge.svg\n\nSupported styles: `flat`, `plastic`, `flat-square`\n\n### Upload Coverage Reports\n\nUpload parsed coverage reports directly to popular platforms like SonarQube and Codecov:\n\n    # Upload to SonarQube\n    covpeek upload --to sonarqube --project-key myproject --file coverage/lcov.info --token $SONAR_TOKEN\n\n    # Upload to Codecov\n    covpeek upload --to codecov --repo-token $CODECOV_TOKEN\n\nAuto-detect coverage file:\n\n    covpeek upload --to codecov --repo-token $CODECOV_TOKEN\n\nCustom SonarQube server URL:\n\n    covpeek upload --to sonarqube --project-key myproj --url https://sonar.mycompany.com/ --token $SONAR_TOKEN\n\n### Examples\n\nParse Rust coverage (generated by grcov):\n\n    cargo tarpaulin --out Lcov\n    covpeek --file lcov.info\n\nParse Go coverage:\n\n    go test -coverprofile=coverage.out ./...\n    covpeek --file coverage.out\n\nParse TypeScript/JavaScript coverage (generated by nyc):\n\n    nyc --reporter=lcov npm test\n    covpeek --file coverage/lcov.info\n\nParse Python coverage (Cobertura XML):\n\n    coverage xml\n    covpeek --file coverage.xml\n\nParse Python coverage (JSON):\n\n    coverage json\n    covpeek --file coverage.json\n\n## Supported Coverage Formats\n\n### LCOV Format\n\nUsed by Rust (grcov, tarpaulin) and TypeScript/JavaScript (nyc):\n\n- File extensions: `.lcov`, `.info`, `lcov.info`\n- Records: TN, SF, FN, FNDA, DA, LH, LF, end_of_record\n- Branch coverage (BRF, BRH, BRDA) is supported but optional\n\n### Go Coverage Format\n\nNative Go coverage format:\n\n- File extension: `.out`\n- Format: `mode: set|count|atomic` followed by coverage entries\n- Example: `file.go:5.10,7.2 1 1`\n\n### Python Coverage Formats\n\nCobertura XML and JSON formats generated by the `coverage` package:\n\n- XML: `coverage.xml`\n- JSON: `coverage.json`\n\n## Development\n\nInstall pre-commit hooks:\n\n    pre-commit install\n\nRun program:\n\n    go run ./cmd/covpeek\n\nRun tests:\n\n    go test ./...\n\nRun tests with coverage:\n\n    go test -coverprofile=coverage.out ./...\n    go tool cover -html=coverage.out\n\n## Build\n\n### Build for current platform\n\n    go build -o covpeek ./cmd/covpeek\n\n### Build for Linux\n\nSee https://freshman.tech/snippets/go/cross-compile-go-programs/\n\n    GOOS=linux GOARCH=amd64 go build -o covpeek ./cmd/covpeek\n\n### Build for macOS\n\n    GOOS=darwin GOARCH=arm64 go build -o covpeek ./cmd/covpeek\n\n## Project Structure\n\n```\ncovpeek/\n├── cmd/covpeek/          # CLI application entry point\n│   ├── main.go\n│   ├── root.go\n│   ├── parse.go\n│   ├── upload.go\n│   ├── ci.go\n│   ├── badge.go\n│   ├── diff.go\n│   └── tui.go\n├── pkg/\n│   ├── models/           # Data structures\n│   │   └── coverage.go\n│   ├── parser/           # Coverage file parsers\n│   │   ├── lcov.go       # LCOV format parser\n│   │   ├── gocover.go    # Go coverage parser\n│   │   ├── pycover_xml.go # Python XML parser\n│   │   └── pycover_json.go # Python JSON parser\n│   └── uploader/         # Platform uploaders\n│       └── uploader.go\n├── internal/\n│   └── detector/         # Format auto-detection\n│       ├── detector.go\n│       └── detector_test.go\n└── testdata/             # Sample coverage files for testing\n    ├── coverage.json\n    ├── coverage.xml\n    ├── sample.lcov\n    ├── sample.out\n    └── typescript.info\n```\n\n## Testing\n\nAll parser modules maintain \u003e80% test coverage with comprehensive test cases including:\n\n- Valid coverage files\n- Malformed/incomplete entries\n- Edge cases (empty files, missing fields)\n- Multiple files\n- Different coverage modes\n\nRun tests:\n\n    go test -v ./...\n\n## License\n\nLicensed under the AGPL-3.0 license\n\nSee LICENSE file for details.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchapati-systems%2Fcovpeek","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fchapati-systems%2Fcovpeek","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchapati-systems%2Fcovpeek/lists"}