Your CI pipeline runs tests on every push. When tests fail, how does your team find out? If the answer is “someone checks the GitHub Actions tab,” you have a notification problem. Failures sit unnoticed for minutes or hours while developers context-switch to other work.
The Problem: Nobody Checks CI Proactively
Here’s what typically happens when tests fail in CI:
- Developer pushes code and moves on to the next task
- CI runs tests in the background
- Tests fail — but nobody’s watching
- Eventually someone notices the red X on the PR (or doesn’t)
- By the time they investigate, they’ve lost the mental context
The feedback loop is broken. CI runs tests, but the results sit in a dashboard nobody monitors in real-time.
What Teams Do Instead
1. Check CI manually
- Requires remembering to check after every push
- Developers context-switch away while waiting for CI
- Easy to miss failures on shared branches like
main
2. GitHub email notifications
- Buried in inbox noise alongside PR reviews, mentions, and issue updates
- No summary of which tests failed or why
- No link to the full report
3. Custom scripts with curl and Slack webhooks
- Brittle, hard to maintain, lives in CI config
- Usually just sends “build failed” with no detail
- No filtering by branch or failure severity
- Every team reinvents this from scratch
4. CI provider’s built-in notifications
- GitHub Actions has no native Slack integration for test results
- GitLab notifications are noisy and lack test-level detail
- No structured test result data — just “job passed/failed”
Better: Structured Test Notifications
What you actually want is a notification that tells you:
- Which tests failed — not just “the build broke”
- A link to the full report — one click to see errors, traces, screenshots
- Branch and commit context — what triggered the failure
- Filtering — only notify on branches you care about
How Gaffer Handles Test Notifications
Gaffer sends test results to Slack, webhooks, and GitHub commit status after every upload. No custom scripts, no maintenance.
Slack Integration
Connect your Slack workspace in project settings. After each test run upload, Gaffer posts a summary:
- Pass/fail counts and overall status
- Direct link to the hosted test report
- Branch, commit SHA, and trigger context
- Failed test names for quick triage
Notification Triggers
Choose when to get notified:
- All runs — every test upload sends a notification
- Failures only — only hear about problems
- Consecutive failures — alert when a test fails multiple runs in a row, filtering out one-off noise
Branch Filtering
Don’t get spammed by feature branch noise. Configure notifications per branch pattern:
- Only notify on
mainandrelease/* - Skip
dependabot/*and draft PRs - Different channels for different branches
Webhooks
For custom integrations, Gaffer sends HMAC-SHA256 signed HTTP POST payloads to any endpoint. Payloads include test run results, project context, and report links. See the webhook docs for the full payload schema.
Use webhooks to:
- Post to Microsoft Teams, Discord, or any chat tool
- Trigger PagerDuty alerts for critical test suites
- Update a status page or internal dashboard
- Feed into your existing alerting pipeline
GitHub Commit Status
Gaffer sets commit status checks on your PRs automatically. Developers see test results without leaving GitHub — green check or red X directly on the commit.
Setting Up Test Failure Notifications
Step 1: Upload Test Results from CI
# GitHub Actions example
- 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-resultsStep 2: Connect Slack
In your Gaffer project settings, click “Connect to Slack” and authorize the integration. Select a channel and choose your notification trigger.
Step 3: Configure Triggers
Pick the trigger that matches your workflow:
| Trigger | Best For |
|---|---|
| All runs | Small teams that want full visibility |
| Failures only | Teams that only want to hear about problems |
| Consecutive failures | Filtering out flaky one-off failures |
That’s it. Your next CI run will notify your team automatically.
Comparing Test Notification Approaches
| Approach | Setup | Maintenance | Test Detail | Filtering |
|---|---|---|---|---|
| Check CI manually | None | None | Full (if you find it) | None |
| GitHub email notifications | Built-in | None | Minimal | Limited |
| Custom Slack webhook script | High | High | Whatever you build | Whatever you build |
| CI provider notifications | Built-in | Low | Job-level only | Limited |
| Gaffer | Low | None | Full report link + summary | Branch, trigger type |
Beyond Notifications
Notifications are the entry point. Once you’re uploading test results, you also get:
- Hosted test reports — shareable URLs for every run
- Flaky test detection — automatic identification of unreliable tests
- Test analytics dashboard — pass rate trends, duration tracking, failure patterns
Get Started
Gaffer’s free tier includes Slack integration, webhook support, and GitHub commit status with 500 MB of storage and 7-day retention.