Cronping

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

On this page