{/ Эта страница автоматически активируется из файлов функций SKILL.md с помощью сайта/scripts/generate-skill-docs.py. Редактируйте исходный SKILL.md, а не эту страницу. /}
Проблемы с GitHub
Создание, триаж, метки, назначение задач GitHub через gh или REST.
Метаданные навыки
Источник
Встроенный (установлен по умолчанию)
Путь
skills/github/github-issues
Версия
1.1.0
Автор
Агент Гермес
Лицензия
Массачусетский технологический институт
Платформы
Linux, MacOS, Windows
Теги
GitHub, Проблемы, Управление проектами, Отслеживание ошибок, Сортировка
Ниже приведено полное описание навыка, который загружает Гермес при активации этого навыка. Это то, что агент видит в качестве инструкций, когда навыки активны.
Управление задачами GitHub
Создание, поиск, триаж и решение задач («issues») GitHub. В каждом разделе сначала показывается команда «gh», а затем альтернатива «curl».
Предварительные требования
Аутентификация на GitHub (см. навыки github-auth)
Прохождение внутри git-репозитория с удаленным репозиторием GitHub, или указание репозитория явно.
# Список открытых задач
curl-s\-H"Authorization: token $GITHUB_TOKEN"\"https://api.github.com/repos/$OWNER/$REPO/issues?state=open&per_page=20"\|python3-c"import sys, jsonfor i in json.load(sys.stdin): if 'pull_request' not in i: # GitHub API возвращает PR по адресу /issues labels = ', '.join(l['name'] for l in i['labels']) print(f\"#{i['number']:5} {i['state']:6} {labels:30} {i['title']}\")"# Фильтр по метке
curl-s\-H"Authorization: token $GITHUB_TOKEN"\"https://api.github.com/repos/$OWNER/$REPO/issues?state=open&labels=bug&per_page=20"\|python3-c"import sys, jsonfor i in json.load(sys.stdin): if 'pull_request' not in i: print(f\"#{i['number']} {i['title']}\")"# Просмотр конкретной задачи
curl-s\-H"Authorization: token $GITHUB_TOKEN"\https://api.github.com/repos/$OWNER/$REPO/issues/42\|python3-c"import sys, jsoni = json.load(sys.stdin)labels = ', '.join(l['name'] for l in i['labels'])assignees = ', '.join(a['login'] for a in i['assignees'])print(f\"#{i['number']}: {i['title']}\")print(f\"Статус: {i['state']} Метки: {labels} Исполнители: {assignees}\")print(f\"Автор: {i['user']['login']} Создано: {i['created_at']}\")print(f\"\n{i['body']}\")"# Поиск задач
curl-s\-H"Authorization: token $GITHUB_TOKEN"\"https://api.github.com/search/issues?q=authentication+error+repo:$OWNER/$REPO"\|python3-c"import sys, jsonfor i in json.load(sys.stdin)['items']: print(f\"#{i['number']} {i['state']:6} {i['title']}\")"
2. Создание задачи
С помощью gh:
ghissuecreate\--title"Логин перенаправляет, игнорируя параметр?next="\--body"## ОписаниеПосле входа пользователи всегда попадают на /dashboard.## Шаги для воспроизведения1. Перейти на /settings, будучи неавторизованным2. Произойдёт перенаправление на /login?next=/settings3. Войти4. Фактический результат: перенаправление на /dashboard (должно быть на /settings)## Ожидаемое поведениеУчитывать параметр запроса?next=."\--label"bug,backend"\--assignee"username"
С помощью Curl:
curl-s-XPOST\-H"Authorization: token $GITHUB_TOKEN"\https://api.github.com/repos/$OWNER/$REPO/issues\-d'{ "title": "Логин перенаправляет, игнорируя параметр?next=", "body": "## Описание\nПосле входа пользователи всегда попадают на /dashboard.\n\n## Шаги для воспроизведения\n1. Перейти на /settings, будучи неавторизованным\n2. Произойдёт перенаправление на /login?next=/settings\n3. Войти\n4. Фактический результат: перенаправление на /dashboard\n\n## Ожидаемое поведение\nУчитывать параметр запроса?next=.", "labels": ["bug", "backend"], "assignees": ["username"] }'
Шаблон отчёта об ошибках
## Описание ошибки
<Что происходит>
## Шаги для воспроизведения
1. <шаг>
2. <шаг>
## Ожидаемое поведение
<Что должно произойти>
## Фактическое поведение
<Что происходит на самом деле>
## Окружение
- ОС: <ос>
- Версия: <версия>
Шаблон запроса функции
## Описание функции
<Что вы хотите>
## Мотивация
<Почему это будет полезно>
## Предлагаемое решение
<Как это могло бы работать>
## Рассмотренные альтернативы
<Другие подходы>
ghissuecomment42--body"Исследовано — коренная причина в auth middleware. Работаю над исправлением."
С помощью Curl:
curl-s-XPOST\-H"Authorization: token $GITHUB_TOKEN"\https://api.github.com/repos/$OWNER/$REPO/issues/42/comments\-d'{"body": "Исследовано — коренная причина в auth middleware. Работаю над исправлением."}'
# С помощью gh
ghissuelist--label"needs-triage"--stateopen
# С помощью curl
curl-s\-H"Authorization: token $GITHUB_TOKEN"\"https://api.github.com/repos/$OWNER/$REPO/issues?labels=needs-triage&state=open"\|python3-c"import sys, jsonfor i in json.load(sys.stdin): if 'pull_request' not in i: print(f\"#{i['number']} {i['title']}\")"
Прочитать и категоризировать каждую задачу (просмотреть деталь, понять ошибку/функцию)
Применить метки и приоритеты (см. Управление задачами выше)
Назначить исполнителя, если он очевиден
При необходимости оставить комментарий с заметками триажа
5. Массовые операции
Для пакетных операций скомбинируйте API-вызовы с шелл-скриптами:
С помощью gh:
# Закрыть все задачи с определённой меткой
ghissuelist--label"wontfix"--jsonnumber--jq'.[].number'|\xargs-I{}ghissueclose{}--reason"not planned"
С помощью Curl:
# Получить номера задач с меткой, затем закрыть каждую
curl-s\-H"Authorization: token $GITHUB_TOKEN"\"https://api.github.com/repos/$OWNER/$REPO/issues?labels=wontfix&state=open"\|python3-c"import sys,json; [print(i['number']) for i in json.load(sys.stdin)]"\|whilereadnum;docurl-s-XPATCH\-H"Authorization: token $GITHUB_TOKEN"\https://api.github.com/repos/$OWNER/$REPO/issues/$num\-d'{"state": "closed", "state_reason": "not_planned"}'echo"Закрыта #$num"done