Что это за задача
Агент не получает доступ к репозиторию: коммит и пуш делает 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-a | activity клонирования генерирует одноразовую 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.json | commit_message/mr_title/mr_description не обязательны — push-таск это поле не читает |
TC-NM-3.3-a | poststop-таск получает deploy-ключ из Vault и commit_message из task_result.json в свежем контейнере, host key Forgejo не в known_hosts | git commit + push по SSH с StrictHostKeyChecking=accept-new | push проходит без ручного подтверждения хоста, коммит содержит commit_message агента |
TC-NM-3.3-b | main-таск агента запущен параллельно с деплой-ключом, смонтированным только в poststop-таск | инспектируются env и volume main-таска | deploy-ключ в main-таске не встречается |
TC-NM-3.4-a | агент запушил ветку poststop-таском; шаг завершился (успешно или с ошибкой) | срабатывает компенсирующая activity | ключ на репозитории Forgejo отсутствует, путь в Vault очищен — в обоих исходах шага |
TC-NM-3.5-a | push-таск завершился успешно, ветка запушена, task_result.json содержит mr_title/mr_description | срабатывает Temporal activity создания MR после сигнала о завершении джобы | MR создан в Forgejo с текстом из task_result.json |
TC-NM-3.5-b | Forgejo API временно недоступен при вызове создания MR | activity создания MR исполняется | вызов ретраится по RetryPolicy, не проваливает шаг с первой попытки |
TC-NM-3.6-a | полный цикл шага (mint → push → MR → revoke) прогоняется дважды: с успешным и с неуспешным исходом агента | регрессионный сьют запускается в CI | при успехе — MR создан, ключ отсутствует после завершения; при провале — MR не создан, ключ отсутствует после завершения |