← Блог

GitHub Actions: гейт деплоя через API uptime StillOnline

Зелёные unit-тесты не доказывают, что production отвечает 200 из интернета. GitHub Actions может после деплоя вызвать read-only API StillOnline и остановить workflow, если внешняя проверка красная.

HTML парсить не нужно: GET /v1/public/status/{slug} без ключа или GET /v1/projects/{id}/checks с Bearer sk_live_… на Pro. Алерты владельца отдельно: Telegram через бота StillOnline.

Краткий ответ

После деплоя добавьте шаг: curl к публичному JSON StillOnline (operational) или на Pro — private checks с Authorization: Bearer и secret STILLONLINE_API_KEY. sk_live_… только в GitHub Secrets. Публичный endpoint: 60 зап/мин на IP; private: 120/мин на ключ. Инциденты обслуживания из CI — CI/CD и обслуживание.

Публичный или private JSON

EndpointAuthКогда
GET /v1/public/status/{slug}НетКлиентский slug; безопасно в логах
GET /v1/projects/{id}/checksBearer sk_live_…Нужны last_status, last_probed_at

База: https://api.stillonline.tech/v1. REST.

Пример workflow (публичный статус)

name: Post-deploy smoke
on:
  workflow_dispatch:
  push:
    branches: [main]

jobs:
  stillonline-status:
    runs-on: ubuntu-latest
    steps:
      - name: Check public status JSON
        run: |
          STATUS=$(curl -sS "https://api.stillonline.tech/v1/public/status/my-saas" | jq -r '.status')
          echo "overall=$STATUS"
          test "$STATUS" = "operational"

Подставьте свой slug. Ненулевой exit code падает job.

Пример (private checks, Pro)

      - name: Check StillOnline probes (private API)
        env:
          STILLONLINE_API_KEY: ${{ secrets.STILLONLINE_API_KEY }}
          STILLONLINE_PROJECT_ID: ${{ vars.STILLONLINE_PROJECT_ID }}
        run: |
          curl -sS -H "Authorization: Bearer $STILLONLINE_API_KEY" \
            "https://api.stillonline.tech/v1/projects/$STILLONLINE_PROJECT_ID/checks" \
            | jq -e '.checks[] | select(.last_status != "OPERATIONAL")' && exit 1 || exit 0

Ключ — настройки API.

Типичные ошибки

  • Preview вместо production — гейтите prod slug (редиректы и antibot).
  • Нет health URL — сначала быстрый старт.
  • Ключ в логах — не echo secret.
  • Путают JSON статуса и вход в SaaS — это разные системы.

Ссылку на страницу статуса — в README: публичная страница.

Связанные материалы

FAQ

Есть ли официальный GitHub Action StillOnline в Marketplace?

Достаточно curl/jq к REST (REST). Отдельная карточка для v1 не обязательна.

Может ли Actions создавать проверки StillOnline?

В CI обычно чтение статуса. Создание — через API/MCP на Pro для агентов; см. MCP.

HTTP 429 от StillOnline?

Публичный JSON: 60 зап/мин на IP. Не опрашивайте каждую секунду.

Падать на degraded или только down?

Ваша политика. В jq можно требовать строго operational.

Telegram-алерты и GitHub Actions?

Actions — автоматический гейт; Telegram — человек on-call. Используйте оба.