Status as code

Keep your whole status page in a committed pingpage.yaml and apply it from a terminal or CI.

pingpage.yaml

name: Acme Status
slug: acme
branding:
  brand_color: "#00aaff"
  page_title: Acme
components:
  - key: api
    name: API
    monitor:
      url: https://api.acme.com/health
      interval: 60s
  - key: web
    name: Website

CLI

# install
go install github.com/rundock-dev/pingpage/cli@latest

# validate locally, diff against live, then apply
export PINGPAGE_ORG=<org-uuid>
export PINGPAGE_TOKEN=pp_live_...
pingpage validate
pingpage diff     # exit 1 on drift — gate PRs with it
pingpage apply    # PUT the file (add --prune to delete removed components)

GitHub Action

# .github/workflows/status.yml
name: status
on:
  pull_request:
  push: { branches: [main] }
jobs:
  status:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - if: github.event_name == 'pull_request'
        uses: rundock-dev/pingpage@v1
        with:
          command: diff
          org: ${{ vars.PINGPAGE_ORG }}
          token: ${{ secrets.PINGPAGE_TOKEN }}
      - if: github.ref == 'refs/heads/main' && github.event_name == 'push'
        uses: rundock-dev/pingpage@v1
        with:
          command: apply
          org: ${{ vars.PINGPAGE_ORG }}
          token: ${{ secrets.PINGPAGE_TOKEN }}