Новый ролаут N2O

Всё хотел вести блог прямо в гитхабе и вот я здесь. Привет Твиттер!

Раз в год я выкатываю свежие версии N2O. В этом году это — Более матурная MQTT библиотека, которая вместе с веб-сокетной версией получили тег 5.10, последняя все ещё остается в отдельном репозитории; NITRO уже смержилась и совместима с обеими версиями, кто знает, возможно, в следующих версиях, или уже в новом, гду придёт гранд мерж MQTT и N2O репозиториев (осталось пару файлов перенести из старого репозитория и запустить старый вебсокетный-пример на новом дереве)! В связи с нарастающим количеством деприкейтов в логах, было принято решение залочить все чужие либы и сделать что-то типа SYNRC хранилища репозиториев. В этом месяце в него вошли и залочились:

https://github.com/voxoz/cowboy — 1.0.4
https://github.com/voxoz/cowlib — 1.0.0
https://github.com/voxoz/ranch — 1.0.0
https://github.com/voxoz/erlydtl — 0.8
https://github.com/voxoz/emqttc — 0.8
https://github.com/voxoz/gen_logger — 1.2
https://github.com/voxoz/lager — 3.2.2
https://github.com/synrc/emq_dashboard — 2.1.1
https://github.com/synrc/emqttd — 2.1.2
https://github.com/voxoz/esockd — 4.1.1
https://github.com/voxoz/mochiweb — 4.2.1
https://github.com/voxoz/gproc — 0.8
https://github.com/voxoz/syn — 1.5

Одновременно с этим обновился главный хедлайнер сезона, библиотека voxoz/mq, которая включает старый EMQ 2.1.2 и его дашборд. Кроме этого выкатилась октябрская волна экосистемы N2O, а именно (от старых к новым):

https://github.com/synrc/n2o — 5.10
https://github.com/synrc/kvs — 5.10
https://github.com/synrc/mad — 4.10
https://github.com/synrc/fs — 4.10
https://github.com/synrc/active — 4.10
https://github.com/synrc/nitro — 3.10
https://github.com/synrc/bpe — 3.10
https://github.com/synrc/sh — 2.10
https://github.com/synrc/review — 1.10
https://github.com/synrc/bert — 1.10
https://github.com/synrc/mqtt — 5.10 (N2O-MQTT)

Вполне возможно, что пора, в стиле NIH-синдрома, писать протокол своего репозитория пакетов вместе с бинарной дистрибюцией пакетови самого эрланга (давно просят). Ведь даже я до таких глубин еще не опускался, если npm-овцы могут, а я чем хуже!

Где-то минорные фиксы, где-то ворнинги, все репозитории включены в тревисе и можно видеить их стрим: https://travis-ci.org/voxoz, https://travis-ci.org/synrc, там же можно глянуть все логи всех билдов. Как видно многие репозитории не включены, поэтому в ближайших планах засветить всё зеленым, это подзразумевает сборку ребаром и мёдом.

Почему ругают mad, я не знаю, например на тревисе rebar на 19.3 gen_logger

==> gen_logger (compile) ERROR: OTP release 20.0.4 or later is required, you have: 19 ERROR: compile failed while processing /home/travis/build/synrc/review/deps/gen_logger: rebar_abort

The command "rebar get-deps compile" exited with 1.

не собирает, а с mad всё работает:

$ cat .travis.yml language: erlang otp_release: - 19.3 script: - "curl -fsSL https://raw.github.com/synrc/mad/master/mad > mad" - "chmod +x mad" - "./mad dep com"
The command "./mad dep com" exited with 0. Done. Your build exited with 0.

mad начал поддерживать сборку кубическим тайпчекером, появился модуль mad_cubical, но через год-два, кто знает, возможно тут будет уже свой AST трансформатор на Erlang.

Всего эта работа заняла 170 коммитов в 30 репозиториев и ровно 1 сутки без перерыва. Сюда входят все багфигсы и удаление файлов и склейка некоторых репозиториев, всё, начиная от импорта, заканчивая ченджлогами и релизами. Я заморочился, но добился что в билдлогах на 19.1, 19.2, 19.3, 20.0.4, 21.0.4, 21.1.1 нет ни одного ворнинга! Думал, вообще по-чесному переписать esockd с gen_fsm на gen_statem но оказалось, что задача одним днем не ограничится, поэтому

{erl_opts,[nowarn_deprecated_function]}.

спасла ситуацию. Но депрекейтеды валятся в оснвном на последних эрлангах, предлагают как пошаговый турториал что на что переписывть, я прошел этот квест для esockd, немного но запустить успешно с первого раза не удалось, а это ведь гланая часть тракта, а если лики? поэтому я не стал.

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

Максим