settings.gradle.kts (157 lines of code) (raw):

import java.io.IOException import java.net.URL import java.net.UnknownHostException import java.nio.file.Files import java.nio.file.Paths import java.nio.file.StandardCopyOption import java.util.* rootProject.name = "educational-plugin" include( "edu-format", "intellij-plugin", "intellij-plugin:educational-core", "intellij-plugin:jvm-core", "intellij-plugin:AI", "intellij-plugin:Edu-Java", "intellij-plugin:Edu-Kotlin", "intellij-plugin:Edu-Scala", "intellij-plugin:Edu-Python", "intellij-plugin:Edu-JavaScript", "intellij-plugin:Edu-Rust", "intellij-plugin:Edu-Cpp", "intellij-plugin:Edu-Cpp:CLion-Classic", // specific support for CLion classic "intellij-plugin:Edu-Cpp:CLion-Nova", // specific support for CLion Nova "intellij-plugin:Edu-Go", "intellij-plugin:Edu-Php", "intellij-plugin:Edu-Shell", "intellij-plugin:Edu-CSharp", "intellij-plugin:sql", "intellij-plugin:sql:sql-jvm", "intellij-plugin:localization", "intellij-plugin:features:code-insight-core", "intellij-plugin:features:code-insight-html", "intellij-plugin:features:code-insight-markdown", "intellij-plugin:features:code-insight-yaml", "intellij-plugin:features:command-line", "intellij-plugin:features:github", "intellij-plugin:features:ai-error-explanation", "intellij-plugin:features:ai-hints-core", "intellij-plugin:features:ai-hints-kotlin", "intellij-plugin:features:ai-hints-python", "intellij-plugin:features:ai-test-generation", "intellij-plugin:features:ide-onboarding", "intellij-plugin:features:social-media", ) if (settings.providers.gradleProperty("fleetIntegration").get().toBoolean()) { include("fleet-plugin") } val secretProperties: String = "secret.properties" val isTeamCity: Boolean get() = System.getenv("TEAMCITY_VERSION") != null configureSecretProperties() downloadHyperskillCss() fun configureSecretProperties() { try { download(URL("https://repo.labs.intellij.net/edu-tools/secret.properties"), secretProperties) } catch (_: UnknownHostException) { println("repo.labs.intellij.net is not reachable") val secretProperties = file(secretProperties) if (!secretProperties.exists()) { secretProperties.createNewFile() } } val secretProperties = loadProperties(secretProperties) secretProperties.extractAndStore( "intellij-plugin/educational-core/resources/stepik/stepik.properties", "stepikClientId", "cogniterraClientId", ) secretProperties.extractAndStore( "intellij-plugin/educational-core/resources/hyperskill/hyperskill-oauth.properties", "hyperskillClientId", ) secretProperties.extractAndStore( "intellij-plugin/educational-core/resources/twitter/oauth_twitter.properties", "xClientId" ) secretProperties.extractAndStore( "intellij-plugin/educational-core/resources/linkedin/linkedin-oauth.properties", "linkedInClientId", "linkedInClientSecret" ) secretProperties.extractAndStore( "edu-format/resources/aes/aes.properties", "aesKey" ) secretProperties.extractAndStore( "intellij-plugin/educational-core/resources/marketplace/marketplace-oauth.properties", "eduHubClientId", "eduHubClientSecret", "marketplaceHubClientId" ) secretProperties.extractAndStore( "intellij-plugin/educational-core/resources/lti/lti-auth.properties", "ltiServiceToken" ) } fun downloadHyperskillCss() { try { download(URL("https://hyperskill.org/static/shared.css"), "intellij-plugin/educational-core/resources/style/hyperskill_task.css") } catch (e: IOException) { System.err.println("Error downloading: ${e.message}. Using local copy") Files.copy( Paths.get("intellij-plugin/hyperskill_default.css"), Paths.get("intellij-plugin/educational-core/resources/style/hyperskill_task.css"), StandardCopyOption.REPLACE_EXISTING ) } } fun download(url: URL, dstPath: String) { println("Download $url") url.openStream().use { val path = file(dstPath).toPath().toAbsolutePath() println("Copying file to $path") Files.copy(it, path, StandardCopyOption.REPLACE_EXISTING) } } fun loadProperties(path: String): Properties { val properties = Properties() file(path).bufferedReader().use { properties.load(it) } return properties } fun Properties.extractAndStore(path: String, vararg keys: String) { val properties = Properties() for (key in keys) { properties[key] = getProperty(key) ?: "" } val file = file(path) file.parentFile?.mkdirs() file.bufferedWriter().use { properties.store(it, "") } } buildCache { local { isEnabled = !isTeamCity // By default, build cache is stored in gradle home directory directory = File(rootDir, "build/build-cache") } } pluginManagement { repositories { mavenCentral() gradlePluginPortal() maven("https://central.sonatype.com/repository/maven-snapshots/") // These repositories already exist in the educational-core module, but we need them here to make // IDE see platform sources during development. This is a workaround and should be removed after // the intelliJ Platform Gradle Plugin fixes source download. maven("https://www.jetbrains.com/intellij-repository/releases") maven("https://www.jetbrains.com/intellij-repository/snapshots") if (settings.providers.gradleProperty("fleetIntegration").get().toBoolean()) { maven("https://cache-redirector.jetbrains.com/intellij-dependencies") maven("https://packages.jetbrains.team/maven/p/teamcity-rest-client/teamcity-rest-client") maven { url = uri("https://packages.jetbrains.team/maven/p/fleet/fleet-sdk") credentials { username = settings.providers.gradleProperty("spaceUsername").orNull password = settings.providers.gradleProperty("spacePassword").orNull } } } } }