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 discount failed. 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:

  1. 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.
  2. Attach the full archive as an asset. tar czf the allure-report/ directory and attach it — 25 MB per file, 250 MB per report. Anyone who needs the interactive UI downloads it and runs allure open.
  3. PATCH one 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.

Create your first report →

Related