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") } }