Симптом — Agent Workflow должен выполнить задачу в репозитории и вызвать Xcode, но macOS Runner для этого не подходит.
Быстрое решение — запускайте Agent на поддерживаемом Linux Runner, а Xcode-сборку и тесты поручите отдельному обычному GitHub Actions workflow на macOS; между ними передавайте проверенные артефакты и SHA.
Этот план пригодится инженерам, которые поддерживают автоматизацию репозитория на базе gh-aw и выясняют, где заканчиваются возможности Agent Workflow.
Он также предназначен для специалистов Apple CI и руководителей платформ, которым важно спроектировать передачу файлов, коммитов и полномочий без обхода границ доверия.
Обновлено 25 октября 2026 года; ограничения Runner, поведение workflow_run и правила безопасного использования сверены с официальной документацией GitHub Agentic Workflows и документацией GitHub Actions.
SECTION 01До запуска: разделите три разных слоя
Короткий ответ на запрос «GitHub Agentic Workflows и вызов Xcode»: Agent Job нельзя просто переключить на macOS Runner, чтобы он получил доступ к Xcode. Официальная причина — Agent Workflow Firewall использует контейнерное задание, которое не поддерживается на macOS Runner. Для macOS-инструментов официальная рекомендация — отдельное задание обычного GitHub Actions workflow на macOS. FAQ gh-aw описывает ограничение и рекомендуемое разделение.
Перед настройкой не смешивайте три слоя:
- gh-aw CLI — инструмент, которым вы создаёте, проверяете или компилируете определения Agent Workflow. Возможность установить или запустить CLI на рабочей машине не доказывает, что Agent Job поддерживается на Runner той же операционной системы.
- Agent Workflow — автоматизация, которая работает в рамках поддерживаемого окружения и ограничений Firewall. Ей можно поручить анализ репозитория, подготовку изменения и формирование результата для следующего этапа.
- Обычный GitHub Actions workflow на macOS — отдельный CI-контур, в котором выполняются Xcode, Apple SDK, Simulator, сборка и тесты.
Объяснение механизма работы Agentic Workflows полезно именно для первого разграничения: наличие общего интерфейса GitHub Actions не делает Agent Job и обычный macOS job одним типом исполнения. Допустимые параметры Runner и ограничения конфигурации сверяйте с руководством по frontmatter, а не выводите их из того, где запускается CLI.
На этом этапе запишите в задаче команды, какой контур создаёт каждый результат. Agent может разобрать заявку, проверить метаданные проекта, подготовить патч или сформировать отчёт. Но проверку компиляции с Xcode, запуск тестов с Apple SDK и создание соответствующих CI-артефактов должен выполнять macOS workflow. Если требуется исправление кода по результатам сборки, заранее решите, возвращается ли отчёт Agent для анализа или сборка завершается с ошибкой и требует ручного вмешательства.
SECTION 02Подготовка: задайте контракт передачи
Не начинайте с автоматического запуска Xcode. Сначала определите, что именно один workflow обещает другому. Иначе второй этап может собрать не ту ревизию, принять старый артефакт или обработать ветку, которую вы не собирались допускать к сборке.
Зафиксируйте контракт передачи в документации репозитория или в конфигурации workflow:
- Коммит-источник. Укажите ожидаемый
head_sha. Не используйте только имя ветки: её содержимое может измениться между созданием результата Agent и началом Mac-сборки. - Ветка. Зафиксируйте допустимый
head_branchи решите, что делать с ветками запросов на слияние, основными ветками и временными ветками. - Результат Agent. Опишите формат изменённых файлов, отчёта или патча, а также имя артефакта. Не передавайте произвольный набор файлов без проверки структуры.
- Условие запуска. Определите, запускается ли Mac-сборка только при успешном завершении Agent и какие события должны быть исключены.
- Результат CI. Укажите, где будут доступны статус сборки, тестовый отчёт и идентификатор запуска. Зафиксируйте, как ошибка передаётся в исходную задачу.
Названия полей здесь имеют практический смысл: событие workflow_run содержит сведения о родительском запуске, в том числе ветку, SHA и заключение о результате. Описание доступных событий и фильтров приведено в документации по событиям GitHub Actions. В настройках проверки опирайтесь на фактические значения запуска, а не на переданные Agent текстовые утверждения о том, какой коммит он обработал.
Сценарий из практики проектирования CI: Agent анализирует запрос на изменение и сохраняет отчёт с предложением поправок. Пока macOS workflow не проверил SHA и содержание результата, ему не следует считать этот отчёт доверенным источником команды для сборки. Даже если отправителем выглядит внутренний workflow, на входе могут оказаться данные из недоверенной ветки или пользовательский текст. Разделение обязанностей должно быть частью модели безопасности, а не только способом обойти ограничение Runner.
SECTION 03Первая проверка: запустите Agent без Xcode
Сначала проверьте Agent Workflow на небольшой задаче, которая не требует Xcode. Цель этого прогона — удостовериться, что определение workflow корректно, Runner поддерживается, выбранный Agent доступен, а требуемая аутентификация и права настроены ожидаемым образом.
Порядок проверки:
- Проверьте исходное определение workflow и его frontmatter: задайте поддерживаемое окружение и только необходимые разрешения.
- Выполните компиляцию определения командой, предусмотренной текущей версией gh-aw в вашем репозитории. Проверьте сгенерированные файлы и lock-файл на изменения, которые не были намеренно внесены.
- Выберите Agent Engine и настройте требуемую аутентификацию по официальной документации. Не помещайте секреты в prompt, журналы или генерируемые файлы.
- Запустите безопасную задачу, например анализ документации с выдачей структурированного отчёта без доступа на запись к защищённой ветке.
- Сохраните run_id, ветку, head_sha, итоговый статус и ожидаемое имя результата. Используйте запись этого успешного прогона как контрольную точку для Mac CI.
Смысл этой проверки — отделить ошибки gh-aw от ошибок Xcode. Если Agent не проходит обработку запроса или не создаёт ожидаемый результат, подключение macOS Runner добавит ещё один источник отказа, но не устранит первопричину. После этого этапа у вас должны быть воспроизводимые входные данные для Xcode workflow, а не предположение, что Agent «как-то подготовил проект».
SECTION 04Интеграция: поручите Xcode обычному macOS workflow
Дальше создайте самостоятельный GitHub Actions workflow для задач, которые требуют macOS. В его обязанности входят проверка исходной ревизии, установка или выбор подходящей версии инструментов по правилам команды, вызов Xcode-сборки, тестирование и публикация отчётов. Этот workflow не нужно называть Agent Job: он использует обычную модель заданий GitHub Actions.
Есть два практичных способа связать этапы:
- Один workflow с разными заданиями. Agent и Mac job описаны в одном workflow; зависимость задаётся так, чтобы Mac job начинался после нужного результата Agent. Артефакт передаётся через Actions artifacts. Это проще для корреляции запусков, но не отменяет проверки входных файлов и минимизации прав.
- Два workflow с
workflow_run. Второй workflow запускается после завершения первого. Его нужно настроить так, чтобы он принимал только ожидаемый workflow и ветки. Обязательно сопоставьте данные родительского запуска с ожидаемыми SHA и артефактом.
При выборе второго варианта учтите неочевидную особенность: workflow, запущенный через workflow_run, должен находиться в ветке по умолчанию. Кроме того, последующий workflow может получить секреты и токен с правами записи, даже если исходный workflow запускался из менее доверенного контекста. Это не означает, что ему следует автоматически выдавать такие права: установите минимально необходимые разрешения и проверьте сценарии недоверенного кода. Эти условия описаны в документации о событиях workflow_run и безопасном использовании GitHub Actions.
Если вы планируете временно вынести реальную Xcode-сборку за пределы собственной инфраструктуры, сначала проверьте требования проекта и параметры доступной среды. Актуальные условия и доступные варианты MACNOX сверяйте на странице с информацией о тарифах: не выводите совместимость с вашим Xcode, доступность конкретного инструментария или тип подключения из самого факта удалённого размещения Mac.
SECTION 05Приёмка: проверьте происхождение результата
Перед передачей артефакта зафиксируйте, что именно гарантирует выбранный путь.
Для одного workflow зависимость между заданиями задаёт порядок, а Actions artifacts передают файлы между ними. В документации GitHub описаны хранение и совместное использование артефактов. Проверяйте имя файла, ожидаемую структуру и SHA проекта внутри или рядом с результатом; имя артефакта само по себе не является удостоверением его происхождения.
Для межworkflow-передачи укажите идентификатор конкретного запуска, а не скачивайте «последний подходящий файл» без сопоставления с событием. Документация download-artifact описывает получение артефактов из другого workflow run с указанием соответствующего запуска и учётных данных. После загрузки сравните run_id, head_branch, head_sha и conclusion с ожидаемым событием. Если хотя бы одно значение не совпадает, остановите сборку и сохраните диагностический результат.
Используйте следующую проверку как критерий допуска:
- Agent завершился с ожидаемым результатом, а не просто породил событие.
- Ветка и SHA совпадают с разрешёнными входными данными.
- Mac workflow скачал артефакт именно из нужного запуска.
- Структура файлов и размер результата соответствуют формату контракта; лишние файлы не интерпретируются как команды.
- Сборка запускается с правами, которые нужны только этому этапу.
- Секреты не открыты коду из недоверенного pull request или ветки.
- Итоговая запись позволяет связать тестовый отчёт с исходным коммитом и запуском Agent.
При ошибке проверяйте отдельно передачу и сам Xcode CI. Успешно скачанный артефакт при неуспешной сборке означает, что цепочка передачи могла сработать, а проблема находится в проекте или окружении Mac. Отсутствующий артефакт при успешном Agent — это дефект контракта, публикации или выбора запуска. Не объединяйте эти исходы в один общий статус: иначе команда не поймёт, какой этап нужно повторить.
SECTION 06Выбор схемы и контракт артефактов
| Вариант | Исполнение Agent | Исполнение Xcode | Передача данных | Когда выбирать |
|---|---|---|---|---|
| Agent на Linux и Mac job в одном workflow | Поддерживаемый Runner для Agent Workflow | Обычный GitHub Actions job на macOS | Actions artifacts и явная зависимость заданий | Когда нужны единая цепочка запуска и простая корреляция результатов |
Agent workflow и отдельный workflow через workflow_run |
Поддерживаемый Runner для Agent Workflow | Отдельный обычный macOS workflow | Загрузка артефакта из конкретного run_id с проверкой SHA и ветки | Когда нужны раздельные конфигурации или независимый жизненный цикл CI |
| Только обычный macOS CI | Agent Workflow не участвует | Обычный GitHub Actions job на macOS | Вход берётся непосредственно из обычного CI-события | Когда автоматизация Agent не даёт нужного результата или добавляет лишний риск |
Эта таблица помогает выбрать архитектуру, но не заменяет испытание на вашем репозитории. Если задача Agent не меняет код и не добавляет проверяемой ценности, сначала сравните её с прямым запуском обычного Xcode CI. Дополнительный этап оправдан только тогда, когда его результаты действительно используются и прослеживаются.
| Поле передачи | Где проверять | Условие допуска Mac-сборки |
|---|---|---|
run_id |
Событие родительского workflow | Артефакт скачивается из ожидаемого запуска |
head_branch |
Метаданные запуска | Ветка входит в разрешённый список |
head_sha |
Метаданные запуска и результат Agent | SHA точно совпадает с ожидаемой ревизией |
conclusion |
Результат завершения workflow | Статус соответствует заданной политике |
| Имя артефакта | Событие и результат загрузки | Файл существует и соответствует контракту |
| Разрешения и секреты | Workflow, настройки репозитория | Доступ ограничен задачами, которым он необходим |
SECTION 07Полный прогон: решение о допуске
Проведите одну полную проверку от входного события Agent до итогового результата Xcode CI. Убедитесь, что при ошибке передачи Mac job не стартует, а при ошибке сборки статус возвращается в место, где команда его увидит. Проверьте также, что повторный запуск не подменяет SHA или артефакт новым содержимым и что журналы позволяют восстановить последовательность событий.
По результатам выберите один из трёх режимов:
- Выпустить схему Linux Agent плюс Mac CI, если вы доказали соответствие коммитов, получение нужных артефактов, минимальность полномочий и корректную передачу статуса.
- Оставить только обычный macOS CI, если Agent не создаёт необходимого результата или межworkflow-передача усложняет аудит без полезного эффекта.
- Продолжить изолированное испытание, если ещё не подтверждены ветки, права, поведение на недоверенном коде или связь отчёта с исходным SHA.
Не считайте удалённый Mac автоматически подходящим Runner только потому, что вашему pipeline нужен Xcode. Сначала установите, можно ли подключить выбранную среду к вашему способу исполнения, какие инструменты доступны и как устроены права. Это отдельная проверка совместимости; ограничения gh-aw на macOS Runner она сама по себе не снимает.
SECTION 08Частые вопросы перед запуском
Почему Agent Workflow не поддерживается на macOS Runner?
Ограничение относится к Agent Workflow Firewall и требуемой контейнерной задаче, а не к наличию Xcode. Поэтому macOS-инструменты отделяют в обычное задание GitHub Actions.
Как передать задачу из Agent в Xcode CI?
Зафиксируйте SHA, ветку и формат результата. Затем используйте зависимое задание в одном workflow либо отдельный workflow, который проверяет родительский запуск до сборки.
Как передавать артефакт между gh-aw и macOS workflow?
Внутри одного workflow используйте Actions artifacts. Между workflow укажите конкретный run_id при загрузке и сверьте SHA, ветку и результат завершения с исходным событием.
Что проверять при использовании workflow_run?
Проверьте, что файл последующего workflow находится в ветке по умолчанию, а событие относится к ожидаемому workflow и ревизии. Отдельно проверьте полномочия и секреты: последующий workflow не должен без необходимости доверять коду из недоверенного контекста.
SECTION 09Следующий шаг: временная Mac-среда или собственный CI
Linux Agent не заменит Xcode, Apple SDK или Simulator, а разделение на два workflow добавляет обработку артефактов, проверку происхождения и настройку полномочий. Если Mac-сборка нужна лишь для ограниченного проекта или испытаний, прежде чем покупать оборудование, оцените временную удалённую Mac-среду и отдельно проверьте, что она подходит по доступу и фактическому инструментарию. Если же команда постоянно выполняет тяжёлые сборки, требует физические интерфейсы или строгого контроля оборудования, сравните аренду с собственным узлом и внутренним CI. Условия и актуальные возможности MACNOX проверяйте до выбора: посмотрите доступные варианты и подтвердите совместимость с вашим способом запуска Xcode.
SECTION 10Часто задаваемые вопросы
Почему Agentic Workflows не запускаются на macOS Runner?
Проблема не в том, установлен ли gh-aw CLI на компьютере разработчика. Для Agent Workflow нужен Agent Workflow Firewall, а его контейнерная задача не поддерживается на macOS Runner. Поэтому Agent запускайте на поддерживаемом Runner, а шаги, которым нужны Xcode, SDK или Simulator, переносите в отдельный обычный GitHub Actions workflow на macOS.
Как передать результат Agent Workflow в Xcode-сборку?
Сначала определите неизменяемый идентификатор исходного коммита и формат результата Agent. Если оба задания находятся в одном workflow, передайте файлы через Actions artifacts и задайте явную зависимость между заданиями. Для отдельного workflow проверяйте событие завершения, ветку и SHA, а Mac-сборку запускайте только для ожидаемого успешного результата.
Как передать артефакт между gh-aw и macOS workflow?
Внутри одного workflow артефакт публикует одно задание, а другое получает его после зависимости. Между workflow скачивайте артефакт именно из нужного запуска: передавайте run_id и имя артефакта, затем сверяйте его с ожидаемой веткой и head_sha. Само совпадение имени артефакта не подтверждает, что файл относится к нужному коммиту.
Как проверить исходный коммит при запуске через workflow_run?
Не полагайтесь только на факт завершения родительского workflow. Сопоставьте идентификатор запуска, ветку, head_sha и conclusion с ожидаемыми значениями, после чего загрузите артефакт именно этого запуска. Учитывайте, что workflow_run должен быть доступен в ветке по умолчанию и что последующий workflow требует отдельной проверки прав и доверия к исходному коду.