ИИ-ревью пул-реквестов на GitHub с помощью Yandex Workflows и GitHub Actions
В этом руководстве вы воспользуетесь возможностями моделей генерации текста Yandex AI Studio для реализации сценария автоматического ревью
Предлагаемое решение использует сценарий GitHub Actions
На схеме:
- Пользователь добавляет коммит
в пул-реквест на GitHub. - После появления нового коммита в пул-реквесте запускается сценарий GitHub Actions.
- Сценарий GitHub Actions получает авторизованный ключ сервисного аккаунта Yandex Cloud, сохраненный в секрете репозитория
на GitHub. - Сценарий GitHub Actions запрашивает IAM-токен в обмен на авторизованный ключ сервисного аккаунта в сервисе Yandex Identity and Access Management. IAM-токен необходим для аутентификации в API Yandex Serverless Integrations.
- Сценарий GitHub Actions с использованием полученного IAM-токена отправляет рабочему процессу Yandex Workflows HTTP-запрос на формирование ревью. При этом в рабочий процесс Workflows передается номер пул-реквеста.
- Рабочий процесс Workflows получает в секрете Yandex Lockbox токен доступа
personal access token (classic)к репозиторию на GitHub. - Рабочий процесс Workflows с использованием токена доступа получает в репозитории на GitHub изменения, предлагаемые в пул-реквесте.
- Рабочий процесс Workflows запрашивает у модели Yandex AI Studio формирование ревью изменений, предлагаемых в пул-реквесте. Модель возвращает сгенерированное ревью с комментариями и собственными предложениями по улучшению кода.
- Рабочий процесс Workflows с использованием токена доступа публикует полученное ревью в пул-реквесте на GitHub.
Чтобы настроить автоматическое ИИ-ревью пул-реквестов на GitHub:
- Создайте репозиторий на GitHub.
- Подготовьте облако к работе.
- Создайте рабочий процесс Workflows.
- Настройте сценарий GitHub Actions.
- Протестируйте работу сценария.
Если созданные ресурсы вам больше не нужны, удалите их.
Создайте репозиторий в GitHub
Создайте
Создайтеrepo или public_repo.
Подготовьте облако к работе
Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:
- Перейдите в консоль управления
, затем войдите в Yandex Cloud или зарегистрируйтесь. - На странице Yandex Cloud Billing
убедитесь, что у вас подключен платежный аккаунт, и он находится в статусеACTIVEилиTRIAL_ACTIVE. Если платежного аккаунта нет, создайте его и привяжите к нему облако.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака
Подробнее об облаках и каталогах.
Необходимые платные ресурсы
В стоимость поддержки инфраструктуры для реализации сценария автоматического ИИ-ревью пул-реквестов входят:
- плата за генерацию текста (см. тарифы Yandex AI Studio);
- плата за хранение секрета и операции с ним (см. тарифы Yandex Lockbox);
- плата за запись и хранение данных в лог-группе, если вы используете сервис Cloud Logging (см. тарифы Yandex Cloud Logging).
Создайте секрет Yandex Lockbox
Создайте секрет Yandex Lockbox, в котором будет безопасно храниться токен доступа GitHub.
- В консоли управления
выберите каталог, в котором вы будете создавать инфраструктуру. - В списке сервисов выберите Lockbox.
- Нажмите кнопку Создать секрет.
- В поле Имя введите имя секрета
github/pat-for-workflows. - В поле Тип секрета выберите
Пользовательский. - В поле Ключ введите
token. - В поле Значение введите полученный ранее на GitHub токен доступа
personal access token (classic). - Нажмите кнопку Создать.
В результате откроется окно с таблицей, содержащей информацию о созданном секрете. Сохраните его идентификатор — он понадобится позднее при создании рабочего процесса.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id.
Выполните команду, указав полученный ранее на GitHub токен personal access token (classic):
yc lockbox secret create \
--name github/pat-for-workflows \
--payload '[{"key":"token","textValue":"<токен_доступа>"}]'
Результат:
done (1s)
id: e6q034pgt99k********
folder_id: b1gt6g8ht345********
created_at: "2025-08-20T15:39:05.873Z"
name: github/pat-for-workflows
status: ACTIVE
current_version:
id: e6quqngm8om0********
secret_id: e6q034pgt99k********
created_at: "2025-08-20T15:39:05.873Z"
status: ACTIVE
payload_entry_keys:
- token
Сохраните идентификатор созданного секрета (значение поля secret_id) — он понадобится позднее при создании рабочего процесса.
Воспользуйтесь методом REST API create для ресурса Secret или вызовом gRPC API SecretService/Create.
Создайте сервисные аккаунты
Cоздайте два сервисных аккаунта:
workflow-sa— от его имени будет выполняться рабочий процесс Workflows;github-worker— от его имени будет запускаться рабочий процесс при получении запроса от сценария GitHub Actions.
-
Создайте сервисный аккаунт
workflow-saи назначьте ему ролиlockbox.payloadViewerиai.languageModels.user:Консоль управленияCLIAPI- В консоли управления
выберите каталог, в котором вы создаете инфраструктуру. - В списке сервисов выберите Identity and Access Management.
- Нажмите кнопку Создать сервисный аккаунт.
- Введите имя сервисного аккаунта
workflow-sa. - Нажмите кнопку
Добавить роль и выберите ролиlockbox.payloadViewerиai.languageModels.user. - Нажмите кнопку Создать.
-
Чтобы создать сервисный аккаунт, выполните команду:
yc iam service-account create \ --name workflow-saРезультат:
done (1s) id: aje4rh1vb737******** folder_id: b1gt6g8ht345******** created_at: "2025-08-21T13:49:54.097378917Z" name: workflow-saСохраните идентификатор созданного сервисного аккаунта (значение поля
id) — он понадобится позднее при назначении роли и создании рабочего процесса. -
Чтобы назначить созданному сервисному аккаунту роль
lockbox.payloadViewer, выполните команду:yc resource-manager folder add-access-binding <идентификатор_каталога> \ --role lockbox.payloadViewer \ --subject serviceAccount:<идентификатор_сервисного_аккаунта>Где:
<идентификатор_каталога>— идентификатор каталога, в котором вы создаете инфраструктуру.<идентификатор_сервисного_аккаунта>— сохраненный на предыдущем шаге идентификатор сервисного аккаунта.
Результат:
done (2s) effective_deltas: - action: ADD access_binding: role_id: lockbox.payloadViewer subject: id: aje4rh1vb737******** type: serviceAccount -
Аналогичным образом назначьте созданному сервисному аккаунту роль
ai.languageModels.user.
Чтобы создать сервисный аккаунт, воспользуйтесь методом REST API create для ресурса ServiceAccount или вызовом gRPC API ServiceAccountService/Create.
Чтобы назначить сервисному аккаунту роль на каталог, воспользуйтесь методом REST API updateAccessBindings для ресурса Folder или вызовом gRPC API FolderService/UpdateAccessBindings.
- В консоли управления
-
Аналогичным образом создайте сервисный аккаунт
github-workerи назначьте ему рольserverless.workflows.executor.
Создайте авторизованный ключ сервисного аккаунта
Создайте авторизованный ключ для сервисного аккаунта github-worker. Авторизованный ключ позволит сценарию GitHub Actions получать IAM-токен для аутентификации в API Yandex Cloud.
- В консоли управления
выберите каталог, в котором вы создаете инфраструктуру. - В списке сервисов выберите Identity and Access Management.
- В открывшемся списке выберите сервисный аккаунт
github-worker. - На панели сверху нажмите кнопку
Создать новый ключ и выберитеСоздать авторизованный ключ. - Нажмите кнопку Создать.
- В открывшемся окне нажмите кнопку Скачать файл с ключами и нажмите Закрыть.
В результате на ваш компьютер скачается файл authorized_key.json, содержащий авторизованный ключ. Сохраните его, он понадобится позднее для настройки GitHub Actions.
Выполните команду:
yc iam key create \
--service-account-name github-worker \
-o authorized_key.json
В результате на вашем компьютере создастся файл authorized_key.json, содержащий авторизованный ключ. Сохраните его, он понадобится позднее для настройки GitHub Actions.
Воспользуйтесь методом REST API create для ресурса Key или вызовом gRPC API KeyService/Create.
Создайте рабочий процесс Workflows
Создайте рабочий процесс Workflows на стороне Yandex Cloud.
Совет
В этом руководстве описано создание рабочего процесса с помощью YaWL-спецификации, но его также можно создать и редактировать с помощью конструктора.

-
Создайте файл
yawl-spec.yamlсо следующей YaWL-спецификацией рабочего процесса:yawl-spec.yaml
yawl: '0.1' start: GetDiff steps: GetDiff: httpCall: url: >- https://api.github.com/repos/<имя_организации_на_GitHub>/<имя_репозитория>/pulls/\(.input) method: GET headers: Accept: application/vnd.github.v3.diff Authorization: Bearer \(lockboxPayload("<идентификатор_секрета>"; "token")) output: '\({diff: .})' next: Review catch: [] Review: aiAgent: agentConfig: role: >- Опытный разработчик-программист, специализирующийся на ревью изменений в репозиториях на языке(ах) проекта. goal: >- Провести ревью diff: найти логические ошибки, уязвимости, проблемы со стилем, предложить улучшения и тесты. model: # Можно выбрать 'yandexgpt' или другую модель; name: <имя_модели> tasks: - result: >- Текст с комментариями для публикации на GitHub. Структура: 1) Логические ошибки 2) Потенциальные проблемы безопасности 3) Стиль кода и мелкие замечания 4) Предложения по тестам и рефакторингу description: 'Проведи ревью этих изменений: \(.diff)' output: '\({review: .Result})' next: PostComment PostComment: httpCall: # POST comment на issues (pull request comments проходят через issues API) url: >- https://api.github.com/repos/<имя_организации_на_GitHub>/<имя_репозитория>/issues/\(.input)/comments method: POST body: |- \({ body: .review }) headers: Authorization: Bearer \(lockboxPayload("<идентификатор_секрета>"; "token")) X-GitHub-Api-Version: '2022-11-28'Где:
<имя_организации_на_GitHub>— имя пользователя или организации — владельца репозитория на GitHub.<имя_репозитория>— имя репозитория на GitHub.<идентификатор_секрета>— сохраненный ранее идентификатор секрета Yandex Lockbox.<имя_модели>— имя модели генерации текста Yandex AI Studio. Например:qwen3-235b-a22b-fp8.
-
Создайте рабочий процесс:
Консоль управленияCLIAPI- В консоли управления
перейдите в каталог, в котором вы создаете инфраструктуру. - В списке сервисов выберите Serverless Integrations.
- На панели слева нажмите
Workflows. - В правом верхнем углу нажмите Создать рабочий процесс.
- Выберите способ
YaML-спецификация. - В редакторе кода вставьте содержимое созданного ранее файла
yawl-spec.yaml. - Раскройте блок Дополнительные параметры:
- В поле Имя укажите имя рабочего процесса. Например:
github-ai-review-workflow. - В поле Сервисный аккаунт выберите созданный ранее сервисный аккаунт
workflow-sa. - (Опционально) Настройте логирование запусков рабочего процесса.
- Нажмите Создать.
В результате откроется окно с таблицей, содержащей информацию о созданном рабочем процессе. Сохраните его идентификатор — он понадобится позднее при настройке сценария GitHub Actions.
Выполните команду:
yc serverless workflow create \ --yaml-spec <путь_к_файлу_спецификации> \ --name <имя_рабочего_процесса> \ --service-account-id <идентификатор_сервисного_аккаунта> \ --no-loggingГде:
--yaml-spec— путь к созданному ранее файлу с YaWL-спецификацией. Например:./yawl-spec.yaml.--name— имя создаваемого рабочего процесса. Например:github-ai-review-workflow.--service-account-id— сохраненный ранее идентификатор сервисного аккаунтаworkflow-sa.--no-logging— параметр, отключающий логирование запусков рабочего процесса. Необязательный параметр. Если параметр не задан, логи запусков рабочего процесса записываются в лог-группу по умолчанию того каталога, в котором создан рабочий процесс.
Результат:
done (4s) id: dfq58scovpo5******** folder_id: b1gt6g8ht345******** specification: spec_yaml: |- ... created_at: "2025-08-21T19:09:18.299850Z" name: github-ai-review-workflow status: ACTIVE log_options: disabled: true service_account_id: ajerhj18qmdd********Сохраните идентификатор созданного рабочего процесса (значение поля
id) — он понадобится позднее при настройке сценария GitHub Actions.Чтобы создать рабочий процесс, воспользуйтесь методом REST API Create для ресурса Workflows или вызовом gRPC API WorkflowService/Create.
- В консоли управления
Настройте сценарий GitHub Actions
-
В интерфейсе GitHub создайте
секрет репозитория с именемYC_SA_JSON_CREDENTIALSи скопируйте в него содержимое полученного ранее файла с авторизованным ключом. -
Склонируйте ваш репозиторий, если это еще не сделано:
git clone <URL_репозитория> -
В локальной копии вашего репозитория создайте директорию
.github/workflows/(если еще не создана) и создайте в этой директории файлai-review.yml. -
В файл
ai-review.ymlвставьте следующий код, указав в полеworkflowIdсохраненный ранее идентификатор рабочего процесса Workflows:name: Pull Request Automated Checks on: pull_request: branches: - main jobs: neuro-review: runs-on: ubuntu-latest steps: - name: Get IAM Token (Yandex) id: issue-iam-token uses: yc-actions/yc-iam-token@v1 with: # в secrets храните JSON ключ авторизованного ключа SA yc-sa-json-credentials: ${{ secrets.YC_SA_JSON_CREDENTIALS }} - name: Start Review Workflow uses: fjogeleit/http-request-action@v1 with: url: 'https://serverless-workflows.api.cloud.yandex.net/workflows/v1/execution/start' method: 'POST' bearerToken: "${{ steps.issue-iam-token.outputs.token }}" data: | { "workflowId": "<идентификатор_рабочего_процесса>", "input": { "inputJson": "${{ github.event.pull_request.number }}" } } -
Сохраните файл и отправьте изменения в удаленный репозиторий:
git add . && git commit -m "Added ai-review.yml" && git push
Протестируйте работу сценария
Чтобы проверить работу сценария, создайте новый пул-реквест в вашем репозитории на GitHub. При создании пул-реквеста, а также при каждой последующей отправке в пул-реквест нового коммита будет запускаться сценарий GitHub Actions, инициирующий создание на стороне Yandex Cloud ревью предлагаемых изменений и публикацию этого ревью в пул-реквесте.
Удалите созданные ресурсы
Чтобы перестать платить за созданные ресурсы: