Skip to content
Alexander Artemenko edited this page Sep 28, 2013 · 3 revisions

Каждый охотник желает знать, где лежит changelog

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

Концептуальные задачи

Следить за выходом новых версий

Получать информацию о том, что случилось в той или иной версии

Архитектурно он состоит из

API

Вебморды

Краулера

На первом этапе мы делаем

Краулер, который ищет changelog среди файлов репозитория

парсит его и отдает в виде структур данных python

Command line утилиту для тестирования краулера

Она должна принимать на вход URL и печатать changelog, если он найден, в stdout.

Простой фронтенд/бэкенд, который

позволяет ввести url репозитория, натравливает на него краулер и показывает найденный changelog, или ничего не показывает

Если успеем, то

Расширяем фронтенд, добавляя

Сохранение данных проекта в базу

Название + URL репозитория + найденный changelog

Периодическое обновление логов проектов из базы

На главной странице показываем несколько кусков из свежих логов

Если еще останется время, то

Дорабатываем фронтенд, позволяя искать проекты и лайкать их

Поиск делаем простейший - по названию

Из полайканных проектов формируем страницу с недельными дайджестами

Если мы и это успеем за два дня, что вряд ли, то

Допиливаем краулер, чтобы умел формировать логи на основе commit-message гита

Это в случае, когда нет нормального лога в файле

Технические детали

Формат нормализованного лога

Простой пример:

[ { ‘version’: ‘0.1.3’, ‘sections’: [ { ‘items’: [ ‘Исправлен баг с кодировками’, ‘Добавлена возможность шарить папки’ ] } ] }, { ‘version’: ‘0.1.2’, ‘sections’: [ { ‘items’: [ ‘Добавлен перевод на китайский язык’, ‘Цвет шапки теперь более привлекательный — красный’, ‘Наконец стали вести ChangeLog’ ] } ] } ]

Пример посложнее, с разбивкой проекта по модулям:

[ { ‘version’: ‘0.1.3’, ‘date’: ‘2013-09-15’, # оptional ‘sections’: [ { ‘notes’: ‘В основном багфиксы’, ‘items’: [ ‘Исправлен баг с кодировками’, ‘Исправлена ошибка, когда пользователь заходит на несуществующую страницу’ ] }, { ‘notes’: ‘Интерфейс’, ‘items’: [ ‘Добавлен перевод на китайский язык’, ‘Цвет шапки теперь более привлекательный — красный’ ] } ] } ]

Clone this wiki locally