Hosted раннеры macOS у GitHub или выделенный Mac: честный расчёт
Поминутная ставка это только начало сравнения. Hosted раннеры macOS берут плату и за работу, которую прогретая машина не повторяла бы. И они отнимают время инженеров в очередях. На этой странице оба варианта сравниваются на трёх реалистичных уровнях нагрузки, и все допущения названы.
Допущения
- Hosted macOS оплачивается по $0.062 за минуту, это ставка стандартного раннера. Каждая задача округляется вверх.
- Холодный hosted раннер тратит около 3 минут на задачу, чтобы восстановить зависимости и пересобрать то, что сохранил бы прогретый кэш. Это оплачиваемое время.
- Выделенный M6 mini за фиксированные $139 в месяц, прогретые кэши, без восстановления в каждой задаче.
- Ожидание GitHub не тарифицирует, но оно реально. В часы пик очередь за раннером macOS часто занимает несколько минут.
Три команды, один месяц
light steady heavy
jobs per month 120 400 900
minutes per job 8 10 12
billed on hosted 1,320 min 5,200 min 13,500 min
incl. cache restore (360) (1,200) (2,700)
hosted cost $82 $322 $837
dedicated M6 $139 $139 $139
monthly difference -$37 +$203 +$718Команде с лёгкой нагрузкой стоит остаться на hosted раннерах. Команда со стабильной нагрузкой экономит пару сотен долларов в месяц и получает более быстрые сборки. Команда с высокой нагрузкой каждый месяц платит за машину в несколько раз больше её цены. И получает при этом более медленную.
Откуда берутся скрытые минуты
Каждая hosted задача стартует с чистого образа. Она заново скачивает пакеты SwiftPM, CocoaPods и части среды выполнения симулятора, а потом пересобирает DerivedData с нуля. В настоящем проекте это несколько оплачиваемых минут на задачу ещё до компиляции вашего кода. На выделенной машине эти артефакты сохраняются. Вторая сборка за день начинается там, где закончилась первая.
Скорость, а не только деньги
Тот же прогретый кэш, который убирает оплачиваемые минуты, убирает и минуты реального времени. Команды переносят 12-минутную hosted сборку на выделенный Mac mini с прогретым кэшем. Часто она заканчивается за время от 4 до 6 минут. Очереди перед ней нет. Это разница между pull request, проверенным до обеда, и после.
Чего выделенный Mac не решает
- Параллельные матрицы. Одна машина выполняет одну задачу за раз. Разделите матрицу или добавьте машины.
- Публичные репозитории. Не запускайте чужой код из pull request на машине, которая вам дорога. Оставьте такие задачи на hosted раннерах.
- Кто-то должен её обслуживать. Обновления, служба раннера, стирание. Именно это MacRun делает за фиксированную цену. При простой аренде это ваша работа.
Посчитайте свои цифры в калькуляторе. Полная таблица ставок есть на странице о ценах GitHub Actions.
Частые вопросы
Выделенный Mac всегда дешевле hosted раннеров macOS у GitHub?
+
Нет. Ниже примерно 2,242 минут macOS в месяц поминутная оплата обходится дешевле машины за фиксированные $139. Выше этого выделенный Mac дешевле, и разница растёт с нагрузкой.
Почему hosted раннеры списывают больше минут, чем длится моя сборка?
+
Каждая задача стартует с чистого образа. До компиляции она тратит оплачиваемые минуты на восстановление зависимостей и пересборку кэшей. Прогретая выделенная машина пропускает эту работу во всех задачах после первой.
Насколько выделенный Mac mini быстрее hosted раннера?
+
С прогретым кэшем и без очереди 12-минутная hosted сборка обычно заканчивается за время от 4 до 6 минут. Точный выигрыш зависит от того, какую долю сборки занимают зависимости и кэши.
Можно ли использовать оба варианта сразу?
+
Да, многие команды так и делают. Сборку основной ветки и большинство pull request запускайте на выделенном Mac. Широкие матрицы устройств и задачи публичных репозиториев оставьте на hosted раннерах GitHub.