Size: a a a

2021 July 26

PS

Pavel Shakhov in Gradle
Всем привет. Есть необходимость выводить логи градловых тасков разным цветом (локально и в CI - Gitlab).  На данный пробовал  нечто подобное
open class MyTask @Inject constructor(private val styledTextOutputFactory: StyledTextOutputFactory) : DefaultTask() {
   @TaskAction
   fun doStuff() {
       val out = styledTextOutputFactory.create(javaClass.name)
       out.withStyle(Style.Failure).println("colored text")
   }
}
tasks.register<MyTask>("coloredTask") // DSL
- локально в терминале IDEA логи меняют цвет, но для корректной работы в терминале на CI необходимо использовать параметр org.gradle.console=rich (что кажется не очень корректным решением). Есть более оптимальный способ для достижения требуемого результата? Либо же стоит решать эту задачу не на уровне gradle (конфигурировать логгеры/передавать спецсимволы)?
источник

VP

Vladimir Petrakovich in Gradle
Скорее всего, без --console=rich или --console=verbose цветных логов не будет. Но при этом gradle пытается переписывать часть вывода (для показа прогрессбара), и в gitlab в логе остаётся немного мусора.
Мне кажется, это вполне приемлемое решение.
источник

VP

Vladimir Petrakovich in Gradle
источник

PS

Pavel Shakhov in Gradle
спасибо, буду смотреть дальше в этом направлении
источник

AM

Andrew Mikhaylov in Gradle
CI запускает Gradle в неинтерактивном терминале, вывод которого обычно либо дискардится, либо пишется в файл, либо в syslog какой-нибудь. Во всех этих местах ANSI-последовательности, отвечающие на изменение стиля печатаемого текста, обычно не парятся, потому задачу свою не выполняют, а лишь замусоривают. Потому если вы всё-таки хотите ANSI-коды в неинтерактивном шелле, об этом обычно надо явно попросить программу. Можете проверить, это даже для ls или grep так:
ls --color=always
включит вам разные цвета для папок и файлов в зависимости от атрибутов, хотя обычно вызов ls в баш-скриптах такого не делает :)
источник

D

Dzmitry in Gradle
Привет. Подскажите есть ли возможность в android проекте переиспользовать вспомогательные тестовые классы из одного модуля в другом? Есть модуль appcommon, где лежат общие интерфейсы и там же например моки к ним. Пытаюсь подключить к appfeature модулю как testImplementation project(files: ‘appcommon’) gradle синхронизируется, но при запуске тестов в appfeature пишет что класс мока не найден.
источник

b

badmitry in Gradle
Тесты же можно внутри модуля развернуть.
источник

PS

Pavel Shakhov in Gradle
К сожалению, случай когда остается даже немного мусора в нашем случае не очень подходит( так что нужно смотреть именно в сторону ANSI-кодов, судя по всему, без дополнительных возможностей Gradle
источник

VP

Vladimir Petrakovich in Gradle
Рекомендую поискать issue на тему включения в терминале только цветов, без прочих "интерактивных" фич. Или создать 🙂
источник

PS

Pavel Shakhov in Gradle
Есть такая, но она скорее всего еще 3 года провисит)
источник

VP

Vladimir Petrakovich in Gradle
Ну вы их потыкайте своим use case, если вам без этой фичи никак)
источник

AM

Andrew Mikhaylov in Gradle
Всё равно провисит ещё 3 года, но зато будете знать, что сделали всё, что могли х)
источник

VS

Vladimir Sitnikov in Gradle
У Gradle нет public API для раскрашивания вывода: https://github.com/gradle/gradle/issues/6843, https://github.com/gradle/gradle/issues/17581

Поэтому, да, остаётся либо делать PR (хотябы на опцию для отмены прогресса), либо выводить Gradle без цветов, а цвета добавлять в своих плагинах и тасках (так, напр, работает тут: https://github.com/apache/calcite/runs/3158810462?check_suite_focus=true#step:4:372 )
источник

VP

Vladimir Petrakovich in Gradle
Я не удивлюсь, если самые популярные решения для CI уже поддерживают цветной вывод, и можно легко сделать всем жизнь лучше
источник

AM

Andrew Mikhaylov in Gradle
> Gradle itself uses ANSI control characters for its rich console. I am not surprised that ones coming from user code are stripped to not interfere with the Gradle ones.
Странная логика, конечно.
источник

VS

Vladimir Sitnikov in Gradle
Не знаю. Я печатаю свои цветовые коды — и норм работает и на CI и локально
источник

AM

Andrew Mikhaylov in Gradle
Ну, в примере с либой Вартона, насколько я понимаю, вся суть не в цвете, а в перемещении каретки...
источник

AM

Andrew Mikhaylov in Gradle
Но вообще интерактивность и гредл — это треш, который тянется уже слишком много лет)
источник

PS

Pavel Shakhov in Gradle
Не поделитесь примером реализации, если не затруднит? В случае тасков/плагинов. Контрибьютить в gradle дело хорошее и полезное, конечно, но эта фича буквально уже в пятницу была нужна :) и ждать пока градл даст эту возможность, увы, возможности нет
источник

VS

Vladimir Sitnikov in Gradle
источник