Четыре числа, показывающих критическую точку GitHub CI/CD в 2026 году
Сначала о цифрах. Объём коммитов: COO Kyle Daigle и CTO Vlad Fedorov в апреле подтвердили, что ИИ-агенты пушат на GitHub около 275 миллионов коммитов в неделю, с прогнозом 14 миллиардов за 2026 год — это четырнадцатикратный рост по сравнению со всем 2025 годом. Объём pull request: агентские PR выросли с примерно 4 млн в месяц (сентябрь 2025) до 17 млн в месяц (март 2026). Compute: недельный объём GitHub Actions подскочил с 500 млн минут (2023) до 2,1 млрд минут за одну неделю в апреле 2026. Стабильность: только в феврале платформа зафиксировала 37 инцидентов; 9–13 апреля ожидание agent-сессии разрослось с обычных 15–40 секунд до 54 минут с пиком ошибок 97,5 %; 6 мая инцидент Copilot Cloud Agents довёл общий уровень отказов раннеров Actions до примерно 17,1 %.
GitHub официально признал проблему: Fedorov переписал план мощностей с 10x на 30x, переносит критические по производительности участки с Ruby на Go, изолирует сервисы Git и Actions, выпустил Stacked PRs, чтобы дробить массивные агентские посылки на ревью-пригодные куски, и обсуждает опцию отключения PR для отдельных репозиториев. Эти меры — на годы. Для команд, чья iOS-пайплайн привязана к хостед macOS-раннерам, «хвост очереди и эпизодические провалы» — это базовое состояние второй половины 2026 года, а не временное явление.
275 млн коммитов в неделю. Давление записи ИИ-агентов в 14 раз превышает весь 2025 год; каждый PR одновременно дёргает Actions, проверку слияния, вебхуки и кеши.
17 млн агентских PR в месяц. 23 апреля один инцидент merge queue затронул 658 репозиториев и 2 092 PR одновременно.
2,1 млрд минут Actions в неделю. Compute и пулы раннеров поглощаются геометрически; macOS-пул нагружается значительно сильнее, чем Linux.
17,1 % отказов 6 мая. Хрестоматийный thundering herd: централизованный аллокатор раннеров не справляется с пиками агентов.
Цель 30x по мощности. План 10x устарел за четыре месяца; перегрузка остаётся структурной до запуска новых дата-центров в 2027 году.
37 инцидентов в феврале. Переведите SLA-модель с «раз в несколько месяцев» на «каждые 48 часов что-то происходит».
Вывод: цена привязки стабильности пайплайна к единственному централизованному пулу раннеров в эпоху ИИ-агентов резко возросла. Следующие два раздела сузят оптику до macOS и до оси «человек против агента».
Почему хостед macOS-раннеры ломаются первыми: пул, цена и каскад retry
Хостед Linux-раннеры работают на больших, во многом взаимозаменяемых x86_64-пулах. macOS-раннеры ограничены поставками Apple Silicon и условиями лицензирования: пул значительно меньше, а минута стоит примерно на порядок дороже, чем на Linux. До 2025 года колебания поглощались за счёт queue-awareness и retry. Эпоха агентов рушит эту модель: один ночной рефакторинг агента может открыть десятки PR за несколько часов, и каждый PR последовательно запускает lint, unit, integration, archive и notary. Загрузка ρ macOS-пула приближается к 1, и теория очередей говорит, что длина ожидания резко возрастает задолго до ρ=1. P50 уходит из секунд в минуты, P95 — в двузначные числа минут.
Сложнее всего парировать наложение retry-шторма на холодный старт. Один flaky-тест падает, агент автоматически делает повтор, несколько агентов одновременно входят в цикл «запрос — отказ — повтор» и формируют thundering herd на сервисе аллокации. Холодный старт хостед macOS-раннера — 60–120 секунд, что является непомерным накладным расходом для коротких задач (lint, проверка PR) и тяжелым штрафом для длинных задач (archive, выгрузка TestFlight, notary), которые перед стартом и так ждут в очереди минут пятнадцать. Таблица ниже сопоставляет Linux-, хостед-macOS- и выделенный self-hosted macOS под нагрузкой ИИ-агентов. Её можно копировать прямо в RFC или техническое задание.
| Параметр | Linux (хостед) | macOS (хостед) | macOS self-hosted (KVMNODE) |
|---|---|---|---|
| Размер пула | большой, по регионам | малый, ограничен Apple | выделенные машины по заказу |
| Цена за минуту | низкая (~$0,008/мин) | ~10x Linux | фиксированный тариф день/неделя/месяц |
| Хвост очереди при ИИ-нагрузке | минуты | обычны 5–10+ минут | планируется вами |
| Холодный старт | 10–30 с | 60–120 с | постоянный раннер, < 1 с |
| Гранулярность секретов | уровень workflow | уровень workflow | аккаунт, keychain, профиль |
| Archive / Notary | слабо чувствительны | сильно усиливаются | выделенные окна |
Проблема macOS-раннера в 2026 — не «медленно», а «непредсказуемо когда станет медленно».
Если вы уже реализовали org-level раннеры и concurrency-группы по руководству по self-hosted раннеру, следующий шаг — разнести агентские и человеческие PR на разные метки раннеров. Если же вы пока полностью на хостинге, оцените пороги в §4.
Новая ось безопасности: Mini Shai-Hulud, Megalodon и конец «посмотрит ревьюер»
В мае 2026 года две кампании цепочки поставок окончательно разрушили негласное допущение, что автоматические коммиты освобождены от ревью. Mini Shai-Hulud — это npm-червь, который похищал OIDC-токены GitHub Actions, подделывал валидный SLSA / Sigstore provenance и закреплялся, записывая вредоносные hook в ~/.claude/settings.json и .vscode/tasks.json — конфигурационные файлы, которые ИИ-инструменты кодирования воспринимают как доверенный источник инструкций. На Linux он дополнительно ставил gh-token-monitor.service: разрушительный триггер, уничтожающий домашний каталог при ротации GitHub-токена. Megalodon действовал прямо: 18 мая с 11:36 до 17:48 UTC, за шесть часов, атакующий запушил 5 718 коммитов в 5 561 репозиторий, используя поддельные идентичности типа build-bot, auto-ci, ci-bot и pipeline-bot. Коммиты внедряли workflow GitHub Actions для эксфильтрации OIDC-токенов, SSH-ключей, Docker-учётных данных и облачных секретов на C2 216.126.225.129:8443. Общая черта обеих кампаний — commit-сообщение и поле author визуально неотличимы от обычной CI-рутины, а окна выбирались в часы низкого внимания.
Для iOS / macOS-команд это означает простую вещь: Match-keychain, ключи App Store Connect, notary, профили и provisioning живут именно там, куда метят OIDC и workflow-инъекции. «Ревьюер посмотрит PR» больше не работает как последний рубеж: ревьюер видит сотни агентских PR в неделю, легитимные агенты сами правят .github/workflows/*.yml (версии actions, ключи кеша), и визуальное отличие легитимной активности от вредоносной исчезает. Шесть мер ниже опускают рубеж защиты в саму пайплайну. Включайте их в квартальную дорожную карту платформенной инженерии.
workflow deny-by-default. Репозиторий по умолчанию permissions: {}, job явно включают минимальный OIDC-scope. pull_request_target выключаем или закрываем обязательным ревью.
Верифицированная идентичность агента. Все коммиты агента подписываем GPG/SSH и привязываем к SSO-домену. CI отказывает анонимным авторам в архивах и notary macOS.
Песочница секретов. macOS-keychain, ключи App Store Connect и приватные ключи Match — только на human-раннере; агентский раннер не имеет к ним доступа. Подпись из fork-PR запрещена.
Гигиена OIDC и PAT. PAT — только fine-grained, короткий TTL. OIDC-subject ограничен repo:org/repo:environment:prod, широкий workflow_dispatch отзываем.
Базовая линия аудита workflow. .github/workflows/*.yml — защищённые файлы; изменения агента — через protected branch и двойное ревью. ~/.claude/settings.json и .vscode/tasks.json на рабочих станциях добавляем в EDR-мониторинг.
Минимизация исходящего трафика. Self-hosted macOS-раннер выпускаем только на GitHub, Apple и API ваших моделей. Блокируем TCP 8443/443 на неизвестные IP — это и есть подпись канала C2 у Megalodon.
По отдельности ни одна из мер не нова. Новым является то, что в эпоху ИИ-агентов каждая из них из «лучшей практики» превратилась в обязательную. На 100 % хостед раннерах нельзя обеспечить нужную глубину; на выделенном self-hosted узле каждая строка прямо мапится в macOS-keychain, launchd, правила pf и метки Actions-раннера.
Дерево решений по уходу с хостинга и выбор KVMNODE: шесть регионов × M4 / M4 Pro
Не каждому проекту нужно прямо сейчас покидать хостед macOS-раннеры. Оцените четыре количественных порога: (1) месячный счёт за хостед уже превышает аренду эквивалентного Mac Mini; (2) P95 ожидания в очереди в рабочие часы превышает 10 минут и тормозит мерж; (3) концентрация секретов: несколько workflow всё ещё делят один keychain и широкий OIDC-scope; (4) доля агентских PR в репозитории перевалила за 30 %. Если попало хотя бы два пункта — включайте выделенный self-hosted macOS-раннер в план следующего квартала. Дерево решений ниже рассчитано на прямое копирование в планировочный документ.
Оценка порогов. Счёт, P95, концентрация секретов, доля агента; два и более срабатывания — переходим к миграции.
Выбор региона. Сингапур, Япония, Корея, Гонконг, US East или US West — согласуем с Git-источником и хранилищем артефактов, чтобы сократить latency клонов и кеша.
Пилот на неделю. Запускаем M4 16ГБ·256 или 24ГБ·512 как ночной spike-раннер и дневной PR-раннер; сравниваем P50/P95 на том же наборе PR.
Парные очереди. На одном выделенном узле регистрируем два экземпляра actions-runner с метками self-hosted, macos, human и self-hosted, macos, agent; workflow маршрутизируется по типу автора PR.
Песочница секретов. Агентский раннер — отдельный macOS-пользователь и keychain; signing / notary / TestFlight upload разрешены только на human-метке и через environment с ручным апрувом.
Порог апгрейда. Если в одном временном окне идут ≥ 3 параллельных xcodebuild, матрица симуляторов и регресс агента — апгрейдим до M4 Pro 64ГБ·2ТБ или добавляем второй узел.
name: ios-ci
on: [pull_request]
permissions: {}
jobs:
lint-and-unit:
runs-on: [self-hosted, macos, agent]
permissions:
contents: read
steps:
- uses: actions/checkout@v4
- run: ./scripts/lint.sh
- run: ./scripts/test-unit.sh
archive-and-notary:
if: github.event.pull_request.user.type != 'Bot'
runs-on: [self-hosted, macos, human]
permissions:
id-token: write
contents: read
environment: prod-signing
steps:
- uses: actions/checkout@v4
- run: ./scripts/archive.sh
- run: ./scripts/notarize.sh
Скелет выше укладывает три политики в двадцать с лишним строк: верхний уровень permissions: {} = deny-by-default, сегрегация по меткам — lint/unit и archive/notary, защита if: github.event.pull_request.user.type != 'Bot' от подписи прод-сборок ботами. На хостед раннерах YAML можно записать формально, но реально привязать его к macOS-keychain, launchd и pf-allowlist получается только на выделенном узле. Связка с конвенциями посадочных мест и очередей из многоместного SSH-режима даёт цельный runbook, где «человек + агент + несколько разработчиков» живут на одном узле без конфликтов.
Про сайзинг: для средних iOS-репозиториев с небольшим числом людей и эпизодическим трафиком агента подходит M4 16ГБ·256 или 24ГБ·512 + месячная база и дневной spike. Для смешанных нагрузок (матрица симуляторов, ночной регресс агента, co-hosted OpenClaw Gateway) сразу берём M4 Pro 64ГБ·2ТБ. Для глобальных команд работают правила RTT и same-region из шести регионов и условий аренды; при бюджете — второй узел в запасном регионе как failover защищает от отказов одного региона.
Три строки для технического задания и честное сравнение альтернатив
Сожмём предыдущие разделы в три обязательных правила для техзадания. (1) Агентские раннеры имеют собственные метки, аккаунты и keychain и никогда не делятся с человеческими разработчиками. (2) OIDC-scope и PAT — короткий TTL, минимальные привилегии, авторотация, прод-подпись изолирована через GitHub Environments. (3) Коммиты агента требуют верифицированной идентичности автора, а .github/workflows/*.yml живёт за protected branch с двойным ревью. Пропуск любого из трёх правил геометрически повышает вероятность нарваться на следующий Mini Shai-Hulud / Megalodon.
9–13 апреля, agent-сессии: ожидание 54 минуты, пик отказов 97,5 %. Командам с фиксированным релизным окном нужен резервный путь.
18 мая, Megalodon: 5 561 репозиторий с внедрённым workflow за шесть часов. Песочница секретов и deny-by-default — единственные масштабируемые контрмеры.
Холодный старт macOS 60–120 с: поверх archive / notary это субъективно «PR висит полчаса». Постоянный выделенный раннер закрывает задачу напрямую.
Внимание: уход с хостинга перекладывает на вас ритм обновлений macOS, версии Xcode, command-line tools и signing profile. Зафиксируйте недельное окно для апдейтов, отслеживайте release notes Xcode beta на разрывы ABI и переиспользуйте скрипты диагностической лестницы OpenClaw как health-проб для раннера.
Честно сравним альтернативы. Остаться на 100 % хостед — счёт и хвост очереди растут с трафиком агента, изоляция секретов ограничивается уровнем workflow, при атаке уровня Megalodon остаётся ждать публичного анонса платформы. Mac mini «в кладовке» в офисе — низкая физическая стабильность, нет launchd-индустриального управления, отключение интернета на праздники останавливает релизы. macOS на универсальной cloud-VM (не на Apple-железе) — нарушает лицензию Apple и заметно теряет в производительности. Для пайплайны iOS / macOS, которая обязана сосуществовать с ИИ-агентами в проде, аренда Mac Mini в KVMNODE обычно — лучший ответ: выделенный Apple Silicon, 7×24, шесть регионов, гибкая аренда день / неделя / месяц и место в одной change-заявке для парных очередей, песочницы секретов и ужесточения OIDC. Тарифы — на странице цен, инструкции — в центре помощи, заказ — на странице оформления заказа.