- Шлюз на 0.0.0.0: случайная публикация админки и Webhook-endpoint в интернет без туннеля и ACL.
- Перегруз Webhook: каждый промежуточный
check_suiteзапускает тяжёлый клон, хотя вас интересует только завершённый набор или diff по путям lock. - Токен «на все репозитории»: классический PAT с лишними scope; утечка из логов или plist даёт полный доступ к оргструктуре.
① Пошаговый чеклист (минимально воспроизводимо)
openclaw doctor. Зафиксируйте одинаковый Node (22.16+ или 24 LTS) в интерактивной оболочке и в сервисе launchd. Установите OpenClaw, выполните openclaw doctor и устраните предупреждения по сертификатам и прокси до приёма внешнего трафика.ssh -L, reverse SSH или одобренный edge-прокси). Убедитесь, что путь и заголовки доходят до обработчика без обрезания префикса.application/json, секрет для HMAC, события: как минимум check_suite; при скане только PR с lock — добавьте pull_request и фильтруйте paths на уровне workflow или в коде обработчика.repo целиком, если достаточно чтения и аннотаций./var/tmp/gh-lock-$(uuidgen), выполняйте git fetch + checkout на head_sha из payload, затем git diff или специализированный скрипт для package-lock.json, pnpm-lock.yaml, Cargo.lock и т.д.Жёсткое правило безопасности шлюза и сетевого контура разобрано в материале про усиление OpenClaw gateway на удалённом Mac — сверяйте список интерфейсов и политику секретов перед продакшеном.
② Webhook и фильтрация событий
Событие check_suite приходит часто: запуски, повторы, разные action. Чтобы не разорвать диск shallow-клонами, обрабатывайте только завершённые цепочки, релевантные вашей политике (например completed и ожидаемый набор приложений). Для pull request ограничьте срабатывание изменениями в путях lockfile через настройки GitHub Actions или явную проверку списка файлов в JSON payload.
| Элемент | Зачем | Практика |
|---|---|---|
| Секрет Webhook | Проверка X-Hub-Signature-256 |
Один секрет на репозиторий; ротация через «пересоздать секрет» без простоя endpoint |
| Дедупликация | Один SHA — одна задача | Кэш в памяти или Redis по паре repository.id + head_sha с TTL 15–30 мин |
| Таймаут клона | Защита пула Mac | Жёсткий дедлайн и отмена при зависании сети; neutral check с причиной |
Если основной сигнал идёт из pull_request, помните: событие synchronize приходит при каждом push в ветку PR, тогда как check_suite отражает жизненный цикл набора проверок GitHub Apps и Actions. Комбинируйте источники осторожно: достаточно одного триггера, который даёт и SHA, и контекст базовой ветки, иначе вы получите двойной расход CPU на одном и том же коммите. Для монорепозиториев перечисляйте несколько glob-путей к lock-файлам в фильтре, но не подписывайтесь на все изменения репозитория — иначе шлюз OpenClaw станет узким местом раньше, чем закончится очередь GitHub.
③ Токены и изоляция каталогов
Fine-grained PAT должен ссылаться только на нужные репозитории. Для GitHub App проверьте установку в организации и список репозиториев. Секреты передавайте через переменные окружения процесса, который поднимает ваш обработчик (или через обёртку шлюза OpenClaw), а не через аргументы командной строки, попадающие в ps.
Изоляция каталогов устраняет гонки: два параллельных Webhook не должны делить node_modules или кеш сборки. После завершения задачи удаляйте каталог или перемещайте в очередь фоновой очистки. Если openclaw doctor сообщает о расхождении PATH между службой и терминалом, исправьте это до отладки подписи Webhook — иначе вы будете ловить «фантомные» 404 вручную запущенного бинарника.
GitHub App против PAT. Приложение удобно, когда нужны короткоживущие installation tokens и централизованный аудит установок в организации; fine-grained PAT проще для одного репозитория и быстрого прототипа. В обоих случаях проверьте, что токен не наследует прав на все будущие репозитории org. Для корпоративного SSO включите соответствующие ограничения авторизации, иначе токен может быть отозван политикой IdP без явного сообщения в логах шлюза.
④ Скан lockfile и сводка сборки
Минимальный скрипт: определить базовый ref (например base.sha из pull request или предыдущий успешный коммит на ветке), выполнить git diff base...head -- path/to/locks и сформировать человекочитаемый текст: какие lock изменены, есть ли неожиданные массовые перестановки версий. При необходимости вызовите менеджер пакетов в режиме «только проверка» (npm ci --dry-run там, где поддерживается) уже после анализа diff, чтобы не дублировать основную сборку.
# Пример: только список изменённых lock-файлов между base и head
git diff --name-only "${BASE_SHA}" "${HEAD_SHA}" -- \
'package-lock.json' 'yarn.lock' 'pnpm-lock.yaml' 'Cargo.lock' 'poetry.lock'
Итог отправьте в Checks: заголовок короткий, тело — маркированный список; при ошибке сети к GitHub залогируйте correlation id и приложите путь к логу на раннере (без секретов). Если установка OpenClaw на агенте вызывает вопросы, используйте руководство по установке и типовым сбоям как контрольный список.
⑤ FAQ: типовые ошибки
401/404 на endpoint Webhook. Часто несовпадение пути за reverse proxy, другой порт после перезапуска ssh -L или обработчик слушает только IPv6 — проверьте curl -v с той же машины, что и GitHub delivery.
Неверная подпись. Секрет в настройках репозитория и в вашем коде должен совпадать побайтно; не подмешивайте BOM при копировании в Vault.
403 Checks API. Нет права checks:write, приложение не установлено в репозиторий или политика org запрещает запись проверок сторонним интеграциям.
Двойные прогоны. И check_suite, и workflow отправляют одно и то же — оставьте один источник истины или объедините логику дедупликации.
Расхождение diff и CI. Клон не на том SHA или в каталоге остались файлы прошлого job — вернитесь к правилу «один каталог на событие» и явный checkout по head_sha.
Итог
Связка OpenClaw (шлюз по docs.openclaw.ai, 127.0.0.1, токен Dashboard), отфильтрованный Webhook и минимальный PAT/App даёт предсказуемый контур: удалённый Mac остаётся исполнителем, а GitHub — источником событий и местом публикации сводки. Изоляция рабочих каталогов обязательна, иначе параллельные PR смешают артефакты и исказят отчёт по lockfile.
Чтобы не держать туннели и патчи окружения на собственной инфраструктуре, рассмотрите стабильный хостинг удалённого Mac у MacPull: выделенный узел Apple Silicon, предсказуемый egress и место под постоянный шлюз автоматизации. Ниже — ссылки без требования входа для чтения.
Закрепите контракт событий (какие action обрабатываете), минимизируйте scope токена и проверяйте каждый релиз шага через openclaw doctor — так цепочка GitHub → Mac → Checks остаётся воспроизводимой в 2026 году.
Удалённый Mac под OpenClaw и GitHub Checks
Центр помощи, тарифы, покупка и блог доступны без обязательного входа. Выберите узел под постоянный шлюз и автоматизацию CI.