From c198d4d90de0f90a6da0171b53b015b36339ecdd Mon Sep 17 00:00:00 2001 From: Yahor Berdnikau Date: Fri, 23 Sep 2022 12:24:16 +0200 Subject: [PATCH] Simplify cache-redirector script apply method Now it could be only be applied inside settings file pluginManagement block. This will update both settings repositories and all projects in the repo with cache redirection settings. --- build.gradle.kts | 10 +- buildSrc/build.gradle.kts | 10 +- buildSrc/settings.gradle | 19 +-- .../kotlin/common-configuration.gradle.kts | 1 - .../kotlin/code/CodeConformanceTest.kt | 19 ++- .../backend.native/tests/build.gradle | 5 +- .../main/kotlin/org/jetbrains/kotlin/Utils.kt | 9 -- kotlin-native/build.gradle | 23 +-- .../gradle/kotlinGradlePlugin.gradle | 5 +- .../kotlin/gradle/HierarchicalMppIT.kt | 2 +- .../kotlin/gradle/Kotlin2JsGradlePluginIT.kt | 11 +- .../kotlin/gradle/NewMultiplatformIT.kt | 16 +- .../gradle/VariantAwareDependenciesMppIT.kt | 10 -- .../kotlin/gradle/native/GeneralNativeIT.kt | 4 + .../gradle/native/NativePlatformLibsIT.kt | 17 +- .../kotlin/gradle/testbase/testDsl.kt | 62 +++---- repo/scripts/Readme.md | 5 + .../cache-redirector.settings.gradle.kts | 152 +++++++++++------- settings.gradle | 22 +-- 19 files changed, 178 insertions(+), 224 deletions(-) create mode 100644 repo/scripts/Readme.md rename gradle/cacheRedirector.gradle.kts => repo/scripts/cache-redirector.settings.gradle.kts (83%) 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}")