fullstack-development / haskell-starter-kit

Starter Kit for web-backend apps written with Haskell, Servant, Docker and PostgreSQL
BSD 3-Clause "New" or "Revised" License
0 stars 1 forks source link

Рассмотреть вариант использования DHall для подгрузки конфигов в проект #21

Open kelizarov opened 3 years ago

kelizarov commented 3 years ago

Предлагаю рассмотреть вариант использования dhall для настройки конфиг файлов на проект, чтобы у нас были более тайп-сейф параметры. Для хаскеля есть библиотека по работе с такими файлами.

Сама дока по dhall: https://dhall-lang.org

antonkalinin-ml commented 3 years ago

Читал про dhall, впечатляет. Но не очень понимаю, какую проблему он может решить, можешь привести пример?

antonkalinin-ml commented 3 years ago

config/local.conf не содержит какой-то путаницы или дублирования, так что я не понимаю профит переезда на Dhall. А вот остальную пачку конфигов не помешало бы перевести на что-то программируемое, поскольку их много и в них дублируются хосты, порты и прочее, но docker и liquibase вряд ли поддерживают Dhall нативно, а значит, придется генерировать их конфиги на лету. Dhall умеет генерировать JSON, YAML и вроде даже шелл, но у нас еще есть liquibase.properties, а генератора properties-файлов я не нашел. Есть способы генерировать произвольный текст.

Znack commented 3 years ago

Ну вот кстати как минимум генерация properties файлов выглядит неплохой идеей :)

Znack commented 3 years ago

Кстати вот как мы сейчас генерим у нас на проекте в рамках шага CI пайплайна нашего одной здоровой командой:

"printf 'classpath: /opt/jdbc/postgres-jdbc.jar\ndriver: org.postgresql.Driver\nurl: jdbc:postgresql://%s/%s\nusername: %s\npassword: %s\nlogLevel: info\nchangeLogFile: changelog.xml' $DB_HOST:$DB_PORT $DB_NAME $DB_USER $DB_PASS > liquibase.properties"
kelizarov commented 3 years ago

У configurator есть небольшой косяк с экранированием $ знака. Дело в том что он когда видит доллар в тексте, то начинает распознавать следующий символ как переменную окружения, а сам доллар опускать из финальной строки которая грузится в память программы. И получается чтобы $ остался в строке нужно его дублировать. И вот подобное поведения меня крайне не устраивает в самом configurator пусть она довольно простая и имеет хот-релоад.

Но мне кажется что для конфигов гораздо лучше использовать более тайп-сейф решение, для DHall есть даже своя собственная IDE которая помогает тайп-чекнуть сам конфиг, пржде чем его чекнет хаскелл в рантайме.

Znack commented 3 years ago

У configurator есть небольшой косяк с экранированием $ знака.

я с этим сталкивался кстати. Ещё проблема, что интерполяция только для строк есть и если надо численное знаение из env-а пробросить, то придётся пострадать

antonkalinin-ml commented 3 years ago

Интересно, Makefile тоже так обращаются с долларами. В скриптах приходится удваивать доллар, и это раздражает, если каждый день эти мейкфайлы не пишешь.