# How to Share an Allure Report — Hosting Options and the Honest Trade-offs

Canonical: https://commareports.com/share-allure-report
Published: 2026-08-19

> Allure reports are a JavaScript app that breaks when opened from the filesystem and expires when the CI artifact does. Hosting options compared, plus the digest-plus-archive pattern that gives you a stable link and comments.

# 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](/alternatives/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.

```bash
# 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](/ci/github-actions-html-report),
[GitLab CI](/ci/gitlab-ci-html-report),
[Jenkins](/ci/jenkins-html-report),
[CircleCI](/ci/circleci-html-report).

## 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](/mcp) 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](/docs/sharing).

## 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 →](https://commareports.com/)**

### Related

- [Share a Playwright report](/share-playwright-report) — same pattern, different reporter
- [Publish from CI](/docs/ci)
- [Comment on an HTML report](/comment-on-html)
