From 866eb2b2f38d3f28cffc8e76428788e2942b1bea Mon Sep 17 00:00:00 2001 From: Matthew Haughton <3flex@users.noreply.github.com> Date: Sat, 20 Mar 2021 20:56:57 +1100 Subject: [PATCH] Gradle tweaks (#3575) * Use idiomatic repository declarations * Prefer Maven Central to JCenter * Limit JCenter to kotlinx-html-jvm module only * Remove unnecessary repository declarations * Agree to build scan T&Cs in settings where the plugin is applied * Refactor * Fix some issues in the build config examples * Apply binary-compatibility-validator plugin only in subprojects that need it * Don't configure Java source/target compatibility There's no Java source code in the repository * Don't unnecessarily declare plugins in root project build --- README.md | 24 +++++++------- build.gradle.kts | 32 ++++--------------- buildSrc/build.gradle.kts | 5 ++- buildSrc/src/main/kotlin/module.gradle.kts | 27 ++++++---------- buildSrc/src/main/kotlin/releasing.gradle.kts | 27 ++++++++-------- detekt-api/build.gradle.kts | 5 +++ detekt-gradle-plugin/build.gradle.kts | 7 ++++ detekt-psi-utils/build.gradle.kts | 1 + settings.gradle.kts | 26 +++++++++++---- 9 files changed, 77 insertions(+), 77 deletions(-) diff --git a/README.md b/README.md index c2188b223..81b7a2eed 100644 --- a/README.md +++ b/README.md @@ -77,9 +77,9 @@ buildscript { mavenCentral() jcenter { content { - // just allow to include kotlinx projects - // detekt needs 'kotlinx-html' for the html report - includeGroup "org.jetbrains.kotlinx" + // Only download the 'kotlinx-html-jvm' module from JCenter, but nothing else. + // detekt needs 'kotlinx-html-jvm' for the HTML report. + includeModule("org.jetbrains.kotlinx", "kotlinx-html-jvm") } } } @@ -103,17 +103,17 @@ detekt { } -// Groovy dsl -tasks.detekt.jvmTarget = "1.8" +// Groovy DSL +tasks.withType(Detekt).configureEach { + jvmTarget = "1.8" +} // or -// Kotlin dsl -tasks { - withType { - // Target version of the generated JVM bytecode. It is used for type resolution. - this.jvmTarget = "1.8" - } +// Kotlin DSL +tasks.withType.configureEach { + // Target version of the generated JVM bytecode. It is used for type resolution. + jvmTarget = "1.8" } ``` @@ -128,7 +128,7 @@ which can be easily added to the Gradle configuration: ```kotlin dependencies { - detektPlugins "io.gitlab.arturbosch.detekt:detekt-formatting:[version]" + detektPlugins("io.gitlab.arturbosch.detekt:detekt-formatting:[version]") } ``` diff --git a/build.gradle.kts b/build.gradle.kts index e1ba7732e..c519a5f10 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -4,20 +4,8 @@ plugins { packaging releasing detekt - id("org.jetbrains.dokka") apply false - id("com.github.johnrengelman.shadow") apply false id("com.github.ben-manes.versions") id("org.sonarqube") - id("binary-compatibility-validator") -} - -repositories { - jcenter() -} - -buildScan { - termsOfServiceUrl = "https://gradle.com/terms-of-service" - termsOfServiceAgree = "yes" } allprojects { @@ -27,17 +15,17 @@ allprojects { jacoco.toolVersion = Versions.JACOCO -val examplesOrTestUtils = setOf( - "detekt-bom", - "detekt-test", - "detekt-test-utils", - "detekt-sample-extensions" -) - tasks { jacocoTestReport { executionData.setFrom(fileTree(project.rootDir.absolutePath).include("**/build/jacoco/*.exec")) + val examplesOrTestUtils = setOf( + "detekt-bom", + "detekt-test", + "detekt-test-utils", + "detekt-sample-extensions" + ) + subprojects .filterNot { it.name in examplesOrTestUtils } .forEach { @@ -51,9 +39,3 @@ tasks { } } } - -apiValidation { - // We need to perform api validations for external APIs, for :detekt-api and :detekt-psi-utils - ignoredProjects.addAll(subprojects.filter { it.name !in listOf("detekt-api", "detekt-psi-utils") }.map { it.name }) - ignoredPackages.add("io.gitlab.arturbosch.detekt.api.internal") -} diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts index f4ea90ae5..00d1e53f8 100644 --- a/buildSrc/build.gradle.kts +++ b/buildSrc/build.gradle.kts @@ -8,9 +8,8 @@ kotlinDslPluginOptions { repositories { mavenLocal() // used to publish and test local gradle plugin changes - gradlePluginPortal() mavenCentral() - jcenter() + gradlePluginPortal() } object Plugins { @@ -23,7 +22,7 @@ object Plugins { const val DOKKA = "1.4.10" const val SEMVER4J = "3.1.0" const val NEXUS = "0.22.0" - const val KOTLIN_API_VALIDATOR = "0.3.0" + const val KOTLIN_API_VALIDATOR = "0.4.0" } dependencies { diff --git a/buildSrc/src/main/kotlin/module.gradle.kts b/buildSrc/src/main/kotlin/module.gradle.kts index 17365326e..491fbc48e 100644 --- a/buildSrc/src/main/kotlin/module.gradle.kts +++ b/buildSrc/src/main/kotlin/module.gradle.kts @@ -8,15 +8,6 @@ plugins { jacoco } -repositories { - jcenter() -} - -java { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 -} - // bundle detekt's version for all jars to use it at runtime tasks.withType().configureEach { manifest { @@ -55,14 +46,16 @@ tasks.withType().configureEach { tasks.withType().configureEach { sourceCompatibility = JavaVersion.VERSION_1_8.toString() targetCompatibility = JavaVersion.VERSION_1_8.toString() - kotlinOptions.jvmTarget = Versions.JVM_TARGET - kotlinOptions.languageVersion = "1.4" - kotlinOptions.freeCompilerArgs = listOf( - "-progressive", - "-Xopt-in=kotlin.RequiresOptIn" - ) - // Usage: ./gradlew build -PwarningsAsErrors=true. - kotlinOptions.allWarningsAsErrors = project.findProperty("warningsAsErrors") == "true" + kotlinOptions { + jvmTarget = Versions.JVM_TARGET + languageVersion = "1.4" + freeCompilerArgs = listOf( + "-progressive", + "-Xopt-in=kotlin.RequiresOptIn" + ) + // Usage: ./gradlew build -PwarningsAsErrors=true. + allWarningsAsErrors = project.findProperty("warningsAsErrors") == "true" + } } dependencies { diff --git a/buildSrc/src/main/kotlin/releasing.gradle.kts b/buildSrc/src/main/kotlin/releasing.gradle.kts index ba3fab64d..a3878988c 100644 --- a/buildSrc/src/main/kotlin/releasing.gradle.kts +++ b/buildSrc/src/main/kotlin/releasing.gradle.kts @@ -45,19 +45,20 @@ fun updateVersion(increment: (Semver) -> Semver) { } versionsFile.writeText("$newContent\n") } +tasks { + register("incrementPatch") { doLast { updateVersion { it.nextPatch() } } } + register("incrementMinor") { doLast { updateVersion { it.nextMinor() } } } + register("incrementMajor") { doLast { updateVersion { it.nextMajor() } } } -val incrementPatch by tasks.registering { doLast { updateVersion { it.nextPatch() } } } -val incrementMinor by tasks.registering { doLast { updateVersion { it.nextMinor() } } } -val incrementMajor by tasks.registering { doLast { updateVersion { it.nextMajor() } } } + register("applyDocVersion") { + fileToUpdate = file("${rootProject.rootDir}/docs/_config.yml") + linePartToFind = "detekt_version:" + lineTransformation = { "detekt_version: ${Versions.DETEKT}" } + } -val applyDocVersion by tasks.registering(UpdateVersionInFileTask::class) { - fileToUpdate = file("${rootProject.rootDir}/docs/_config.yml") - linePartToFind = "detekt_version:" - lineTransformation = { "detekt_version: ${Versions.DETEKT}" } -} - -val applySelfAnalysisVersion by tasks.registering(UpdateVersionInFileTask::class) { - fileToUpdate = file("${rootProject.rootDir}/buildSrc/build.gradle.kts") - linePartToFind = "const val DETEKT =" - lineTransformation = { """ const val DETEKT = "${Versions.DETEKT}"""" } + register("applySelfAnalysisVersion") { + fileToUpdate = file("${rootProject.rootDir}/buildSrc/build.gradle.kts") + linePartToFind = "const val DETEKT =" + lineTransformation = { """ const val DETEKT = "${Versions.DETEKT}"""" } + } } diff --git a/detekt-api/build.gradle.kts b/detekt-api/build.gradle.kts index d007d0b08..5d8877b04 100644 --- a/detekt-api/build.gradle.kts +++ b/detekt-api/build.gradle.kts @@ -4,6 +4,7 @@ plugins { module id("org.jetbrains.dokka") `java-test-fixtures` + id("binary-compatibility-validator") } dependencies { @@ -30,3 +31,7 @@ listOf(configurations.testFixturesApiElements, configurations.testFixturesRuntim tasks.withType().configureEach { outputDirectory.set(rootDir.resolve("docs/pages/kdoc")) } + +apiValidation { + ignoredPackages.add("io.gitlab.arturbosch.detekt.api.internal") +} diff --git a/detekt-gradle-plugin/build.gradle.kts b/detekt-gradle-plugin/build.gradle.kts index aa96447b4..8b0248076 100644 --- a/detekt-gradle-plugin/build.gradle.kts +++ b/detekt-gradle-plugin/build.gradle.kts @@ -5,7 +5,14 @@ plugins { } repositories { + mavenCentral() google() + jcenter { + content { + includeModule("org.jetbrains.trove4j", "trove4j") + includeModule("org.jetbrains.kotlinx", "kotlinx-html-jvm") + } + } } val intTest: Configuration by configurations.creating diff --git a/detekt-psi-utils/build.gradle.kts b/detekt-psi-utils/build.gradle.kts index 3766e6684..03822b45e 100644 --- a/detekt-psi-utils/build.gradle.kts +++ b/detekt-psi-utils/build.gradle.kts @@ -1,5 +1,6 @@ plugins { module + id("binary-compatibility-validator") } dependencies { diff --git a/settings.gradle.kts b/settings.gradle.kts index fc1d3bd48..ad8e789e9 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -31,14 +31,26 @@ include( "detekt-tooling" ) -pluginManagement { - - repositories { - gradlePluginPortal() - } -} - // build scan plugin can only be applied in settings file plugins { id("com.gradle.enterprise") version "3.3.1" } + +gradleEnterprise { + buildScan { + termsOfServiceUrl = "https://gradle.com/terms-of-service" + termsOfServiceAgree = "yes" + } +} + +dependencyResolutionManagement { + repositories { + mavenCentral() + jcenter { + content { + includeModule("org.jetbrains.kotlinx", "kotlinx-html-jvm") + includeGroup("org.jetbrains.dokka") + } + } + } +}