diff --git a/buildSrc/src/main/kotlin/GradleCommon.kt b/buildSrc/src/main/kotlin/GradleCommon.kt index fdcafe25f33..a5f0e1b88c0 100644 --- a/buildSrc/src/main/kotlin/GradleCommon.kt +++ b/buildSrc/src/main/kotlin/GradleCommon.kt @@ -4,6 +4,7 @@ */ import org.gradle.api.Action +import org.gradle.api.GradleException import org.gradle.api.Project import org.gradle.api.artifacts.Configuration import org.gradle.api.artifacts.ModuleDependency @@ -595,3 +596,40 @@ fun Project.publishShadowedJar( } } } + +fun Project.addBomCheckTask() { + val checkBomTask = tasks.register("checkGradlePluginsBom") { + group = "Validation" + description = "Check if project is added into Kotlin Gradle Plugins bom" + + val bomBuildFile = project(":kotlin-gradle-plugins-bom").projectDir.resolve("build.gradle.kts") + val exceptions = listOf( + project(":gradle:android-test-fixes").path, + project(":kotlin-gradle-build-metrics").path, + project(":kotlin-gradle-statistics").path, + ) + val projectPath = this@addBomCheckTask.path + + doLast { + if (projectPath in exceptions) return@doLast + + val constraintsLines = bomBuildFile.readText() + .substringAfter("constraints {") + .substringBefore("}") + .split("\n") + .map { it.trim() } + + val isContainingThisProject = constraintsLines.contains( + "api(project(\"$projectPath\"))" + ) + + if (!isContainingThisProject) { + throw GradleException(":kotlin-gradle-plugins-bom does not contain $projectPath project constraint!") + } + } + } + + tasks.named("check") { + dependsOn(checkBomTask) + } +} \ No newline at end of file diff --git a/buildSrc/src/main/kotlin/gradle-plugin-common-configuration.gradle.kts b/buildSrc/src/main/kotlin/gradle-plugin-common-configuration.gradle.kts index b6f572a5076..6f8eee9ce03 100644 --- a/buildSrc/src/main/kotlin/gradle-plugin-common-configuration.gradle.kts +++ b/buildSrc/src/main/kotlin/gradle-plugin-common-configuration.gradle.kts @@ -19,6 +19,7 @@ val signPublication = !version.toString().contains("-SNAPSHOT") && configureCommonPublicationSettingsForGradle(signPublication) configureKotlinCompileTasksGradleCompatibility() +addBomCheckTask() extensions.extraProperties["kotlin.stdlib.default.dependency"] = "false" // common plugin bundle configuration diff --git a/buildSrc/src/main/kotlin/gradle-plugin-dependency-configuration.gradle.kts b/buildSrc/src/main/kotlin/gradle-plugin-dependency-configuration.gradle.kts index f7445185752..8d5b1d2d03c 100644 --- a/buildSrc/src/main/kotlin/gradle-plugin-dependency-configuration.gradle.kts +++ b/buildSrc/src/main/kotlin/gradle-plugin-dependency-configuration.gradle.kts @@ -15,6 +15,7 @@ plugins { configureCommonPublicationSettingsForGradle(signLibraryPublication) configureKotlinCompileTasksGradleCompatibility() +addBomCheckTask() extensions.extraProperties["kotlin.stdlib.default.dependency"] = "false" val commonSourceSet = createGradleCommonSourceSet()