# Share a Robot Framework Report — report.html and log.html, on a Real URL

Canonical: https://commareports.com/share-robot-framework-report
Published: 2026-08-22

> Robot Framework writes report.html and log.html as self-contained files, and CI hides both in an artifact zip. Publish them to Comma with one curl: a stable link, comments on failing keywords, a revision per run.

# Share a Robot Framework report

Robot Framework gets the artifact right and the distribution wrong — as
does every runner, because distribution was never the runner's job.
`report.html` is a genuinely good single-file report: run data embedded,
JavaScript inlined, opens anywhere with a browser. Then CI stores it as
`robot-results.zip` and the good part stops mattering.

The half-measures are familiar. Publish to a Jenkins Robot plugin page
that only Jenkins users can see. Stand up a static bucket and maintain it.
Or screenshot the failing keyword into Slack, which is what actually
happens.

## One curl, two files

```bash
robot --outputdir results tests/

# The body: report.html, self-contained and small.
REPORT_ID=$COMMA_REPORT_ID
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 results/report.html \
        --arg title "Robot — build $BUILD_NUMBER" \
        '{title: $title, html: $html}')"

# The drill-down: log.html and screenshots, as assets.
curl -fsS -X POST \
  "https://commareports.com/api/v1/reports/$REPORT_ID/assets" \
  -H "Authorization: Bearer $COMMA_API_TOKEN" \
  -F "file=@results/log.html"
```

Two things make this hold up:

- **`PATCH`, not `POST`.** Each run appends a revision at the same URL,
  so the bookmark in the QA channel keeps working and any two runs can be
  [diffed](/share-html-report).
- **Body vs. assets.** `report.html` is the summary and stays under the
  5 MB body cap. `log.html` is the detail and belongs in
  [assets](/docs/api) — 25 MB per file, 250 MB per report. Relative
  references from the report into the log are rewritten, so the
  drill-down still resolves.

Screenshots from SeleniumLibrary or Browser library go up the same way,
one `-F "file=@..."` each.

## What the URL buys you

- **Comments pinned to the failing keyword.** Highlight the row, start a
  thread, and it survives the next twelve runs — see
  [commenting on HTML](/comment-on-html).
- **Readers with no CI seat.** Release managers, support leads, the
  vendor whose integration you're testing. The
  [sharing model](/docs/sharing) is per report.
- **A history that outlives artifact retention.** Retention windows are
  measured in days; audits are measured in quarters.
- **Slack on every run.** A [webhook](/docs/api) on `revision.created`.

## Try it

Comma is free — unlimited reports, unlimited commenters, unlimited
revision history. Wire one suite and stop unzipping.

**[Create your first report →](https://commareports.com/)**

### Related

- [Publish from CI](/docs/ci) · [Jenkins](/ci/jenkins-html-report) · [GitLab CI](/ci/gitlab-ci-html-report)
- [Allure](/share-allure-report) — the multi-file case, in detail
- [Cucumber](/share-cucumber-report) · [pytest](/share-pytest-report)
