Your Jest HTML report, one link from the PR
jest-html-reporters packs your whole Jest run — suites, failures, console logs — into a single HTML file at the repo root. That makes publishing it the shortest deploy on this site: point the action at the file, get a link back.
Drop your Jest report here — get a live link
.zip, folder, or single .html — free, no account, live for 7 days.
The artifact dead-end
A red Jest run ends in a console wall of text and a report file zipped into artifacts. The report has the answers — which suite, which assertion, what the diff looked like — but opening it from CI means download, extract, double-click.
Single-file reports rot exactly like folders do. The artifacts tab doesn't care that your report was one convenient file locally; on CI it's still a zip nobody opens.
Two lines to a live link
Build your output like you already do, then hand the folder to the action:
Generate the report
npx jest --reporters=default --reporters=jest-html-reporters.github/workflows/ci.yml
- uses: bitgate/ship-page-action@v1
if: always()
with:
path: jest_html_reporters.htmlOr with plain curl — no account needed
curl -fsS -X POST https://ship.page/deploy -H "Content-Type: text/html" --data-binary @jest_html_reporters.html | jq -r .urlpath: jest_html_reporters.html deploys exactly what the tool wrote — no detection to configure. The link goes in the job summary — add comment: true and it lands on the pull request too.
What you get
- jest-html-reporters writes a single HTML file at the repo root, so the deploy is one upload — no zipping, no folder layout to get right
- Using jest-stare instead? It writes a full folder — point path at it and it deploys as-is, index.html and all
- if: always() publishes the report even when Jest exits non-zero, which is exactly the run you want to inspect
- The URL is the access control — viewers need no GitHub account or repo access, slugs are unguessable, and there's no public index
- Add name: pr-${{ github.event.number }} and an API key for a stable per-PR URL that every push redeploys in place
Questions
Which Jest HTML reporter does this work with?
jest-html-reporters (writes jest_html_reporters.html at the repo root by default) and jest-stare (writes a folder with an index.html — point path at that folder instead). Any reporter that emits static HTML works the same way.
Does the link work without an account?
Yes. Anonymous deploys need zero config and stay live for 7 days. Viewers never log in — the URL is the access control.
What if my report has attachments?
jest-html-reporters' addAttach() writes a jest-html-reporters-attach/ folder next to the report. Deploy the whole directory instead of the single file and every asset resolves — a drop is just a static origin.
Does the report expire?
Anonymous drops expire after 7 days. An sp_ API key lets you set the TTL per deploy, and paid plans can keep reports live indefinitely.
Related recipes
- Playwright: Your Playwright HTML report, online before the run finishes
- pytest-html: Your pytest report, one click from the PR
- Storybook: Storybook from CI — designers get a link, not a checkout
Try it on your next run
Anonymous deploys need no account and no key — paste the step, get a link. When you want stable URLs that redeploy in place, an API key and a name are all it takes.
Need to share the report with someone outside GitHub? How to share a GitHub Actions artifact without a login.