Get a phone notification when a GitHub Actions run fails
Add one curl step to a workflow and CI failures show up as an alert on your phone, without a GitHub App or a third-party integration.
GitHub’s own notification settings bury a CI failure in an inbox with everything else. A curl step at the end of the job sends it straight to a channel of its own.
The step
- name: Notify Paperplane
if: failure()
run: |
curl -sS -X POST "${{ secrets.PAPERPLANE_ENDPOINT }}" \
-H "Content-Type: application/json" \
-H "X-Paperplane-Endpoint-Key: ${{ secrets.PAPERPLANE_KEY }}" \
-d '{
"title": "CI failed on main",
"message": "'"${{ github.workflow }}"' · ${{ github.sha }}",
"priority": "High",
"nature": "error"
}'
PAPERPLANE_ENDPOINT is the full channel URL from Channel → Details; PAPERPLANE_KEY is that channel’s endpoint key, if you set one. priority: High and nature: error promote this from a message you scroll past to an alert you have to acknowledge or resolve.
Only on success, too
Drop if: failure() for if: always() and branch on ${{ job.status }} in the message if you also want a quiet confirmation when a deploy job succeeds — useful for anything long enough that you’ve stopped watching the terminal.
Add a button
A Paperplane callback fires a plain, unauthenticated GET/POST — GitHub’s re-run API needs a bearer token, so you can’t point a callback straight at api.github.com. Put a small relay in between (a Cloudflare Worker route or similar) that holds the GitHub token and calls the re-run API when hit:
"callback": [
{ "label": "Re-run", "webhook": "https://your-relay.example.com/rerun/RUN_ID" }
]
See the API contract for the full callback shape and its cooldown.