Создание GitHub бота для сообщества

от автора

Всем привет!

Меня зовут Александр, я работаю в Positive Technologies и занимаюсь развитием open-source-инициатив в сфере информационной безопасности. В нашей компании мы активно поддерживаем обмен знаниями и практиками между специалистами, чтобы улучшать стандарты работы в отрасли.

Сегодня я рад поделиться с вами новым проектом, над которым работал вместе со своей командой!

В мире разработки ПО своевременное получение информации о событиях в репозиториях важно для активного сообщества. Мы решили автоматизировать этот процесс, создав чат-бота для нашего комьюнити в Telegram.

Мы сделали упор на то, чтобы бот был простым в использовании, помогал оставаться в курсе изменений и сокращал время на ручной мониторинг репозиториев, предоставляя важную информацию в читаемом виде прямо в Telegram-чатах. Но самое главное — это вовлечение сообщества в жизнь наших открытых проектов 🙂

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

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

Все началось с репозитория, созданного одним из участников. Он в тестовом режиме локально запустил бота, ориентированного на наши задачи. Однако из-за нехватки времени он поставил проект на паузу. 

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

Таким образом, наш бот стал настоящим продуктом сотрудничества: от начальных шагов одного участника до совместной доработки и улучшения всей командой — именно ради этого и было создано Security Experts Community.

Чем полезен наш бот

Бот имеет несколько важных особенностей, которые делают его незаменимым инструментом для разработчиков и активных участников open-source-сообществ. Вот несколько ключевых аспектов, которые делают его полезным:

🚀 Удобство и оперативность

В наш проект мы внедрили механизм отправки уведомлений в реальном времени, что позволяет участникам сразу же получать актуальную информацию о событиях в репозитории. Каждое обновление — будь то новый pull request (PR), изменение в кодовой базе или важный комментарий — мгновенно доставляется в чат. Так разработчики могут моментально реагировать на ключевые изменения и следить за жизненным циклом проекта, не пропуская критически важные моменты. Это значительно упрощает мониторинг и позволяет вовремя вносить правки, устранять баги.

⚙️ Простота настройки

Бот был разработан с акцентом на простоту использования. Мы постарались сделать его максимально гибким и адаптивным, чтобы любой разработчик мог без проблем настроить его под свои потребности. В процессе настройки можно выбрать, какие именно события из репозитория нужно отслеживать: от создания issue до закрытия PR. Поэтому бот — универсальный инструмент для любых команд и проектов, будь то небольшие команды или крупные open-source-проекты с большим количеством участников. Кроме того, бот легко интегрируется с существующими workflow, не требуя значительных изменений в уже настроенных процессах.

💬 Вовлечение сообщества

Одним из самых больших преимуществ бота является возможность интегрировать его работу в групповые чаты. Благодаря этому разработчики и участники проекта могут не только видеть уведомления об изменениях, но и сразу же обсуждать их. Такая функциональность способствует коллективному решению задач, обмену мнениями и быстрому обсуждению возникающих вопросов. Проект одного человека может стать общественным достоянием: благодаря боту сообщество вместе может активно обсуждать этот проект 🙂 Таким образом, бот служит не только инструментом для информирования, но и платформой для коллективной работы.

Архитектура решения

Работа над ботом началась с анализа потребностей сообщества и выбора подходящих инструментов для реализации проекта. Мы решили использовать GitHub Webhooks напрямую для получения событий, Yandex Cloud Function для их обработки и телеграм-бота для отправки уведомлений в чат (где, собственно, и происходит вся основная активность сообщества). Эта архитектура обеспечила нам необходимую гибкость и простоту интеграции.

Рассмотрим подробно компоненты, на которых базируется наше решение, и этапы разработки:

  1. GitHub Webhooks

    Мы настроили вебхуки в наших репозиториях GitHub, которые отправляют события в Yandex Cloud. Это позволило получать информацию о ключевых событиях, таких как создание issue, появление комментариеви, отправка PR и других.

    Вебхук (webhook) — это способ, с помощью которого одна система может уведомлять другую о событиях, происходящих внутри нее. Вебхуки обеспечивают автоматизацию и интеграцию с внешними сервисами без необходимости постоянного вызова API.

  2. Yandex Cloud Function

    Создали серверную функцию, которая принимает данные из вебхуков, обрабатывает их, формирует сообщения и отправляет их в Telegram. Этот компонент обеспечивает гибкость и масштабируемость нашего решения.

    Yandex Cloud Function — это управляемый сервис, который позволяет запускать код в ответ на различные события без необходимости управления серверами и инфраструктурой.

  3. Телеграм-бот

    Использовали BotFather для создания бота и настройки его параметров. Далее интегрировали его с Yandex Cloud Function, чтобы бот мог получать и отправлять уведомления. Этот бот — финальная точка в цепочке, обеспечивающая отправку всей нужной информации в наш чат.

Запуск и первые результаты

Бот был добавлен в нашу группу и успешно отправил свое первое сообщение с issue.

На данный момент бот работает для репозитория VSCode XP и уведомляет о следующих событиях:

  • создание issue,

  • комментарии к issue,

  • создание discussion,

  • комментарии к discussion,

  • создание и слияние PR,

  • комментарии к PR.

Применение проекта на практике

Бот стал незаменимым помощником во время двухнедельного спринта Open Security Week 2, посвященного выявлению атак на macOS. Благодаря оперативной отправке уведомлений в Telegram участники спринта были в курсе всех изменений, что позволило им быстрее реагировать на новые pull requests и комментарии к задачам. За время спринта было отправлено 140 сообщений от бота. 

Примеры уведомлений представлены ниже.

Благодаря боту мы смогли наглядно увидеть, как сила комьюнити разработчиков помогает в реализации проектов, делая их лучше и полезнее для всех участников!

Пример использования проекта

Настройка в Yandex Cloud

Яндекс предложил оптимальное решение в виде Yandex Cloud Function — управляемого сервиса, который автоматически масштабируется и позволяет сосредоточиться на разработке, а не на поддержке инфраструктуры. Предлагается бесплатный план, который покрывает все потребности даже при большой нагрузке на репозитории.

Как альтернативные решения можно использовать и другие облачные платформы, которые предлагают похожие возможности. Например, AWS Lambda от Amazon имеет похожий набор функций с бесплатным уровнем для малых нагрузок. Сервис также масштабируется автоматически и поддерживают интеграцию с вебхуками и внешними API, что делает его хорошим вариантом для обработки событий из GitHub.

Пройдемся по настройке бота:

  1. В консоли управления перейдем в каталог, в котором хотим создать функцию, укажем название, описание и метки.

  2. В редакторе выберем среду выполнения. В нашем случае — Python.

  3. Воспользуемся одним из форматов загрузки кода. Для примера будет использован ZIP-архив. Сразу в переменные окружения можем записать токен бота и секрет для вебхука.

    Указываем точку входа (путь к функции, которая будет вызываться в качестве обработчика).

  4. Получаем ссылку для вызова функции и можем просмотреть основную информацию о созданной функции.

  5. Теперь переходим на GitHub, добавляем новый вебхук и прописываем ссылку для вызова функции.

  6. Вебхук настроен, теперь попробуем написать тестовый issue и комментарий к нему.

    В группу сразу же приходят уведомления (для сообщений использовался дефолтный шаблон).

    Как видим, настроив Yandex Cloud Function, мы получаем уже готовое решение для нашей задачи.

Локальная настройка

Немного поговорим про настройку бота локально — это позволит протестировать и адаптировать проект под свои нужды без необходимости сразу разворачивать его в «облаке». 

Локальная настройка обеспечивает большую гибкость и удобство отладки, давая возможность изменять шаблоны уведомлений, экспериментировать с функциональностью и мгновенно видеть результаты.

Это будет полезно для тех, кто хочет предварительно протестировать проект, прежде чем внедрить его в рабочую среду или облачную инфраструктуру.

  1. Для начала создаем тестовый репозиторий в GitHub, тестового бота в Telegram и группу с топиком для отправки сообщений.

  2. Далее клонируем репозиторий и указываем в переменных окружения токен бота, название репозитория после GITHUB_SECRET_ и секрет для вебхука.

  3. У нас уже есть дефолтный набор с шаблонами под некоторые события. Давайте создадим свой custom_set и сделаем уникальные шаблоны для issues и issue_comment.

  4. Теперь добавим созданную группу, топик и название нашего набора шаблонов в main_local.py.

  5. Запускаем файл и видим следующее.

    Нам необходимо через localtunnel сделать доступным наш адрес.

  6. Далее настраиваем вебхук в тестовом репозитории, указав полученный URL с путем /webhook и созданный в окружении секрет.

  7. Теперь создаем issue и пишем к нему комментарий.

    Как видим, наш issue и комментарий к нему сразу же прилетают в чат.

    Вы можете легко сами поэкспериментировать, разворачивая проект локально или в «облаке», полностью кастомизируя его под себя.

    Более подробные инструкции и возможности расписаны в репозитории.

Потенциальные улучшения и будущие перспективы

Пока наш проект находится на стадии доработки, поэтому в обозримом будущем мы планируем внедрить следующие улучшения:

  • Интерактивные команды: добавление интерактивных команд, которые позволят пользователям запрашивать определенную информацию напрямую у бота (например, подписки на конкретные события из репозитория).

  • Правки от сообщества: корректировка вывода сообщений с событиями, визуальные изменения, добавление ссылок, тегов к сообщениям и т. д. — хотим сделать более удобный и понятный формат бота.

  • Интеграция с другими сервисами: в будущем можем рассмотреть интеграцию бота с другими инструментами, сервисами и платформами, где будет развиваться наше сообщество.

  • Расширение возможностей фильтрации уведомлений: внедрение системы приоритизации событий, которая позволит пользователям получать только самые важные уведомления, такие как срочные баги, успешные релизы или критически важные комментарии.

Заключение

Создание своего чат-бота стало важным шагом в улучшении нашей внутренней коммуникации и в дальнейшем, мы уверены, повысит эффективность работы участников комьюнити.

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

Практическое применение бота, особенно во время спринта Open Security Week 2, показало его эффективность: участники всегда были в курсе актуальных изменений, что ускорило работу и помогло своевременно отслеживать критически важные обновления. Бот стал важным инструментом: он отправил более сотни уведомлений за время спринта и обеспечил непрерывную коммуникацию между разработчиками.

Уверен, что подобные решения могут быть полезны и другим командам, стремящимся к автоматизации и оптимизации своих процессов.

Буду рад вашим вопросам и предложениям!


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


Комментарии

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

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