Отслеживаем пулл реквесты через open source
PullKeeper — это новый open source проект от Ruby-разработчика Evrone Антона Богданова. С его помощью можно собирать полноценную статистику по пулл-реквестам (PR) для своих репозиториев на GitHub или GitLab, включая статистику отдельных разработчиков, сравнивать данные с предыдущими периодами и отправлять уведомления. Подробнее о проекте расскажем ниже.
Идея
В компании, где когда-то работал Антон, была практика регулярного код ревью, это отслеживали с помощью одного из GitHub Action. В момент создания реквеста он анализировал все старые PR в репозитории, рассчитывал статистику и добавлял ее комментарием: количество код-ревью, комментариев, среднее время, затраченное на ревью.
Но особенности рабочего процесса и недостаток настроек не отражали актуальную статистику разработчиков. Например, кто-то любит работать по ночам, делает свой PR, а другой разработчик аппрувит этот код в начале рабочего дня, «затрачивая» на это по статистике восемь часов, что сильно искажало среднее время на ревью. Плюс, были реквесты в мастер-ветку, которые не нужно отслеживать. И главное, статистика была видна только в момент создания PR. Чтобы получить актуальные данные, нужно создавать новый запрос.
Все эти проблемы вдохновили Антона собрать свое решение. Первыми реализованными функциями были расчет статистики в реальном времени и настройки рабочего времени, для более точных расчетов. Проект понравился команде, и для сбора статистики перешли на PullKeeper.
Со временем росло число метрик и настроек. Теперь в PullKeeper можно настраивать рабочее время, отпуска, выходные как для всей компании, так и для отдельных разработчиков. Решение умеет оценивать содержательность комментариев, и отмечать это в статистике. И, главное, PullKeeper работает не только с GitHub, но и с GitLab, и в будущем с другими платформами. С ростом функционала усложнился и изменился интерфейс сервиса. Также Антон перевел фронтенд с React на SolidJS, чтобы он работал быстрее.
Проект уже используют в работе 32 компании, которые отслеживают 84 репозитория.
Функции
- Статистика рецензентов. Данные обновляются каждый час, и учитывают отзывы, комментарии, среднее время рецензирования и другие метрики с описанием. Статистику можно собирать для отдельных репозиториев или всей компании.
- Безопасность. Приложение требует read-only права для доступа к пулл-реквестам, и не использует код. Сами девелоперы могут видеть свою статистику, благодаря удобному способу аутентификации, но при желании эту фичу можно отключить.
- Расчет времени. Для более точного расчета среднего времени, затраченного на ревью, есть несколько конфигураций настроек.
- Исключения. Возможность исключить из статистики отдельных сотрудников. Например, ботов или тестировщиков, которые создают PR в мастер-ветку с кодом других разработчиков. Также можно исключить PR при разных условиях, например, по названию, или в мастер-ветку.
- Сравнение данных. Данные за предыдущие периоды сохраняются и доступны для сравнения с текущим периодом, чтобы оценить, насколько хорошо идет процесс.
- Уведомления. Сообщения в Slack/Discord/Telegram с последними новостями о компаниях и репозиториях. Данные также можно отправлять на кастомный URL-адрес или извлекать через API.
- GitHub и GitLab API. Данные о рецензентах, реквестах и комментариях собираются через GitHub или GitLab API.
- Достижения. Система достижений помогает отслеживать и сравнивать прогресс программистов.
- Анализ комментариев. Содержимое комментариев анализируется на соответствие специальному гайду. Содержательные и полезные комментарии положительно влияют на статистику.
Установка
Весь код проекта доступен для изучения. Его можно установить локально или на свой сервер. Для локального запуска проекта:
$ bundle install
$ rails db:create
$ rails db:schema:load
$ rails db:seed
$ yarn install
$ EDITOR=vim rails credentials:edit
Настройка
Добавьте компанию. Это абстракция для группы репозиториев с похожей конфигурацией.
Добавьте репозиторий. Ссылка на репозиторий в GitHub или GitLab, которая далее будет использоваться для извлечения статистики. Извлекать данные может только один пользователь, остальные могут просто видеть статистику.
Добавьте токен доступа. Добавьте токен с правом read-only. PullKeeper извлекает данные о временных метках из пулл реквестов, комментов, ревью и их авторов.
Готово! Данные по разработчикам собираются на уровне репозитория, а также агрегируются для всей компании. Есть дополнительные метрики репозитория с конкретной статистикой. Чтобы получить доступ к собранным данным, разработчикам нужно просто войти в PullKeeper.
Дополнительные настройки. Настройки конфиденциальности, рабочего времени, правила исключения для запросов на извлечение, различные настройки расчета инсайтов, уведомления.
Стоимость
В базовой версии PullKeeper бесплатный, но для больших компаний есть дополнительные опции. В базовую версию входят:
- Восемь метрик для разработчиков.
- 16 метрик для репозиториев.
- Пять отслеживаемых репозиториев.
- Метрики компании на основе репозиториев.
- Легкий доступ для разработчиков.
- Настройка рабочего времени, отпусков.
- Настройка правил исключения.
- Отправка аналитики в Slack/Discord/Telegram.
- Доступ к API.
- Система достижений.
Премиум-версия включает те же возможности, плюс 15 метрик для разработчиков вместо восьми, неограниченное число репозиториев, сравнение данных с предыдущими периодами, приоритетная поддержка и внедрение новых функций, поддержка онбординга. Такой пакет стоит €25 в месяц или €250 в год. Оплатить можно на странице профиля после входа. Доступен бесплатный пробный период на 100 дней. Есть также enterprise-версия, в которой дополнительно есть возможность селф-хостинга и десктопное приложение.
Планы на будущее
Проект продолжает развиваться и дорабатываться. Автор проекта работает над полноценным десктоп-приложением для enterprise-клиентов, которое запускается локально и не требует сервера.
В веб-приложении тоже планируются изменения, должен появиться чат с админами, карма (достижения за все время). Плюс, улучшения уведомлений: нотификации для истекших токенов, регулярность уведомлений, пригласительные e-mail для новых пользователей. Из интеграций скоро появится возможность работать с Azure DevOps.