GitHub PR Test Status: See Test Results Without Leaving GitHub

Your PR has 3 green checkmarks and 1 red X. You click the red X, land on a workflow run page, expand the test job, scroll through 200 lines of output, and finally find the failing test. Why is seeing test results in GitHub so hard?

The GitHub Actions Test Results Problem

Every developer knows this workflow:

  1. Push code to PR
  2. Wait for CI to finish
  3. See a red X on the PR
  4. Click to see details
  5. Land on the workflow run page
  6. Click into the job
  7. Expand the test step
  8. Scroll through logs to find failures

Total time to see what failed: 2-5 minutes

And if you want the full test report? Download artifacts, extract the zip, open the HTML file. Good luck doing that on your phone when you’re away from your desk.

What You Actually Want

  • See pass/fail on the PR (GitHub does this)
  • See which tests failed without digging through logs
  • Click directly to a readable report
  • Share the report with QA who doesn’t have GitHub access
GitHub pull request showing Gaffer commit status with test results and Details link

GitHub’s built-in features get you partway there, but not all the way:

FeatureWhat It DoesLimitation
Status checksShows pass/failNo details about which tests
AnnotationsShows failures inlineLimited to ~50, no full context
Job summariesMarkdown in Actions tabManual setup, buried in workflow
ArtifactsStores reportsRequires download, expires

The fix is simple: post a commit status that links directly to a hosted test report.

How It Works

Tests run in GitHub Actions

Results uploaded to Gaffer

Gaffer posts commit status to GitHub

PR shows: ✓ Gaffer / Vitest — 47 passed   [Details →]

What Developers See

On your pull request, under the checks section:

✓ Gaffer / Playwright — 23 passed              Details
✗ Gaffer / Vitest — 45 passed, 2 failed        Details

Click “Details” and you’re taken directly to the full test report in Gaffer. No logs, no artifacts, no extraction.

What QA and PMs See

A simple link they can open in any browser:

https://app.gaffer.sh/r/abc123

No GitHub access required. No downloading. Click and view.

Setting Up the Gaffer GitHub App

Step 1: Install the GitHub App

  1. In Gaffer, go to Settings → GitHub
  2. Click Install GitHub App
  3. Choose your GitHub organization or account
  4. Select which repositories Gaffer can access
  1. Go to your project in Gaffer
  2. Navigate to Settings → GitHub
  3. Select your repository from the dropdown
  4. Enable Commit statuses

Step 3: Upload Results with Commit SHA

If you’re already uploading to Gaffer, just make sure you’re passing the commit SHA:

- name: Run tests
  run: npm test

- name: Upload to Gaffer
  if: always()
  uses: gaffer-sh/gaffer-uploader@v2
  with:
    api-key: ${{ secrets.GAFFER_UPLOAD_TOKEN }}
    report-path: ./test-results
    commit_sha: ${{ github.sha }}
    branch: ${{ github.ref_name }}

For pull requests, use the PR head SHA:

- name: Upload to Gaffer
  if: always()
  uses: gaffer-sh/gaffer-uploader@v2
  with:
    api-key: ${{ secrets.GAFFER_UPLOAD_TOKEN }}
    report-path: ./test-results
    commit_sha: ${{ github.event.pull_request.head.sha || github.sha }}
    branch: ${{ github.head_ref || github.ref_name }}

That’s it. The GitHub App handles posting the status automatically.

What the Status Looks Like

Gaffer posts commit statuses in this format:

Gaffer / {framework}

For example:

  • Gaffer / Playwright - Your Playwright E2E tests
  • Gaffer / Vitest - Your Vitest unit tests
  • Gaffer / Jest - Your Jest tests

If you have multiple test suites, each gets its own status. At a glance, you can see which suite failed.

Comparison: Finding Test Results

ApproachTime to ResultsClick to ReportWorks for QA
Check workflow logs2-5 minutesNoNo
GitHub Annotations30 secondsNoNo
Download artifacts1-2 minutesAfter extractionNo
Gaffer commit status5 secondsYes, one clickYes

Beyond Status Checks

Once you have test results flowing through Gaffer, you also get:

Historical Context

See if this test has failed before. Was it flaky last week? The history is right there.

Flaky Test Detection

Tests that fail intermittently are flagged automatically. Know whether a failure is a real bug or just flakiness before you start debugging.

Slack Notifications

Get notified in Slack when tests fail, with a direct link to the report. No need to watch GitHub.

Cross-Repo Dashboard

If you have multiple repositories, see all your projects’ test health in one place.

Getting Started

Gaffer’s free tier includes 500 MB storage with 7-day retention - enough to try the GitHub integration on a real project. Commit statuses are included on all plans.

Start Free