diff --git a/build.gradle.kts b/build.gradle.kts index 3ccf76bc4cb..6e9fc600029 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -10,14 +10,8 @@ buildscript { repositories { bootstrapKotlinRepo?.let(::maven) - if (cacheRedirectorEnabled) { - maven("https://cache-redirector.jetbrains.com/plugins.gradle.org/m2") - maven("https://cache-redirector.jetbrains.com/repo.maven.apache.org/maven2") - - } else { - maven("https://plugins.gradle.org/m2") - mavenCentral() - } + mavenCentral() + gradlePluginPortal() } // a workaround for kotlin compiler classpath in kotlin project: sometimes gradle substitutes diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts index 4c48a0f171c..c17d7a22c50 100644 --- a/buildSrc/build.gradle.kts +++ b/buildSrc/build.gradle.kts @@ -10,11 +10,7 @@ buildscript { kotlinBootstrapFrom(BootstrapOption.SpaceBootstrap(kotlinBuildProperties.kotlinBootstrapVersion!!, cacheRedirectorEnabled)) repositories { - if (cacheRedirectorEnabled) { - maven("https://cache-redirector.jetbrains.com/maven.pkg.jetbrains.space/kotlin/p/kotlin/kotlin-dependencies") - } else { - maven("https://maven.pkg.jetbrains.space/kotlin/p/kotlin/kotlin-dependencies") - } + maven("https://maven.pkg.jetbrains.space/kotlin/p/kotlin/kotlin-dependencies") project.bootstrapKotlinRepo?.let { maven(url = it) @@ -238,10 +234,6 @@ tasks.named("compileGroovy", GroovyCompile::class.java) { allprojects { tasks.register("checkBuild") - - afterEvaluate { - apply(from = "$rootDir/../gradle/cacheRedirector.gradle.kts") - } } gradlePlugin { diff --git a/buildSrc/settings.gradle b/buildSrc/settings.gradle index 7e065a48ef9..43316f63491 100644 --- a/buildSrc/settings.gradle +++ b/buildSrc/settings.gradle @@ -1,13 +1,9 @@ pluginManagement { + apply from: '../repo/scripts/cache-redirector.settings.gradle.kts' repositories { - if (cacheRedirectorEnabled == 'true') { - logger.info("Using cache redirector for settings.gradle pluginManagement") - maven { - url "https://cache-redirector.jetbrains.com/plugins.gradle.org/m2" - } - } else { - gradlePluginPortal() - } + maven { url "https://maven.pkg.jetbrains.space/kotlin/p/kotlin/kotlin-dependencies" } + mavenCentral() + gradlePluginPortal() } } @@ -35,13 +31,10 @@ dependencyResolutionManagement { buildscript { repositories { - if (cacheRedirectorEnabled == 'true') { - maven { url "https://cache-redirector.jetbrains.com/maven.pkg.jetbrains.space/kotlin/p/kotlin/kotlin-dependencies" } - } else { - maven { url "https://maven.pkg.jetbrains.space/kotlin/p/kotlin/kotlin-dependencies" } - } + maven { url "https://maven.pkg.jetbrains.space/kotlin/p/kotlin/kotlin-dependencies" } mavenCentral() } + def buildGradlePluginVersion = ext["kotlin.build.gradlePlugin.version"] dependencies { classpath("org.jetbrains.kotlin:kotlin-build-gradle-plugin:$buildGradlePluginVersion") diff --git a/buildSrc/src/main/kotlin/common-configuration.gradle.kts b/buildSrc/src/main/kotlin/common-configuration.gradle.kts index 2a88d7bb250..2b5f09cbb6b 100644 --- a/buildSrc/src/main/kotlin/common-configuration.gradle.kts +++ b/buildSrc/src/main/kotlin/common-configuration.gradle.kts @@ -28,7 +28,6 @@ dependencies { } } -apply(from = "$rootDir/gradle/cacheRedirector.gradle.kts") project.configureJvmDefaultToolchain() project.addEmbeddedConfigurations() project.configureJavaCompile() diff --git a/compiler/tests/org/jetbrains/kotlin/code/CodeConformanceTest.kt b/compiler/tests/org/jetbrains/kotlin/code/CodeConformanceTest.kt index 0e06b26141c..e0c8583fbdc 100644 --- a/compiler/tests/org/jetbrains/kotlin/code/CodeConformanceTest.kt +++ b/compiler/tests/org/jetbrains/kotlin/code/CodeConformanceTest.kt @@ -308,23 +308,30 @@ class CodeConformanceTest : TestCase() { RepoAllowList( // Please use cache-redirector for importing in tests "https://maven.pkg.jetbrains.space/kotlin/p/kotlin/dev", root, - setOf("gradle/cacheRedirector.gradle.kts") + setOf("repo/scripts/cache-redirector.settings.gradle.kts") ), RepoAllowList( "https://cache-redirector.jetbrains.com/maven.pkg.jetbrains.space/kotlin/p/kotlin/dev", root, - setOf("gradle/cacheRedirector.gradle.kts") + setOf("repo/scripts/cache-redirector.settings.gradle.kts") ), RepoAllowList( // Please use cache-redirector for importing in tests "https://maven.pkg.jetbrains.space/kotlin/p/kotlin/eap", root, - setOf("gradle/cacheRedirector.gradle.kts") + setOf("repo/scripts/cache-redirector.settings.gradle.kts") ), RepoAllowList( "https://cache-redirector.jetbrains.com/maven.pkg.jetbrains.space/kotlin/p/kotlin/dev", root, - setOf("gradle/cacheRedirector.gradle.kts") + setOf("repo/scripts/cache-redirector.settings.gradle.kts") ), - RepoAllowList("kotlin/ktor", root, setOf("gradle/cacheRedirector.gradle.kts")), - RepoAllowList("bintray.com", root, setOf("gradle/cacheRedirector.gradle.kts"), exclude = "jcenter.bintray.com") + RepoAllowList( + "kotlin/ktor", root, + setOf("repo/scripts/cache-redirector.settings.gradle.kts") + ), + RepoAllowList( + "bintray.com", root, + setOf("repo/scripts/cache-redirector.settings.gradle.kts"), + exclude = "jcenter.bintray.com" + ) ) data class RepoOccurance(val repo: String, val file: File) diff --git a/kotlin-native/backend.native/tests/build.gradle b/kotlin-native/backend.native/tests/build.gradle index 77f48783514..3498abfe6fb 100644 --- a/kotlin-native/backend.native/tests/build.gradle +++ b/kotlin-native/backend.native/tests/build.gradle @@ -15,10 +15,7 @@ import static org.jetbrains.kotlin.konan.target.Architecture.* buildscript { repositories { - if (UtilsKt.getCacheRedirectorEnabled(project)) - maven { url 'https://cache-redirector.jetbrains.com/maven-central'} - else - mavenCentral() + mavenCentral() maven { url project.bootstrapKotlinRepo diff --git a/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/Utils.kt b/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/Utils.kt index be7ccffb6a7..da4a0e9230d 100644 --- a/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/Utils.kt +++ b/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/Utils.kt @@ -85,18 +85,9 @@ val Project.testOutputFramework val Project.testOutputExternal get() = (findProperty("testOutputExternal") as File).toString() -val Project.cacheRedirectorEnabled - get() = findProperty("cacheRedirectorEnabled")?.toString()?.toBoolean() ?: false - val Project.compileOnlyTests: Boolean get() = hasProperty("test_compile_only") -fun Project.redirectIfEnabled(url: String): String = if (cacheRedirectorEnabled) { - val base = URL(url) - "https://cache-redirector.jetbrains.com/${base.host}/${base.path}" -} else - url - val validPropertiesNames = listOf( "konan.home", "org.jetbrains.kotlin.native.home", diff --git a/kotlin-native/build.gradle b/kotlin-native/build.gradle index 2512fe4b67d..b723c81a1b3 100644 --- a/kotlin-native/build.gradle +++ b/kotlin-native/build.gradle @@ -14,15 +14,12 @@ * limitations under the License. */ -import kotlin.text.Regex import org.jetbrains.kotlin.konan.target.* import org.jetbrains.kotlin.konan.util.* import org.jetbrains.kotlin.CopySamples import org.jetbrains.kotlin.CopyCommonSources import org.jetbrains.kotlin.PlatformInfo import org.jetbrains.kotlin.KotlinBuildPusher -import org.jetbrains.kotlin.CollisionDetector -import org.jetbrains.kotlin.CollisionTransformer import org.jetbrains.kotlin.cpp.CompilationDatabasePlugin import org.jetbrains.kotlin.CompareDistributionSignatures import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar @@ -34,14 +31,8 @@ buildscript { apply from: "gradle/kotlinGradlePlugin.gradle" repositories { - if (UtilsKt.getCacheRedirectorEnabled(project)) { - maven { url "https://cache-redirector.jetbrains.com/maven-central" } - maven { url "https://cache-redirector.jetbrains.com/jcenter" } - } - else { - mavenCentral() - jcenter() - } + mavenCentral() + jcenter() gradlePluginPortal() } @@ -101,10 +92,7 @@ ext { allprojects { buildscript { repositories { - if (UtilsKt.getCacheRedirectorEnabled(project)) - maven { url 'https://cache-redirector.jetbrains.com/jcenter' } - else - jcenter() + jcenter() } } if (path != ":kotlin-native:dependencies") { @@ -112,10 +100,7 @@ allprojects { } repositories { - if (UtilsKt.getCacheRedirectorEnabled(project)) - maven { url 'https://cache-redirector.jetbrains.com/maven-central' } - else - mavenCentral() + mavenCentral() maven { url project.bootstrapKotlinRepo } diff --git a/kotlin-native/gradle/kotlinGradlePlugin.gradle b/kotlin-native/gradle/kotlinGradlePlugin.gradle index 9bcd9495484..2ec891405a3 100644 --- a/kotlin-native/gradle/kotlinGradlePlugin.gradle +++ b/kotlin-native/gradle/kotlinGradlePlugin.gradle @@ -4,10 +4,7 @@ project.buildscript.repositories { maven { url BootstrapKt.getBootstrapKotlinRepo(project) } - if (UtilsKt.getCacheRedirectorEnabled(project)) - maven { url 'https://cache-redirector.jetbrains.com/maven-central' } - else - mavenCentral() + mavenCentral() } def kotlinRoot = ext.properties.containsKey("rootBuildDirectory") ? file("${ext.rootBuildDirectory}/..") : rootProject.projectDir File versionPropertiesFile = new File(kotlinRoot, "gradle/versions.properties") diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/HierarchicalMppIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/HierarchicalMppIT.kt index 4d9bb0144b5..738a0c7b54d 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/HierarchicalMppIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/HierarchicalMppIT.kt @@ -115,7 +115,7 @@ class HierarchicalMppIT : KGPBaseTest() { fun testDependenciesInTests(gradleVersion: GradleVersion, @TempDir tempDir: Path) { publishThirdPartyLib(withGranularMetadata = true, gradleVersion = gradleVersion, localRepoDir = tempDir) { kotlinSourcesDir("jvmMain").copyRecursively(kotlinSourcesDir("linuxX64Main")) - buildGradleKts.appendText("kotlin.linuxX64()") + buildGradleKts.appendText("\nkotlin.linuxX64()") } nativeProject( diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kotlin2JsGradlePluginIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kotlin2JsGradlePluginIT.kt index 1d8990f10cb..33277eee1c7 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kotlin2JsGradlePluginIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kotlin2JsGradlePluginIT.kt @@ -406,11 +406,12 @@ class Kotlin2JsGradlePluginIT : AbstractKotlin2JsGradlePluginIT(false) { } libBuildscript.appendText( """ - kotlin.js().browser { - dceTask { - dceOptions.devMode = true - } - } + | + |kotlin.js().browser { + | dceTask { + | dceOptions.devMode = true + | } + |} """.trimMargin() ) diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/NewMultiplatformIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/NewMultiplatformIT.kt index 5ea9ede9e74..5c0070b0ac7 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/NewMultiplatformIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/NewMultiplatformIT.kt @@ -228,9 +228,6 @@ class NewMultiplatformIT : BaseGradleIT() { gradleBuildScript(libProjectName).takeIf { it.extension == "kts" }?.modify { it.replace(Regex("""\.version\(.*\)"""), "") } - gradleBuildScript(subproject = libProject.projectDir.name).modify { - it.lines().dropLast(5).joinToString(separator = "\n") - } build( "clean", @@ -430,9 +427,6 @@ class NewMultiplatformIT : BaseGradleIT() { gradleBuildScript(libProjectName).takeIf { it.extension == "kts" }?.modify { it.replace(Regex("""\.version\(.*\)"""), "") } - gradleBuildScript(subproject = libProject.projectDir.name).modify { - it.lines().dropLast(5).joinToString(separator = "\n") - } build( "clean", @@ -714,7 +708,7 @@ class NewMultiplatformIT : BaseGradleIT() { arrayOf( it + "com/example/lib/TestCommonCode.class", it + "com/example/lib/TestWithJava.class", - it + "META-INF/new-mpp-lib-with-tests.kotlin_module" // Note: same name as in main + it + "META-INF/new-mpp-lib-with-tests_test.kotlin_module" ) }, *kotlinClassesDir(sourceSet = "jvmWithoutJava/main").let { @@ -729,7 +723,7 @@ class NewMultiplatformIT : BaseGradleIT() { arrayOf( it + "com/example/lib/TestCommonCode.class", it + "com/example/lib/TestWithoutJava.class", - it + "META-INF/new-mpp-lib-with-tests.kotlin_module" // Note: same name as in main + it + "META-INF/new-mpp-lib-with-tests_test.kotlin_module" ) } ) @@ -1057,9 +1051,6 @@ class NewMultiplatformIT : BaseGradleIT() { libProject.setupWorkingDir() libProject.projectDir.copyRecursively(projectDir.resolve(libProject.projectDir.name)) - gradleBuildScript(libProject.projectDir.name).modify { - it.lines().dropLast(5).joinToString(separator = "\n") - } projectDir.resolve("settings.gradle").appendText("\ninclude '${libProject.projectDir.name}'") gradleBuildScript().modify { it.replace("'com.example:sample-lib:1.0'", "project(':${libProject.projectDir.name}')") + @@ -1277,9 +1268,6 @@ class NewMultiplatformIT : BaseGradleIT() { setupWorkingDir() appProject.setupWorkingDir(false) appProject.projectDir.copyRecursively(projectDir.resolve("sample-app")) - gradleBuildScript("sample-app").modify { - it.lines().dropLast(5).joinToString(separator = "\n") - } gradleSettingsScript().writeText("include 'sample-app'") // disables feature preview 'GRADLE_METADATA', resets rootProject name gradleBuildScript("sample-app").modify { diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/VariantAwareDependenciesMppIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/VariantAwareDependenciesMppIT.kt index 92002cc7f9b..fbe901e5162 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/VariantAwareDependenciesMppIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/VariantAwareDependenciesMppIT.kt @@ -409,16 +409,6 @@ internal fun BaseGradleIT.Project.embedProject(other: BaseGradleIT.Project, rena } finally { check(tempDir.deleteRecursively()) } - if (projectName == other.projectName) { - val embeddedModuleDir = projectDir.resolve(embeddedModuleName) - embeddedModuleDir.walk().forEach { - if (it.name.contains("build.gradle")) { - it.modify { string -> - string.lines().dropLast(5).joinToString(separator = "\n") - } - } - } - } testCase.apply { gradleSettingsScript().appendText("\ninclude(\"$embeddedModuleName\")") diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/GeneralNativeIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/GeneralNativeIT.kt index e043ef0f9c4..1d30f8f63e0 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/GeneralNativeIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/GeneralNativeIT.kt @@ -1135,6 +1135,10 @@ class GeneralNativeIT : BaseGradleIT() { """.trimIndent() ) + gradleProperties().modify { + it.replace("cacheRedirectorEnabled=true", "cacheRedirectorEnabled=false") + } + build( "build", options = defaultBuildOptions().copy( diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/NativePlatformLibsIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/NativePlatformLibsIT.kt index 737f48a8253..e3c5d861bdb 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/NativePlatformLibsIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/NativePlatformLibsIT.kt @@ -148,13 +148,16 @@ class NativePlatformLibsIT : BaseGradleIT() { appendText("\nkotlin.native.linkArgs=-Xfoo=bar -Xbaz=qux") } gradleBuildScript().modify(::transformBuildScriptWithPluginsDsl) - gradleBuildScript().appendText(""" - kotlin.linuxX64() { - binaries.sharedLib { - freeCompilerArgs += "-Xmen=pool" - } - } - """.trimIndent()) + gradleBuildScript().appendText( + """ + | + |kotlin.linuxX64() { + | binaries.sharedLib { + | freeCompilerArgs += "-Xmen=pool" + | } + |} + """.trimMargin() + ) build("linkDebugSharedLinuxX64") { assertSuccessful() assertTasksExecuted( diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/testDsl.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/testDsl.kt index 2368229341f..7e6123e0a51 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/testDsl.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/testDsl.kt @@ -499,15 +499,14 @@ internal fun Path.enableAndroidSdk() { applyAndroidTestFixes() } -@OptIn(ExperimentalPathApi::class) internal fun Path.enableCacheRedirector() { // Path relative to the current gradle module project dir - val redirectorScript = Paths.get("../../../gradle/cacheRedirector.gradle.kts") + val redirectorScript = Paths.get("../../../repo/scripts/cache-redirector.settings.gradle.kts") assert(redirectorScript.exists()) { - "$redirectorScript does not exist! Please provide correct path to 'cacheRedirector.gradle.kts' file." + "$redirectorScript does not exist! Please provide correct path to 'cache-redirector.settings.gradle.kts' file." } val gradleDir = resolve("gradle").also { it.createDirectories() } - redirectorScript.copyTo(gradleDir.resolve("cacheRedirector.gradle.kts")) + redirectorScript.copyTo(gradleDir.resolve("cache-redirector.settings.gradle.kts")) val projectCacheRedirectorStatus = Paths .get("../../../gradle.properties") @@ -519,45 +518,34 @@ internal fun Path.enableCacheRedirector() { .also { if (!it.exists()) it.createFile() } .appendText( """ - - $projectCacheRedirectorStatus - - """.trimIndent() + | + |$projectCacheRedirectorStatus + | + """.trimMargin() ) - val projectDir = toFile() - projectDir.walk().forEach { - when (it.name) { - "build.gradle" -> { - it.appendText( - """ - - def cacheRedirectorFile = "${'$'}rootDir/gradle/cacheRedirector.gradle.kts" - if (new File(cacheRedirectorFile).exists()) { - apply(from: cacheRedirectorFile) - } - - """.trimIndent() - ) - } - - "build.gradle.kts" -> { - it.appendText( - """ - - val cacheRedirectorFile = "${'$'}rootDir/gradle/cacheRedirector.gradle.kts" - if (File(cacheRedirectorFile).exists()) { - apply(from = cacheRedirectorFile) - } - - """.trimIndent() - ) - } + val settingsGradle = resolve("settings.gradle") + val settingsGradleKts = resolve("settings.gradle.kts") + when { + Files.exists(settingsGradle) -> settingsGradle.modify { + """ + |${it.substringBefore("pluginManagement {")} + |pluginManagement { + | apply from: 'gradle/cache-redirector.settings.gradle.kts' + |${it.substringAfter("pluginManagement {")} + """.trimMargin() + } + Files.exists(settingsGradleKts) -> settingsGradleKts.modify { + """ + |${it.substringBefore("pluginManagement {")} + |pluginManagement { + | apply(from = "gradle/cache-redirector.settings.gradle.kts") + |${it.substringAfter("pluginManagement {")} + """.trimMargin() } } } -@OptIn(ExperimentalPathApi::class) private fun Path.addHeapDumpOptions() { val propertiesFile = resolve("gradle.properties") if (!propertiesFile.exists()) propertiesFile.createFile() diff --git a/repo/scripts/Readme.md b/repo/scripts/Readme.md new file mode 100644 index 00000000000..3e22aeb8561 --- /dev/null +++ b/repo/scripts/Readme.md @@ -0,0 +1,5 @@ +## Description + +This directory contains the scripts that should be applied before even settings evaluation +and cannot be convention plugins: +- [script](cache-redirector.settings.gradle.kts) to redirect all repositories to cache redirector service diff --git a/gradle/cacheRedirector.gradle.kts b/repo/scripts/cache-redirector.settings.gradle.kts similarity index 83% rename from gradle/cacheRedirector.gradle.kts rename to repo/scripts/cache-redirector.settings.gradle.kts index 03cf5f77dcc..0a15a982eb0 100644 --- a/gradle/cacheRedirector.gradle.kts +++ b/repo/scripts/cache-redirector.settings.gradle.kts @@ -1,17 +1,27 @@ +import java.net.URI + /* - * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ -import org.gradle.api.Project -import org.gradle.api.artifacts.dsl.RepositoryHandler -import org.gradle.api.artifacts.repositories.MavenArtifactRepository -import java.net.URI +// Apply this settings script in the project settings.gradle following way: +// pluginManagement { +// apply from: 'cache-redirector.settings.gradle.kts' +// } + +internal val Settings.cacheRedirectorEnabled: Provider + get() = providers + .gradleProperty("cacheRedirectorEnabled") + .forUseAtConfigurationTime() + .map { it.toBoolean() } + .orElse(false) + +// Repository override section /** * The list of repositories supported by cache redirector should be synced with the list at https://cache-redirector.jetbrains.com/redirects_generated.html * To add a repository to the list create an issue in ADM project (example issue https://youtrack.jetbrains.com/issue/IJI-149) - * Repositories in `buildscript` blocks are *NOT* substituted by this script and should be handled manually */ val cacheMap: Map = mapOf( "https://archive.kernel.org/centos-vault/7.0.1406/os/x86_64/Packages" to "https://cache-redirector.jetbrains.com/archive.kernel.org/centos-vault/7.0.1406/os/x86_64/Packages", @@ -106,18 +116,14 @@ val aliases = mapOf( "https://repo.maven.apache.org/maven2" to "https://repo1.maven.org/maven2" // Maven Central ) -val isTeamcityBuild = project.hasProperty("teamcity") || System.getenv("TEAMCITY_VERSION") != null - -fun Project.cacheRedirectorEnabled(): Boolean = findProperty("cacheRedirectorEnabled")?.toString()?.toBoolean() == true - fun URI.maybeRedirect(): URI { val url = toString().trimEnd('/') - val dealiasedUrl = aliases.getOrDefault(url, url) + val deAliasedUrl = aliases.getOrDefault(url, url) - val cacheUrlEntry = cacheMap.entries.find { (origin, _) -> dealiasedUrl.startsWith(origin) } + val cacheUrlEntry = cacheMap.entries.find { (origin, _) -> deAliasedUrl.startsWith(origin) } return if (cacheUrlEntry != null) { val cacheUrl = cacheUrlEntry.value - val originRestPath = dealiasedUrl.substringAfter(cacheUrlEntry.key, "") + val originRestPath = deAliasedUrl.substringAfter(cacheUrlEntry.key, "") URI("$cacheUrl$originRestPath") } else { this @@ -133,10 +139,60 @@ fun RepositoryHandler.redirect() = configureEach { } } +// Native compiler download url override section + +fun Project.overrideNativeCompilerDownloadUrl() { + logger.info("Redirecting Kotlin/Native compiler download url") + extensions.extraProperties["kotlin.native.distribution.baseDownloadUrl"] = + "https://cache-redirector.jetbrains.com/download.jetbrains.com/kotlin/native/builds" +} + +// Check repositories are overriden section + +fun Project.addCheckRepositoriesTask() { + val checkRepoTask = tasks.register("checkRepositories") { + val isTeamcityBuildInput = providers.provider { + project.hasProperty("teamcity") || System.getenv("TEAMCITY_VERSION") != null + }.forUseAtConfigurationTime() + + doLast { + val testName = "$name in ${project.displayName}" + val isTeamcityBuild = isTeamcityBuildInput.get() + if (isTeamcityBuild) { + testStarted(testName) + } + + project.repositories.filterIsInstance().forEach { + @Suppress("SENSELESS_COMPARISON") if (it.url == null) { + logInvalidIvyRepo(testName, isTeamcityBuild) + } + } + + project.repositories.findNonCachedRepositories().forEach { + logNonCachedRepo(testName, it, isTeamcityBuild) + } + + project.buildscript.repositories.findNonCachedRepositories().forEach { + logNonCachedRepo(testName, it, isTeamcityBuild) + } + + if (isTeamcityBuild) { + testFinished(testName) + } + } + } + + tasks.configureEach { + if (name == "checkBuild") { + dependsOn(checkRepoTask) + } + } +} + fun URI.isCachedOrLocal() = scheme == "file" || - host == "cache-redirector.jetbrains.com" || - host == "teamcity.jetbrains.com" || - host == "buildserver.labs.intellij.net" + host == "cache-redirector.jetbrains.com" || + host == "teamcity.jetbrains.com" || + host == "buildserver.labs.intellij.net" fun RepositoryHandler.findNonCachedRepositories(): List { val mavenNonCachedRepos = filterIsInstance() @@ -151,7 +207,7 @@ fun RepositoryHandler.findNonCachedRepositories(): List { } fun escape(s: String): String { - return s.replace("[\\|'\\[\\]]".toRegex(), "\\|$0").replace("\n".toRegex(), "|n").replace("\r".toRegex(), "|r") + return s.replace("[|'\\[\\]]".toRegex(), "\\|$0").replace("\n".toRegex(), "|n").replace("\r".toRegex(), "|r") } fun testStarted(testName: String) { @@ -166,7 +222,11 @@ fun testFailed(name: String, message: String, details: String) { println("##teamcity[testFailed name='%s' message='%s' details='%s']".format(escape(name), escape(message), escape(details))) } -fun Task.logNonCachedRepo(testName: String, repoUrl: String) { +fun Task.logNonCachedRepo( + testName: String, + repoUrl: String, + isTeamcityBuild: Boolean +) { val msg = "Repository $repoUrl in ${project.displayName} should be cached with cache-redirector" val details = "Using non cached repository may lead to download failures in CI builds." + " Check https://github.com/JetBrains/kotlin/blob/master/gradle/cacheRedirector.gradle.kts for details." @@ -178,7 +238,10 @@ fun Task.logNonCachedRepo(testName: String, repoUrl: String) { logger.warn("WARNING - $msg\n$details") } -fun Task.logInvalidIvyRepo(testName: String) { +fun Task.logInvalidIvyRepo( + testName: String, + isTeamcityBuild: Boolean +) { val msg = "Invalid ivy repo found in ${project.displayName}" val details = "Url must be not null" @@ -189,49 +252,18 @@ fun Task.logInvalidIvyRepo(testName: String) { logger.warn("WARNING - $msg: $details") } -val checkRepositories: TaskProvider = tasks.register("checkRepositories") { - doLast { - val testName = "$name in ${project.displayName}" - if (isTeamcityBuild) { - testStarted(testName) - } +// Main configuration - project.repositories.filterIsInstance().forEach { - @Suppress("SENSELESS_COMPARISON") if (it.url == null) { - logInvalidIvyRepo(testName) - } - } +if (cacheRedirectorEnabled.get()) { + logger.info("Redirecting repositories for settings in ${settingsDir.absolutePath}") - project.repositories.findNonCachedRepositories().forEach { - logNonCachedRepo(testName, it) - } + pluginManagement.repositories.redirect() + buildscript.repositories.redirect() - project.buildscript.repositories.findNonCachedRepositories().forEach { - logNonCachedRepo(testName, it) - } - - if (isTeamcityBuild) { - testFinished(testName) - } + gradle.beforeProject { + buildscript.repositories.redirect() + repositories.redirect() + overrideNativeCompilerDownloadUrl() + addCheckRepositoriesTask() } } - -fun Project.overrideNativeCompilerDownloadUrl() { - logger.info("Redirecting Kotlin/Native compiler download url") - extensions.extraProperties["kotlin.native.distribution.baseDownloadUrl"] = - "https://cache-redirector.jetbrains.com/download.jetbrains.com/kotlin/native/builds" -} - -tasks - .matching { - it.name == "checkBuild" - } - .configureEach { - dependsOn(checkRepositories) - } - -if (cacheRedirectorEnabled()) { - logger.info("Redirecting repositories for $displayName") - repositories.redirect() - overrideNativeCompilerDownloadUrl() -} diff --git a/settings.gradle b/settings.gradle index 2e83532c4e5..514722d6870 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,4 +1,6 @@ pluginManagement { + apply from: 'repo/scripts/cache-redirector.settings.gradle.kts' + repositories { def pluginRepo = System.getProperty("bootstrap.kotlin.repo") if (pluginRepo != null) { @@ -6,15 +8,9 @@ pluginManagement { url pluginRepo } } - - if (cacheRedirectorEnabled == 'true') { - logger.info("Using cache redirector for settings.gradle pluginManagement") - maven { url "https://cache-redirector.jetbrains.com/plugins.gradle.org/m2" } - maven { url "https://cache-redirector.jetbrains.com/maven.pkg.jetbrains.space/kotlin/p/kotlin/kotlin-dependencies" } - } else { - gradlePluginPortal() - maven { url "https://maven.pkg.jetbrains.space/kotlin/p/kotlin/kotlin-dependencies" } - } + maven { url "https://maven.pkg.jetbrains.space/kotlin/p/kotlin/kotlin-dependencies" } + mavenCentral() + gradlePluginPortal() } plugins { @@ -23,14 +19,6 @@ pluginManagement { } buildscript { - repositories { - if (cacheRedirectorEnabled == 'true') { - maven { url "https://cache-redirector.jetbrains.com/maven.pkg.jetbrains.space/kotlin/p/kotlin/kotlin-dependencies" } - } else { - maven { url "https://maven.pkg.jetbrains.space/kotlin/p/kotlin/kotlin-dependencies" } - } - mavenCentral() - } def buildGradlePluginVersion = ext["kotlin.build.gradlePlugin.version"] dependencies { classpath("org.jetbrains.kotlin:kotlin-build-gradle-plugin:${buildGradlePluginVersion}")