> ## Documentation Index
> Fetch the complete documentation index at: https://docs.happyuptime.com/llms.txt
> Use this file to discover all available pages before exploring further.

# GitHub

Correlate deploys to incidents and post check status from your CI pipeline.

# GitHub

The GitHub integration provides:

1. **Deploy correlation** — overlay GitHub Deployment events on incident timelines.
2. **Heartbeats from CI** — confirm a workflow ran successfully.
3. **CLI in Actions** — apply config-as-code on merge.

## Deploy correlation

Configure GitHub to send deployment events to Happy Uptime:

```yaml
# .github/workflows/deploy.yml
- name: Notify Happy Uptime of deploy
  if: success()
  run: |
    curl -X POST https://happyuptime.com/api/v1/deploys \
      -H "Authorization: Bearer ${{ secrets.HAPPYUPTIME_API_KEY }}" \
      -H "Content-Type: application/json" \
      -d '{
        "service": "api",
        "sha": "${{ github.sha }}",
        "url": "${{ github.event.head_commit.url }}",
        "actor": "${{ github.actor }}"
      }'
```

Deploys appear as markers on monitor charts and in incident timelines, so "the latency spike started 90 seconds after deploy abc123" is one click away.

## Heartbeats from scheduled workflows

Use heartbeat monitors to confirm a job ran on time:

```yaml
on:
  schedule:
    - cron: "0 * * * *"

jobs:
  hourly-job:
    runs-on: ubuntu-latest
    steps:
      - run: ./run-job.sh
      - name: Ping Happy Uptime
        if: success()
        run: curl -fsS https://happyuptime.com/api/heartbeat/${{ secrets.HEARTBEAT_SLUG }}
```

If the workflow doesn't ping within the grace period, an incident opens automatically. See [Heartbeat monitors guide](/guides/heartbeat-cron) for details.

## Config-as-code in CI

Push your `happyuptime.yml` from CI:

```yaml
- name: Apply Happy Uptime config
  env:
    HAPPYUPTIME_API_KEY: ${{ secrets.HAPPYUPTIME_API_KEY }}
  run: |
    npx happyuptime-cli config validate happyuptime.yml
    npx happyuptime-cli config push happyuptime.yml
```

See [CI/CD recipes](/cli/ci-cd) for the full workflow including PR previews.

## Status checks

Optionally post a Happy Uptime status as a GitHub Check on each PR — green if the linked monitors are healthy, yellow if degraded:

```yaml
- name: Verify monitors green
  env:
    HAPPYUPTIME_API_KEY: ${{ secrets.HAPPYUPTIME_API_KEY }}
  run: |
    happy status --json | jq -e '.monitors.down == 0'
```