Если вы искали GitHub Actions macOS slow, iOS CI stuck или macos-latest queued, скорее всего видите:
- 5–10 лишних минут очереди перед merge (хуже в release week)
xcodebuild/pod installс дикой дисперсией — тот же commit, разброс 2–3×- Настроение команды: «CI как лотерея — в пятницу после обеда не мержим»
👉 Эта страница — обзор: результаты benchmark и маршруты чтения. Очередь, дисперсия сборки, cache, ROI и архитектура — у каждой темы своя статья; переходите к нужной.
- warm build P95:
macos-latest14:12 → выделенный Mac mini M4 6:05 (−57 %) - Очередь: в среднем 4:20 → 0
- Дисперсия σ: 3:20 → 1:55 (около −40 %)
Ниже — сводка benchmark и shadow quick start. Cache YAML, scoring model и checklist архитектуры — в связанных тематических статьях.
- warm P95 14:12 → 6:05; σ −40 %; очередь устранена
- Порядок оптимизации: очередь → разделение cold/warm → cache → изоляция concurrency → железо
- Воспроизвести: Shadow quick start
При 20+ PR/день и частой очереди macOS CI → читайте статью про ROI и заполните cost model. При <50 сборок/месяц macos-latest может хватить.
По симптому: очередь → Почему macos-latest в очереди · дисперсия сборки → iOS CI тормозит · ROI → Купить vs арендовать · данные → waterfall + benchmark здесь.
1. Почему GitHub Actions macOS / iOS CI медленный?
Команды застревают в разных местах. Эта страница остаётся на уровне обзора — переходите к теме, которая совпадает с вашим симптомом:
| Что ищете | Типичный симптом | Читать |
|---|---|---|
| macos-latest queued / github actions macos slow | PR ждёт 4–8 лишних минут; хуже в release week | Почему macos-latest в очереди |
| xcodebuild slow / ios ci slow fix | Тот же commit: то 4 мин, то 12 | iOS CI тормозит |
| cocoapods cache / deriveddata cache ci | pod install скачет 3–6 минут |
Гайд по cache Pods/SPM/DerivedData |
| self-hosted runner roi / mac mini ci | Купить или арендовать Mac mini? | ROI: купить vs арендовать |
| self-hosted architecture / multi runner | Concurrency на нескольких машинах, fallback, labels | Архитектура self-hosted |
Если нужно только «насколько быстрее другой runner?», оставайтесь здесь: Benchmark и waterfall.
2. Результаты benchmark: насколько помогает выделенный Mac mini M4
iOS-команда 8 человек · CocoaPods · 25–40 PR/день · без изменений кода приложения, только смена runner. Данные warm build:
| Метрика | macos-latest | Mac mini M4 | Изменение |
|---|---|---|---|
| P50 | 11:38 | 5:22 | -54% |
| P95 | 14:12 | 6:05 | -57% |
| σ | 3:20 | 1:55 | -40% |
| max | 22:40 | 8:30 | -62% |
| Failure rate (14 дней) | 8.0% | 3.2% | — |
Сводка окружения: iOS-команда 8 человек · CocoaPods · 25–40 PR/день · Xcode 16.2 на обеих сторонах · Mac mini M4 16 ГБ + том данных 1 ТБ · 14-дневный shadow dual-run на 187 PR. Разделение cold/warm: статья про дисперсию сборки; воспроизведение: Shadow quick start.
4:00–5:00 |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 52% 5:00–6:00 |■■■■■■■■■■■■■■■■■■ 28% 6:00–7:00 |■■■■■■ 10% P95 6:05 |■■■■■■■■■■■■■■
3. Waterfall времени P95: 14:12 → 6:05 (−57 %)
Главная диаграмма для шаринга — откуда 8m 07s экономии:
macos-latest P95 ████████████████████████ 14:12
│
Очередь убрана −4:50 ████████████░░░░░░░░░░░░
cache/Pods −1:40 ████░░░░░░░░░░░░░░░░░░░░
xcodebuild −1:15 ███░░░░░░░░░░░░░░░░░░░░░
Sign/upload −0:20 █░░░░░░░░░░░░░░░░░░░░░░░
▼
self-hosted P95 ██████████ 6:05 (−57%)
Только очередь ≈ −4:50 → тема очереди. Cache ≈ −1:40 → гайд по cache.
4. Выберите статью под вашу проблему
Темы идут в типичном порядке troubleshooting — начните с того, что болит сильнее:
Болит очередь? → Почему macos-latest в очереди (в подготовке) → Эта страница: benchmark + waterfall Время сборки скачет? → iOS CI тормозит (опубликовано) → Гайд по cache Pods/SPM/DerivedData (опубликовано) Решаете купить или арендовать? → Shadow-данные на этой странице → ROI: купить vs арендовать (в подготовке) → Тарифы Cloud Mac / FAQ CI/CD Нужны multi-runner или fallback? → Архитектура self-hosted (в подготовке)
5. Навигация по темам
Каждая статья закрывает одну конкретную проблему. Эта страница даёт обзор benchmark и ссылки.
| Тема | Кому подходит | Статус |
|---|---|---|
| Почему macos-latest в очереди | PR застревают в очереди | В подготовке |
| iOS CI тормозит | Тот же commit — разброс времени сборки 2–3× | Опубликовано |
| Ускорить iOS CI: cache Pods/SPM/DerivedData | Скопировать YAML, настроить ключи cache | Опубликовано |
| Стоит ли self-hosted runner? | Расчёт: купить vs арендовать Cloud Mac | В подготовке |
| Архитектура self-hosted Mac mini | Multi-runner, labels, fallback | В подготовке |
Опубликованные связанные статьи: Primer CI Mac mini M4 · ROI engineering-hours · FAQ CI/CD
6. Shadow benchmark quick start
Ниже — минимальные шаги воспроизведения. Полный workflow и checklist rollout: тема архитектуры; cache YAML: гайд по cache.
- Скопировать
ios-ci.yml→ios-ci-shadow.yml; добавить job сruns-on: [self-hosted, macos-m4-ios] - Dual-run каждый PR против
macos-latestс тем же commit SHA 7–14 дней - Записывать wall time P50/P95 и время очереди; считать warm build P95 отдельно (определение в iOS CI тормозит?)
- Сравнить failure rate, затем читать ROI: купить vs арендовать
on:
pull_request:
branches: [main, release/*]
jobs:
ios-hosted:
runs-on: macos-latest
ios-shadow:
runs-on: [self-hosted, macos-m4-ios]
# same steps · same SHA
7. FAQ
Насколько быстрее self-hosted runner GitHub Actions macOS по сравнению с macos-latest?
В этом прогоне: warm build P95 −57 % (14:12→6:05), σ −40 %. См. Benchmark; воспроизвести через Shadow quick start.
Почему runner'ы GitHub Actions macOS стоят в очереди?
Общий hosted pool + всплеск concurrency в release week. Время очереди не тарифицируется, но входит в wall time. Полный разбор → тема очереди.
Self-hosted runner'ы менее стабильны?
Зависит от ops: запас диска, надзор runner, signing assets. Сравнивайте failure rate в shadow; здесь за 14 дней 8,0 % → 3,2 %. macos-latest как fallback снижает воспринимаемый риск.
Стоит ли Mac mini как CI runner?
Имеет смысл при 20+ PR/день с ухудшающейся очередью. При <50 сборок/месяц hosted может хватить. Scoring model и TCO → ROI: купить vs арендовать.
Какие ограничения у GitHub macos-latest?
Общая очередь, эфемерные workspace, нестабильный cache между job'ами, конкуренция I/O. Нельзя закрепить DerivedData или убрать очередь.
Как оптимизировать P95 iOS CI?
Очередь → cold/warm → cache → concurrency → железо. Пошагово: очередь · дисперсия сборки · гайд по cache.
Как оптимизировать cache CocoaPods?
Полный YAML и дизайн ключей → гайд по cache.
Сколько длится миграция?
1–2 дня подготовки + shadow 7–14 дней + постепенный rollout 3–5 дней. Сначала shadow только с тестами, signing импортировать позже.
8. Итог
После перехода на self-hosted runner warm P95 снизился с 14:12 до 6:05, дисперсия заметно сузилась. Эта страница показывает benchmark и waterfall; очередь, дисперсия сборки, cache, ROI и архитектура — в отдельных статьях. Перед покупкой железа проведите shadow dual-run на своих данных.
Подтвердите ROI, затем закажите
Рекомендуемый путь: Shadow dual-run → ROI: купить vs арендовать → Арендовать Mac mini M4. Vuncloud предлагает выделенные узлы M4 (Xcode предустановлен, том данных 1 ТБ, гайд по настройке runner).
FAQ onboarding CI/CD · Тарифы и заказ · Арендовать Mac mini M4