🏠 Главная › user guide › github github code review
{/ Эта страница автоматически активируется из инструментов SKILL.md с помощью сайта/scripts/generate-skill-docs.py. Редактируйте исходный SKILL.md, а не эту страницу. /}
Обзор кода Github
Ревью PR: различия, инлайн-комментарии через gh или REST.
приведено полное определение навыков, которые Hermes загружает при активации этого навыка ниже. Это то, что агент видит в качестве инструкций, когда навыки активны.
Обзор кода GitHub
Выполните ревью кода локальных изменений перед отправкой или ревью открытого PR на GitHub. Большая часть этого навыка использует обычный git — разделение gh/curl имеет значение только для взаимодействий на уровне PR.
Предварительные требования
Аутентифицирован на GitHub (см. навыки github-auth)
# Индексированные изменения (что будет закоммичено)
gitdiff--staged
# Все изменения относительно main (что будет содержать PR)
gitdiffmain...HEAD
# Только имена файлов
gitdiffmain...HEAD--name-only
# Статистика (вставки/удаления на файл)
gitdiffmain...HEAD--stat
Просмотр файла за файлом — воспользуйтесь read_file для измененных файлов для полного контекста и текста, чтобы увидеть, что изменилось:
gitdiffmain...HEAD--src/auth/login.py
Проверьте распространённые проблемы:
# Отладочные операторы, TODO, console.log, оставленные
gitdiffmain...HEAD|grep-n"print(\|console\.log\|TODO\|FIXME\|HACK\|XXX\|debugger"# Большие файлы, случайно проиндексированные
gitdiffmain...HEAD--stat|sort-t'|'-k2-rn|head-10
# Секреты или шаблоны учётных данных
gitdiffmain...HEAD|grep-in"password\|secret\|api_key\|token.*=\|private_key"# Маркеры конфликтов слияния
gitdiffmain...HEAD|grep-n"<<<<<<\|>>>>>>\|======="
Представьте структурированную обратную связь пользователю.
Формат вывода обзора
При просмотре локальных изменений в этом случае получаются предварительные результаты:
## Сводка ревью кода
### Критично
- **src/auth.py:45** — SQL-инъекция: пользовательский ввод передаётся напрямую в запрос.
Предложение: Используйте параметризованные запросы.
### Предупреждения
- **src/models/user.py:23** — Пароль хранится в открытом виде. Используйте bcrypt или argon2.
- **src/api/routes.py:112** — Отсутствует ограничение скорости на endpoint входа.
### Предложения
- **src/utils/helpers.py:8** — Дублирует логику в `src/core/utils.py:34`. Объедините.
- **tests/test_auth.py** — Отсутствует граничный случай: тест с истёкшим токеном.
### Выглядит хорошо
- Чистое разделение ответственности в слое middleware
- Хорошее покрытие тестами для счастливого пути
2. Запрос на получение отзыва на GitHub
Просмотр деталей PR
С хх:
ghprview123
ghprdiff123
ghprdiff123--name-only
С git + curl:
PR_NUMBER=123# Получить детали PR
curl-s\-H"Authorization: token $GITHUB_TOKEN"\https://api.github.com/repos/$OWNER/$REPO/pulls/$PR_NUMBER\|python3-c"import sys, jsonpr = json.load(sys.stdin)print(f\"Title: {pr['title']}\")print(f\"Author: {pr['user']['login']}\")print(f\"Branch: {pr['head']['ref']} -> {pr['base']['ref']}\")print(f\"State: {pr['state']}\")print(f\"Body:\n{pr['body']}\")"# Список изменённых файлов
curl-s\-H"Authorization: token $GITHUB_TOKEN"\https://api.github.com/repos/$OWNER/$REPO/pulls/$PR_NUMBER/files\|python3-c"import sys, jsonfor f in json.load(sys.stdin): print(f\"{f['status']:10} +{f['additions']:-4} -{f['deletions']:-4} {f['filename']}\")"
Выкачивать PR локально для общего обзора
Это работает с обычным git — gh не нужен:
# Получить ветку PR и переключиться на неё
gitfetchoriginpull/123/head:pr-123
gitcheckoutpr-123
# Теперь вы можете использовать read_file, search_files, запускать тесты и т.д.# Просмотреть diff относительно базовой ветки
gitdiffmain...pr-123
С gh (сокращение):
ghprcheckout123
Оставить комментарии на пиар
Общий комментарий к PR — с gh:
ghprcomment123--body"В целом выглядит хорошо, несколько предложений ниже."
Общий комментарий к PR — с завитком:
curl-s-XPOST\-H"Authorization: token $GITHUB_TOKEN"\https://api.github.com/repos/$OWNER/$REPO/issues/$PR_NUMBER/comments\-d'{"body": "В целом выглядит хорошо, несколько предложений ниже."}'
Оставить инлайн-комментарии ревью
Один инлайн-комментарий — с gh (через API):
HEAD_SHA=$(ghprview123--jsonheadRefOid--jq'.headRefOid')
ghapirepos/$OWNER/$REPO/pulls/123/comments\--methodPOST\-fbody="Это можно упростить с помощью list comprehension."\-fpath="src/auth/login.py"\-fcommit_id="$HEAD_SHA"\-fline=45\-fside="RIGHT"
Один инлайн-комментарий — с завитком:
# Получить SHA головного коммитаHEAD_SHA=$(curl-s\-H"Authorization: token $GITHUB_TOKEN"\https://api.github.com/repos/$OWNER/$REPO/pulls/$PR_NUMBER\|python3-c"import sys,json; print(json.load(sys.stdin)['head']['sha'])")
curl-s-XPOST\-H"Authorization: token $GITHUB_TOKEN"\https://api.github.com/repos/$OWNER/$REPO/pulls/$PR_NUMBER/comments\-d"{ \"body\": \"Это можно упростить с помощью list comprehension.\", \"path\": \"src/auth/login.py\", \"commit_id\": \"$HEAD_SHA\", \"line\": 45, \"side\": \"RIGHT\" }"
# Полный diff относительно базовой ветки
gitdiffmain...HEAD
# Или пофайлово для больших PR
gitdiffmain...HEAD--name-only
# Затем для каждого файла:
gitdiffmain...HEAD--path/to/file.py
Для каждого изменённого файла воспользуйтесь read_file, чтобы увидеть изменения контекста — некоторые изменения могут пропустить проблемы, видимые только с удалением кода.
# Запустите тесты, если есть набор тестов
python-mpytest2>&1|tail-20
# или: npm test, cargo test, go test./..., и т.д.# Запустите линтер, если настроен
ruffcheck.2>&1|head-30
# или: eslint, clippy, и т.д.
Шаг 6: Примените ревью чеклиста (Раздел 3)
Пройдитесь по каждой категории: Корректность, Безопасность, Качество кода, Тестирование, Производительность, Документация.
Шаг 7: Опубликовать обзор на GitHub
Соберите свои выводы и отформатируйте их как формальный обзор с инлайн-комментариями.
С хх:
# Если проблем нет — approve
ghprreview$PR_NUMBER--approve--body"Проверено Hermes Agent. Код выглядит чистым — хорошее покрытие тестами, нет проблем с безопасностью."# Если найдены проблемы — request changes с инлайн-комментариями
ghprreview$PR_NUMBER--request-changes--body"Найдено несколько проблем — см. инлайн-комментарии."
С завитком — атомарное обозрение с несколькими инлайн-комментариями:
В дополнениях к инлайн-комментариям оставьте комментарии верхних уровней, чтобы автор PR получил полную картину с первого взгляда. Используйте формат вывода представления references/review-output-template.md.