saveourtool / diktat

Strict coding standard for Kotlin and a custom set of rules for detecting code smells, code style issues and bugs
https://diktat.saveourtool.com
MIT License
516 stars 38 forks source link

Task with name 'mergeDiktatReports' not found in root project #1920

Open sergeypospelov opened 3 months ago

sergeypospelov commented 3 months ago

Describe the bug

In USVM we use gradle convention plugin (buildSrc) to share build logic. When we include Diktat gradle plugin into usvm.kotlin-conventions.gradle.kts, the build fails with the exception.

Expected behavior

The build succeeds.

Observed behavior

FAILURE: Build failed with an exception.

* Where:
Build file '/Users/sergey/Programming/Work/usvm/usvm-core/build.gradle.kts' line: 1

* What went wrong:
An exception occurred applying plugin request [id: 'usvm.kotlin-conventions']
> Failed to apply plugin 'com.saveourtool.diktat'.
   > Task with name 'mergeDiktatReports' not found in root project 'usvm'.

Steps to Reproduce

Project structure:

buildSrc/
    src/main/kotlin/
        usvm.kotlin-conventions.gradle.kts
    build.gradle.kts
usvm-core/
    src/
    build.gradle.kts
gradle/
settings.gradle.kts
diktat-analysis.yml
gradle.properties
gradlew
gradlew.bat

buildSrc/build.gradle.kts

plugins {
    `kotlin-dsl`
}

repositories {
    mavenCentral()
    gradlePluginPortal()
}

val kotlinVersion = "1.9.23"
val diktatVersion = "2.0.0"

dependencies {
    implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion")
    implementation("com.saveourtool.diktat:diktat-gradle-plugin:$diktatVersion")
}

buildSrc/src/main/kotlin/usvm.kotlin-conventions.gradle.kts

plugins {
    kotlin("jvm")
    `java-library`
    `maven-publish`
    id("com.saveourtool.diktat")
}
// ...

usvm-core/build.gradle.kts

plugins {
    id("usvm.kotlin-conventions")
}

Environment information

Extra

Brief investigation led to this snippet:

https://github.com/saveourtool/diktat/blob/8d61ddf58e60519830f64ee7d52f144e5da4d57d/diktat-gradle-plugin/src/main/kotlin/com/saveourtool/diktat/plugin/gradle/tasks/SarifReportMergeTask.kt#L92-L98

Looks like we won't register any task if there are no top-level build.gradle.kts.

Adding build.gradle.kts only with

plugins {
    id("com.saveourtool.diktat")
}

solves the problem.

nulls commented 3 months ago

hi @sergeypospelov, thanks for raising a bug and a brief investigation. We will look into it