Daniel
ну - по уму так
Constantine️
я верно понимаю, что это прям жирный репозиторище?
Constantine️
прям настолько жирный, что в победе ему не летать?
Constantine️
это ты опытным путем дошел?))
Daniel
ну - да
Yuiry
то есть, если меняется модель, которая используется в нескольких сервисах, то нужно обновить все сервисы?
Daniel
но я сторонник мультирепы был сразу, других способов организации кода не пробовал, в общем
Yuiry
вот я тут поднял идею писать для каждого сервиса свой свагер. А для общей доки со всеми сервисами написать какой-ниудь js скрипт для мержа
Daniel
один и тот же протокол описывать в нескольких сваггерах?!
Vladimir
то есть, если меняется модель, которая используется в нескольких сервисах, то нужно обновить все сервисы?
Я слышал очень хорошие отзывы об использовании Базеля как системы сборки под такие вещи
Vladimir
Типа там это просто, удобно и очевидно
Constantine️
Вова, дай ссылочку плиз ))
Constantine️
для меня ленивого 😄
Daniel
ага
безумие...
Constantine️
KISS в чистом виде 😄
Constantine️
обколоться
Yuiry
это ж микросервисы в конце-концов, юзера мы ж описываем во всем репо его испльзующих
Vladimir
Опенсорс реимелементация Google blaze
Constantine️
ага-ага
Vladimir
Статей по ней маловато, но есть примеры
Vladimir
https://github.com/laramiel/bazel-example-golang типа такого
Alexander
Читал про Базель, что он не для слабых духом. И для маленьких проектов - такое себе. Ну и большой под него переделывать заманаешься. Хорош только если с самого начала под него затачиваться
Alexander
Так-то да. Ну и сукссес-стори не особо видно, кроме гугла. По-моему ещё дропбокс с ним игрался
Vladislav
Вообще есть а-ля Bazel только на go написанный. https://please.build
Vladimir
А не Базель
Alexander
Ну понятно, но хочется верить что концепция однотипная
Sergei
Ну понятно, но хочется верить что концепция однотипная
там не только концепция. там уши blaze торчат из всех щелей
Sergei
кое где прямо в ошибочных сообщениях Blaze
Sergei
базель дает очень много плюшек когда сама сборка ебически сложная. кодогенерация, использование одних бинарей для сборки других, сборка сотни артефактов (бинари, пакеты под все подряд, докер-образа, ami-образа). любой подобный граф зависимостей базель корректно трекает и резолвит, кешируя при этом артефакты, поэтому билды всегда инкрементальные и обычно очень быстрые
Daniel
а как описываются эти зависимости?
Sergei
а как описываются эти зависимости?
для гошки есть gazelle, которая инспектит сырцы и генерирует BUILD-файлы
Sergei
в общем случае в BUILD-файлах (а-ля Makefile) описываются не зависимости, а "как собрать"
Sergei
посмотрите на кубернетес или на енвой
Sergei
там в почти каждой директории есть файл BUILD
Daniel
кубернетес - та еще альтернативно ориентированные
Constantine️
😄
Constantine️
еще и кубер не в каску
Daniel
и, боюсь, это их система сборки позволяет им слишком много
Daniel
еще и кубер не в каску
он не собирается сразу после скачивания
Daniel
там надо мейк делать
Constantine️
😂
Constantine️
не go way
Daniel
и это реально косяк
Sergei
и, боюсь, это их система сборки позволяет им слишком много
базель на самом деле сильно тебя ограничивает
Sergei
но например в нашем проекте базель позволяет на локалхосте (если установлен докер-композ) сделать bazel run //docker-compose:app.up и получить в компоузе работающее свежесобранное приложение. базель для этого * скачает и соберет нужную гошку (не системную версию) * посмотрит какие именно ему нужны образа для запуска * по графу зависимостей поймет, что нужно собрать для этих образов * пройдёт собранный граф в обратном направлении, скомпилирует, скодогенерирует и т.п. фаза кодогенерации у нас ебическая, по пути билд-процесса мы поднимаем десяток постгресовых баз, например * соберет бинари * соберет из бинарей пакеты * соберет из пакетов (или из бинарей напрямую) докер-образа * сходит в несколько внешних гит-репозиториев (например фронтенд) и соберёт оттуда какие-то артефакты сборки (в случае фронтенда - просто тарболл со статикой, из которого соберет образ с фронтендом) * затолкает докер-образа в локальный докер * стемплейтит compose-файл с нужными хешами образов * стартанёт компоуз * отмониторит старт компоуза и дождётся что все демоны стали healthy * накатит тестовый набор данных в свежеразвёрнутый инстанс приложения
Sergei
не go way
нужно понимать, что базель - не golang-specific, как и не cpp-specific конечно не го-вей. а как собрать питон с помощью go build ?
Alexandr
Коллеги, кто пользуется gorm, подскажите, как для postgres сделать CONSTRAINT "unique_name_env" UNIQUE( "name", "env" ) в тегах структуры ?
Constantine️
а зачем там делать?
Constantine️
автомиграции?
Constantine️
https://github.com/jinzhu/gorm/issues/961
Constantine️
первая ссылка в гугле
Constantine️
https://github.com/jinzhu/gorm/issues/1169 вторая ссылка
Constantine️
пробовал?
Alexandr
автомиграции?
да. уже ушел от них, запилил на goose миграции
Constantine️
ага
Constantine️
правильно
Anonymous
Коллеги, как правильно сконкатенировать два int чтобы на выходе был int ? Переводить в стринги и обратно только?
Daniel
а?!
Daniel
что такое конкатенация интов?!
Anonymous
например из 3 и 6 нужно получить 36
Daniel
угу
Daniel
берете от второго порядок, домножаете первое на 10-в-степени-порядок-второго, складываете
Anonymous
типа быстрее будет чем перводить?
Daniel
конечно
Daniel
вы из школьного курса информатики помните алгоритм преобразования из одной системы счисления в другую? с тех пор ничего не изменилось
Anonymous
я не преобразую числа из одной системы в другую
Anonymous
я "конкатенирую" десятичныые числа
Alexander
тоесть если будет 11139 и 222, надо получить в инте 11139222
Daniel
вы при преобразовании в строку, очевидно, собираетесь преобразовать числа из двоичной в десятичную.
Daniel
берите зачетку, придете осенью.
Cat
len(b) можно высчитать отдельно