{"id":28959356,"url":"https://github.com/kannel-outis/coverops","last_synced_at":"2026-05-16T18:09:38.181Z","repository":{"id":277738298,"uuid":"933302178","full_name":"kannel-outis/CoverOps","owner":"kannel-outis","description":"CoverOps is a powerful, cross-platform CLI tool that helps you track test coverage on new or modified code. By combining Git diffs with LCOV or JSON coverage reports, it generates insightful HTML reports that highlight what’s tested — and what’s not.","archived":false,"fork":false,"pushed_at":"2025-05-26T17:55:30.000Z","size":18338,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-24T00:02:11.960Z","etag":null,"topics":["cli","coverage-report","dart","dartlang","git","lcov","lcov-file-parser","lcov-report"],"latest_commit_sha":null,"homepage":"","language":"Dart","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kannel-outis.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":null,"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}},"created_at":"2025-02-15T16:28:34.000Z","updated_at":"2025-05-26T17:55:34.000Z","dependencies_parsed_at":"2025-02-15T19:31:12.592Z","dependency_job_id":"d25e58b8-fc30-4410-a3ed-5e1b65519b3b","html_url":"https://github.com/kannel-outis/CoverOps","commit_stats":null,"previous_names":["kannel-outis/coverops"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/kannel-outis/CoverOps","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kannel-outis%2FCoverOps","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kannel-outis%2FCoverOps/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kannel-outis%2FCoverOps/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kannel-outis%2FCoverOps/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kannel-outis","download_url":"https://codeload.github.com/kannel-outis/CoverOps/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kannel-outis%2FCoverOps/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":274129839,"owners_count":25227266,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-08T02:00:09.813Z","response_time":121,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["cli","coverage-report","dart","dartlang","git","lcov","lcov-file-parser","lcov-report"],"created_at":"2025-06-24T00:01:42.475Z","updated_at":"2026-05-16T18:09:38.150Z","avatar_url":"https://github.com/kannel-outis.png","language":"Dart","funding_links":[],"categories":[],"sub_categories":[],"readme":"# CoverOps 🚀\n\n**Spot untested code like a pro with CoverOps — your go-to coverage companion for any project.**\n\nCoverOps is a powerful, cross-platform CLI tool that helps you track test coverage on new or modified code. By combining Git diffs with LCOV or JSON coverage reports, it generates insightful **HTML**, **JSON**, and **console** reports that highlight what’s tested — and what’s not. Whether you’re building in Dart, Python, JavaScript, or anything else, CoverOps keeps your code accountable and clean.\n\n---\n\n## Why CoverOps?\n\n* ✅ **Track New Code** – Pinpoints untested lines in changed or newly added code.\n* 🔎 **Cross-language Coverage** – Supports any project using Git with LCOV or JSON coverage files.\n* 🌐 **Multiple Report Formats** – Generates **HTML**, **JSON**, and **console** summaries.\n* ⚡ **Lightweight \u0026 Fast** – Built with performance in mind.\n* 🧩 **Plug \u0026 Play** – Use it directly or integrate into your CI pipeline.\n* 🛠️ **Configurable** – Use a JSON config file to simplify complex commands.\n\n---\n\n## 📸 What It Looks Like\n\nCoverOps highlights what’s tested — and what’s not — in your changed code.\n\n![Screenshot 2025-05-17 at 9 30 28 PM](https://github.com/user-attachments/assets/16cca79b-dbd1-4847-beca-175f0aa6be4a) \n\u003cvideo src='https://github.com/user-attachments/assets/54bfbeb0-9de4-4607-875e-ea3c9073bb3f' width=180/\u003e\n\n\u003e ✅ **Green** = Covered lines in changed code\n\u003e ❌ **Red** = Missed lines in changed code\n\u003e 📄 **Grey** = Unchanged or ignored lines\n\n### Clear, actionable insights:\n\n* Track test coverage of **only new or modified code**.\n* Works across languages (Dart, Python, JS, etc.).\n* Easy-to-read, linkable **HTML reports**, machine-readable **JSON**, and quick **console** summaries.\n* Supports multiple output formats: `html`, `json`, `console` — or even **all three at once**.\n* Use a **JSON config file** for easy setup and reuse.\n\n---\n\n## Table of Contents\n\n* [Quick Start](#quick-start)\n* [What You Need](#what-you-need)\n* [Installation](#installation)\n* [Commands](#commands)\n* [Report Types](#report-types)\n* [Usage Example](#usage-example)\n* [Script It Up](#script-it-up)\n* [Contributing](#contributing)\n* [License](#license)\n* [Get in Touch](#get-in-touch)\n\n---\n\n## Quick Start\n\n```bash\n# Clone the repo\ngit clone https://github.com/kannel-outis/CoverOps.git\ncd CoverOps\n\n# Run coverage analysis\ncover report --lcov=coverage/lcov.info --target-branch=main --source-branch=HEAD --output=coverage --report-format=html,console\n\n# Or use a config file\ncover report --config=config/coverops.json\n\n# Open the HTML report\nopen file://$(pwd)/coverage/lcov_html/index.html\n```\n\n---\n\n## What You Need\n\n* **Git**: Required to detect changed files.\n* **Coverage File**: LCOV (`lcov.info`) or JSON (`coverage-final.json`) from tools like `lcov`, `coverage.py`, or `jest`.\n* **Optional – Dart SDK**: Only if you want to run it via `dart run`. Not required when using platform executables in [`bin/`](https://github.com/kannel-outis/CoverOps/tree/main/bin).\n\n---\n\n## Installation\n\n### 🔧 Option 1: Use Prebuilt Executable (No Dart Required)\n\nIf your `bin/` folder already contains the appropriate `cover` binary for your platform, just run:\n\n```bash\n./install.sh # or (bash ./install.sh or zsh ./install.sh) to specify shell\n```\n\nThis will:\n\n* Ensure the `bin/` folder exists,\n* Add it to your shell’s PATH (e.g., `.bashrc`, `.zshrc`, `.bash_profile`),\n* Let you run `cover` from anywhere in your terminal.\n\nAfter that, reload your shell:\n\n```bash\nsource ~/.bashrc   # or ~/.zshrc or ~/.bash_profile\n```\n\nNow you can run:\n\n```bash\ncover --help # or cover -h\n```\n\n---\n\n### 🛠 Option 2: Build Executable (Requires Dart SDK)\n\nWant to build from source? Run:\n\n```bash\n./install.sh --build\n```\n\nThis will:\n\n* Detect your OS (Linux, macOS, or Windows),\n* Build the `cover` binary using Dart,\n* Set up your `bin/` directory for easy access.\n\nMake sure the Dart SDK is installed and in your `PATH`. Get it here: [https://dart.dev/get-dart](https://dart.dev/get-dart)\n\n---\n\n## Commands\n\n### `git`\n\nAnalyze code changes between branches.\n\n```bash\ncover git --target-branch=main --source-branch=feature-branch --output-dir=coverage\n```\n\n### `lcov`\n\nProcess LCOV or JSON coverage files and match against Git diff data.\n\n```bash\ncover lcov --lcov=coverage/lcov.info --gitParserFile=coverage/.gitparser.json --output=coverage\n```\n\n### `report`\n\nRuns both `git` and `lcov` commands in one go.\n\n```bash\ncover report --lcov=coverage/lcov.info --target-branch=main --source-branch=feature-branch --output=coverage\n```\n\nYou can also pass a config file instead of CLI arguments:\n\n```bash\ncover report --config=config/coverops.json\n```\n\n---\n\n## Report Types\n\nCoverOps supports **multiple report formats**, which can be combined with a comma-separated list.\n\n| Format    | Description                                     |\n| --------- | ----------------------------------------------- |\n| `html`    | Fully styled, browsable report with annotations |\n| `json`    | Structured, CI/CD-ready output                  |\n| `console` | Human-readable summary printed to stdout        |\n\n### Examples:\n\n```bash\n# Single format\ncover report --report-format=html\n\n# Multiple formats\ncover report --report-format=html,console,json\n```\n\nDefault format is `html` if none is specified.\n\n---\n\n## Configuration File Support\n\nYou can simplify command-line usage by placing arguments in a config file:\n\n```bash\ncover report --config=config/coverops.json\n```\n\n### Example `coverops.json`:\n\n```json\n{\n  \"lcov\": \"coverage/lcov.info\"\n  \"targetBranch\": \"main\"\n  \"sourceBranch\": \"HEAD\"\n  \"output\": \"coverage\"\n  \"reportFormat\": [\"html\",\"console\"]\n}\n```\n\nUse this in scripts or CI for consistency and clarity.\n\n---\n\n## Usage Example\n\nFor different project types:\n\n### Flutter\n\n```bash\nflutter test --coverage\nlcov --remove coverage/lcov.info '*.g.dart' '*.part.dart' -o coverage/lcov.info\ncover report --lcov=coverage/lcov.info --target-branch=main --output=coverage --report-format=html,console\n```\n\n### Python\n\n```bash\npytest --cov=src --cov-report=lcov:coverage/lcov.info\ncover report --lcov=coverage/lcov.info --target-branch=main --output=coverage --report-format=html\n```\n\n### JavaScript\n\n```bash\njest --coverage --coverageReporters=json\ncover report --lcov=coverage/coverage-final.json --target-branch=main --output=coverage --report-format=console\n```\n\n---\n\n## Script It Up\n\nWant to automate the workflow? Here's a generic script example for any project type:\n\n```bash\n#!/bin/bash\n# run_coverops.sh\n\n# Optional: Ensure coverage directory is ignored\nitem=\"coverage/\"\nif [ ! -f .gitignore ] || ! grep -q \"^$item\" .gitignore; then\n  echo \"$item\" \u003e\u003e .gitignore\n  echo \"Added '$item' to .gitignore\"\nfi\n\n# Run your own coverage command here\necho \"Run your test suite and generate LCOV/JSON coverage...\"\n# Example: pytest --cov=src --cov-report=lcov:coverage/lcov.info\n\n# Option 1: CLI flags\ncover report --lcov=coverage/lcov.info --target-branch=main --source-branch=HEAD --output=coverage --report-format=html,console,json\n\n# Option 2: Config file\n# cover report --config=config/coverops.yaml\n\n# Open the HTML report\nreport_path=\"coverage/lcov_html/index.html\"\nif [ -f \"$report_path\" ]; then\n  echo \"Coverage report generated at: file://$PWD/$report_path\"\n  read -p \"Open report in browser? (y/n): \" choice\n  if [[ \"$choice\" == \"y\" ]]; then\n    open \"file://$PWD/$report_path\"\n  fi\nelse\n  echo \"Report not found at $report_path\"\nfi\n```\n\nMake executable:\n\n```bash\nchmod +x run_coverops.sh\n./run_coverops.sh\n```\n\n---\n\n## Contributing\n\nWe welcome contributions of all kinds!\n\n1. Fork the repo\n2. Create a feature branch\n3. Use [Conventional Commits](https://www.conventionalcommits.org/)\n4. Test your changes\n5. Submit a pull request\n\n---\n\n## License\n\nCoverOps is licensed under the [MIT License](LICENSE).\n\n---\n\n## Get in Touch\n\n* [GitHub Issues](https://github.com/kannel-outis/CoverOps/issues)\n* Maintainer: [kannel-outis](https://github.com/kannel-outis)\n\n---\n\n**CoverOps helps you keep your codebase covered, clean, and deployment-ready.** 💪\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkannel-outis%2Fcoverops","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkannel-outis%2Fcoverops","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkannel-outis%2Fcoverops/lists"}