Zero-config test reporting for GitHub Actions
Drop in one line. Get readable test summaries, PR comments, and inline annotations on every run — for JUnit XML and CTRF JSON.
- uses: testglance/action@v1
if: always()Open source · MIT · Available on GitHub Marketplace
Have your AI agent install it
Works with any stack. Paste into Claude Code, Cursor, Windsurf, etc.
Or set it up manually
Your test framework needs to emit JUnit XML or CTRF JSON. Pick your stack — select multiple if you use more than one:
vitest.config.ts:
// vitest.config.ts import { defineConfig } from 'vitest/config'; export default defineConfig({ test: { reporters: process.env.CI ? ['default', 'junit'] : ['default'], outputFile: { junit: 'test-results/vitest.xml', }, }, });
Everything you need from a CI test reporter
Built for the way GitHub Actions actually works — readable summaries, PR-aware comments, and a hard guarantee that we will never be the reason your build goes red.
Auto-discovers JUnit XML and CTRF JSON in the usual paths. One line in your workflow — no arguments needed.
Multi-job runs merged into a single sticky comment on the pull request, updated on every re-run.
Opt-in failure annotations rendered on the PR diff at the exact file and line number.
Configurable top-N ranking surfaces the tests dragging down your build.
Per-suite pass/fail/skip counts and durations so you can see which area of the code is hurting.
Glob patterns merge shards and parallel jobs into one coherent summary.
Exits 0 by design. No outbound calls in the core path. Your test step stays the source of truth.
See it on a real run
Rendered straight into the GitHub Actions run summary and the PR — no dashboard tab to open.



How TestGlance compares
The other GitHub Action test reporters are fine — we just wanted one that auto-detects, never fails CI, and handles both JUnit and CTRF out of the box.
| Feature | TestGlance | dorny/test-reporter | ctrf-io/github-test-reporter | mikepenz/action-junit-report | EnricoMi/publish-unit-test-result-action |
|---|---|---|---|---|---|
| Zero config | ✓ | — | — | — | — |
| JUnit + CTRF | Both | JUnit only | CTRF only | JUnit only | JUnit only |
| Failed test details | ✓ | ✓ | ✓ | ✓ | ✓ |
| Slowest tests | ✓ | — | — | — | — |
| Suite breakdown | ✓ | — | — | — | ✓ |
| Check runs | ✓ | ✓ | ✓ | ✓ | ✓ |
| PR comments | ✓ | — | ✓ | — | ✓ |
| Never fails CI | ✓ | — | Configurable | Configurable | Configurable |
| Multi-file merge | ✓ | ✓ | — | ✓ | ✓ |
| Auto-detect files | ✓ | — | — | — | — |
Sourced from the TestGlance Action README. Corrections welcome — open an issue.
Frequently Asked Questions
- What is the TestGlance GitHub Action?
- TestGlance is an open-source GitHub Action that parses your test reports (JUnit XML or CTRF JSON) and renders a readable summary on every run — including PR comments, inline annotations on failing lines, and the slowest tests. It is zero-config and never breaks your CI.
- How do I install it?
- Add a single step to your workflow: `uses: testglance/action@v1` with `if: always()` so it runs even when tests fail. It auto-discovers common report paths; you can override with `report-paths`.
- What test frameworks are supported?
- Any framework that emits JUnit XML or CTRF JSON — including Jest, Vitest, pytest, Go test, JUnit (Java), .NET, RSpec, PHPUnit, and Playwright.
- Will it fail my CI if something goes wrong?
- No. The Action exits 0 by design. It reports test results but never marks your workflow failed on its own — your test step remains the source of truth.
- Does it send data anywhere?
- No outbound calls in the core reporting path. The Action runs inside your GitHub Actions runner and writes to the run summary, PR comments, and annotations via the GitHub API.