{"id":48290847,"url":"https://github.com/mustafaautomation/qa-dash","last_synced_at":"2026-04-04T23:05:46.624Z","repository":{"id":343010271,"uuid":"1165016720","full_name":"mustafaautomation/qa-dash","owner":"mustafaautomation","description":"Unified QA dashboard — aggregates Playwright, Jest, Newman, k6, JUnit results into a single quality view with health scoring","archived":false,"fork":false,"pushed_at":"2026-04-04T16:12:02.000Z","size":146,"stargazers_count":0,"open_issues_count":2,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-04T19:16:26.046Z","etag":null,"topics":["dashboard","health-score","jest","junit","k6","newman","nodejs","playwright","qa","test-results","testing","typescript"],"latest_commit_sha":null,"homepage":"https://quvantic.com","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mustafaautomation.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"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":"2026-02-23T18:28:05.000Z","updated_at":"2026-04-04T16:12:10.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/mustafaautomation/qa-dash","commit_stats":null,"previous_names":["mustafaautomation/qa-dash"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/mustafaautomation/qa-dash","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mustafaautomation%2Fqa-dash","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mustafaautomation%2Fqa-dash/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mustafaautomation%2Fqa-dash/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mustafaautomation%2Fqa-dash/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mustafaautomation","download_url":"https://codeload.github.com/mustafaautomation/qa-dash/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mustafaautomation%2Fqa-dash/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31418288,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-04T20:09:54.854Z","status":"ssl_error","status_checked_at":"2026-04-04T20:09:44.350Z","response_time":60,"last_error":"SSL_read: 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":["dashboard","health-score","jest","junit","k6","newman","nodejs","playwright","qa","test-results","testing","typescript"],"created_at":"2026-04-04T23:05:45.975Z","updated_at":"2026-04-04T23:05:46.601Z","avatar_url":"https://github.com/mustafaautomation.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# QA Dash\n\n[![CI](https://github.com/mustafaautomation/qa-dash/actions/workflows/ci.yml/badge.svg)](https://github.com/mustafaautomation/qa-dash/actions)\n[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)\n[![Node.js](https://img.shields.io/badge/Node.js-18+-339933.svg?logo=node.js\u0026logoColor=white)](https://nodejs.org)\n[![TypeScript](https://img.shields.io/badge/TypeScript-strict-3178c6.svg?logo=typescript\u0026logoColor=white)](https://www.typescriptlang.org)\n[![Docker](https://img.shields.io/badge/Docker-Ready-2496ED.svg?logo=docker\u0026logoColor=white)](Dockerfile)\n\nUnified QA dashboard that aggregates test results from Playwright, Jest/Vitest, Newman, k6, JUnit, and custom frameworks into a single quality view.\n\nQA teams juggle 5-10 tools with no single quality view. QA Dash auto-detects your test result format, computes a health score, and generates a dashboard with SVG charts.\n\n## Features\n\n- **6 framework parsers** with auto-detection: Playwright, Jest/Vitest, Newman (Postman), k6, JUnit XML, Custom JSON\n- **Health score** with letter grade (A-F) weighted across: pass rate (40%), framework minimums (20%), trend direction (20%), error absence (20%)\n- **SVG charts** (zero deps): pie, bar, line, sparkline\n- **Multiple reporters**: Console (colorized), JSON, HTML (dark dashboard), GitHub (PR comment)\n- **Preview server**: Local HTTP server with auto-reload\n- **Historical trends** via JSON storage\n\n## Quick Start\n\n```bash\nnpm install qa-dash\n\n# Initialize config\nnpx qa-dash init\n\n# Ingest test results (auto-detects framework)\nnpx qa-dash ingest playwright-results.json jest-results.json newman-results.json\n\n# Generate HTML dashboard\nnpx qa-dash ingest *.json --reporter html,console\n\n# Start preview server\nnpx qa-dash serve\n```\n\n## CLI Commands\n\n### `ingest \u003cfiles...\u003e`\n\nIngest test result files and generate dashboard.\n\n```bash\nnpx qa-dash ingest results.json [more-results...] [options]\n\nOptions:\n  -c, --config \u003cpath\u003e     Path to config file\n  -r, --reporter \u003ctype\u003e   console, json, html, github (comma-separated)\n  -o, --output \u003cdir\u003e      Output directory (default: .qa-dash/reports)\n  -v, --verbose           Enable debug logging\n```\n\n### `report`\n\nGenerate report from stored historical data.\n\n### `serve`\n\nStart local dashboard preview with auto-reload.\n\n```bash\nnpx qa-dash serve --port 3939\n```\n\n### `trends`\n\nShow quality trends over time.\n\n### `init`\n\nCreate default configuration file.\n\n## Supported Formats\n\n| Framework | File Format | Auto-Detection |\n|-----------|-------------|----------------|\n| Playwright | JSON reporter output | `suites` + `config`/`stats` |\n| Jest/Vitest | `--json` reporter output | `numTotalTests` + `testResults` |\n| Newman | JSON reporter output | `collection` + `run` |\n| k6 | `--summary-export` JSON | `metrics` + `root_group`/`http_reqs` |\n| JUnit | XML | `\u003ctestsuites\u003e` or `\u003ctestsuite\u003e` |\n| Custom | JSON with `qa_dash: true` | `qa_dash` flag + `tests` array |\n\n## Health Score\n\n```\nGrade A: \u003e= 90%\nGrade B: \u003e= 80%\nGrade C: \u003e= 70%\nGrade D: \u003e= 60%\nGrade F: \u003c 60%\n```\n\nWeighted formula:\n- **Pass Rate** (40%): Overall test pass rate\n- **Framework Minimums** (20%): Penalizes any framework \u003c 70%\n- **Trend Direction** (20%): Compares recent vs older pass rates\n- **Error Absence** (20%): Lower failure rate = better\n\n## Programmatic Usage\n\n```typescript\nimport { Aggregator, DEFAULT_CONFIG } from 'qa-dash';\n\nconst aggregator = new Aggregator(DEFAULT_CONFIG);\naggregator.init();\naggregator.ingest(['./results/playwright.json', './results/jest.json']);\n\nconst dashboard = aggregator.getDashboard();\nconsole.log(`Health: ${dashboard.healthScore.grade} (${dashboard.healthScore.score})`);\nconsole.log(`Total: ${dashboard.totals.total}, Passed: ${dashboard.totals.passed}`);\n\naggregator.close();\n```\n\n## License\n\nMIT\n\n---\nBuilt by [Quvantic](https://quvantic.com)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmustafaautomation%2Fqa-dash","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmustafaautomation%2Fqa-dash","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmustafaautomation%2Fqa-dash/lists"}