-
Notifications
You must be signed in to change notification settings - Fork 3
GitHub API
Можно получить информацию по pull request (PR). Структура запроса: https://api.github.com/repos/:user/:repo/pulls?state=all (state open или closed в зависимости от того, какое состояние PR нам нужно. По умолчанию – state=open) Пример: https://api.github.com/repos/polis-mail-ru/2017-highload-kv/pulls?state=all
В том числе, доступны (подробнее: https://developer.github.com/v3/pulls/):
- ссылка на общий diff PR (текст со всеми изменениями всех файлов)
- ссылка на список коммитов PR (по ссылке возвращает информацию о максимум 250 коммитах). Подробнее: https://developer.github.com/v3/repos/commits/#list-commits-on-a-repository
- title, дата создания PR, информация о пользователе
- ссылка на PR, из которой мы можем получить список (массив json) измененных или добавленных файлов (информация о файле: "sha", "filename", "status", "additions", "deletions", "changes","blob_url", "raw_url", "contents_url", "patch" – для картинок patch отсутствует). Структура запроса: https://api.github.com/repos/:user/:repo/pulls/:PR_number/files (пример: https://api.github.com/repos/polis-mail-ru/2017-highload-kv/pulls/81/files ) Ответы содержат не более 3000 файлов. Ответ с разбиением на страницы по умолчанию возвращает 30 файлов на страницу.
API будет автоматически разбивать результат запроса на страницы (подробнее: https://developer.github.com/v3/guides/traversing-with-pagination/ и https://developer.github.com/v3/#pagination ). Информация о количестве страниц представлена в заголовках ответа. Параметр page позволяет указать номер страницы для просмотра (пример: https://api.github.com/repos/polis-mail-ru/2017-highload-kv/pulls?state=all&page=2 ). Параметр per_page позволяет изменить количество элементов на странице (максимум 100 элементов, по умолчанию - 30).
Ограничения по количеству запросов (подробнее: https://developer.github.com/v3/#rate-limiting ):
- Неавторизированные пользователи могут делать 60 запросов в час. Неаутентифицированные запросы связаны с исходящим IP-адресом, а не с пользователем, выполняющим запросы.
- Для запросов API, использующих обычную проверку подлинности (Basic Authentication) или OAuth, можно создать до 5000 запросов в час. Все приложения с авторизацией совместно используют одну и ту же квоту в 5000 запросов в час при аутентификации на разных токенах, принадлежащих одному и тому же пользователю. Подробнее про аутентификацию: https://developer.github.com/v3/#authentication
- Рекомендуется использовать условные запросы, проверяющие, не был ли ресурс изменен с предыдущего запроса. Условные запросы не уменьшают счетчик запросов. Это может быть полезным при проверке, не поступил ли новый PR. Подробнее: https://developer.github.com/v3/#conditional-requests
Есть возможность создавать и редактировать комментарии к PR. Подробнее: https://developer.github.com/v3/issues/comments/
Есть возможность сразу получить ответ, который завернут в функцию (параметр: ?callback). Подробнее: https://developer.github.com/v3/#json-p-callbacks
Отслеживание событий в репозитории:
- GitHub Webhooks - автоматически оповещает о произошедшем событии (подробнее: https://developer.github.com/webhooks/ и https://developer.github.com/v3/repos/hooks/), но, насколько я поняла, требует настройки хука администратором репозитория.
- Опрос API о событиях репозитория (подробнее: https://developer.github.com/v3/activity/events/). Есть возможность получить информацию о событиях репозитория за последние 90 дней (но не более 300 событий). Опрос производится вручную, но, если новых событий не произошло, то квота на запросы в час не уменьшается. Нас интересует событие PullRequestEvent, которое возникает в том числе при открытии и изменении PR. Конкретное действие с PR указано в
action, также доступен номер PR и ссылка на него. Подробнее о событии PullRequestEvent: https://developer.github.com/v3/activity/events/types/#pullrequestevent
Библиотеки для работы с API: https://developer.github.com/v3/libraries/ (Ruby, .NET, JavaScript, Clojure, Dart, Emacs Lisp, Erlang, Go, Haskell, Java, Julia, OCaml, Perl, PHP, Python, Scala, Shell)