macOS 14 Runner: дата вывода и решение для миграции
2 ноября 2026 года GitHub вывел из эксплуатации метки macos-14, macos-14-large и macos-14-xlarge. Если workflow всё ещё назначает одну из них, не заменяйте её автоматически на latest: сначала сопоставьте требования проекта к macOS, Xcode и архитектуре с поддерживаемыми образами, затем проведите изолированный прогон сборки, тестов и выпуска. Дату и список затронутых меток подтверждает официальное объявление GitHub о выводе образа macOS 14.
Кому пригодится: командам Apple-разработки, у которых в workflow остались macos-14, macos-14-large или macos-14-xlarge, и инженерам, отвечающим за подпись, тестирование и публикацию.
DevOps- и платформенным специалистам материал поможет задать критерии приёмки нового окружения и заранее определить условия отката.
Последнее обновление: 8 ноября 2026 года. Сведения проверены по объявлению GitHub об окончании поддержки, документации GitHub-hosted runners и репозиторию runner-images.
Сначала установите область воздействия и доступность меток
Сама замена строки runs-on не доказывает, что новая среда подходит проекту. Нужно выяснить, какие задания используют устаревшие метки, как они запускаются и какие требования предъявляют к macOS CI. Информация об образах и доступных метках может меняться, поэтому при выборе сверяйтесь с текущей документацией GitHub и описанием конкретного образа в репозитории runner-images, а не только с текстом объявления об окончании поддержки.
Как найти задания, которые требуют миграции
В репозитории найдите в workflow-файлах варианты runs-on с тремя выведенными метками. Проверьте также общие workflow, переиспользуемые workflow и генерируемые конфигурации: нужная строка может находиться не только в основном YAML-файле. После поиска сопоставьте конфигурацию с историей запусков. По журналам видно, какие ветки, события и типы заданий фактически доходили до соответствующего Runner.
Для каждого затронутого задания зафиксируйте:
- репозиторий, workflow, job и значение
runs-on; - выполняемые команды сборки, тестирования, подписи и публикации;
- версии Xcode и SDK, которые workflow выбирает явно или получает из образа;
- архитектурные требования зависимостей и используемых бинарных инструментов;
- доступ к приватным пакетам, секретам, хранилищам артефактов и внешним сервисам.
Такой перечень снижает риск пропустить редко запускаемый релизный workflow: обычный CI может продолжать работать, а публикация из защищённой ветки — отказать при первом запуске после переключения.
Где искать замену старому Runner
Сначала откройте текущий список GitHub-hosted runners и их меток, затем сверьте нужную платформу с составом образов в runner-images. Метки вроде macos-15 или macos-26 рассматривайте только в том случае, если они доступны для нужного типа Runner в актуальной документации на момент изменения workflow. Не считайте рекомендацию из объявления полным перечнем всех вариантов, доступных вашей организации.
Какую метку выбрать вместо macos-14? Выбирайте не наиболее новое имя само по себе, а образ, который одновременно отвечает требованиям проекта к системе, Xcode и архитектуре. Если подходящей поддерживаемой метки нет, оставьте задание на прежней конфигурации только на время допустимого перехода, если она ещё работает, либо вынесите проверку на другой подходящий исполнитель; не переводите производственный выпуск на непроверенный образ.
Перед изменением основного workflow сохраните исходное значение
runs-onи зафиксируйте версию Xcode, SDK и важные переменные окружения из последнего успешного запуска. Без исходного состояния сложно понять, вызвано ли изменение отказом образа, обновлением инструментария или самой правкой workflow.
Затем проверьте совместимость macOS, Xcode и SDK
Метка Runner обозначает среду исполнения, но не обещает совместимость всего проекта. Образ может содержать другую версию macOS, а заданная в workflow версия Xcode может иметь собственные требования к системе. В результате смена образа меняет сразу несколько условий, даже если YAML-файл отличается одной строкой.
Для проверки версий используйте официальные примечания к выпуску Xcode 26 и системные требования Xcode. Сверьте выбранную версию Xcode с установленной системой и нужным SDK. Отдельно отметьте, использует ли проект стабильный выпуск или предварительную версию: наличие Beta в образе не означает, что она подходит для выпускной сборки.
Что проверять при переходе с macos-14 на macos-15 или macos-26? Сначала подтвердите поддержку установленной версии Xcode в выбранной macOS, затем проверьте целевые SDK, сценарии сборки и доступность нужных Simulator-устройств. Название более нового образа не подтверждает, что он содержит нужную связку Xcode и SDK; проверяйте фактическую версию в логе задания и в перечне программного обеспечения образа.
В workflow полезно явно выводить сведения о среде до сборки: версию macOS, выбранный Xcode, версию инструментов командной строки и доступные SDK. Команды sw_vers, xcodebuild -version и xcodebuild -showsdks помогают получить эти сведения непосредственно во время job. Сохраните вывод рядом с логами сборки: тогда при сравнении запусков будет видно, изменилась ли среда так, как ожидалось.
Если проект использует несколько конфигураций Xcode, тестируйте каждую нужную конфигурацию явно, а не полагайтесь на версию по умолчанию. Проверьте, не выбирает ли часть workflow Xcode через xcode-select, переменные окружения или стороннее действие. Иначе один job может собираться ожидаемым инструментарием, а другой — неожиданно использовать системный выбор образа.
Отдельно подтвердите архитектуру и нативные зависимости
Архитектура — самостоятельный критерий миграции. Исполнитель может иметь подходящую версию macOS, но не подходить заданию, которое использует Intel-only инструмент, двоичный пакет с ограниченной поддержкой платформ или скрипт, предполагающий определённое значение архитектуры. Успешный запуск Runner подтверждает лишь то, что job стартовал; он не доказывает совместимость всех нативных компонентов.
Проверьте фактическую архитектуру внутри задания командой uname -m, а затем сравните результат с требованиями проекта и документацией выбранной метки. Инвентаризируйте бинарные зависимости, заранее собранные библиотеки, плагины, компиляторы и скрипты, в которых архитектура зафиксирована в аргументах или путях. Если зависимость устанавливается из менеджера пакетов, проверьте не только установку, но и фактическую загрузку или линковку при сборке.
Как организовать Intel-сборку после вывода macOS 14 Runner? Сначала выясните, действительно ли проекту необходим Intel, или ограничение относится лишь к одному бинарному компоненту. Если требуется Intel-исполнение, выбирайте только Runner, который явно предоставляет нужную архитектуру согласно текущей документации; иначе рассмотрите обновление зависимости или отдельный исполнитель с подтверждённой совместимостью. Не предполагайте, что замена версии macOS автоматически сохраняет ту же архитектуру.
В тестовом прогоне разделите проверку на три независимых результата: установка зависимостей, сборка проекта и выполнение тестов. Если установка проходит, но сборка падает на линковке, это другой класс проблемы, чем несовместимый тестовый бинарный файл. Такой разбор позволяет направить исправление в конкретную зависимость или скрипт, а не менять весь workflow вслепую.
Принимайте миграцию по результатам всей цепочки доставки
Для переключения недостаточно увидеть зелёный статус компиляции. Репрезентативная проверка должна использовать тот же commit, который собирался на исходном Runner, и включать задачи, от которых зависит выпуск. Сравнивайте логи, отчёты тестов и сведения о созданных артефактах; если проект использует подпись, включите её в отдельный проверочный запуск с подходящими секретами.
Проверка сборки, Simulator и подписи
Для приложения проверьте чистую сборку, необходимые схемы и тесты проекта. Если используется Simulator, запустите именно целевые сценарии и убедитесь, что тестовый процесс действительно подключается к нужной среде, а не завершается до запуска тестов. Сопоставьте итоговые отчёты тестирования с контрольным запуском; статус job сам по себе не показывает, что все запланированные тесты были выполнены.
Для выпуска дополнительно проверьте архивирование и подпись. Убедитесь, что новый Runner получает только необходимые секреты и сертификаты, а процесс публикации не зависит от пользовательского состояния, оставшегося на прежнем исполнителе. Если используются приватные пакеты или собственные хранилища, отдельно проверьте сетевой доступ и получение зависимостей. Документация GitHub описывает требования к сети и администрированию self-hosted Runner; эти обязанности нельзя автоматически переносить на GitHub-hosted Runner или считать одинаковыми для обеих моделей.
Условия переключения и отката
Используйте параллельный или изолированный workflow: он позволяет проверить новый Runner, не заменяя сразу исполнитель производственного выпуска. Для тестовой ветки задайте отдельное имя job или отдельную метку, если выбранная конфигурация это допускает. Не запускайте два задания с одновременной публикацией одного и того же релиза; проверочный прогон должен собирать и архивировать результат без непреднамеренного выкладывания.
Переходите к рабочему переключению, если выполнены все условия:
- выбранная метка доступна в текущей документации GitHub и соответствует требуемому типу исполнителя;
- зафиксированные версии macOS, Xcode, SDK и архитектура подтверждены логом;
- зависимости устанавливаются, чистая сборка завершается, а требуемые тесты действительно выполнены;
- Simulator-сценарии, если они входят в проект, подтверждены отчётом, а не только запуском job;
- проверены подпись, архив и передача артефактов, если они необходимы для выпуска;
- сетевой доступ, приватные зависимости, кэш и секреты работают согласно политике команды.
Если хотя бы одно критичное условие не выполнено, оставьте новый Runner в изолированном прогоне и устраните причину до переключения выпуска. Заранее определите критерий возврата: например, ошибка обязательной подписи или пропуск тестов, которые ранее были частью релизной проверки. При откате возвращайте только конфигурацию исполнительной среды, не отменяя уже проверенные изменения проекта без отдельного анализа.
Для задания с матрицей платформ, версий или схем используйте правила матриц workflow GitHub Actions. Матрица помогает явно представить проверяемые сочетания, но не заменяет анализ зависимостей: неподдерживаемый вариант может давать систематически красный job и затруднять диагностику полезных результатов.
Учитывайте кэш, сеть и ответственность за обслуживание
Смена Runner способна изменить поведение кэша, даже когда файлы workflow остались прежними. Проверьте ключи кэширования: если в них не учитываются значимые версии Xcode, SDK или архитектура, в новом окружении могут использоваться неподходящие артефакты. Для проверки выполните отдельный прогон без кэша, а затем сравните его с обычным сценарием. Описание принципов доступно в документации GitHub о кэшировании зависимостей в Actions.
В случае приватных пакетов и внутреннего Git-сервера отдельно подтвердите маршруты доступа, сертификаты, DNS и права токенов. Не делайте вывод о сетевой доступности по успешной сборке открытого проекта: закрытая зависимость может загружаться только на определённых исполнителях. На self-hosted среде команда отвечает за обновления, доступность узла, сетевые правила и безопасное хранение секретов; для GitHub-hosted Runner часть инфраструктурного обслуживания находится на стороне GitHub, но проект по-прежнему отвечает за корректность workflow и секретов.
Если время выполнения, ожидание в очереди или доступность Runner важны для релизного графика, сравнивайте фактические логи своих запусков. Объявление о выводе образа не является гарантией производительности или срока ожидания для другой метки.
Сравните варианты среды по требованиям проекта
Три таблицы ниже помогают не смешивать доступность образа, совместимость инструментария и модель эксплуатации. Они не заменяют текущие сведения GitHub об образах: фактический выбор зависит от того, какие метки доступны в момент миграции.
| Вариант | Когда рассматривать | Что проверить до использования |
|---|---|---|
| Поддерживаемый GitHub-hosted Runner | Нужна управляемая GitHub среда и проект укладывается в доступные образы | Текущую метку, macOS, Xcode, архитектуру и установленные инструменты |
| Другой поддерживаемый образ macOS | Требуется перейти с выведенной версии, сохранив подходящий набор возможностей | Совместимость Xcode и SDK, нативные зависимости, Simulator и подпись |
| Self-hosted macOS Runner | Необходимы особые сетевые маршруты, программное обеспечение или управляемая командой среда | Эксплуатацию узла, обновления, безопасность, сеть, очистку и доступ к секретам |
| Измерение | Проверка в контрольном прогоне | Свидетельство для приёмки |
|---|---|---|
| Инструментарий | Вывод macOS, Xcode и SDK | Сохранённый лог с фактическими версиями |
| Архитектура | Архитектура Runner и бинарных зависимостей | Результат uname -m и успешная линковка |
| Сборка | Чистая сборка нужных схем | Лог сборки и ожидаемый архив |
| Тестирование | Проектные тесты и целевые Simulator-сценарии | Отчёт тестов с выполненными наборами |
| Доставка | Подпись и передача артефактов | Проверенный подписанный результат и лог передачи |
| Условие проекта | Решение | Условие возврата к проверке |
|---|---|---|
| Поддерживаемая метка совпадает с требованиями macOS и Xcode | Испытать её в изолированном job | Xcode или SDK отсутствует либо несовместим |
| Все необходимые зависимости поддерживают архитектуру Runner | Выполнить чистую установку и сборку | Установка проходит, но линковка или запуск бинарного файла нет |
| Тесты и Simulator дают ожидаемые отчёты | Подключить проверку к предрелизному workflow | Тесты пропускаются, не запускаются или завершаются иначе |
| Подпись и публикационный артефакт подтверждены | Разрешить переключение выпуска | Не удаётся подписать, архивировать или передать артефакт |
| Приватные зависимости и секреты доступны по политике | Включить среду в регулярный CI | Требуются неразрешённые сетевые исключения или расширение доступа |
Используйте удалённый Mac как отдельную среду для повторной проверки
Если GitHub-hosted Runner не даёт нужного контроля над средой, альтернативой может быть самостоятельный macOS-исполнитель или отдельный удалённый Mac. Это не означает, что такая конфигурация автоматически совместима с текущей сборкой: сначала нужно получить доступ к требуемой версии macOS и Xcode, установить зависимости и прогнать те же проверки, что и на целевом Runner. Важно сохранить commit, параметры сборки и отчёты, чтобы сравнение имело смысл.
Для команды, которой нужен постоянный доступ к настоящей macOS-среде для разработки и верификации, описание удалённого Mac поможет оценить этот вариант отдельно от GitHub-hosted CI. Перед выбором следует сопоставить требования к непрерывному запуску, сетевой политике и обслуживанию. Условия использования и доступные варианты размещения команда может проверить на странице тарифов RUVCLOUD.
Удалённый Mac не всегда заменяет hosted Runner: его нужно включать и обслуживать в соответствии с выбранной схемой, настраивать сетевой доступ и отдельно организовывать безопасную работу с ключами подписи. Если проекту достаточно поддерживаемого GitHub-hosted образа, а контроль над физической средой не требуется, переход на подходящую метку может быть проще. Если же нужен постоянный доступ к macOS для ручной диагностики, воспроизведения CI-сбоев или отдельного тестового контура, удалённую среду имеет смысл оценивать по тем же критериям приёмки, а не по одному факту доступности рабочего стола.
Практический итог для миграции такой: сначала подтвердите метку и содержимое образа по актуальным источникам GitHub, затем отдельно проверьте Xcode, архитектуру, зависимости, тесты и доставку. Только после этого переключайте выпуск. Если проекту дополнительно нужна постоянно доступная Mac-среда для повторной проверки, можно сопоставить её требования с вариантами RUVCLOUD; для стабильной тяжёлой нагрузки или обязательного физического оборудования сначала оцените, подходит ли аренда под эксплуатационную модель команды.