Size: a a a

2020 March 17

MN

Mykyta Nikitenko in Go-go!
Daniel Podolsky
коллеги, а есть у нас тут любители монорепы?

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

а то полный набор занимает уже неприлично много времени, а как прогнать только то, что изменилось, я не понимаю
Та же самая хрень. Короче никак. Гипотетически на основе диффов можно построить граф пакетов и директорий, но на практике никак все равно, только костылями. Вообще golintcli хранит кеш, если его грамотно использовать, можно некоторое время сохранить. Так же кеширование тестов, но выходит не очень с интеграционными
источник

DP

Daniel Podolsky in Go-go!
Вот я смотрю на это все, и думаю - с чем диффы-то считать?

Нет же у Ci никакой информации о последнем удачном тестировании
источник

ЕО

Евгений Омельченко in Go-go!
Askold Monarkhov
Что используете?
Анонимный опрос
73%
GoLand
27%
VS Code
Проголосовало: 94
А где "нормальный редактор"?
источник

AM

Askold Monarkhov in Go-go!
Евгений Омельченко
А где "нормальный редактор"?
Ты про вим?)

upd: имхо: вим открывают только психопады
источник

DP

Daniel Podolsky in Go-go!
Евгений Омельченко
А где "нормальный редактор"?
нормальный редактор не нужен, на современных компах - даже средних ноутах - и IDE идет нормально
источник

MN

Mykyta Nikitenko in Go-go!
Daniel Podolsky
Вот я смотрю на это все, и думаю - с чем диффы-то считать?

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

S

Sebor in Go-go!
Daniel Podolsky
Вот я смотрю на это все, и думаю - с чем диффы-то считать?

Нет же у Ci никакой информации о последнем удачном тестировании
теоретически, из апишки можно вытаскивать последний "зеленый" билд, но для чего?
почему недостаточно знать только измененные файлы?
источник

AM

Askold Monarkhov in Go-go!
Daniel Podolsky
нормальный редактор не нужен, на современных компах - даже средних ноутах - и IDE идет нормально
Иногда не пойму типов, у которых по 16гб оперативы и они снимают видосы о том, что вим очень мало жрет. Или, что вим открывает файлы на 1кк+ строк без проблем (вообще всеравно, никто вручную файлы не читает, только скриптом и только построчно)
источник

DP

Daniel Podolsky in Go-go!
Sebor
теоретически, из апишки можно вытаскивать последний "зеленый" билд, но для чего?
почему недостаточно знать только измененные файлы?
потому, что из набора файлов, измененных в последнем коммите, ника нельзя посчитать набор тестов, которые надо запустить
источник

S

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

MN

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

DP

Daniel Podolsky in Go-go!
Mykyta Nikitenko
Теоретически можно)
с этого место по-подробнее, пожалуйста
источник

DP

Daniel Podolsky in Go-go!
Sebor
а как первоначально считать набор тестов тогда?
в мультирепе мы гоняем все тесты в репе. но там мало кода, тесты идут быстро.

в монорепе кода много, у меня только полная сборка идет 7 минут
источник

S

Sebor in Go-go!
Daniel Podolsky
в мультирепе мы гоняем все тесты в репе. но там мало кода, тесты идут быстро.

в монорепе кода много, у меня только полная сборка идет 7 минут
это понятно. вопрос в другом - допустим мне надо прогонять тесты только по определенному модулю(либе). как это определить?

ПС у нас проект на свифте 12 минут собирается
источник

MN

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

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

S

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

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

DP

Daniel Podolsky in Go-go!
Sebor
это понятно. вопрос в другом - допустим мне надо прогонять тесты только по определенному модулю(либе). как это определить?

ПС у нас проект на свифте 12 минут собирается
наверное, не надо такого хотеть
источник

S

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

IS

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

DP

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

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

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