From f147d6950fa338948dea0a76a7d2eea48f10ded4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Leonard=20Br=C3=BCnings?= Date: Fri, 27 Jan 2023 10:23:20 +0100 Subject: [PATCH] Migrate to provider API adding configuration cache compatibility Using the provider API defers configuration work until it is needed, reducing configuration time. Furthermore, it is required for making the build configuration cache compatible. --- build.gradle.kts | 46 ++++++++++++++++++++++++---------------------- 1 file changed, 24 insertions(+), 22 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 4710c22..4b322bf 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,7 +1,8 @@ import org.jetbrains.changelog.Changelog import org.jetbrains.changelog.markdownToHTML -fun properties(key: String) = project.findProperty(key).toString() +fun properties(key: String) = providers.gradleProperty(key) +fun environment(key: String) = providers.environmentVariable(key) plugins { // Java support @@ -38,21 +39,21 @@ intellij { type.set(properties("platformType")) // Plugin Dependencies. Uses `platformPlugins` property from the gradle.properties file. - plugins.set(properties("platformPlugins").split(',').map(String::trim).filter(String::isNotEmpty)) + plugins.set(properties("platformPlugins").map { it.split(',').map(String::trim).filter(String::isNotEmpty) }) } // Configure Gradle Changelog Plugin - read more: https://github.com/JetBrains/gradle-changelog-plugin changelog { - groups.set(emptyList()) + groups.empty() repositoryUrl.set(properties("pluginRepositoryUrl")) } // Configure Gradle Qodana Plugin - read more: https://github.com/JetBrains/gradle-qodana-plugin qodana { - cachePath.set(file(".qodana").canonicalPath) - reportPath.set(file("build/reports/inspections").canonicalPath) + cachePath.set(provider { file(".qodana").canonicalPath }) + reportPath.set(provider { file("build/reports/inspections").canonicalPath }) saveReport.set(true) - showReport.set(System.getenv("QODANA_SHOW_REPORT")?.toBoolean() ?: false) + showReport.set(environment("QODANA_SHOW_REPORT").map { it.toBoolean() } .getOrElse(false)) } // Configure Gradle Kover Plugin - read more: https://github.com/Kotlin/kotlinx-kover#configuration @@ -62,7 +63,7 @@ kover.xmlReport { tasks { wrapper { - gradleVersion = properties("gradleVersion") + gradleVersion = properties("gradleVersion").get() } patchPluginXml { @@ -71,23 +72,24 @@ tasks { untilBuild.set(properties("pluginUntilBuild")) // Extract the section from README.md and provide for the plugin's manifest - pluginDescription.set( - file("README.md").readText().lines().run { - val start = "" - val end = "" + pluginDescription.set(provider { + file("README.md").readText().lines().run { + val start = "" + val end = "" - if (!containsAll(listOf(start, end))) { - throw GradleException("Plugin description section not found in README.md:\n$start ... $end") - } - subList(indexOf(start) + 1, indexOf(end)) - }.joinToString("\n").let { markdownToHTML(it) } + if (!containsAll(listOf(start, end))) { + throw GradleException("Plugin description section not found in README.md:\n$start ... $end") + } + subList(indexOf(start) + 1, indexOf(end)) + }.joinToString("\n").let { markdownToHTML(it) } + } ) // Get the latest available change notes from the changelog file changeNotes.set(provider { with(changelog) { renderItem( - getOrNull(properties("pluginVersion")) + getOrNull(properties("pluginVersion").get()) ?: runCatching { getLatest() }.getOrElse { getUnreleased() }, Changelog.OutputType.HTML, ) @@ -105,17 +107,17 @@ tasks { } signPlugin { - certificateChain.set(System.getenv("CERTIFICATE_CHAIN")) - privateKey.set(System.getenv("PRIVATE_KEY")) - password.set(System.getenv("PRIVATE_KEY_PASSWORD")) + certificateChain.set(environment("CERTIFICATE_CHAIN")) + privateKey.set(environment("PRIVATE_KEY")) + password.set(environment("PRIVATE_KEY_PASSWORD")) } publishPlugin { dependsOn("patchChangelog") - token.set(System.getenv("PUBLISH_TOKEN")) + token.set(environment("PUBLISH_TOKEN")) // The pluginVersion is based on the SemVer (https://semver.org) and supports pre-release labels, like 2.1.7-alpha.3 // Specify pre-release label to publish the plugin in a custom Release Channel automatically. Read more: // https://plugins.jetbrains.com/docs/intellij/deployment.html#specifying-a-release-channel - channels.set(listOf(properties("pluginVersion").split('-').getOrElse(1) { "default" }.split('.').first())) + channels.set(properties("pluginVersion").map { listOf(it.split('-').getOrElse(1) { "default" }.split('.').first()) }) } }