diff --git a/ci/build-helpers/build.gradle.kts b/ci/build-helpers/build.gradle.kts
index 522a05f69b6..79d0bb8772b 100644
--- a/ci/build-helpers/build.gradle.kts
+++ b/ci/build-helpers/build.gradle.kts
@@ -11,7 +11,9 @@ subprojects {
version = project.property("deploy.version") as String
repositories {
- mavenCentral()
+ mavenCentral {
+ url = uri("https://cache-redirector.jetbrains.com/maven-central")
+ }
}
plugins.withType(JavaBasePlugin::class.java) {
diff --git a/ci/build-helpers/cli/buildSrc/build.gradle.kts b/ci/build-helpers/cli/buildSrc/build.gradle.kts
index 2a5994417e4..b013218afe1 100644
--- a/ci/build-helpers/cli/buildSrc/build.gradle.kts
+++ b/ci/build-helpers/cli/buildSrc/build.gradle.kts
@@ -3,7 +3,9 @@ plugins {
}
repositories {
- mavenCentral()
+ mavenCentral {
+ url = uri("https://cache-redirector.jetbrains.com/maven-central")
+ }
maven("https://packages.jetbrains.team/maven/p/cmp/dev")
}
diff --git a/ci/build-helpers/settings.gradle.kts b/ci/build-helpers/settings.gradle.kts
index cac3a091d6b..5ee57beee44 100644
--- a/ci/build-helpers/settings.gradle.kts
+++ b/ci/build-helpers/settings.gradle.kts
@@ -1 +1,10 @@
+pluginManagement {
+ repositories {
+ mavenCentral {
+ url = uri("https://cache-redirector.jetbrains.com/maven-central")
+ }
+ gradlePluginPortal()
+ }
+}
+
include(":publishing")
\ No newline at end of file
diff --git a/ci/cache-redirector.init.gradle b/ci/cache-redirector.init.gradle
new file mode 100644
index 00000000000..552ea102487
--- /dev/null
+++ b/ci/cache-redirector.init.gradle
@@ -0,0 +1,41 @@
+// Resolves Maven Central artifacts through JetBrains cache-redirector, to avoid hitting Maven Central rate limits (HTTP 429) on CI.
+// Used by Gradle plugin tests (TestProject.kt) and examples/validateExamples*.sh, the projects themselves don't depend on it.
+// The redirector has to go before Gradle Plugin Portal, as the portal redirects such artifacts to Maven Central.
+
+def redirectorName = "MavenCentralCacheRedirector"
+def redirectorUrl = "https://cache-redirector.jetbrains.com/maven-central"
+
+beforeSettings { settings ->
+ // Repositories declared in settings scripts are added after this one
+ settings.pluginManagement.repositories.maven {
+ name = redirectorName
+ url = redirectorUrl
+ }
+ settings.dependencyResolutionManagement.repositories.maven {
+ name = redirectorName
+ url = redirectorUrl
+ }
+}
+
+settingsEvaluated { settings ->
+ // Direct Maven Central is replaced by the redirector above:
+ // on 429 it fails the resolution instead of falling through to the next repositories (e.g. mavenLocal with snapshots)
+ [settings.pluginManagement.repositories, settings.dependencyResolutionManagement.repositories].each { repositories ->
+ repositories.removeAll { it instanceof MavenArtifactRepository && it.url.host == "repo.maven.apache.org" }
+
+ // Gradle Plugin Portal redirects artifacts it doesn't host (e.g. AGP from Google Maven) to Maven Central,
+ // so it goes last for other repositories to be checked first
+ def pluginPortals = repositories.findAll { it instanceof MavenArtifactRepository && it.url.host == "plugins.gradle.org" }
+ repositories.removeAll(pluginPortals)
+ pluginPortals.each { repositories.addLast(it) }
+ }
+}
+
+allprojects {
+ // Some projects declare repositories in build scripts, there direct Maven Central is redirected in place
+ repositories.configureEach { repository ->
+ if (repository instanceof MavenArtifactRepository && repository.url.host == "repo.maven.apache.org") {
+ repository.url = redirectorUrl
+ }
+ }
+}
diff --git a/ci/compose-uber-jar/build.gradle.kts b/ci/compose-uber-jar/build.gradle.kts
index a4c65bc059d..abbcebdd3e3 100644
--- a/ci/compose-uber-jar/build.gradle.kts
+++ b/ci/compose-uber-jar/build.gradle.kts
@@ -9,7 +9,9 @@ plugins {
val properties = ComposeUberJarProperties()
repositories {
- mavenCentral()
+ mavenCentral {
+ url = uri("https://cache-redirector.jetbrains.com/maven-central")
+ }
maven(properties.composeRepoUrl)
google()
}
diff --git a/ci/compose-uber-jar/settings.gradle.kts b/ci/compose-uber-jar/settings.gradle.kts
index b506af25077..08bddd53f93 100644
--- a/ci/compose-uber-jar/settings.gradle.kts
+++ b/ci/compose-uber-jar/settings.gradle.kts
@@ -1,2 +1,11 @@
+pluginManagement {
+ repositories {
+ mavenCentral {
+ url = uri("https://cache-redirector.jetbrains.com/maven-central")
+ }
+ gradlePluginPortal()
+ }
+}
+
rootProject.name = "compose-uber-jar"
diff --git a/ci/templates/desktop-template/build.gradle.kts b/ci/templates/desktop-template/build.gradle.kts
index 55d76b7ee0c..7e001a1db14 100644
--- a/ci/templates/desktop-template/build.gradle.kts
+++ b/ci/templates/desktop-template/build.gradle.kts
@@ -7,7 +7,9 @@ plugins {
}
repositories {
- mavenCentral()
+ mavenCentral {
+ url = uri("https://cache-redirector.jetbrains.com/maven-central")
+ }
maven("https://packages.jetbrains.team/maven/p/cmp/dev")
google()
}
diff --git a/ci/templates/desktop-template/settings.gradle.kts b/ci/templates/desktop-template/settings.gradle.kts
index 1ed202b6d25..72354a118d1 100644
--- a/ci/templates/desktop-template/settings.gradle.kts
+++ b/ci/templates/desktop-template/settings.gradle.kts
@@ -1,7 +1,10 @@
pluginManagement {
repositories {
- gradlePluginPortal()
+ mavenCentral {
+ url = uri("https://cache-redirector.jetbrains.com/maven-central")
+ }
maven("https://packages.jetbrains.team/maven/p/cmp/dev")
+ gradlePluginPortal()
}
plugins {
diff --git a/ci/templates/html-library-template/build.gradle.kts b/ci/templates/html-library-template/build.gradle.kts
index 0bc7b84dbab..45ec9175582 100644
--- a/ci/templates/html-library-template/build.gradle.kts
+++ b/ci/templates/html-library-template/build.gradle.kts
@@ -5,7 +5,9 @@ plugins {
}
repositories {
- mavenCentral()
+ mavenCentral {
+ url = uri("https://cache-redirector.jetbrains.com/maven-central")
+ }
maven("https://packages.jetbrains.team/maven/p/cmp/dev")
google()
}
diff --git a/ci/templates/html-library-template/settings.gradle.kts b/ci/templates/html-library-template/settings.gradle.kts
index 57d27f23b48..311d2bebea8 100644
--- a/ci/templates/html-library-template/settings.gradle.kts
+++ b/ci/templates/html-library-template/settings.gradle.kts
@@ -1,7 +1,10 @@
pluginManagement {
repositories {
- gradlePluginPortal()
+ mavenCentral {
+ url = uri("https://cache-redirector.jetbrains.com/maven-central")
+ }
maven("https://packages.jetbrains.team/maven/p/cmp/dev")
+ gradlePluginPortal()
}
plugins {
diff --git a/ci/templates/maven-test-project/pom.xml b/ci/templates/maven-test-project/pom.xml
index d0013440d2f..cfb2273efdd 100644
--- a/ci/templates/maven-test-project/pom.xml
+++ b/ci/templates/maven-test-project/pom.xml
@@ -17,10 +17,12 @@
1.9.0
+
- mavenCentral
- https://repo1.maven.org/maven2/
+ MavenCentralCacheRedirector
+ https://cache-redirector.jetbrains.com/maven-central
gMaven
@@ -32,6 +34,13 @@
+
+
+ MavenCentralCacheRedirector
+ https://cache-redirector.jetbrains.com/maven-central
+
+
+
src/main/kotlin
src/test/kotlin
diff --git a/ci/templates/multiplatform-template/build.gradle.kts b/ci/templates/multiplatform-template/build.gradle.kts
index 7aba5686327..db374f4c621 100644
--- a/ci/templates/multiplatform-template/build.gradle.kts
+++ b/ci/templates/multiplatform-template/build.gradle.kts
@@ -13,7 +13,9 @@ plugins {
subprojects {
repositories {
google()
- mavenCentral()
+ mavenCentral {
+ url = uri("https://cache-redirector.jetbrains.com/maven-central")
+ }
maven("https://packages.jetbrains.team/maven/p/cmp/dev")
}
}
diff --git a/ci/templates/multiplatform-template/settings.gradle.kts b/ci/templates/multiplatform-template/settings.gradle.kts
index d5dfad6fc36..57ad2cc46a7 100644
--- a/ci/templates/multiplatform-template/settings.gradle.kts
+++ b/ci/templates/multiplatform-template/settings.gradle.kts
@@ -1,8 +1,11 @@
pluginManagement {
repositories {
- gradlePluginPortal()
+ mavenCentral {
+ url = uri("https://cache-redirector.jetbrains.com/maven-central")
+ }
maven("https://packages.jetbrains.team/maven/p/cmp/dev")
google()
+ gradlePluginPortal()
}
plugins {
diff --git a/components/buildSrc/build.gradle.kts b/components/buildSrc/build.gradle.kts
index a633b75a448..d735a1d85ca 100644
--- a/components/buildSrc/build.gradle.kts
+++ b/components/buildSrc/build.gradle.kts
@@ -5,6 +5,9 @@ plugins {
}
repositories {
+ mavenCentral {
+ url = uri("https://cache-redirector.jetbrains.com/maven-central")
+ }
google()
gradlePluginPortal()
}
diff --git a/components/buildSrc/settings.gradle.kts b/components/buildSrc/settings.gradle.kts
index c665ff96674..f39c5c3d0b6 100644
--- a/components/buildSrc/settings.gradle.kts
+++ b/components/buildSrc/settings.gradle.kts
@@ -1,5 +1,8 @@
pluginManagement {
repositories {
+ mavenCentral {
+ url = uri("https://cache-redirector.jetbrains.com/maven-central")
+ }
gradlePluginPortal()
}
}
diff --git a/components/settings.gradle.kts b/components/settings.gradle.kts
index 736457e15ec..3874d18dd11 100644
--- a/components/settings.gradle.kts
+++ b/components/settings.gradle.kts
@@ -1,9 +1,11 @@
pluginManagement {
repositories {
google()
- gradlePluginPortal()
- mavenCentral()
+ mavenCentral {
+ url = uri("https://cache-redirector.jetbrains.com/maven-central")
+ }
maven("https://packages.jetbrains.team/maven/p/cmp/dev")
+ gradlePluginPortal()
if (extra["compose.useMavenLocal"] == "true") {
mavenLocal()
}
@@ -31,7 +33,9 @@ dependencyResolutionManagement {
mavenLocal() // mavenLocal should be the first to get the correct version of skiko during a local build.
}
google()
- mavenCentral()
+ mavenCentral {
+ url = uri("https://cache-redirector.jetbrains.com/maven-central")
+ }
maven("https://packages.jetbrains.team/maven/p/cmp/dev")
}
diff --git a/examples/buildWithKotlinToolchain.sh b/examples/buildWithKotlinToolchain.sh
index d1b34eae5b3..dac619aee01 100755
--- a/examples/buildWithKotlinToolchain.sh
+++ b/examples/buildWithKotlinToolchain.sh
@@ -25,6 +25,10 @@ if [ -n "$compose_version" ]; then
tar -C "$example" --exclude=./build -cf - . | tar -C "$temp_dir" -xf -
echo "Building a copy of $example in $temp_dir with Compose $compose_version${kotlin_version:+ and Kotlin $kotlin_version}"
+ # Replaces the default Maven Central (for both dependencies and Kotlin compiler artifacts) with cache-redirector,
+ # to avoid its rate limits on CI
+ export KOTLIN_DEFAULT_MAVEN_CENTRAL_URL="https://cache-redirector.jetbrains.com/maven-central"
+
template="validation-versions.module-template.yaml"
{
echo "repositories:"
diff --git a/examples/validateExamples.sh b/examples/validateExamples.sh
index 09fe752335c..f3ef5c0c3a3 100755
--- a/examples/validateExamples.sh
+++ b/examples/validateExamples.sh
@@ -22,14 +22,17 @@ fi
compose_version="${1:-}"
kotlin_version="${2:-}"
+# Resolves Maven Central through cache-redirector, to avoid its rate limits on CI
+init_script="$(cd "$(dirname "$0")/.." && pwd)/ci/cache-redirector.init.gradle"
+
runGradle() {
local example="$1"
local task="$2"
pushd "$example"
if [ "${#version_args[@]}" -gt 0 ]; then
- ./gradlew "$task" "${version_args[@]}"
+ ./gradlew "$task" --init-script "$init_script" "${version_args[@]}"
else
- ./gradlew "$task"
+ ./gradlew "$task" --init-script "$init_script"
fi
popd
}
diff --git a/examples/validateExamplesWithJs.sh b/examples/validateExamplesWithJs.sh
index af9e12910f9..84267509bb5 100755
--- a/examples/validateExamplesWithJs.sh
+++ b/examples/validateExamplesWithJs.sh
@@ -22,14 +22,17 @@ fi
compose_version="${1:-}"
kotlin_version="${2:-}"
+# Resolves Maven Central through cache-redirector, to avoid its rate limits on CI
+init_script="$(cd "$(dirname "$0")/.." && pwd)/ci/cache-redirector.init.gradle"
+
runGradle() {
local example="$1"
local task="$2"
pushd "$example"
if [ "${#version_args[@]}" -gt 0 ]; then
- ./gradlew "$task" "${version_args[@]}"
+ ./gradlew "$task" --init-script "$init_script" "${version_args[@]}"
else
- ./gradlew "$task"
+ ./gradlew "$task" --init-script "$init_script"
fi
popd
}
diff --git a/gradle-plugins/build.gradle.kts b/gradle-plugins/build.gradle.kts
index a91abb674a4..a77ef072237 100644
--- a/gradle-plugins/build.gradle.kts
+++ b/gradle-plugins/build.gradle.kts
@@ -14,7 +14,9 @@ subprojects {
version = BuildProperties.deployVersion(project)
repositories {
- mavenCentral()
+ mavenCentral {
+ url = uri("https://cache-redirector.jetbrains.com/maven-central")
+ }
google()
mavenLocal()
maven("https://packages.jetbrains.team/maven/p/kt/dev")
diff --git a/gradle-plugins/buildSrc/build.gradle.kts b/gradle-plugins/buildSrc/build.gradle.kts
index 6a9f0c17b98..73787f14448 100644
--- a/gradle-plugins/buildSrc/build.gradle.kts
+++ b/gradle-plugins/buildSrc/build.gradle.kts
@@ -3,6 +3,9 @@ plugins {
}
repositories {
+ mavenCentral {
+ url = uri("https://cache-redirector.jetbrains.com/maven-central")
+ }
gradlePluginPortal()
}
diff --git a/gradle-plugins/buildSrc/settings.gradle.kts b/gradle-plugins/buildSrc/settings.gradle.kts
index c665ff96674..f39c5c3d0b6 100644
--- a/gradle-plugins/buildSrc/settings.gradle.kts
+++ b/gradle-plugins/buildSrc/settings.gradle.kts
@@ -1,5 +1,8 @@
pluginManagement {
repositories {
+ mavenCentral {
+ url = uri("https://cache-redirector.jetbrains.com/maven-central")
+ }
gradlePluginPortal()
}
}
diff --git a/gradle-plugins/compose/src/test/kotlin/org/jetbrains/compose/test/utils/TestProject.kt b/gradle-plugins/compose/src/test/kotlin/org/jetbrains/compose/test/utils/TestProject.kt
index 00842043312..a8b7f6dc5b2 100644
--- a/gradle-plugins/compose/src/test/kotlin/org/jetbrains/compose/test/utils/TestProject.kt
+++ b/gradle-plugins/compose/src/test/kotlin/org/jetbrains/compose/test/utils/TestProject.kt
@@ -63,6 +63,7 @@ class TestProject(
"--stacktrace",
"-Pkotlin.js.yarn=false",
"-P${ComposeProperties.VERBOSE}=${testEnvironment.composeVerbose}",
+ "--init-script", File("../../ci/cache-redirector.init.gradle").absolutePath,
if (testEnvironment.parsedGradleVersion < GradleVersion.version("8.0")) {
null
} else {
diff --git a/gradle-plugins/settings.gradle.kts b/gradle-plugins/settings.gradle.kts
index 162038bf7d9..e1724f941af 100644
--- a/gradle-plugins/settings.gradle.kts
+++ b/gradle-plugins/settings.gradle.kts
@@ -1,7 +1,9 @@
pluginManagement {
repositories {
+ mavenCentral {
+ url = uri("https://cache-redirector.jetbrains.com/maven-central")
+ }
gradlePluginPortal()
- mavenCentral()
}
}
diff --git a/html/build.gradle.kts b/html/build.gradle.kts
index 10a7fc2904f..917219c90e6 100644
--- a/html/build.gradle.kts
+++ b/html/build.gradle.kts
@@ -223,11 +223,13 @@ subprojects {
}
repositories {
- gradlePluginPortal()
- mavenCentral()
+ mavenCentral {
+ url = uri("https://cache-redirector.jetbrains.com/maven-central")
+ }
maven {
url = uri("https://packages.jetbrains.team/maven/p/cmp/dev")
}
+ gradlePluginPortal()
google()
mavenLocal()
}
diff --git a/html/buildSrc/build.gradle.kts b/html/buildSrc/build.gradle.kts
index 16c58774978..08e94711fe3 100644
--- a/html/buildSrc/build.gradle.kts
+++ b/html/buildSrc/build.gradle.kts
@@ -2,14 +2,16 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
repositories {
- gradlePluginPortal()
- mavenCentral()
+ mavenCentral {
+ url = uri("https://cache-redirector.jetbrains.com/maven-central")
+ }
maven {
url = uri("https://packages.jetbrains.team/maven/p/cmp/dev")
}
maven {
url = uri("https://packages.jetbrains.team/maven/p/ui/dev")
}
+ gradlePluginPortal()
}
plugins {
diff --git a/html/buildSrc/settings.gradle.kts b/html/buildSrc/settings.gradle.kts
index dcbb6119c80..c8cfcd1da3e 100644
--- a/html/buildSrc/settings.gradle.kts
+++ b/html/buildSrc/settings.gradle.kts
@@ -2,14 +2,16 @@ pluginManagement {
val kotlinVersion: String = settings.extra["kotlin.version"] as String
repositories {
- gradlePluginPortal()
- mavenCentral()
+ mavenCentral {
+ url = uri("https://cache-redirector.jetbrains.com/maven-central")
+ }
maven {
url = uri("https://packages.jetbrains.team/maven/p/cmp/dev")
}
maven {
url = uri("https://packages.jetbrains.team/maven/p/ui/dev")
}
+ gradlePluginPortal()
}
resolutionStrategy {
diff --git a/html/compose-compiler-integration/main-template/build.gradle.kts b/html/compose-compiler-integration/main-template/build.gradle.kts
index 757dc46b8e8..2c1e6921923 100644
--- a/html/compose-compiler-integration/main-template/build.gradle.kts
+++ b/html/compose-compiler-integration/main-template/build.gradle.kts
@@ -6,7 +6,9 @@ plugins {
repositories {
google()
- mavenCentral()
+ mavenCentral {
+ url = uri("https://cache-redirector.jetbrains.com/maven-central")
+ }
maven("https://packages.jetbrains.team/maven/p/cmp/dev")
mavenLocal()
}
diff --git a/html/compose-compiler-integration/main-template/lib/build.gradle.kts b/html/compose-compiler-integration/main-template/lib/build.gradle.kts
index 57c5dfa2793..66c21ec2af2 100644
--- a/html/compose-compiler-integration/main-template/lib/build.gradle.kts
+++ b/html/compose-compiler-integration/main-template/lib/build.gradle.kts
@@ -6,7 +6,9 @@ plugins {
repositories {
google()
- mavenCentral()
+ mavenCentral {
+ url = uri("https://cache-redirector.jetbrains.com/maven-central")
+ }
maven("https://packages.jetbrains.team/maven/p/cmp/dev")
mavenLocal()
}
diff --git a/html/compose-compiler-integration/main-template/settings.gradle.kts b/html/compose-compiler-integration/main-template/settings.gradle.kts
index 6f61dd5557a..0b8a88ed510 100644
--- a/html/compose-compiler-integration/main-template/settings.gradle.kts
+++ b/html/compose-compiler-integration/main-template/settings.gradle.kts
@@ -1,10 +1,13 @@
pluginManagement {
repositories {
- gradlePluginPortal()
+ mavenCentral {
+ url = uri("https://cache-redirector.jetbrains.com/maven-central")
+ }
maven {
url = uri("https://packages.jetbrains.team/maven/p/cmp/dev")
}
mavenLocal()
+ gradlePluginPortal()
}
resolutionStrategy {
diff --git a/html/settings.gradle.kts b/html/settings.gradle.kts
index 0594e00e6fd..67170fc3829 100644
--- a/html/settings.gradle.kts
+++ b/html/settings.gradle.kts
@@ -24,8 +24,9 @@ pluginManagement {
val kotlinVersion = buildSrcProperties["kotlin.version"] as String
repositories {
- gradlePluginPortal()
- mavenCentral()
+ mavenCentral {
+ url = uri("https://cache-redirector.jetbrains.com/maven-central")
+ }
repos?.forEach { urlPath ->
maven {
url = uri(urlPath)
@@ -37,6 +38,7 @@ pluginManagement {
maven {
url = uri("https://packages.jetbrains.team/maven/p/ui/dev")
}
+ gradlePluginPortal()
google()
mavenLocal()
}
@@ -56,7 +58,9 @@ pluginManagement {
dependencyResolutionManagement {
repositories {
google()
- mavenCentral()
+ mavenCentral {
+ url = uri("https://cache-redirector.jetbrains.com/maven-central")
+ }
maven {
url = uri("https://packages.jetbrains.team/maven/p/cmp/dev")
}