How to share an Allure report
Everyone meets Allure the same way. The suite runs, allure generate produces
a beautiful allure-report/ directory, you open index.html — and get a blank
page.
That's the first lesson: the report is a single-page JavaScript application
that fetches its data over XHR, and browsers block XHR on file://. So you run
allure open, a local server starts, and it works. Which raises the second
question immediately: how does anyone else see it?
Why sharing Allure is harder than sharing a PDF
- It's a directory, not a file. Hundreds of JSON and asset files with relative fetches between them. You can't attach it to a message, and zipping it just moves the "open index.html" problem onto the recipient.
- It needs a real HTTP server. Any sharing route has to serve the whole tree, correctly, at consistent paths.
- CI artifacts expire. 30 days on GitLab and CircleCI, 90 on GitHub Actions by default. The flaky-test investigation that spans a quarter outlives the evidence.
- There's nowhere to say anything. The report shows that
checkout.spec.ts › applies discountfailed. The conversation about why happens in Slack, detached, and evaporates.
The options, honestly
Static hosting (GitHub Pages, S3, Netlify, Cloudflare Pages). Serve the
whole allure-report/ directory and the full interactive UI works. This is the
right answer when the interactive UI is the point — when people genuinely
filter by suite and step through the timeline. The costs: access control is
coarse or absent (Pages on a private repo is public unless you're on
Enterprise Cloud), you maintain a deploy path, and there is still no comment
layer. See GitHub Pages alternatives
for the access-control angle.
Allure's own hosting (Allure Report / TestOps). Purpose-built, with history and trends. Paid, and another system to administer and grant access to. If your organization has already standardized on it, use it.
Digest plus archive. Publish a static HTML summary of the run as the
document, attach the full allure-report archive next to it, and get a stable
URL with a review layer on top. That's the pattern this page is about.
The digest-plus-archive pattern
Comma sanitizes incoming HTML and strips <script> tags — a hard requirement
for an endpoint that accepts arbitrary HTML from an API token — so Allure's
script-driven UI won't run inside it. What does work, and reviews better:
- Generate a static digest from
allure-results/. The JSON in that directory has everything a reviewer needs: test name, suite, status, duration, failure message, attachments. A ~40-line script turns it into a plain HTML table. That table is the surface people actually want to comment on. - Attach the full archive as an asset.
tar czftheallure-report/directory and attach it — 25 MB per file, 250 MB per report. Anyone who needs the interactive UI downloads it and runsallure open. PATCHone report id per suite. One URL, one revision per run.
# after: allure generate allure-results -o allure-report --clean
python3 scripts/allure_digest.py allure-results > digest.html
tar czf allure-report.tgz allure-report
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 digest.html \
--arg title "E2E — $GIT_SHA" '{title: $title, html: $html}')"
Run it with if: always() (GitHub Actions), when: always (GitLab,
CircleCI) or post { always { … } } (Jenkins) — red runs are the ones worth
publishing. Provider-specific wiring:
GitHub Actions,
GitLab CI,
Jenkins,
CircleCI.
What the review layer changes
The digest renders with an anchored comment layer on it. A reviewer highlights the row for the failing test and pins a thread: "selector changed in Tuesday's release — fix in #482." That thread stays attached as revisions accumulate, so when the same test flakes in three weeks the previous investigation is one click away rather than lost in scrollback.
The loop closes with agents too — a Claude Code or Cursor agent attached via Comma's MCP server can read those threads, push a fix, and reply on the thread with the same scoped token that published the run.
And the audience widens: reviewers don't need a CI seat, because visibility is private, team, domain-gated, or link.
When to just use static hosting
If your team lives inside the Allure UI — filtering by severity, stepping through timelines, comparing trend graphs across dozens of runs — host the directory. The interactive report is the product in that case, and no digest replaces it. The digest pattern wins when what you need is a link people open and discuss, which is most weeks for most teams.
Try it
Comma is free — unlimited reports, unlimited commenters, unlimited revision history.
Related
- Share a Playwright report — same pattern, different reporter
- Publish from CI
- Comment on an HTML report