jetbrains-rider/build.gradle.kts (211 lines of code) (raw):

// Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 import com.jetbrains.rd.generator.gradle.RdGenExtension import com.jetbrains.rd.generator.gradle.RdGenTask import org.jetbrains.intellij.tasks.PrepareSandboxTask import software.aws.toolkits.gradle.ciOnly import software.aws.toolkits.gradle.intellij.IdeFlavor import software.aws.toolkits.gradle.intellij.IdeVersions import java.nio.file.Path buildscript { // Cannot be removed or else it will fail to compile @Suppress("RemoveRedundantQualifierName") val rdversion = software.aws.toolkits.gradle.intellij.IdeVersions.ideProfile(project).rider.rdGenVersion println("Using rd-gen: $rdversion") repositories { maven("https://www.myget.org/F/rd-snapshots/maven/") } dependencies { classpath("com.jetbrains.rd:rd-gen:$rdversion") } } val ideProfile = IdeVersions.ideProfile(project) plugins { id("toolkit-kotlin-conventions") id("toolkit-intellij-subplugin") id("toolkit-testing") id("toolkit-integration-testing") } intellijToolkit { ideFlavor.set(IdeFlavor.RD) } sourceSets { main { java.srcDirs("$buildDir/generated-src") } } dependencies { implementation(project(":jetbrains-core")) testImplementation(project(path = ":jetbrains-core", configuration = "testArtifacts")) } /** * RESHARPER */ // Not published to gradle plugin portal, use old syntax apply(plugin = "com.jetbrains.rdgen") val resharperPluginPath = File(projectDir, "ReSharper.AWS") val resharperBuildPath = File(project.buildDir, "dotnetBuild") val resharperParts = listOf( "AWS.Daemon", "AWS.Localization", "AWS.Project", "AWS.Psi", "AWS.Settings" ) val buildConfiguration = project.extra.properties["BuildConfiguration"] ?: "Debug" // TODO: Do we ever want to make a release build? // Protocol val protocolGroup = "protocol" val csDaemonGeneratedOutput = File(resharperPluginPath, "src/AWS.Daemon/Protocol") val csPsiGeneratedOutput = File(resharperPluginPath, "src/AWS.Psi/Protocol") val csAwsSettingsGeneratedOutput = File(resharperPluginPath, "src/AWS.Settings/Protocol") val csAwsProjectGeneratedOutput = File(resharperPluginPath, "src/AWS.Project/Protocol") val riderGeneratedSources = File("$buildDir/generated-src/software/aws/toolkits/jetbrains/protocol") val modelDir = File(projectDir, "protocol/model") val rdgenDir = File("${project.buildDir}/rdgen/") rdgenDir.mkdirs() configure<RdGenExtension> { verbose = true hashFolder = rdgenDir.toString() classpath({ val ijDependency = tasks.setupDependencies.flatMap { it.idea }.map { it.classes }.get() println("Calculating classpath for rdgen, intellij.ideaDependency is: $ijDependency") File(ijDependency, "lib/rd").resolve("rider-model.jar").absolutePath }) sources(projectDir.resolve("protocol/model")) packages = "model" } val generateModels = tasks.register<RdGenTask>("generateModels") { group = protocolGroup description = "Generates protocol models" inputs.dir(file("protocol/model")) outputs.dir(riderGeneratedSources) outputs.dir(csDaemonGeneratedOutput) outputs.dir(csPsiGeneratedOutput) outputs.dir(csAwsSettingsGeneratedOutput) outputs.dir(csAwsProjectGeneratedOutput) systemProperty("ktDaemonGeneratedOutput", riderGeneratedSources.resolve("DaemonProtocol").absolutePath) systemProperty("csDaemonGeneratedOutput", csDaemonGeneratedOutput.absolutePath) systemProperty("ktPsiGeneratedOutput", riderGeneratedSources.resolve("PsiProtocol").absolutePath) systemProperty("csPsiGeneratedOutput", csPsiGeneratedOutput.absolutePath) systemProperty("ktAwsSettingsGeneratedOutput", riderGeneratedSources.resolve("AwsSettingsProtocol").absolutePath) systemProperty("csAwsSettingsGeneratedOutput", csAwsSettingsGeneratedOutput.absolutePath) systemProperty("ktAwsProjectGeneratedOutput", riderGeneratedSources.resolve("AwsProjectProtocol").absolutePath) systemProperty("csAwsProjectGeneratedOutput", csAwsProjectGeneratedOutput.absolutePath) } val cleanGenerateModels = tasks.register<Delete>("cleanGenerateModels") { group = protocolGroup description = "Clean up generated protocol models" delete(generateModels) } // Backend val backendGroup = "backend" val prepareBuildProps = tasks.register("prepareBuildProps") { val riderSdkVersionPropsPath = File(resharperPluginPath, "RiderSdkPackageVersion.props") group = backendGroup inputs.property("riderNugetSdkVersion", ideProfile.rider.nugetVersion) outputs.file(riderSdkVersionPropsPath) doLast { val netFrameworkTarget = ideProfile.rider.netFrameworkTarget val riderSdkVersion = ideProfile.rider.nugetVersion val configText = """<Project> <PropertyGroup> <NetFrameworkTarget>$netFrameworkTarget</NetFrameworkTarget> <RiderSDKVersion>[$riderSdkVersion]</RiderSDKVersion> <DefineConstants>PROFILE_${ideProfile.name.replace(".", "_")}</DefineConstants> </PropertyGroup> </Project> """ riderSdkVersionPropsPath.writeText(configText) } } val prepareNuGetConfig = tasks.register("prepareNuGetConfig") { group = backendGroup dependsOn(tasks.setupDependencies) val nugetConfigPath = File(projectDir, "NuGet.Config") // FIX_WHEN_MIN_IS_211 remove the projectDir one above val nugetConfigPath211 = Path.of(projectDir.absolutePath, "testData", "NuGet.config").toFile() inputs.property("rdVersion", ideProfile.rider.sdkVersion) outputs.files(nugetConfigPath, nugetConfigPath211) doLast { val nugetPath = getNugetPackagesPath() val configText = """<?xml version="1.0" encoding="utf-8"?> <configuration> <packageSources> <add key="resharper-sdk" value="$nugetPath" /> </packageSources> </configuration> """ nugetConfigPath.writeText(configText) nugetConfigPath211.writeText(configText) } } val buildReSharperPlugin = tasks.register("buildReSharperPlugin") { group = backendGroup description = "Builds the full ReSharper backend plugin solution" dependsOn(generateModels, prepareBuildProps, prepareNuGetConfig) inputs.dir(resharperPluginPath) outputs.dir(resharperBuildPath) doLast { val arguments = listOf( "build", "${resharperPluginPath.canonicalPath}/ReSharper.AWS.sln" ) exec { executable = "dotnet" args = arguments } } } fun getNugetPackagesPath(): File { val sdkPath = tasks.setupDependencies.flatMap { it.idea }.map { it.classes }.get() println("SDK path: $sdkPath") val riderSdk = File(sdkPath, "lib/DotNetSdkForRdPlugins") println("NuGet packages: $riderSdk") if (!riderSdk.isDirectory) throw IllegalStateException("$riderSdk does not exist or not a directory") return riderSdk } val resharperDlls = configurations.create("resharperDlls") { isCanBeResolved = false } val resharperDllsDir = tasks.register<Sync>("resharperDllsDir") { from(buildReSharperPlugin) { include("**/bin/**/$buildConfiguration/**/AWS*.dll") include("**/bin/**/$buildConfiguration/**/AWS*.pdb") } into("$buildDir/$name") includeEmptyDirs = false eachFile { path = name // Clear out the path to flatten it } // TODO how is this being called twice? Can we fix it? duplicatesStrategy = DuplicatesStrategy.INCLUDE } artifacts { add(resharperDlls.name, resharperDllsDir) } val cleanNetBuilds = tasks.register<Delete>("cleanNetBuilds") { group = protocolGroup description = "Clean up obj/ bin/ folders under ReSharper.AWS" delete(resharperBuildPath) } tasks.clean { dependsOn(cleanGenerateModels, cleanNetBuilds) } // Tasks: // // `buildPlugin` depends on `prepareSandbox` task and then zips up the sandbox dir and puts the file in rider/build/distributions // `runIde` depends on `prepareSandbox` task and then executes IJ inside the sandbox dir // `prepareSandbox` depends on the standard Java `jar` and then copies everything into the sandbox dir tasks.withType<PrepareSandboxTask>().all { dependsOn(resharperDllsDir) from(resharperDllsDir) { into("aws-toolkit-jetbrains/dotnet") } } tasks.compileKotlin { dependsOn(generateModels) } tasks.detekt { // Make sure kotlin code is generated before we execute detekt dependsOn(generateModels) } tasks.test { useTestNG() environment("LOCAL_ENV_RUN", true) maxHeapSize = "1024m" } tasks.integrationTest { useTestNG() environment("LOCAL_ENV_RUN", true) maxHeapSize = "1024m" // test detection is broken for tests inheriting from JB test framework: https://youtrack.jetbrains.com/issue/IDEA-278926 setScanForTestClasses(false) include("**/*Test.class") ciOnly { // disable retries so that logs aren't overwritten retry { maxRetries.set(0) } } }