Создайте настраиваемую задачу, которая запускает существующую задачу с измененной конфигурацией

По сути, это следующий вопрос: как расширить поведение задачи Gradle для нового типа задачи?

У меня есть проект с настроенным ktlint, где мы хотим, чтобы он отображался только в виде предупреждений:

ktlint {
    version.set("0.36.0")
    verbose.set(true)
    disabledRules.set(setOf("import-ordering")) // because of this bug/missing feature in IDEA: https://youtrack.jetbrains.com/issue/KT-10974
    ignoreFailures.set(true)
}

Но на Дженкинсе мы хотим ktlintCheckзадача не удалась, чтобы мы могли отметить сборку как нестабильную! Итак, я начал создавать задачу, которая запускаетсяktlintCheck с участием ignoreFailures.set(false). Но я не мог понять, как запустить другую задачу и изменить ее конфигурацию.

Единственный подобный вопрос / ответ, который я нашел, был упомянут выше, и ответ от Клинтона предлагает сделать это в градиенте:

task TestExt{ Test { systemPropety 'newProperty','fdsjfkd' } }

Я действительно не знаю, как перевести это на Kotlin DSL, но я попробовал такую ​​версию:

task("postBuildVerify") {
    group = "build"
    ktlint {
        ignoreFailures.set(false)
    }
    dependsOn("ktlintCheck")
}

Но так ignoreFailures установлен на false снова для всех задач!

Итак, я попытался добавить Action:

task("postBuildVerify") {
    group = "build"
    outputs.upToDateWhen { false } // Prevent UP-TO-DATE
    actions.add(Action {
        // outputs.upToDateWhen { false } // Cannot call TaskOutputs.upToDateWhen(Spec) on task ':postBuildVerify' after task has started execution.
        ktlint {
            ignoreFailures.set(false)
        }
    })
    dependsOn("ktlintCheck")
}

Но тогда ktlintChecks никогда не выполняются, потому что их выходные данные являются АКТУАЛЬНЫМИ после запуска build. И я предполагаю, что действие будет выполнено ПОСЛЕktlintCheck выполняется, поскольку это зависит от него.

Как это правильно сделать в Kotlin DSL?

0 ответов

Другие вопросы по тегам