Fork me on GitHub
#clojure-russia
<
2016-11-14
>
andre09:11:47

@artemyarulin а как в монорепо решается вопрос с определением где были изменения? ну т.е. у тебя 50 либ, изменили одну и надо только ее протестировать?

artemyarulin10:11:30

@andre Buck/Bazel это делают намного лучше чем другие даже 🙂 Билд( да и тест) это всегда чистая функция f([source-files]) -> [exit-code,[output-files]] таким образом если файлы не были изменены то билд\тест занимает 0с. Если я поменяю один файл - то только те либы которые зависят от этого файла будет перебилдены. И все либы которые имеют эту либу в зависимостях будет отребилдены затем и т.д. Т.е. весь CI скрипт у меня это buck build “//…” && buck test “//…” где “//…” это просто алиас который возвращает все модули в репо

andre10:11:03

Спасибо

be910:11:26

@artemyarulin а как у тебя цикл разработки выглядит с монорепо? как ты запускаешь реплы, используешь ли ты IDE 😐?

artemyarulin11:11:21

@be9 Раз в 2-3 месяца когда чертов макбук виснет и приходится все перезапускать то: 1 buck run repl - создает .repl папку с lein проектом для всего монорепо куда с помощью symlink кладет все сорсы 2 cd .repl && lein repl сопсно стартует репл для всего монорепо 3 Emacs cider-connect 2 раза - один для Clojure mode, другой для CLJS через фигвил 4 buck run chrome стартует хром клиента фигфила через используя --auto-open-devtools-for-tabs --disable-web-security --user-data-dir --ignore-certificate-errors (рекомендую - позволяет делать XHR запросы на любой хост, любое апи, дебажить или поиграть с апи прям ах) 5 buck run rn создает новый проект RN с нужными мне нативными мудулями и подключается опять же фигвилом Обычный ежедневный процесс 1 Если нужно попилить бек - то открываю CLJ файл, делаю чо надо, репл уже там 2 Если нужно фронт - то переключаюсь на CLJS файл, рефрешу хром чтоб фигвил начал его использовать для eval 3 Если нужно мобайл - тоже самое тока делаю рефреш в iOS симуляторе чтоб фигвил общался с этим клиентом 4 Перед комитом стоит простой хук buck test “//…” . Бак сам найдет какие файлы я поменял и протестит все либы которые могут быть заафекчены изменениями

artemyarulin12:11:10

у меня друган спрашивает - пытается делать селениум тесты на Clojure и спрашивает можно ли как при фейле теста сделать скриншот, как нить подписаться на такой евент, мож кто делал?

edbond12:11:14

я только в руби использовал - https://github.com/mattheworiordan/capybara-screenshot

seryh12:11:27

stuartsierra/component есть смысл для clojurescript использовать? посмотрел по репозиториям почти никто не пользуется для фронта оным

rkosenko12:11:10

@artemyarulin а не сталкивались с тем, что dev build в figwheel может отличаться от production build? Я частенько сталкиваюсь с тем, что в figwheel всё работает, а после uberjar уже нет. Т.о. приходится перед коммитом каждой стори проверять с полным ребилдом без figwheel-а.

artemyarulin12:11:22

@rkosenko Эм, ну у меня тесты гоняются через lein test | lein doo phantom debug once там фигвила уже нету

artemyarulin12:11:30

или ты про что-то другое?

rkosenko12:11:29

а lein test - там инкрементый билд?

artemyarulin12:11:16

эм, вроде не - он с чистого листа начинает каждый раз

rkosenko12:11:54

ну вот тут как раз возникает желание разбить на модули репу и билдить не всё... Бо скомпилить всё у нас занимает ни одну минуту.

artemyarulin12:11:32

ага, в этом и преимущество когда куча мелких модулей + они могут тестироваться параллельно же

artemyarulin12:11:49

я помню положил Jenkins как-то на работе когда кложуру обновил до 1.8 и у меня все 50 модулей начали билдится одновременно (buck берет кол-во CPU * 1.5 для расчета одновременных жобов, а там был сервак с 32 CPU шоле), все легло и ушло в ребут 🙂

artemyarulin12:11:45

ну и опять же - билдить все в терминах buck это сбилдить только то что было зафекчено изменениями, остальное взять из кеша

seryh14:11:44

@artemyarulin евентов в селениуме нет. но можно обернуть тесты в свой макрос который будет дергать https://github.com/semperos/clj-webdriver/wiki/Taxi-API-Documentation#take-screenshot при фейле

artemyarulin14:11:34

@seryh ага, спасибо, передам

andmed14:11:40

@artemyarulin а версионирование с монорепо просто, когда куча разработчиков пилятновые в модулях фичи?

andmed14:11:53

почитать бы про версионирование в моноперо

artemyarulin14:11:14

@andmed нету их ага, все всегда последнее

andmed14:11:33

биг ынтырпрайз без фич

andmed14:11:48

релизы

artemyarulin14:11:49

релизы есть куда без них то, но это уже по большой части для конечных продуктов

artemyarulin14:11:34

если продукт это либа - то точно так-же релизишь и их куда-нить во внешний мир, но внутри в монорепо все всегда последнее ага

artemyarulin14:11:25

ну или если очень breaking changes то можно сделать еще одну либу с новым названием рядом (что в принципе тоже имеет смысл если прям все-все поломалось то наверно и название другое)

artemyarulin18:11:18

зачетное видео и идея сама здравая

andre18:11:54

я это увидел на конфе по елму, и реализовал https://github.com/flexsurfer/re-frisk в отдельном окне браузера, хотел прикрутить тайм тревел, но свободное время пропало. не успел , но в планах

andre18:11:25

сделать это будет не сложно, т.к. у re-frame уже есть механизм, нужно просто добавить его в UI re-frisk

artemyarulin19:11:32

помню помню ты это делал, не знал что идея та же, ну круто

savelichalex19:11:36

там же вроде немного другое

savelichalex19:11:46

я на самом деле всколзь прочитал)

savelichalex19:11:55

там типа можно как то выгружать историю

andre19:11:28

ну да

andre19:11:35

вот с выгрузкой конечно надо подумать будет

artemyarulin19:11:16

ну это все доп фичи которые не сложно сделать если управление стейтом идет явное, т.е. хоть ом, хоть что

artemyarulin19:11:31

как мне кажется

andre19:11:33

по идее да

artemyarulin19:11:59

но тока в элме из коробки всеж)

andre19:11:47

интересно как это реализовано

rustam.gilaztdinov20:11:11

Тут еще в одном слаке тоже зашел разговор про монорепо, и ребята из Гугла говорят, что монорепо кул, но гит не может в нее, если размер сорцов за гиг перешагнул) И пользуются svn и p4. В Яндексе кстати тоже SVN)

rmuslimov21:11:31

помоему у гугла свой codeversion

rustam.gilaztdinov21:11:01

Вроде как допиленный p4

misha22:11:11

что-то изкоробочные решения меня последнее время отталкивают (в контексте cljs/clj ). хотелось бы подобную экспо-/импортируюмую хистори, но как фреймворк-агностик либу, которую на любой реф/атом повесить можно

misha22:11:17

и картинки, никто не рисует в репах картинки/диаграммы дизайна