...

понедельник, 15 июня 2015 г.

Как мы делали лучший трекер релиз-ноутов

Друзья, сегодня я хочу рассказать вам о том, как появился на свет сервис Allmychanges.com. Дело было в далеком 2013 году. Солнечным осенним днем я обдумывал идеи для реализации в рамках двухдневного хакатона Django Dash. Хотелось сделать какой-нибудь сервис для разработчиков, но не очередной континуос-интегрейшн-в-облаке, а что то более интересное и полезное.

Проблема номер один

И вот, в результате возникла такая идея – а что если сделать сервис, которому даешь URL, а он сам находит и показывает ChangeLog проекта? Ведь какая проблема с большинством, да что там с большинством – со всеми софтверными проектами – сложно найти, что у них изменилось от версии к версии. А в release notes, порой, можно найти интересные и полезные вещи. Разработчики Django, к примеру, пишут не только от том что изменилось, но и про всякие деприкешены и про то, как мигрировать с одной мажорной версии на другую.

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

Image by Mike, on Flickr

Однако даже для проекта, мейнтейнеры которого заботливо ведут ChangeLog, найти его бывает проблематично. Почему? Да потому что фреймворки и библиотеки пишут люди, а люди все разные. Кто то записывает release notes в файлике NEWS, кто то в ChangeLog, a некоторые разбрасывают их по отдельным файликам типа docs/src/releases/1.7.rst. Хуже всех те, кто то вообще не ведет человеческих релиз ноутов и заставляет вас ползать по гит-логу и собирать крупицы знаний по коммит-мессаджам.

Проблема номер два

Вторая проблема, которая логично проистекает из первой – невозможность регулярно получать обновления каждого из проектов, который тебе интересен. Ну нельзя подписаться на изменения одного файлика CHANGES лежащего на гитхабе! Некоторые мэйнтейнеры библиотек решают эту проблему, начиная писать о релизах в блог или, что лучше, используя GitHub Releases, но и в этом случае у вас появляются разные места и способы подписки на обновления. Это всё равно, что выстраивать пирамидки из камней – рано или поздно где-то что-то развалится:

rock balancing

Как бы то ни было, но в рамках Django Dash 2013 мы не стали браться за решение всех перечисленых проблем, и задались целью сделать минимальный MVP, способный показывать release notes любого проекта на гитхабе. И на это у нас было 48 часов. У нас, это у меня и двух моих коллег: Гены Чибисова и Гены Кандаурова.

Первая версия AllMyChanges.com была одностраничным приложением на angular.js и бэкенда на Django. Фронтенд рисовал всё красиво (ведь именно этим фронтенды обычно и занимаются), а бэкенд выполнял всю сложную работу – клонировал репозиторий, искал там changelog, используя сложные эвристики, а если не находил, то группировал коммит-мессаджи так, чтобы сформировать release notes из них, экономя тем самым силы и время пользователей.

И всё это работало. Работало отлично.

Жаль только, что единственный судья Django Dash наш сервис не оценил. Быть может, он его даже и не попробовал. Но плох тот основатель стартапа который остановится после средненькой оценки на хакатоне. Короче, я решил сервис развивать, и наверное, сейчас это единственный из проектов, сделанных на Django Dash 2013, который до сих пор жив.

Быстро сказка сказывается да не быстро стартап делается

Особенно, когда делается он ради удовольствия и в свободное от работы время.

Примерно через 9 месяцев появилась новая версия AllMyChanges, которая решала вторую проблему и давала возможность подписаться на любые release notes и получать уведомления о выходе новых релизов.

В отличие от сервисов, которые просто отслеживать выход новых версий (VersionEye, Gemnasium, Libraries.io и т.д.), Allmychanges не только присылает нотифайку, эй, друг, смотри ангулар версии 1.2.3 вышел. В дополнение к этому мы присылаем полное описание того, что изменилось в версии 1.2.3, отсобенным образом выделяя места в тексте, которые относятся к исправлению ошибок, уязвимостей или ведут к обратной несовместимости.

Так же отличается и принцип работы с библиотеками. Почти все сервисы которые отслеживают выход новых версий, завязаны на конкретный язык или несколько языков, а данные берут с репозиториев типа PyPi или Ruby Gems. При этом они, как правило, работают с понятием "проект" и там нет возможности подписаться на отдельный фреймворк или библиотеку.

AllMyChanges в этом плане более гибок. Он не только доставляет вам полные release notes, но и позволяет подписываться абсолютно на всё, для чего возможно извлечь номера версий и текстовое описание. К примеру, вы можете начать вести changelog правил дорожного движения прямо на github в обычном текстовом файлике.Затем кинуть ссылку на файлик в AllMyChanges и всё – кто угодно сможет подписаться на публикацию новых изменений ПДД! И не забудьте про семантическое версионирование.

Вы нужны нам. Да, ты, ты и ты

Этому проекту есть куда развиваться и несомненно он будет улучшаться гораздо быстрее если вы все, вот прямо сейчас, отложите чтение хабра и начнете усиленно им пользоваться. Нам нужны ваши идеи и советы для того, чтобы двигаться в правильном направлении, так что, обязательно пишите на support@allmychanges.com или в Gitter чатик.

This entry passed through the Full-Text RSS service - if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.

Комментариев нет:

Отправить комментарий