Daniel
а!
Daniel
* уменьшение кодовой базе в репе * страховка от ошибок "забыл запустить"
Daniel Podolsky admin, [25 Sep 2018 19:17:47]: если проект компилируется без результатов генерации - так, может, и не нужна она? а если нет - вы же компилируете свою программу, прежде чем пушнуть? или вы хотите оставить программисту возможность компилировать локально другой код, нежели будет использовать CI? в любом случае - это тупо.
Алексей
и уж точно я против запуска кодогенерации руками
Daniel
а чем? такой длины член далеко не у всех...
Daniel
и так не надо, если руки из плеч
aadz
а чем? такой длины член далеко не у всех...
Вот кто б тебя забанил иногда? 😜
🏁Александр
я помню "забыл запустить" - easyjson в одном из пакетов, после обновления структуры. Было больно отлаживать
Алексей
и так не надо, если руки из плеч
нет гарантий что скажем у всех джунов за час перед дедлайном все руки из плеч растут
Алексей
больно, да. но какие варианты-то?
автоматический запуск перед компиляцией с кешированием
Roman
больно, да. но какие варианты-то?
генерить до каждого билда? (с кешированием)
Daniel
нет гарантий что скажем у всех джунов за час перед дедлайном все руки из плеч растут
проблема дифа генеренного кода решается один раз и навсегда
aadz
это как?
да хоть с помощью того же RCS :)
Daniel
это как?
.gitattributes
Daniel
да хоть с помощью того же RCS :)
поздно. я же хочу компильнуть до пуша
Roman
каким это образом? технически?
чексуммы? проверить чексумму исходников образа, проверить название генерированного файла.go и сравнить, были ли изменения, если не было - компилить, если были - заново сгенерить и компилить
Алексей
скорее всего сама компиляция примерно также и работает
Алексей
только надо было бы ещё на кодогенерацию это всё распространить
🏁Александр
.gitattributes
вы имеете введу изменение стратегии слияния для vendors?
🏁Александр
c помощью .gitattributes
aadz
А почему любимого Славы Бахмутова на воскресном митапе не бвло?
snip
Результат кодгена это такой же код как и написанный руками, аргументы типа забыть сгенерить и запушить в репозиторий - очень тупой
aadz
пашет, наверное....
Алексей
Результат кодгена это такой же код как и написанный руками, аргументы типа забыть сгенерить и запушить в репозиторий - очень тупой
Вы троллите или серьёзно? Слово кодоГЕНЕРАЦИЯ вам как бы так мягко намекает, что сгенерированный код и код написанный руками - это слегка (совершенно) разные вещи.
snip
Нет
Алексей
Или это тот случай из разряда "если этого нет в Go, значит это не нужно"?
🏁Александр
гоу религия подрузомевает что у вас все сделано максимально "чисто"
🏁Александр
поэтому и нет всяких дженерикой
🏁Александр
и куча "копипаста"
Алексей
Мы сейчас не про дженерики вообще говорим
🏁Александр
коммитить кодген это нормально
Алексей
гоу религия подрузомевает что у вас все сделано максимально "чисто"
и отсутствие гарантий актуальности сгенерированно кода - это вообще никак к "чисто" отнести не выйдет
snip
Код независимо от того как он написан является кодом программы, если вы запушили код в репо не сгенерировав код значит вы запушили код который не компилится, значит вам не место в профессии
Алексей
так понятно
🏁Александр
у вас IDE например тоже создает файл main.go и функцию main в нем, не скажите же вы что это коммитить нельзя и надо юзать генерацию на CI?
Алексей
как я объяснял предыдущие два раза: 1) пушьте сгенерированный код сколько угодно 2) не надо кодогенерацию на CI выносить 3) не надо кодогенерацию доверять человеку, когда достаточно легко сделать так, чтобы доверять было не нужно 4) надо кодогенерацию выполнять при сборке
aadz
вот, суко, девопских докладов в воскресенье и не было в мыле... про кодогенерацию и все, что с этим связано
aadz
кто-нибудь возьмется подготовить такой доклад про кодогенерацию и ответить на вопросы благодарных слушателей?
aadz
сразу все замолчали... :)
Vasily
вот, суко, девопских докладов в воскресенье и не было в мыле... про кодогенерацию и все, что с этим связано
У нас ci только проверчет что все было сгенеренно - мы написали скрипт который там по хешсуммам считает Кодогенеоацию запускает разраб, потому что у него таск дальше по воркылоу не проходит Ну и коммитит соответственно В репе готовый к сборке код
Vasily
Раньше запускалось при сборке, но это в итоге медленно
Roman
Результат кодгена это такой же код как и написанный руками, аргументы типа забыть сгенерить и запушить в репозиторий - очень тупой
нет, не такой-же, он не считается исходным кодом. Исходниками считаются те файлы которые писал человек (или сопостовимый высший интеллект).
🏁Александр
кстати вопрос про моки
🏁Александр
если мы берем неsql базу, то ее стоит оборачивать для кормежки в репозиторий?
snip
нет, не такой-же, он не считается исходным кодом. Исходниками считаются те файлы которые писал человек (или сопостовимый высший интеллект).
Это чушь, это такой же код программы и если вы запушили без него, то вы не тестили свой код и запушили код который не компилируется, таких людей надо гнать из профессии
snip
Это примерно тоже самое самое что забыть запушить часть исходников написанных руками
Aleksandr
Что за бред
скомпилировал по схеме 1000 методов апи-клиента, в одном из которых поменялась сигнатура. либа скомпилится. если тестов нет, то ошибка обнаружится только на бою, когда апи начнет отдавать 400
snip
Как можно править код и забыть его запушить?
Anonymous
его не забыли запушить
Anonymous
забыли сгенерировать новую версию
Roman
Что за бред
уточню: ты мог забыть перегенерировать код после изменения исходников. Если обратная совместимость интерфейса генерированного кода не нарушена, но изменения произошли внутри имплементации - тогда беда, которую в лучшем случае отловит тест а в худшем вообще никто не заметит пока не заметят баг в продакшне
snip
забыли сгенерировать новую версию
Тогда либо не было правок, либо код не тестировал я Во всех этих случаях человеку явно надо дать по рукам
Roman
рассинхрон исходного кода и генерированного кода это potential security issue а делать ответственным за это человека, который по своей природе часто ошибается, довольно опасная затея
Aleksandr
Тогда либо не было правок, либо код не тестировал я Во всех этих случаях человеку явно надо дать по рукам
сгенерили по схеме 1000 методов. Один метод поменял сигнатуру в схеме. Перегенерить забыли. Метод закоммичен старый.
Roman
Тогда либо не было правок, либо код не тестировал я Во всех этих случаях человеку явно надо дать по рукам
проблема в том, что ты будешь человеку давать по рукам уже после того как баг попадёт в продакшн. А в идеале это должно произойти до релиза
snip
проблема в том, что ты будешь человеку давать по рукам уже после того как баг попадёт в продакшн. А в идеале это должно произойти до релиза
Не попадет, такой код не пройдёт ни ревью ни тестов, человек будет научен, а после второго раза уволен за проф непригодность
snip
Это же ошибка идиота, зачем идиоты в команде
Roman
Перегенерировать код надо после правок которые изменят этот код, это примерно как написать код и забыть сохранить файл
много чего "надо", но как "обязательства" предохраняли нас от ошибок? да никак... даже мастера ошибаются, потому-что мы не алгоритмы
🏁Александр
так народ, давайте закончим
Aleksandr
Перегенерить надо после того как поменяли сигнатуру, а не когда вздумается
нет, просто "надо перегенерить". Я тебе показываю как может попасть на бой рабочий код, нетестированный разработчиком, необязательно с изменением, инициированным изнутри.
snip
Забыть перегенерить это почти как забыть сохранить файл
snip
Кодген это написание кода за счёт другого кода, как можно забыть что делал в середине процесса?
🏁Александр
@onokonem у меня тут вопрос, а если мы делаем репозиторий он должен требовать в зависимость непосредственно реализацию бд? Или какой то абстракций слой еще один. (NoSQL решение, json запросы)