build.gradle.kts (130 lines of code) (raw):
/*
* Copyright 2021 Netflix, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import org.gradle.api.tasks.testing.logging.TestExceptionFormat
import org.jetbrains.changelog.Changelog
import org.jetbrains.changelog.markdownToHTML
import org.jetbrains.intellij.platform.gradle.IntelliJPlatformType
import org.jetbrains.intellij.platform.gradle.TestFrameworkType
import org.jetbrains.intellij.platform.gradle.models.ProductRelease
import org.jetbrains.intellij.platform.gradle.tasks.RunIdeTask
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
fun properties(key: String) = project.findProperty(key).toString()
plugins {
// Java support
id("java")
// Kotlin support
id("org.jetbrains.kotlin.jvm") version "2.1.20"
// Gradle IntelliJ Plugin
id("org.jetbrains.intellij.platform") version "2.5.0"
// Gradle Changelog Plugin
id("org.jetbrains.changelog") version "2.2.1"
}
group = properties("pluginGroup")
version = properties("pluginVersion")
// Configure project's dependencies
repositories {
mavenCentral()
intellijPlatform {
defaultRepositories()
}
}
dependencies {
intellijPlatform {
create(properties("platformType"), properties("platformVersion"))
plugins(properties("platformPlugins").split(","))
bundledPlugins(properties("platformBundledPlugins").split(","))
testFramework(TestFrameworkType.Bundled)
pluginVerifier()
}
testImplementation(platform("org.junit:junit-bom:5.12.2"))
testImplementation("org.junit.jupiter:junit-jupiter")
testImplementation("org.junit.platform:junit-platform-launcher")
testRuntimeOnly("junit:junit:4.13.2")
}
intellijPlatform {
pluginConfiguration {
name = properties("pluginName")
version = properties("pluginVersion")
ideaVersion {
sinceBuild = properties("pluginSinceBuild")
untilBuild = provider { null }
}
description = projectDir.resolve("README.md").readText().lines().run {
val start = "<!-- Plugin description -->"
val end = "<!-- Plugin description 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").run { markdownToHTML(this) }
changeNotes = provider {
changelog.renderItem(
changelog.run {
getOrNull(properties("pluginVersion")) ?: getLatest()
}, Changelog.OutputType.HTML)
}
}
pluginVerification {
ides {
select {
types = listOf(IntelliJPlatformType.IntellijIdeaCommunity)
channels = listOf(ProductRelease.Channel.RELEASE)
sinceBuild = properties("pluginSinceBuild")
}
}
}
signing {
certificateChain = System.getenv("PLUGIN_CERT_CHAIN")
privateKey = System.getenv("PLUGIN_PRIVATE_KEY")
password = System.getenv("PLUGIN_PRIVATE_KEY_PASSWORD")
}
publishing {
token = System.getenv("PUBLISH_TOKEN")
// 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 = listOf(properties("pluginVersion").split('-').getOrElse(1) { "default" }.split('.').first())
}
}
// Configure Gradle Changelog Plugin - read more: https://github.com/JetBrains/gradle-changelog-plugin
changelog {
version.set(properties("pluginVersion"))
groups.set(emptyList())
}
tasks {
// Set the JVM compatibility versions
properties("javaVersion").let {
withType<JavaCompile> {
sourceCompatibility = it
targetCompatibility = it
}
withType<KotlinCompile> {
compilerOptions {
jvmTarget.set(JvmTarget.fromTarget(it))
}
}
}
wrapper {
gradleVersion = properties("gradleVersion")
}
test {
// show standard out and standard error of the test JVM(s) on the console
testLogging {
exceptionFormat = TestExceptionFormat.FULL
showStandardStreams = true
events("passed", "skipped", "failed")
}
useJUnitPlatform()
}
runIde {
jvmArgs = listOf("-Xmx2000m")
}
}
val runIdeForUiTests by intellijPlatformTesting.runIde.registering {
task {
jvmArgumentProviders += CommandLineArgumentProvider {
listOf(
"-Drobot-server.port=8082",
"-Dide.mac.message.dialogs.as.sheets=false",
"-Djb.privacy.policy.text=<!--999.999-->",
"-Djb.consents.confirmation.enabled=false",
)
}
}
plugins {
robotServerPlugin()
}
}
tasks.named<RunIdeTask>("runIde") {
jvmArgumentProviders += CommandLineArgumentProvider {
listOf("-Didea.kotlin.plugin.use.k2=true")
}
}