Задача · NM-3 · СРЕЗ 0 · P0

Пуш, коммит и MR без доступа агента

Агент не получает доступ к репозиторию: коммит и пуш делает poststop-таск той же Nomad-джобы, с эфемерным ключом только внутри него. Агент выдаёт текст коммита и MR через task_result.json, а сам MR создаёт отдельная Temporal-activity после завершения джобы.

Статус: готово · CI-1,NM-2 · все задачи · на главную

Что это за задача

Агент не получает доступ к репозиторию: коммит и пуш делает poststop-таск той же Nomad-джобы, с эфемерным ключом только внутри него. Агент выдаёт текст коммита и MR через task_result.json, а сам MR создаёт отдельная Temporal-activity после завершения джобы.

Зависит от: CI-1,NM-2

Задача из листа «Задачи» проекта (NM-3, СРЕЗ 0, приоритет P0). Срез NM-3: статус — готово.

Тесткейсы

Кейсы, привязанные к этой задаче в листе «Тесткейсы» (колонка «Единица бэклога»):

TC-IDДаноКогдаТогда
TC-NM-3.1-aactivity клонирования генерирует одноразовую SSH-пару для шагапубличная часть регистрируется как deploy key на конкретном репозиторииключ read_only=false, привязан ровно к этому репозиторию, ни к какому другому
TC-NM-3.2-aагент завершает работу со status=successпишет task_result.json последним действиемфайл содержит непустые commit_message, mr_title, mr_description
TC-NM-3.2-bагент завершает работу со status=failedпишет task_result.jsoncommit_message/mr_title/mr_description не обязательны — push-таск это поле не читает
TC-NM-3.3-apoststop-таск получает deploy-ключ из Vault и commit_message из task_result.json в свежем контейнере, host key Forgejo не в known_hostsgit commit + push по SSH с StrictHostKeyChecking=accept-newpush проходит без ручного подтверждения хоста, коммит содержит commit_message агента
TC-NM-3.3-bmain-таск агента запущен параллельно с деплой-ключом, смонтированным только в poststop-таскинспектируются env и volume main-таскаdeploy-ключ в main-таске не встречается
TC-NM-3.4-aагент запушил ветку poststop-таском; шаг завершился (успешно или с ошибкой)срабатывает компенсирующая activityключ на репозитории Forgejo отсутствует, путь в Vault очищен — в обоих исходах шага
TC-NM-3.5-apush-таск завершился успешно, ветка запушена, task_result.json содержит mr_title/mr_descriptionсрабатывает Temporal activity создания MR после сигнала о завершении джобыMR создан в Forgejo с текстом из task_result.json
TC-NM-3.5-bForgejo API временно недоступен при вызове создания MRactivity создания MR исполняетсявызов ретраится по RetryPolicy, не проваливает шаг с первой попытки
TC-NM-3.6-aполный цикл шага (mint → push → MR → revoke) прогоняется дважды: с успешным и с неуспешным исходом агентарегрессионный сьют запускается в CIпри успехе — MR создан, ключ отсутствует после завершения; при провале — MR не создан, ключ отсутствует после завершения