Автоматизация учёта и аналитики реализаций проектов роадмапа
2 года назад я начал фиксировать все сдаваемые проекты, чтобы копить коллекцию, делать ревью, вести статистику.
Первое время учёт вёлся вручную - я добавлял проекты в список на сайте роадмапа, и публиковал свежие проекты в итогах месяца.
Потом стал делегировать рутину, которая занимала 4-6 часов каждый месяц.
В этой статье я расскажу, как ручная обработка проектов постепенно была заменена на практически полную автоматизацию. Покажу исходники, данные, статистику и аналитику.
Стек решения:
Бот - Python, python-telegram-bot, Docker
Сайт роадмап - Hugo, Book, деплой через GitHub Actions
Хранение данных и аналитика - Google Spreadsheets
Функционал:
Каталогизация проектов и ревью
Статистика по месяцам, языкам, типам проектов
Аналитика по студентам
Автоматизация и данные
На 16 февраля 2025, сдано 800 проектов на 13 языках программирования.
Когда кто-то публикует в чате свой готовый проект, я вызываю команду /addproject $language $project. Бот сообщества, написанный на Python и python-telegram-bot, сканирует сообщение на предмет ссылки на гитхаб, и добавляет проект в Google таблицу.
Каждая строчка листа “Projects” описывает 1 проект - репозиторий, автора, язык.
Эта информация используется для генерации списка свежих проектов за месяц (публикуется в конце месяца - пример) и актуализации списка всех проектов на сайте роадмапа - все реализации виселицы.
Генерация списка свежих проектов
Суть проста - находим в Google таблице все проекты за текущий период, например, “Январь, 2025”. По заданному формату генерируем Telegram сообщение со списком, где каждый элемент содержит тип проекта, язык, автора, ссылку на репозиторий.
По команде /projectsmonthlysummary 'Декабрь, 2024' бот исполняет эту операцию, и отправляет результат в ответном сообщении.
Изначально список обновлялся вручную в конце каждого месяца, потом генерацией markdown таблиц занимался бот. На днях мы доделали полную автоматизацию этого процесса.
По команде /updatefinishedprojects бот итерирует проекты и ревью в Google таблице
Собранные данные с помощью шаблонизатора Jinja2 и шаблонов рендерятся в markdown файл со списком реализаций в виде таблицы
Обновленные таблицы пушатся ботом в новую ветку, автоматически создаётся pull request, пример
Остаётся вручную проверить и принять pull request, что запустит деплой на сайт.
Сдаваемые проекты агрегируются для формирования статистики.
Проекты по языкам и типам
Проекты по месяцам
Аналитика
Благодаря формулам Google таблиц можно добиться большего, чем простая агрегация статистики.
Список студентов, сдавших хотя бы 1 проект. Собирается количество сданных проектов каждым, последний сданный проект и дата сдачи.
Проекты, которые пропускают чаще всего. Пропущенным считается проект, если студент написал хотя бы 1 проект до него, и хотя бы один после. Чаще всего пропускают виселицу (слишком просто), или планировщик задач (идут искать работу).
Проекты, на которых студенты сходят с дистанции - более 4 месяцев не публикуют свои новые проекты.
Не удивительно, что самый большой процент схода с дистанции у симуляции. Теннисное табло на втором месте.
Планы на будущее
Автоматизация отлично помогает экономить время. Дальнейшая работа будут направлена на избавление от оставшейся рутины, прежде всего это ручной учёт ревью.