# Share a Ginkgo Test Report — Go Specs as a URL

Canonical: https://commareports.com/share-ginkgo-report
Published: 2026-09-15

> Ginkgo writes JUnit and JSON reports but no HTML. Convert the JUnit output, publish it to Comma, and a Go spec suite becomes a link teammates can open and comment on.

# Share a Ginkgo test report

Ginkgo's whole pitch is that specs read like the behaviour they describe. That
survives right up until the run finishes, at which point what leaves the
machine is `ok  github.com/you/thing  14.204s` and a wall of scrollback.

Ginkgo v2 already writes structured reports. It just doesn't render them.

## Emit JUnit, convert it

```bash
go install github.com/onsi/ginkgo/v2/ginkgo@latest
pip install junit2html

ginkgo -r -p --junit-report=report.xml ./... || true
junit2html report.xml ginkgo.html
```

`-p` runs the specs in parallel and still writes a single aggregated
`report.xml`. `|| true` keeps the pipeline alive long enough to publish a
failing run — keep a separate `ginkgo -r` step as the actual gate.

## Publish it

Drag `ginkgo.html` into [the app](https://commareports.com/), or from CI:

```bash
curl -fsS -X PATCH "https://commareports.com/api/v1/reports/$REPORT_ID" \
  -H "Authorization: Bearer $COMMA_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d "$(jq -n --rawfile html ginkgo.html \
        --arg title "Ginkgo — $GITHUB_REF_NAME" '{title: $title, html: $html}')"
```

One report id per suite, PATCHed every run. The URL is stable; the history
behind it is the flake record.

## The JSON report, if you want more

`--json-report=report.json` keeps the container hierarchy — `Describe` inside
`Describe`, the spec's own file and line, the `By` steps — that JUnit throws
away. If you already render your own summary page from it, publish that HTML
instead; nothing about the flow changes.

## Why it is worth a URL

- **Anchored threads** on the spec that keeps failing, so "this one is timing
  out on the CI runner, not in the code" lands next to the failure. See
  [commenting on HTML](/comment-on-html).
- **Revisions** — the same id across runs turns "is this new?" into a diff.
- **A [routine](/features/routines/scheduled-html-reports)** if you run the
  suite nightly and want the trend maintained without anyone remembering.

## Limits

- **Entry HTML: 5 MB.** Assets: 25 MB per file, 250 MB and 500 files total.
- **60 requests/minute per token.**

## Try it

Comma is free — unlimited reports, unlimited commenters, unlimited revision
history.

**[Publish a test report →](https://commareports.com/)**

### Related

- [Share a Go test report](/share-go-test-report) · [Share a JUnit report](/share-junit-report)
- [Share a coverage report](/share-coverage-report) · [Share a golangci-lint report](/share-golangci-lint-report)
- [Publish from CI](/docs/ci) · [Share a pprof profile](/share-pprof-profile)
