GitHub Actions
Monitor scheduled GitHub Actions workflows with Cronping.
Add a ping step to your workflow to monitor scheduled GitHub Actions. If the workflow stops running on schedule (e.g. due to the 60-day inactivity disable) or a job fails, Cronping will alert you.
Basic example
Add a final step that pings Cronping after all other steps succeed:
name: Nightly Backup
on:
schedule:
- cron: "0 3 * * *" # 3 AM UTC daily
workflow_dispatch: # allow manual runs
jobs:
backup:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Run backup
run: ./scripts/backup.sh
- name: Ping Cronping
if: success()
run: curl -fsS --max-time 10 https://ping.cronping.com/${{ secrets.CRONPING_TOKEN }}Store your ping token as an Actions
secret:
Settings → Secrets and variables → Actions → New repository secret, name
it CRONPING_TOKEN.
Using if: success()
The if: success() condition ensures the ping step only runs if all previous steps passed. If any step fails, the ping is skipped — Cronping will not receive the heartbeat and will alert you once the grace period expires.
Multiple jobs in one workflow
If your workflow has multiple jobs and you only want to ping after all of them succeed:
name: Data Pipeline
on:
schedule:
- cron: "0 2 * * *"
jobs:
extract:
runs-on: ubuntu-latest
steps:
- run: ./extract.sh
transform:
needs: extract
runs-on: ubuntu-latest
steps:
- run: ./transform.sh
load:
needs: transform
runs-on: ubuntu-latest
steps:
- run: ./load.sh
notify:
needs: load
if: success()
runs-on: ubuntu-latest
steps:
- name: Ping Cronping
run: curl -fsS --max-time 10 https://ping.cronping.com/${{ secrets.CRONPING_TOKEN }}Matching the schedule
Set the heartbeat schedule in Cronping to match your workflow's cron expression. For example, if your workflow runs at 0 3 * * * (UTC), configure your heartbeat with the same expression and timezone UTC.
GitHub Actions runs cron schedules in UTC. Make sure your Cronping heartbeat timezone is also set to UTC to avoid false alerts.
Reusable composite action
If you have many workflows to monitor, create a reusable action:
# .github/actions/ping-cronping/action.yml
name: Ping Cronping
description: Notify Cronping that a job succeeded
inputs:
token:
description: Cronping heartbeat token
required: true
runs:
using: composite
steps:
- shell: bash
run: curl -fsS --max-time 10 https://ping.cronping.com/${{ inputs.token }}Then use it in any workflow:
- name: Ping Cronping
if: success()
uses: ./.github/actions/ping-cronping
with:
token: ${{ secrets.CRONPING_TOKEN }}With start and fail signals
For accurate duration tracking and immediate failure alerts:
jobs:
backup:
runs-on: ubuntu-latest
steps:
- name: Ping start
run: curl -fsS --max-time 10 https://ping.cronping.com/${{ secrets.CRONPING_TOKEN }}/start
- name: Run backup
run: ./scripts/backup.sh
- name: Ping success
if: success()
run: curl -fsS --max-time 10 https://ping.cronping.com/${{ secrets.CRONPING_TOKEN }}
- name: Ping failure
if: failure()
run: curl -fsS --max-time 10 https://ping.cronping.com/${{ secrets.CRONPING_TOKEN }}/fail