Skip to content

About

Описание фичи, тест-план и тестовый пайплайн по git diff на каждый PR/MR через LLM. Описание архитектуры, код закрыт

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 

Repository files navigation

AI Feature Analysis

CI-агностичный пайплайн: на каждый pull request или merge request собирает контекст изменений, отправляет его в LLM и возвращает в ветку описание фичи, тест-план ручной проверки и черновик тестового CI-пайплайна. Итог публикуется комментарием в PR/MR.

Исходный код закрыт. Здесь — устройство инструмента и решения, которые за ним стоят. Код покажу на собеседовании, доступ на чтение дам по запросу.

Python 3.9+ без внешних зависимостей · OpenAI-совместимый Chat Completions API · GitHub Actions · GitLab CI

Как работает

flowchart LR
    PR["PR / MR"] --> Ctx["git diff base...HEAD<br/>коммиты · статистика · файлы"]
    Ctx --> Trim["обрезка diff<br/>до лимита символов"]
    Trim --> LLM["LLM<br/>OpenAI-совместимый API"]
    LLM --> Doc["описание фичи"]
    LLM --> Plan["тест-план"]
    LLM --> Pipe["черновик CI-пайплайна"]
    Doc --> Out["коммит в ветку с [skip ci]<br/>+ комментарий в PR/MR"]
    Plan --> Out
    Pipe --> Out
Loading
ai_feature_analysis/
  __main__.py     CLI: флаги, dry-run, мягкий режим ошибок
  git_utils.py    diff и коммиты, автоопределение базовой ветки
  llm_client.py   клиент Chat Completions на urllib с ретраями
  prompts.py      системный и пользовательские промпты, шаблоны
  analyzer.py     оркестрация: контекст → LLM → Markdown
  notify.py       комментарий в GitHub PR / GitLab MR

На выходе в docs/features/:

Файл Что внутри
<branch>.md что сделано, зачем, риски, как тестировать
<branch>.test-plan.md чеклист ручной проверки на 15–30 минут: стенд, 3–10 проверок, граничные случаи, критерии приёмки
<branch>.test-pipeline.yml минимальный пайплайн: зависимости → линт → тесты → сборка, стек определяется по diff

Решения

Ноль зависимостей

Пакет написан на стандартной библиотеке Python: HTTP через urllib, ретраи свои. В CI не нужен pip install — запуск быстрее, и нет цепочки поставок, которую надо обновлять и проверять.

Не привязан ни к CI, ни к провайдеру модели

Базовая ветка берётся из переменных окружения CI, затем из origin/main, либо задаётся явно. GitHub Actions и GitLab CI работают из коробки, остальные системы — через переменные окружения. Модель — любой endpoint с Chat Completions: OpenAI, OpenRouter, DeepSeek или локальные Ollama и vLLM.

Сгенерированный пайплайн не включается сам

Тестовый YAML кладётся в docs/features/, а не в .github/workflows/. Непроверенный код от модели не должен попадать в CI без ревью — чтобы включить, его переносят вручную.

Один комментарий на PR

При каждом пуше в ветку комментарий обновляется, а не добавляется новый. Тест-план вставляется в него сворачиваемым блоком.

CI не зацикливается

Коммит артефактов в ветку помечен [skip ci], иначе он запускал бы анализ заново.

Проверка без расходов

--dry-run показывает, что именно уйдёт в модель, не вызывая её. Полный прогон — до трёх запросов к LLM; ненужные артефакты отключаются флагами или переменными окружения.

Ограничения, о которых сказано прямо

  • Diff уходит внешнему провайдеру. Для кода, который нельзя показывать третьей стороне, — только локальная модель.
  • Нужен fetch-depth: 0: без полной истории нет merge-base, и анализ сводится к последнему коммиту.
  • В PR из форков токен GitHub выдаётся только на чтение: комментарий и коммит не пройдут.

Статус

Рабочий инструмент: около 1 000 строк Python, готовые конфигурации для GitHub Actions и GitLab CI. Автотестов пока нет.

About

Описание фичи, тест-план и тестовый пайплайн по git diff на каждый PR/MR через LLM. Описание архитектуры, код закрыт

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors