Как стать автором
Обновить

Как мы делали уведомление о коммитах

Уровень сложностиПростой
Время на прочтение2 мин
Количество просмотров4.4K

Предыстория...

Не знаю как у других, но мне с другом очень нравится видеть всю активность друг друга, логи и статистику своих проектов. Обычно для этого используем телеграм чат с топиками.

Но вот незадача, часть репозиториев на гитхабе приватны, а видеть прогресс в любое время хочется... Почему то, что репозитории приватны - проблема? Потому что в телеграме давно есть бот, который уведомляет о различных ивентах в репозиториях:

Но он отказывается работать с приватными репозиториями, т.к. токен создаваемый им не запрашивает на это разрешение.

Тогда было придумано 2 варианта решения проблемы (спойлер, оба в итоге провальны):

  1. Создать через Github Actions уведомление

  2. Создать скрипт, который будет проверять последний коммит раз в время

Первый вариант сразу был отброшен, а второй побежал реализовать мой друг.

Он реализовал это очень быстро используя REST API Github, но упёрся в ограничение по запросам в час:

~ 83 запроса в минуту, или чуть больше одного запроса в секунду.
~ 83 запроса в минуту, или чуть больше одного запроса в секунду.

Для одного репозитория хватило бы легко, но у нас 3 репозитория, которые активно изменяются. Тогда я нашёл человека, у которого был свой бот для уведомлений, и узнал что всё донельзя просто, и надо было... надо было просто прочитать документацию.

Кто-то читает документации?

вот этот добрый человек, подсказавший мне о вебхуках
вот этот добрый человек, подсказавший мне о вебхуках

https://docs.github.com/en/webhooks

И следующим моим шагом было создание наброска кода, который повесит на репозиторий вебхук и поднимет API, ожидающий запрос от гитхаба:

https://gist.github.com/vsecoder/8b8a6e5eed301b81ff1cb79df71e00f1

Код всего 82 строчки, и состоит из аунтефикации, создания вебхука, и запуска API.

from github import Auth, Github

auth = Auth.Token(GH_TOKEN)
g = Github(auth=auth)
repo = g.get_repo("vsecoder/fun") # приватный репозиторий
repo.create_hook("web", config, EVENTS, active=True)

Код был взят из примера документации к модулю PyGithub, отлично решал нашу задачу, но меня уже было не остановить, захотелось большего, а точнее open source бота, что бы он мог конкурировать с ботом, речь о котором шла выше.

Создать самого бота было не тяжело, но возникло 2 проблемы:

  1. Сложно тестировать, я повторил ошибку с тем, что не прочитал документацию, в которой был указан сайт https://smee.io/ для удобного тестирования веб перехватчиков

  2. Пришлось для каждого ивента писать своё сообщение (заняло наибольший промежуток времени)

По итогу вышел достаточно рабочий бот:

https://github.com/vsecoder/github-notifi-bot

Но бот однозначно нуждается в огромном количестве доработок, от создания сообщений с другими ивентами (forks, pull requests и др.), оптимизации кода и банальной проверки на подлинность запроса от гитхаба.

Буду очень рад предложениям по улучшению, знаю что код мягко говоря плохой, но писался на чистом энтузиазме.

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Был ли интересен пост?
35.14% Да13
64.86% Нет24
Проголосовали 37 пользователей. Воздержались 5 пользователей.
Теги:
Хабы:
Всего голосов 8: ↑3 и ↓50
Комментарии6

Публикации

Истории

Работа

Data Scientist
45 вакансий

Ближайшие события

19 марта – 28 апреля
Экспедиция «Рэйдикс»
Нижний НовгородЕкатеринбургНовосибирскВладивостокИжевскКазаньТюменьУфаИркутскЧелябинскСамараХабаровскКрасноярскОмск
22 апреля
VK Видео Meetup 2025
МоскваОнлайн
23 апреля
Meetup DevOps 43Tech
Санкт-ПетербургОнлайн
24 апреля
VK Go Meetup 2025
Санкт-ПетербургОнлайн
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань
14 мая
LinkMeetup
Москва
5 июня
Конференция TechRec AI&HR 2025
МоскваОнлайн
20 – 22 июня
Летняя айти-тусовка Summer Merge
Ульяновская область