2026 OpenClaw на аренде Mac Mini: GitHub repository_dispatch — цепочки ночных задач, тихие окна и backoff

Чтение: 9 мин

Инженерам автоматизации, которые держат OpenClaw на арендованной Mac Mini в режиме 7×24, часто нужен «пульт» на стороне Git без жёсткой привязки к одному файлу workflow. Эндпоинт GitHub API POST …/dispatches с типом repository_dispatch как раз про это: строка event_type, JSON client_payload и явный список on.repository_dispatch.types в YAML.

Этот материал сознательно не пересекается с гайдом про workflow_dispatch и ночной батч: там API указывает конкретный workflow и карту inputs. Здесь — цепочка событий, которую могут потреблять несколько workflow или несколько job в одном файле; удобно, когда OpenClaw даёт первый импульс, а затем сводит URL запусков и ошибки в один дайджест.

Дополните схему launchd, health и webhook с backoff, матрицей планирования 7×24 и установкой heartbeat и самовосстановлением, чтобы часы на Mac Mini оставались источником правды для ночных задач.

  • Триггер: OpenClaw или launchd на узле аренды один раз вызывает POST /repos/{owner}/{repo}/dispatches на стартовый event_type.
  • Цепочка: сегмент A проверяет payload, выполняет работу и инициирует следующий dispatch (тем же PAT снаружи или GITHUB_TOKEN из Actions при contents: write в job).
  • Сводка: OpenClaw забирает ссылки на run из payload или выходов job и шлёт один дайджест на батч вместо потока сообщений в чат.

PAT с минимальными правами

Вызов dispatch — это POST https://api.github.com/repos/OWNER/REPO/dispatches. Для Fine-grained PAT ограничьте доступ одним репозиторием автоматизации, включите чтение Metadata и Contents: read and write — этого достаточно для контракта REST без выдачи каждому скрипту scope Actions: write, который чаще нужен именно для workflow_dispatch в соседнем руководстве.

Если политика безопасности требует частой ротации, рассмотрите GitHub App с installation token и тем же объёмом прав на репозиторий. Храните секреты в связке ключей macOS или в root-owned plist; ротацию синхронизируйте с чекпойнтами обновления и отката шлюза OpenClaw.

  • Не смешивайте PAT с админскими или publish-пакетами задачами.
  • Разводите инфраструктурный и прикладной код по репозиториям; кросс-репозиторные dispatches оставляйте только когда второй токен неизбежен.

Соглашение по payload

Считайте client_payload версионируемым контрактом: заранее зафиксируйте обязательные ключи, чтобы первый шаг каждого workflow проверял структуру через jq или компактную JSON Schema.

Поле Роль
batch_id Ключ идемпотентности и чекпойнта на Mini
segment Метка сегмента в логах и дайджестах OpenClaw
correlation_id UUID: журнал Mac, Actions и исходящие webhook
issuer openclaw_gateway | launchd | manual
artifact_ref Указатель на объектное хранилище вместо «толстого» JSON

Пример заголовка workflow, слушающего два сегмента:

on:
  repository_dispatch:
    types: [openclaw_night_a, openclaw_night_b]

Конечный автомат цепочки

Опишите батч явно: QUEUED (Mac принял расписание) → SEGMENT_A (первый dispatch доставлен) → SEGMENT_BCOMPLETED или FAILED. Сохраняйте последний успешный batch_id и сегмент в /var/db или домашнем каталоге сервиса, чтобы перезагрузка не породила повторных побочных эффектов.

Переход «вперёд» делайте одним владельцем часов: финальный job шлёт curl с PAT, переиспользуемый workflow вызывает gh api, либо Mini опрашивает Checks API и сам инициирует следующий event_type — смешивайте эти роли только осознанно, иначе появятся гонки. Для более широкой картины см. мультисценарную оркестрацию OpenClaw.

  1. Отправьте openclaw_night_a с полезной нагрузкой; поле next_event_type держите как подсказку после валидации, а не как немедленный автотриггер.
  2. При ошибке валидации перейдите в FAILED и вызовите путь алерта один раз.
  3. При успехе выполните POST с openclaw_night_b и тем же correlation_id.

Тихие окна

Тяжёлую работу по диску APFS сосредоточьте в локальной полосе тишины (например 01:00–05:00 по часовому поясу узла). launchd должен вызывать скрипт только внутри окна; вне его — exit 0 без обращения к GitHub. По желанию добавьте в workflow ранний guard: читайте TZ из payload и завершайте job быстро, если кто-то дернул dispatch вручную в рабочее время.

Если маркетинговые или саппорт-окна пересекаются с ночным слотом, пусть OpenClaw буферизует пропуски: пишите JSON-строки в локальную очередь и отправляйте один отчёт «подавленные срабатывания» при открытии окна — в духе guardian и health-webhook на аренде Mac Mini.

Алерты при сбоях

Оборачивайте каждый HTTP-вызов экспоненциальным backoff на ответы 429 и 5xx, уважайте заголовок Retry-After. Ограничьте число попыток (например пять), затем эскалируйте. В webhook эскалации передавайте batch_id, последний HTTP-статус и укороченное тело ответа — никогда не кладите PAT в исходящий канал.

OpenClaw подписывается на этот webhook, может обогатить событие хвостом лога с Mini и открыть тикет только после исчерпания бюджета повторов — так ночные задачи не будят дежурного из-за кратковременных сбоев GitHub.

Воспроизводимые примеры curl и gh

Экспортируйте GITHUB_TOKEN или используйте Fine-grained PAT в GH_TOKEN для CLI. Замените OWNER, REPO и идентификаторы.

curl -sS -X POST \
  -H "Accept: application/vnd.github+json" \
  -H "Authorization: Bearer ${GITHUB_TOKEN}" \
  -H "X-GitHub-Api-Version: 2022-11-28" \
  https://api.github.com/repos/OWNER/REPO/dispatches \
  -d '{"event_type":"openclaw_night_a","client_payload":{"batch_id":"20260424","segment":"a","correlation_id":"'"$(uuidgen)"'","issuer":"launchd"}}'
gh api -X POST repos/OWNER/REPO/dispatches --input - <<'JSON'
{
  "event_type": "openclaw_night_b",
  "client_payload": {
    "batch_id": "20260424",
    "segment": "b",
    "correlation_id": "REPLACE_WITH_UUID",
    "issuer": "openclaw_gateway"
  }
}
JSON

Сначала прогоните команды с ноутбука, убедитесь, что во вкладке Actions появился ожидаемый запуск, затем перенесите ту же команду в root-owned обёртку launchd на арендованной Mac Mini.

FAQ

Почему не везде workflow_dispatch?
workflow_dispatch заточен под выбор оператором конкретного workflow и typed inputs. repository_dispatch заточен под машинный поток event_type и более узкий токен там, где не нужен scope Actions write с самой Mini.
Можно ли нацелить repository_dispatch на feature-ветку?
По умолчанию события обрабатываются workflow на ветке по умолчанию; для изолированных тестов планируйте отдельный репозиторий или явную стратегию веток в файлах workflow.
Где граница ответственности OpenClaw?
OpenClaw остаётся пограничным оркестратором: решает, когда отдать первый dispatch, хранит чекпойнты и агрегирует исходящие webhook так, чтобы человек читал одну сводку на батч.

Итог. Выделенный Apple Silicon под цепочки GitHub API оформляется без лишней бюрократии: откройте тарифы, пройдите оформление аренды (где доступно — без обязательного входа) и держите под рукой центр помощи с заметками по SSH рядом с plist.

Mac Mini для OpenClaw и цепочек repository_dispatch

Запускайте 7×24 цепочки событий с запасом по CPU и NVMe на стабильном хосте. Загляните на главную, сравните планы, затем оформите аренду. В блоге — ещё материалы по эксплуатации OpenClaw.

Добавьте в закладки блог и оформление до того, как расширять права токена на общей Mini.

Mac Mini для цепочек OpenClaw + GitHub