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.
This commit is contained in:
+2
-8
@@ -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
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -28,7 +28,6 @@ dependencies {
|
||||
}
|
||||
}
|
||||
|
||||
apply(from = "$rootDir/gradle/cacheRedirector.gradle.kts")
|
||||
project.configureJvmDefaultToolchain()
|
||||
project.addEmbeddedConfigurations()
|
||||
project.configureJavaCompile()
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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")
|
||||
|
||||
+1
-1
@@ -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(
|
||||
|
||||
+6
-5
@@ -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()
|
||||
)
|
||||
|
||||
|
||||
+2
-14
@@ -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 {
|
||||
|
||||
-10
@@ -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\")")
|
||||
|
||||
|
||||
+4
@@ -1135,6 +1135,10 @@ class GeneralNativeIT : BaseGradleIT() {
|
||||
""".trimIndent()
|
||||
)
|
||||
|
||||
gradleProperties().modify {
|
||||
it.replace("cacheRedirectorEnabled=true", "cacheRedirectorEnabled=false")
|
||||
}
|
||||
|
||||
build(
|
||||
"build",
|
||||
options = defaultBuildOptions().copy(
|
||||
|
||||
+10
-7
@@ -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(
|
||||
|
||||
+25
-37
@@ -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()
|
||||
|
||||
@@ -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
|
||||
+92
-60
@@ -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<Boolean>
|
||||
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<String, String> = 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<IvyArtifactRepository>().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<String> {
|
||||
val mavenNonCachedRepos = filterIsInstance<MavenArtifactRepository>()
|
||||
@@ -151,7 +207,7 @@ fun RepositoryHandler.findNonCachedRepositories(): List<String> {
|
||||
}
|
||||
|
||||
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<Task> = tasks.register("checkRepositories") {
|
||||
doLast {
|
||||
val testName = "$name in ${project.displayName}"
|
||||
if (isTeamcityBuild) {
|
||||
testStarted(testName)
|
||||
}
|
||||
// Main configuration
|
||||
|
||||
project.repositories.filterIsInstance<IvyArtifactRepository>().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()
|
||||
}
|
||||
+5
-17
@@ -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}")
|
||||
|
||||
Reference in New Issue
Block a user