191 lines
No EOL
6.1 KiB
Markdown
191 lines
No EOL
6.1 KiB
Markdown
# Stock Bot Coverage CLI
|
|
|
|
A custom coverage tool for the Stock Bot monorepo that provides advanced coverage reporting with support for excluding directories (like `dist/`) and beautiful reporting options.
|
|
|
|
## Features
|
|
|
|
- 🚫 **Exclusion Support**: Exclude directories like `dist/`, `node_modules/`, and test files from coverage
|
|
- 📊 **Multiple Reporters**: Terminal, HTML, JSON, and Markdown reports
|
|
- 🎯 **Threshold Enforcement**: Set and enforce coverage thresholds
|
|
- 📦 **Monorepo Support**: Works seamlessly with workspace packages
|
|
- 🎨 **Beautiful Reports**: Interactive HTML reports and colored terminal output
|
|
- 🔧 **Configurable**: Use `.coveragerc.json` or CLI flags
|
|
|
|
## Installation
|
|
|
|
The tool is already part of the Stock Bot monorepo. Just run:
|
|
|
|
```bash
|
|
bun install
|
|
```
|
|
|
|
## Usage
|
|
|
|
### Basic Usage
|
|
|
|
Run coverage for all packages:
|
|
|
|
```bash
|
|
bun run coverage
|
|
```
|
|
|
|
### Generate HTML Report
|
|
|
|
```bash
|
|
bun run coverage:html
|
|
```
|
|
|
|
### CI Mode
|
|
|
|
Generate markdown and JSON reports, fail if below threshold:
|
|
|
|
```bash
|
|
bun run coverage:ci
|
|
```
|
|
|
|
### Run for Specific Packages
|
|
|
|
```bash
|
|
bun run coverage --packages core utils
|
|
```
|
|
|
|
### Custom Exclusions
|
|
|
|
```bash
|
|
bun run coverage --exclude "**/dist/**" "**/generated/**" "**/vendor/**"
|
|
```
|
|
|
|
### Set Thresholds
|
|
|
|
```bash
|
|
bun run coverage --threshold 85 --threshold-functions 80
|
|
```
|
|
|
|
## Configuration
|
|
|
|
Create a `.coveragerc.json` file in your project root:
|
|
|
|
```json
|
|
{
|
|
"exclude": [
|
|
"**/node_modules/**",
|
|
"**/dist/**",
|
|
"**/build/**",
|
|
"**/coverage/**",
|
|
"**/*.test.ts",
|
|
"**/*.test.js",
|
|
"**/test/**",
|
|
"**/tests/**"
|
|
],
|
|
"reporters": ["terminal", "html"],
|
|
"thresholds": {
|
|
"lines": 80,
|
|
"functions": 80,
|
|
"branches": 80,
|
|
"statements": 80
|
|
},
|
|
"outputDir": "coverage"
|
|
}
|
|
```
|
|
|
|
Or create one with:
|
|
|
|
```bash
|
|
bun run coverage init
|
|
```
|
|
|
|
## Reporters
|
|
|
|
### Terminal Reporter
|
|
|
|
Beautiful colored output in your terminal:
|
|
|
|
```
|
|
═══════════════════════════════════════════════════════════
|
|
Stock Bot Coverage Report
|
|
═══════════════════════════════════════════════════════════
|
|
|
|
┌────────────────┬──────────┬──────────┬──────────┬────────────┐
|
|
│ Package │ Lines │ Functions│ Branches │ Statements │
|
|
├────────────────┼──────────┼──────────┼──────────┼────────────┤
|
|
│ @stock-bot/engine│ 85.3% ✓ │ 82.1% ✓ │ 79.2% ⚠ │ 84.7% ✓ │
|
|
│ @stock-bot/utils│ 92.1% ✓ │ 90.5% ✓ │ 88.3% ✓ │ 91.8% ✓ │
|
|
├────────────────┼──────────┼──────────┼──────────┼────────────┤
|
|
│ Overall │ 88.7% ✓ │ 86.3% ✓ │ 83.8% ✓ │ 88.3% ✓ │
|
|
└────────────────┴──────────┴──────────┴──────────┴────────────┘
|
|
|
|
✓ 15 packages meet coverage thresholds
|
|
⚠ 2 packages below threshold
|
|
```
|
|
|
|
### HTML Reporter
|
|
|
|
Interactive HTML report with:
|
|
- Package breakdown
|
|
- File-level coverage
|
|
- Beautiful charts and visualizations
|
|
- Responsive design
|
|
|
|
### Markdown Reporter
|
|
|
|
Perfect for CI/CD comments on pull requests:
|
|
- Summary tables
|
|
- Package details
|
|
- Threshold status
|
|
- File breakdowns
|
|
|
|
### JSON Reporter
|
|
|
|
Machine-readable format for:
|
|
- Custom tooling integration
|
|
- Historical tracking
|
|
- CI/CD pipelines
|
|
|
|
## CLI Options
|
|
|
|
| Option | Description |
|
|
|--------|-------------|
|
|
| `-p, --packages <packages...>` | Run coverage for specific packages |
|
|
| `-e, --exclude <patterns...>` | Glob patterns to exclude from coverage |
|
|
| `-i, --include <patterns...>` | Glob patterns to include in coverage |
|
|
| `-r, --reporters <reporters...>` | Coverage reporters to use |
|
|
| `-t, --threshold <number>` | Set coverage threshold for all metrics |
|
|
| `--threshold-lines <number>` | Set line coverage threshold |
|
|
| `--threshold-functions <number>` | Set function coverage threshold |
|
|
| `--threshold-branches <number>` | Set branch coverage threshold |
|
|
| `--threshold-statements <number>` | Set statement coverage threshold |
|
|
| `-o, --output-dir <path>` | Output directory for reports |
|
|
| `-c, --config <path>` | Path to coverage config file |
|
|
| `--fail-under` | Exit with non-zero code if below threshold |
|
|
|
|
## How It Works
|
|
|
|
1. **Test Execution**: Runs `bun test` for each package
|
|
2. **Data Collection**: Currently simulates coverage data based on test results (Bun's coverage feature is not yet fully implemented)
|
|
3. **Filtering**: Applies exclusion patterns to remove unwanted files
|
|
4. **Processing**: Merges coverage data across packages
|
|
5. **Reporting**: Generates reports in requested formats
|
|
|
|
> **Note**: This tool currently generates simulated coverage data based on test results because Bun's `--coverage` flag doesn't yet produce LCOV output. Once Bun's coverage feature is fully implemented, the tool will be updated to use actual coverage data.
|
|
|
|
## Why This Tool?
|
|
|
|
Bun's built-in coverage tool lacks several features needed for large monorepos:
|
|
- No way to exclude directories like `dist/`
|
|
- Limited reporting options
|
|
- No per-package thresholds
|
|
- Basic terminal output
|
|
|
|
This tool addresses these limitations while maintaining compatibility with Bun's test runner.
|
|
|
|
## Contributing
|
|
|
|
The coverage tool is located in `tools/coverage-cli/`. To work on it:
|
|
|
|
1. Make changes in `tools/coverage-cli/src/`
|
|
2. Test with `bun run coverage`
|
|
3. Build with `bun build tools/coverage-cli/src/index.ts`
|
|
|
|
## License
|
|
|
|
Part of the Stock Bot Trading Platform - MIT License |