Если вы находите старые метки только поиском по YAML в основной ветке, полноту проверки доказать нельзя. Сначала составьте реестр репозиториев, переиспользуемых workflow, динамических конфигураций и фактических запусков, а затем подтвердите миграцию на реальных задачах: GitHub объявил вывод macOS 14 Runner из эксплуатации 2 ноября 2026 года (официальное объявление).
Материал для администраторов GitHub-организаций, проверяющих репозитории; руководителей CI-платформ, разбирающих общие workflow и динамические метки; ответственных за разработку и публикацию, которым нужны доказательства приёмки сборки, тестов и релиза.
Последнее обновление: 8 октября 2026 года. Дата завершения поддержки, затрагиваемые метки и график временных brownout сверены с объявлением GitHub. При изменении объявления повторно проверьте список меток и рекомендуемые замены до принятия решения о миграции.
Какие метрики показывают, что инвентаризация охватила всю организацию?
Надёжный аудит измеряет не число найденных строк, а полноту охвата и возможность повторить проверку. В итоговом реестре должно быть видно, какие репозитории включены, где задаётся Runner, какие задачи действительно запускались и кто принимает оставшиеся исключения.
Для оценки используйте отдельные показатели:
- Охват репозиториев: сколько репозиториев попало в согласованную область проверки, сколько проверено, сколько недоступно или исключено с обоснованием.
- Полнота конфигурации: найдены ли не только локальные файлы workflow, но также вызываемые и вызывающие переиспользуемые workflow, матрицы, выражения и генерируемые конфигурации.
- Прослеживаемость запусков: сопоставлены ли статические находки с историей выполнений, включая ветви и события, для которых нет регулярного запуска.
- Приёмка миграции: есть ли для каждой затронутой задачи результат прогона на выбранной замене, ответственное лицо и решение по оставшимся несовместимостям.
Границы аудита зафиксируйте до начала поиска: организация, репозитории, обслуживаемые ветви, общие шаблоны и область публикации. Не включайте репозиторий в результат как «чистый», если его содержимое не удалось получить. Отдельно обозначайте архивные, недоступные и исключённые проекты; у каждого исключения должна быть причина и владелец решения.
Когда заканчивается поддержка? В объявлении GitHub указано, что macOS 14 Runner выводится из эксплуатации 2 ноября 2026 года; там же приведены затрагиваемые метки и сведения о временных brownout (объявление о завершении поддержки). Это статус объявленных GitHub hosted runners, а не доказательство того, что отдельный самостоятельно размещённый Mac автоматически перестанет работать в тот же день.
Сначала зафиксируйте исходную область и снимок найденных зависимостей. Тогда изменения в составе организации или настройке общих workflow не будут незаметно менять смысл отчёта.
Источники старых macOS-меток и способы их обнаружения
Перечень macOS-14 runner labels для проверки включает macos-14, macos-14-large и macos-14-xlarge, названные в объявлении GitHub. Ищите не только точное написание метки, но и место, где оно формируется: например, матрица или выражение могут выбирать значение во время выполнения.
Составьте карту источников конфигурации. Синтаксис ключей workflow и заданий описан в справочнике GitHub по синтаксису workflow, а особенности выбора Runner — в документации о назначении Runner для задания.
Проверьте как минимум следующие места:
runs-onв файлах workflow каждого охватываемого репозитория;runs-onв вызываемом переиспользуемом workflow и параметры, переданные вызывающей стороной;- матрицы, где метка задаётся элементом массива или строится из нескольких значений;
- выражения, зависящие от
vars,inputs,githubи других контекстов; - конфигурацию, создаваемую скриптом, генератором или внешним шаблоном;
- файлы в ветвях, которые реально используются для релизов или обслуживания, а не только в основной ветке.
Для переиспользуемых workflow отдельно сопоставьте вызывающую и вызываемую стороны: GitHub описывает передачу настроек и повторное использование в документации по переиспользуемым workflow. Исправление только вызывающего файла не обязательно устраняет старую метку, если фактический runs-on находится внутри общего шаблона. Обратная ошибка тоже возможна: шаблон исправлен, но отдельный вызов передаёт старое значение через входной параметр.
Статический поиск удобен для первого прохода, но не устанавливает полноту. Например, rg -n 'macos-14' .github обнаружит явные вхождения в проверенных файлах, но не докажет, что охвачены все репозитории, ветви, закрытые для сканера проекты или строки, формируемые во время выполнения. Сохраняйте дату сбора, перечень репозиториев и результат доступа, а не только вывод поиска.
Как проверить переиспользуемые workflow? Проследите цепочку от вызывающей задачи до файла общего workflow, проверьте входные параметры и место вычисления runs-on. Если значение задаётся выражением, просмотрите доступные контексты и синтаксис выражений GitHub Actions, а затем подтвердите выбранное значение фактическим запуском. По одному имени файла вызывающей стороны такую зависимость не всегда можно исключить.
Сопоставление конфигурации с фактическими запусками
Статическая конфигурация отвечает на вопрос «где может находиться зависимость», а история запусков — «какая задача действительно использовала этот путь». Для каждой обнаруженной или потенциальной зависимости зафиксируйте репозиторий, workflow, событие запуска, ветвь, источник метки и последний доступный результат.
Используйте данные запусков workflow в интерфейсе GitHub или через REST API запусков workflow. При автоматизации выгрузки обрабатывайте страницы результатов до конца: частичная выдача API не является полным журналом. Сверяйте идентификатор и имя workflow с реестром конфигураций, чтобы не приписать запуск одноимённому файлу из другого репозитория.
Ищите «слепые зоны» по триггерам и жизненному циклу задачи:
- запуск по расписанию, который не выполнялся в доступном для проверки интервале;
- ручной
workflow_dispatch, когда отсутствие регулярных запусков ошибочно принимают за отсутствие потребителя; - запуск только на ветке релиза или поддержки;
- задача, вызываемая другим workflow и потому не очевидная при просмотре отдельных событий;
- конфигурация, где ветвление по выражению выбирает старую метку только при конкретных входных данных.
Отсутствие недавних сбоев — не свидетельство отсутствия зависимости. Задача могла не запускаться, запускаться в отдельной ветке или не достигать условия, выбирающего старый Runner. Записывайте «нет доступного подтверждения» как состояние проверки, а не как результат «миграция не требуется».
Оценка риска для сборки и выпуска
Одинаковая техническая находка может иметь разный бизнес-эффект. Старый Runner в необязательной проверке pull request и старая метка в единственном процессе архивирования и подписи приложения — не равнозначные риски. Свяжите каждый пункт реестра с критичностью задачи, ответственным владельцем и способом безопасного тестирования.
Разделите работу по назначению:
- Обычная проверка изменений: сборка или тест, результат которых можно повторно получить до слияния.
- Регрессионный процесс: периодический прогон, важный для контроля качества, но не всегда блокирующий публикацию.
- Подготовка релиза: задачи, которые создают архив, выполняют подпись или передают продукт дальше по цепочке.
- Публикация: операции с производственными учётными данными и выпуском, где ошибка может задержать релиз или потребовать восстановления.
Для каждой категории запишите, какие версии инструментов, зависимости и параметры окружения обязательны. Сверьте фактически установленное ПО с официальной информацией об образах в репозитории Actions Runner Images. Не делайте вывод о совместимости только по сходству имён меток: рекомендуемый GitHub Runner следует считать кандидатом на проверку, а не уже принятой заменой.
Временные brownout из объявления полезны как повод проверить готовность заранее, но время такого прогона не заменяет критерии приёмки. Если задача не прошла важный этап — например, тестирование подписи или публикации, — не снимайте блокировку лишь потому, что базовая сборка завершилась успешно.
Отмечайте причину каждого риска отдельно: зависимость от конкретной версии инструмента, динамический выбор Runner, неиспытанная подпись или отсутствие владельца. Фраза «несовместимость проверена» без сценария, входных данных и результата не даёт проверяемого основания для выпуска.
Закрытие миграции проверяемым результатом
Как найти все оставшиеся workflow? Сделайте поиск по каждому доступному репозиторию, затем сопоставьте результаты с каталогом организации, общими шаблонами и запусками. Поиск по основной ветке — один источник доказательств, а не подтверждение полного охвата: статус каждого непроверенного проекта должен оставаться видимым до его проверки или формального исключения.
Как подтвердить охват всех репозиториев? Сверьте полученный перечень с административным списком организации, отметьте недоступные и исключённые проекты и сохраните основание для каждой отметки. Затем сравните реестр файлов и вызываемых workflow с журналами фактических запусков: расхождение означает, что нужно выяснить, какой источник конфигурации или путь выполнения не учтён.
Используйте этот чек-лист как выходной критерий аудита:
- [ ] Зафиксированы организация, репозитории и правила включения в область проверки.
- [ ] Для каждого проекта отмечено состояние доступа: проверен, недоступен или исключён с обоснованием.
- [ ] Проверены прямые вхождения всех трёх затрагиваемых меток:
macos-14,macos-14-large,macos-14-xlarge. - [ ] Прослежены вызываемые и вызывающие reusable workflow, входные параметры и значения
runs-on. - [ ] Проверены матрицы, контексты, выражения и конфигурация, формируемая генераторами или скриптами.
- [ ] Находки сопоставлены с запусками по workflow, ветвям и событиям; непроверенные пути отмечены явно.
- [ ] Каждому затронутому процессу присвоены критичность, ответственный и план проверки.
- [ ] Для выбранной замены записаны конфигурационное отличие, результат реальной сборки и проверка требуемых тестов и публикационных шагов.
- [ ] Неудачные или неполные проверки не закрыты формулировкой «не воспроизводится» без доказательств.
- [ ] Все исключения имеют одобрение, владельца и условие пересмотра.
В таблицах ниже разделите факты аудита и решение по переходу. Первая помогает оценить, насколько реестр годится для повторной проверки; вторая — определить, можно ли снимать ограничение или требуется дальнейшая работа.
| Проверяемый показатель | Достаточное свидетельство | Сигнал незакрытого пробела |
|---|---|---|
| Охват репозиториев | Список организации сопоставлен с результатами сканирования; для каждого проекта есть статус | Нет доступа, списка исключений или владельца |
| Источник Runner | Зафиксированы файл, workflow, вызываемая конфигурация и источник значения | Найдено только место вызова или только шаблон |
| Динамический выбор | Проверены выражение, контекст, матрица и результат фактического запуска | Неизвестно, какое значение выбирается для релизного события |
| История выполнения | Запуски связаны с ветвью, событием и задачей из реестра | Есть только статический поиск либо неполная история |
| Миграция | Реальный сценарий завершил требуемые этапы; результат сохранён | Проверена только базовая сборка или тестовый workflow |
| Рабочая нагрузка | Что нужно проверить до принятия замены | Условие закрытия |
|---|---|---|
| Проверка pull request | Сборка и обязательные тесты на обычных входных данных | Статус достаточен для установленного правила проверки изменений |
| Периодическая регрессия | Сценарий расписания, зависимости и тестовые наборы | Проверен предусмотренный для команды путь запуска |
| Архивирование и подпись | Профили, сертификаты, секреты и получение подписанного артефакта | Ответственный подтвердил полный шаг архивирования и подписи |
| Публикация | Разрешения, защищённые значения и передача артефакта | Пройден согласованный сценарий публикации или отдельная контролируемая проверка |
Официальная рекомендация по метке не означает, что конкретный проект уже мигрировал. Перед закрытием пункта сохраните старую и новую конфигурации, ссылку на результат выполнения, выявленные отклонения и решение владельца. Если тест прошёл только на упрощённом workflow, обозначьте, какие реальные действия — например, подпись или публикация — остались непроверенными.
Решение по незакрытым зависимостям
Что делать с неиспользуемой или редко запускаемой задачей? Не удаляйте её из реестра на основании редких запусков. Определите владельца, проверьте ручной и релизный путь, а затем либо проведите миграционный тест, либо получите документированное решение об исключении с условием повторной проверки.
Для каждого незакрытого пункта выбирайте один из трёх статусов: миграция принята, временное исключение одобрено или необходима отдельная среда выполнения. Исключение должно указывать конкретную задачу, причину, ответственного и событие, при котором решение пересматривается. Если блокирует совместимость инструментария или процесс подписи, не маскируйте это общим статусом «частично готово».
| Решение | Когда применять | Что обязательно сохранить |
|---|---|---|
| Завершить миграцию | Реальный сценарий прошёл проверку и все требуемые этапы подтверждены | Конфигурационное отличие, результаты и согласование владельца |
| Оставить временное исключение | Осталась конкретная блокировка, но риск и срок пересмотра приняты ответственными | Обоснование, владелец, затронутый workflow и условие закрытия |
| Выделить отдельную Mac-среду | Задача требует контролируемого Mac-окружения, а совместимость с заменой не подтверждена | Требования к инструментам, доступу, секретам, запуску Runner и обслуживанию |
При выборе среды сравнивайте не только вычислительную задачу, но и операционные ограничения. Hosted Runner зависит от набора предложенных меток и изменения образа; собственная Mac-среда добавляет ответственность за обновления, контроль доступа, обслуживание и безопасную работу с секретами. Аренда удалённого Mac сама по себе не гарантирует совместимость с GitHub Actions: отдельно проверьте регистрацию и эксплуатацию self-hosted Runner, сетевые требования, изоляцию задач и правила очистки окружения.
Если вашим проверенным задачам нужен отдельный Mac, а покупать и обслуживать собственные машины сейчас нецелесообразно, сравните этот путь с арендой удалённого Mac у KVMFLUX. Такой вариант не устраняет необходимость самостоятельно спроектировать безопасное подключение CI и проверку процессов, но позволяет оценить использование реального Mac с доступом через VNC, SSH или веб-консоль и root-правами. Сначала сопоставьте сценарий с вариантами применения удалённого Mac, затем сверьте доступные циклы аренды и условия на странице тарифов. Для редкой, уже протестированной задачи временная среда может быть уместна; для постоянно работающей критической инфраструктуры сначала сравните аренду с самостоятельным владением, требованиями изоляции и планом эксплуатации.
Читайте также
- Как масштабировать пул macOS Runner в GitHub Actions и подготовить его к росту нагрузки
- Настройка собственного macOS Runner: регистрация, маршрутизация заданий и эксплуатация
- Выбор между Xcode Cloud и собственным Mac CI после инвентаризации устаревающих Runner
Подготовьте новый узел CI к переходу с macOS 14
Арендуйте в KVMFLUX выделенный Mac mini M4 и перенесите сборки на собственную машину с macOS. Подключайтесь по SSH или VNC и настройте узел CI под требования ваших рабочих процессов. Вы сами управляете окружением и выбираете, когда обновлять macOS и инструменты сборки. Выберите срок аренды — от суток до квартала — и подходящий регион без закупки оборудования.