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

от автора

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

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

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

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

Тогда было придумано 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 и др.), оптимизации кода и банальной проверки на подлинность запроса от гитхаба.

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

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

Был ли интересен пост?

33.33% Да12
66.67% Нет24

Проголосовали 36 пользователей. Воздержались 5 пользователей.

ссылка на оригинал статьи https://habr.com/ru/articles/791006/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *