Size: a a a

2020 March 17

DP

Daniel Podolsky in Go-go!
Ilya Sinelnikov
Bazel умеет запускать тесты  только для того, что поменялось.
с этого место по-подробнее, пожалуйста
источник

IS

Ilya Sinelnikov in Go-go!
О чем именно?
источник

DP

Daniel Podolsky in Go-go!
надо ли его как-то специально настраивать?
источник

IS

Ilya Sinelnikov in Go-go!
Это замена go build и go test. Так что да.
источник

IS

Ilya Sinelnikov in Go-go!
"замена"
источник

MN

Mykyta Nikitenko in Go-go!
Daniel Podolsky
надо проверять эту теорию.

ну и считать покрытие немного сложно становится, а я люблю, когда коммит, приводящий к уменьшению покрытия, не мерджится
На самом деле, % покрытия - это плохая метрика. Ну, может не худшая, но плохая имхо
источник

IS

Ilya Sinelnikov in Go-go!
Ну и если нужен распределенный сборочный кластер, то однозначно надо настраивать.
источник

DP

Daniel Podolsky in Go-go!
Mykyta Nikitenko
На самом деле, % покрытия - это плохая метрика. Ну, может не худшая, но плохая имхо
сам он - плохая, а вот его изменение - хорошая
источник

MN

Mykyta Nikitenko in Go-go!
Daniel Podolsky
сам он - плохая, а вот его изменение - хорошая
В большинстве случаев - да, на самом деле. Но не всегда
источник

IS

Ilya Sinelnikov in Go-go!
Mykyta Nikitenko
Ну берем строим граф всех импортируемых пакетов от main.go, это можно сделать через стандартную либу рекурсивно парить ast всех исходников.

Дальше смотрим диффы измененных пакетов. От них по графу траверсим все пакеты, которые требуют ретеста. Дальше запускаем нужные тесты в пакетах. Более хитрыми эвристиками можно придумать, как запускать какие-то отдельные тесты в пакете. (Например по идентификаторам типов внутри тела функции и т.п.)
Это больно и плохо скейлится :(
источник

MN

Mykyta Nikitenko in Go-go!
Ilya Sinelnikov
Это больно и плохо скейлится :(
Ну если вместо гипотетической монорепы у вас будут какие-то хттп микросервисы общающиеся через жсон в независимых друг от друга репозитоииях, легче никак все равно не станет
источник

DP

Daniel Podolsky in Go-go!
почему?
источник

IS

Ilya Sinelnikov in Go-go!
Mykyta Nikitenko
Ну если вместо гипотетической монорепы у вас будут какие-то хттп микросервисы общающиеся через жсон в независимых друг от друга репозитоииях, легче никак все равно не станет
Тогда версионируется API и нужно проверять backward compatibility. Для многих протоколов есть автоматика.
источник

IS

Ilya Sinelnikov in Go-go!
И все сервисы могут тестироваться независимо
источник

MN

Mykyta Nikitenko in Go-go!
Ну потому, что это вопрос физической зависимости сервисов друг от друга. Вы можете разделить фактический код, а функциональную зависимость никак.
источник

IS

Ilya Sinelnikov in Go-go!
А если связывать все репозитории сервисов на уровне тестов и запускать их покоммитно, то это никак не отличается от монорепы. Даже делает всю конструкцию сложнее
источник

DP

Daniel Podolsky in Go-go!
Mykyta Nikitenko
Ну потому, что это вопрос физической зависимости сервисов друг от друга. Вы можете разделить фактический код, а функциональную зависимость никак.
если мы не можем функциональную зависимость разделить  - у нас не микросервисы, а монолит. монолит надо тестить весь разом, так что и хранить его можно в монорепе, хуже уже не будет

а вот если мы связываем сервисы на уровне протокола, и его не трогаем - прекрасно можем их тестить независимо
источник

MN

Mykyta Nikitenko in Go-go!
Это так только кажется в теории. На практике это так не работает
источник

DP

Daniel Podolsky in Go-go!
как скажете...
источник

DP

Daniel Podolsky in Go-go!
собственно, это и есть самая первая, самая простая и одновременно довольно надежная проверка на правильность архитектуры - удается ли нам написать независимые тесты
источник