Upload reports as artifacts
Pass reporter flags incommand, then chain actions/upload-artifact:
--reporter-skip-headers in command. See Generating Reports.
What this does: Saves test report files (JUnit and HTML) as downloadable artifacts on the workflow run page. Anyone with repo access can download them for up to 90 days.
Slack notification on failure
Use action outputs withcontinue-on-error: true so the notification step still runs:
continue-on-error: true lets the Slack step run even when tests fail. id: bruno names the step so later steps can read its outputs (steps.bruno.outputs.failed).
PR comment on every run
EnricoMi/publish-unit-test-result-action posts a sticky PR comment updated on re-runs, plus a check run with structured results.
if: always() so EnricoMi runs even when the Bruno step fails. Otherwise users do not see the comment on failure.
What this does: Runs your Bruno tests, writes a JUnit report to results.xml, then posts a sticky comment on the PR with pass/fail details. The comment updates in place on re-runs instead of spamming new comments.
PR comment only on failures
Checks tab UI (polyglot test stacks)
Usedorny/test-reporter when you want Bruno results alongside Jest, Pytest, or other JUnit-emitting suites:
Matrix across environments
Use distinct JUnit paths and artifact names per matrix leg:--reporter-junit and the artifact name to avoid duplicate-name errors across legs.
What this does: Runs the same collection twice in parallel, once per environment (staging and prod). Each run gets its own report file and artifact so results do not overwrite each other.
Soft-fail
Record results without failing the build, then act on outputs:Enterprise mTLS
Write cert files from secrets, then pass paths incommand: