Put your Gradle test report on a URL
Gradle's HTML test report already has everything a reviewer needs: which tests failed, their stdout, the stack traces. It's a website — serve it like one, straight from your workflow.
The artifact dead-end
When a Gradle build goes red, the log output is a wall of text and the useful report is zipped in artifacts. Reviewers either download it (they won't) or re-run locally (they really won't).
The report exists at build/reports/tests/test/ — a complete static site. The only thing missing between it and your team is a URL.
Two lines to a live link
Generate the report like you already do, then hand the folder to the action:
Generate the report
./gradlew test.github/workflows/ci.yml
- uses: bitgate/ship-page-action@v1
if: always()
with:
path: build/reports/tests/test/Omit path entirely and the action auto-detects build/reports/tests/test/ on its own. The URL lands in the job summary — add comment: true and it lands on the pull request too.
What you get
- Failed-test pages, standard output and stack traces all render — the folder is served as-is
- if: always() means the failing run is the one that publishes — the report you need most is never skipped
- Multi-module builds: deploy each module's report folder, or omit path and let auto-detect find build/reports/tests/test/
Questions
Does it handle multi-module projects?
Deploy the aggregate report, or run the action once per module with a name per module — each gets its own stable URL.
What about build scans?
Gradle build scans are great but require the Develocity/Gradle enterprise backend and send your build data there. This keeps the report on infrastructure you chose.
How long do links live?
Anonymous drops expire after 7 days. On a paid plan you control ttl — or set it to never expire.
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.