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.
pull/361/head
Leonard Brünings 1 year ago committed by Jakub Chrzanowski
parent f1df5a5a94
commit f147d6950f

@ -1,7 +1,8 @@
import org.jetbrains.changelog.Changelog import org.jetbrains.changelog.Changelog
import org.jetbrains.changelog.markdownToHTML 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 { plugins {
// Java support // Java support
@ -38,21 +39,21 @@ intellij {
type.set(properties("platformType")) type.set(properties("platformType"))
// Plugin Dependencies. Uses `platformPlugins` property from the gradle.properties file. // 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 // Configure Gradle Changelog Plugin - read more: https://github.com/JetBrains/gradle-changelog-plugin
changelog { changelog {
groups.set(emptyList()) groups.empty()
repositoryUrl.set(properties("pluginRepositoryUrl")) repositoryUrl.set(properties("pluginRepositoryUrl"))
} }
// Configure Gradle Qodana Plugin - read more: https://github.com/JetBrains/gradle-qodana-plugin // Configure Gradle Qodana Plugin - read more: https://github.com/JetBrains/gradle-qodana-plugin
qodana { qodana {
cachePath.set(file(".qodana").canonicalPath) cachePath.set(provider { file(".qodana").canonicalPath })
reportPath.set(file("build/reports/inspections").canonicalPath) reportPath.set(provider { file("build/reports/inspections").canonicalPath })
saveReport.set(true) 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 // Configure Gradle Kover Plugin - read more: https://github.com/Kotlin/kotlinx-kover#configuration
@ -62,7 +63,7 @@ kover.xmlReport {
tasks { tasks {
wrapper { wrapper {
gradleVersion = properties("gradleVersion") gradleVersion = properties("gradleVersion").get()
} }
patchPluginXml { patchPluginXml {
@ -71,23 +72,24 @@ tasks {
untilBuild.set(properties("pluginUntilBuild")) untilBuild.set(properties("pluginUntilBuild"))
// Extract the <!-- Plugin description --> section from README.md and provide for the plugin's manifest // Extract the <!-- Plugin description --> section from README.md and provide for the plugin's manifest
pluginDescription.set( pluginDescription.set(provider {
file("README.md").readText().lines().run { file("README.md").readText().lines().run {
val start = "<!-- Plugin description -->" val start = "<!-- Plugin description -->"
val end = "<!-- Plugin description end -->" val end = "<!-- Plugin description end -->"
if (!containsAll(listOf(start, end))) { if (!containsAll(listOf(start, end))) {
throw GradleException("Plugin description section not found in README.md:\n$start ... $end") throw GradleException("Plugin description section not found in README.md:\n$start ... $end")
} }
subList(indexOf(start) + 1, indexOf(end)) subList(indexOf(start) + 1, indexOf(end))
}.joinToString("\n").let { markdownToHTML(it) } }.joinToString("\n").let { markdownToHTML(it) }
}
) )
// Get the latest available change notes from the changelog file // Get the latest available change notes from the changelog file
changeNotes.set(provider { changeNotes.set(provider {
with(changelog) { with(changelog) {
renderItem( renderItem(
getOrNull(properties("pluginVersion")) getOrNull(properties("pluginVersion").get())
?: runCatching { getLatest() }.getOrElse { getUnreleased() }, ?: runCatching { getLatest() }.getOrElse { getUnreleased() },
Changelog.OutputType.HTML, Changelog.OutputType.HTML,
) )
@ -105,17 +107,17 @@ tasks {
} }
signPlugin { signPlugin {
certificateChain.set(System.getenv("CERTIFICATE_CHAIN")) certificateChain.set(environment("CERTIFICATE_CHAIN"))
privateKey.set(System.getenv("PRIVATE_KEY")) privateKey.set(environment("PRIVATE_KEY"))
password.set(System.getenv("PRIVATE_KEY_PASSWORD")) password.set(environment("PRIVATE_KEY_PASSWORD"))
} }
publishPlugin { publishPlugin {
dependsOn("patchChangelog") 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 // 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: // 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 // 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()) })
} }
} }

Loading…
Cancel
Save