🏠 Главная › user guide › github github pr workflow
{/ Эта страница автоматически активируется из файлов функций SKILL.md с помощью сайта/scripts/generate-skill-docs.py. Редактируйте исходный SKILL.md, а не эту страницу. /}
Рабочий процесс по связям с общественностью на GitHub
Жизненный цикл PR: ветка, коммит, открытие, CI, слияние.
Ниже приведено полное описание навыка, который загружает Гермес при активации этого навыка. Это то, что агент видит в качестве инструкций, когда навыки активны.
Запрос на включение рабочего процесса на GitHub
Полное руководство по управлению жизненным циклом PR. В каждом разделе машина сначала заказывала вариант gh, а затем альтернативу с git + curl для без gh.
Предварительные требования
Аутентификация на GitHub (см. навыки github-auth)
Прохождение внутри git-репозитория с удаленным репозиторием GitHub.
Быстрое определение метода аутентификации
# Определяем, какой метод использовать в этом рабочем процессеifcommand-vgh&>/dev/null&&ghauthstatus&>/dev/null;thenAUTH="gh"elseAUTH="git"# Убедимся, что у нас есть токен для API-вызововif[-z"$GITHUB_TOKEN"];thenif[-f~/.hermes/.env]&&grep-q"^GITHUB_TOKEN="~/.hermes/.env;thenGITHUB_TOKEN=$(grep"^GITHUB_TOKEN="~/.hermes/.env|head-1|cut-d=-f2|tr-d'\n\r')elifgrep-q"github.com"~/.git-credentials2>/dev/null;thenGITHUB_TOKEN=$(grep"github.com"~/.git-credentials2>/dev/null|head-1|sed's|https://[^:]*:\([^@]*\)@.*|\1|')fififiecho"Используется: $AUTH"
Извлечение владельца/репо из git Remote
Многие команды curl требуют owner/repo. Загрузите его из git Remote:
# Работает для URL как HTTPS, так и SSHREMOTE_URL=$(gitremoteget-urlorigin)OWNER_REPO=$(echo"$REMOTE_URL"|sed-E's|.*github\.com[:/]||; s|\.git$||')OWNER=$(echo"$OWNER_REPO"|cut-d/-f1)REPO=$(echo"$OWNER_REPO"|cut-d/-f2)echo"Owner: $OWNER, Repo: $REPO"
1. Создание ветки
Эта часть — чисто git – одинакова в любом случае:
# Убедитесь, что у вас актуальная версия
gitfetchorigin
gitcheckoutmain&&gitpulloriginmain
# Создайте и переключитесь на новую ветку
gitcheckout-bfeat/add-user-authentication
обратите внимание на наименование веток:
- feat/описание — новые функции
- fix/написание — исправления ошибок.
- refactor/описание — реструктуризация кода
- docs/описание — документация
- ci/описание — изменения в CI/CD
2. Создание коммитов
Используйте файлы инструментов агента (write_file, patch) для внесения изменений, а затем выполните коммит:
# Добавьте конкретные файлы
gitaddsrc/auth.pysrc/models/user.pytests/test_auth.py
# Сделайте коммит с сообщением в формате Conventional Commits
gitcommit-m"feat: добавлена JWT-аутентификация пользователей- Добавлены конечные точки входа/регистрации- Добавлена модель User с хешированием пароля- Добавлен auth middleware для защищённых маршрутов- Добавлены модульные тесты для потока аутентификации"
ghprcreate\--title"feat: добавлена JWT-аутентификация пользователей"\--body"## Краткое описание- Добавлены конечные точки API для входа и регистрации- Генерация и проверка JWT токенов## План тестирования- [ ] Модульные тесты проходятCloses #42"
Опции: --draft, --reviewer user1,user2, --label "enhancement", --base development
С помощью git + curl:
BRANCH=$(gitbranch--show-current)
curl-s-XPOST\-H"Authorization: token $GITHUB_TOKEN"\-H"Accept: application/vnd.github.v3+json"\https://api.github.com/repos/$OWNER/$REPO/pulls\-d"{ \"title\": \"feat: добавлена JWT-аутентификация пользователей\", \"body\": \"## Краткое описание\nДобавлены конечные точки API для входа и регистрации.\n\nCloses #42\", \"head\": \"$BRANCH\", \"base\": \"main\" }"
Ответ JSON включает number PR — сохраните его для облегчения команды.
Чтобы создать черновик (черновик), страницу "черновик": true в теле JSON.
4. Мониторинг последствий CI
Проверка обработки CI
С помощью gh:
# Одноразовая проверка
ghprchecks
# Наблюдение до завершения всех проверок (опрос каждые 10 секунд)
ghprchecks--watch
С помощью git + curl:
# Получить SHA последнего коммита в текущей веткеSHA=$(gitrev-parseHEAD)# Запросить объединённый статус
curl-s\-H"Authorization: token $GITHUB_TOKEN"\https://api.github.com/repos/$OWNER/$REPO/commits/$SHA/status\|python3-c"import sys, jsondata = json.load(sys.stdin)print(f\"Общий статус: {data['state']}\")for s in data.get('statuses', []): print(f\" {s['context']}: {s['state']} - {s.get('description', '')}\")"# Также проверить запуски проверок GitHub Actions (отдельный endpoint)
curl-s\-H"Authorization: token $GITHUB_TOKEN"\https://api.github.com/repos/$OWNER/$REPO/commits/$SHA/check-runs\|python3-c"import sys, jsondata = json.load(sys.stdin)for cr in data.get('check_runs', []): print(f\" {cr['name']}: {cr['status']} / {cr['conclusion'] or 'pending'}\")"
Опрос до завершения (git + curl)
# Простой цикл опроса — проверять каждые 30 секунд, до 10 минутSHA=$(gitrev-parseHEAD)foriin$(seq120);doSTATUS=$(curl-s\-H"Authorization: token $GITHUB_TOKEN"\https://api.github.com/repos/$OWNER/$REPO/commits/$SHA/status\|python3-c"import sys,json; print(json.load(sys.stdin)['state'])")echo"Проверка $i: $STATUS"if["$STATUS"="success"]||["$STATUS"="failure"]||["$STATUS"="error"];thenbreakfisleep30done
5. Автоисправление ошибок CI
Когда CI завершает неудачу, диагностируйте и исправляйте. Этот цикл работает с любым методом аутентификации.
Шаг 1: Получение ошибочных деталей
С помощью gh:
# Список последних запусков workflow в этой ветке
ghrunlist--branch$(gitbranch--show-current)--limit5# Просмотр логов неудачных запусков
ghrunview<RUN_ID>--log-failed
С помощью git + curl:
BRANCH=$(gitbranch--show-current)# Список запусков workflow в этой ветке
curl-s\-H"Authorization: token $GITHUB_TOKEN"\"https://api.github.com/repos/$OWNER/$REPO/actions/runs?branch=$BRANCH&per_page=5"\|python3-c"import sys, jsonruns = json.load(sys.stdin)['workflow_runs']for r in runs: print(f\"Запуск {r['id']}: {r['name']} - {r['conclusion'] or r['status']}\")"# Получить логи неудачных заданий (скачать zip, извлечь, прочитать)RUN_ID=<run_id>
curl-s-L\-H"Authorization: token $GITHUB_TOKEN"\https://api.github.com/repos/$OWNER/$REPO/actions/runs/$RUN_ID/logs\-o/tmp/ci-logs.zip
cd/tmp&&unzip-oci-logs.zip-dci-logs&&catci-logs/*.txt
Шаг 2: Исправление и отправка
После обнаружения проблем используйте инструменты (patch,write_file) для исправления:
gitadd<исправленные_файлы>
gitcommit-m"fix: устранение ошибки CI в <check_name>"
gitpush
Шаг 3: Проверка
Повторно проверьте статус CI, используя команды из раздела 4 выше.
Шаблон цикла автоисправления
Когда требуется минимальное исправление CI, следуйте этому циклу:
Повторить, если всё ещё неверно (до 3 региона, затем спросить пользователя)
6. Слияние
С помощью gh:
# Squash-merge + удаление ветки (наиболее чистый вариант для feature-веток)
ghprmerge--squash--delete-branch
# Включить авто-слияние (слияние, когда все проверки пройдены)
ghprmerge--auto--squash--delete-branch
С помощью git + curl:
PR_NUMBER=<number>
# Слить PR через API (squash)
curl-s-XPUT\-H"Authorization: token $GITHUB_TOKEN"\https://api.github.com/repos/$OWNER/$REPO/pulls/$PR_NUMBER/merge\-d"{ \"merge_method\": \"squash\", \"commit_title\": \"feat: добавлена аутентификация пользователей (#$PR_NUMBER)\" }"# Удалить удалённую ветку после слиянияBRANCH=$(gitbranch--show-current)
gitpushorigin--delete$BRANCH# Вернуться на main локально
gitcheckoutmain&&gitpulloriginmain
gitbranch-d$BRANCH
Методы слияния: «слияние» (слияние фиксации), «сквош», «перебазирование»
Включение авто-слияния (завиток)
# Авто-слияние требует, чтобы в настройках репозитория оно было включено.# Используется GraphQL API, так как REST не поддерживает авто-слияние.PR_NODE_ID=$(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)['node_id'])")
curl-s-XPOST\-H"Authorization: token $GITHUB_TOKEN"\https://api.github.com/graphql\-d"{\"query\": \"mutation { enablePullRequestAutoMerge(input: {pullRequestId: \\\"$PR_NODE_ID\\\", mergeMethod: SQUASH}) { clientMutationId } }\"}"
7. Полный пример рабочего процесса
# 1. Начать с чистого main
gitcheckoutmain&&gitpulloriginmain
# 2. Ветка
gitcheckout-bfix/login-redirect-bug
# 3. (Агент вносит изменения в код с помощью файловых инструментов)# 4. Коммит
gitaddsrc/auth/login.pytests/test_login.py
gitcommit-m"fix: исправлен URL перенаправления после входаСохраняется параметр?next= вместо постоянного перенаправления на /dashboard."# 5. Отправка
gitpush-uoriginHEAD
# 6. Создание PR (выбирает gh или curl в зависимости от доступности)#... (см. Раздел 3)# 7. Мониторинг CI (см. Раздел 4)# 8. Слияние, когда все зелёное (см. Раздел 6)