From d6d63dfa5d6c0bde504b77f55e3063ed50d9a6ee Mon Sep 17 00:00:00 2001 From: Vladimir Mazunin Date: Mon, 12 Oct 2026 17:52:37 +0400 Subject: [PATCH 1/4] Re-enable Kotlin Toolchain in CodeViewer and update build scripts to use cache redirector for Maven Central (CMP-10937) Redirect Maven Central usages in build scripts to use the JetBrains cache redirector and clarify Kotlin Toolchain-related comments in validation scripts (CMP-10937) Temporarily disable Kotlin Toolchain in CodeViewer due to Maven Central rate-limiting in CI (CMP-10937) Use JetBrains Maven Central cache redirector in example validation scripts Use JetBrains Maven Central cache redirector across all templates and Gradle scripts Ensure Maven Central is excluded in settings to enforce redirector usage Use JetBrains Maven Central cache redirector for test projects in CI Use JetBrains Maven Central cache redirector in all Gradle scripts Use JetBrains Maven Central cache redirector in Gradle scripts --- ci/compose-uber-jar/build.gradle.kts | 4 +- ci/compose-uber-jar/settings.gradle.kts | 9 ++++ .../desktop-template/build.gradle.kts | 4 +- .../desktop-template/settings.gradle.kts | 5 ++- .../html-library-template/build.gradle.kts | 4 +- .../html-library-template/settings.gradle.kts | 5 ++- ci/templates/maven-test-project/pom.xml | 13 +++++- .../multiplatform-template/build.gradle.kts | 4 +- .../settings.gradle.kts | 5 ++- components/buildSrc/build.gradle.kts | 3 ++ components/buildSrc/settings.gradle.kts | 3 ++ components/settings.gradle.kts | 10 +++-- examples/buildWithKotlinToolchain.sh | 4 ++ examples/cache-redirector.init.gradle | 41 +++++++++++++++++++ examples/validateExamples.sh | 7 +++- examples/validateExamplesWithJs.sh | 7 +++- gradle-plugins/build.gradle.kts | 4 +- gradle-plugins/buildSrc/build.gradle.kts | 3 ++ gradle-plugins/buildSrc/settings.gradle.kts | 3 ++ .../compose/test/utils/TestProject.kt | 1 + .../cache-redirector.init.gradle | 32 +++++++++++++++ gradle-plugins/settings.gradle.kts | 4 +- html/build.gradle.kts | 6 ++- html/buildSrc/build.gradle.kts | 6 ++- html/buildSrc/settings.gradle.kts | 6 ++- .../main-template/build.gradle.kts | 4 +- .../main-template/lib/build.gradle.kts | 4 +- .../main-template/settings.gradle.kts | 5 ++- html/settings.gradle.kts | 10 +++-- 29 files changed, 186 insertions(+), 30 deletions(-) create mode 100644 examples/cache-redirector.init.gradle create mode 100644 gradle-plugins/compose/src/test/test-projects/cache-redirector.init.gradle 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..82f94169060 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/ + central + https://cache-redirector.jetbrains.com/maven-central gMaven @@ -32,6 +34,13 @@ + + + central + 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/cache-redirector.init.gradle b/examples/cache-redirector.init.gradle new file mode 100644 index 00000000000..7b27edc2675 --- /dev/null +++ b/examples/cache-redirector.init.gradle @@ -0,0 +1,41 @@ +// Resolves Maven Central artifacts of examples through JetBrains cache-redirector, +// to avoid hitting Maven Central rate limits (HTTP 429) on CI. Used only by validateExamples*.sh, not by the examples themselves. +// 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/examples/validateExamples.sh b/examples/validateExamples.sh index 09fe752335c..98bd6c421cc 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)/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..94d17292dc9 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)/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..57d36c25fbe 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", testProjectsRootDir.resolve("cache-redirector.init.gradle").absolutePath, if (testEnvironment.parsedGradleVersion < GradleVersion.version("8.0")) { null } else { diff --git a/gradle-plugins/compose/src/test/test-projects/cache-redirector.init.gradle b/gradle-plugins/compose/src/test/test-projects/cache-redirector.init.gradle new file mode 100644 index 00000000000..47267ad5522 --- /dev/null +++ b/gradle-plugins/compose/src/test/test-projects/cache-redirector.init.gradle @@ -0,0 +1,32 @@ +// Resolves Maven Central artifacts of test projects through JetBrains cache-redirector, +// to avoid hitting Maven Central rate limits (HTTP 429) on CI. +// 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) } + } +} 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") } From 7b4842e4128e3d1a882e3279d37d67a802f70c09 Mon Sep 17 00:00:00 2001 From: Vladimir Mazunin Date: Wed, 14 Oct 2026 16:24:54 +0400 Subject: [PATCH 2/4] Review fixes: renamed central to MavenCentralCacheRedirector --- ci/templates/maven-test-project/pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ci/templates/maven-test-project/pom.xml b/ci/templates/maven-test-project/pom.xml index 82f94169060..cfb2273efdd 100644 --- a/ci/templates/maven-test-project/pom.xml +++ b/ci/templates/maven-test-project/pom.xml @@ -21,7 +21,7 @@ The "central" id replaces the default Maven Central repository. --> - central + MavenCentralCacheRedirector https://cache-redirector.jetbrains.com/maven-central @@ -36,7 +36,7 @@ - central + MavenCentralCacheRedirector https://cache-redirector.jetbrains.com/maven-central From 356a259a7363e8a86e121cad8c0245119314f0e5 Mon Sep 17 00:00:00 2001 From: Vladimir Mazunin Date: Wed, 14 Oct 2026 16:36:34 +0400 Subject: [PATCH 3/4] Review fixes: Moved cache-redirector init script to `ci` directory, removed copy of that script and updated references --- {examples => ci}/cache-redirector.init.gradle | 4 +-- examples/validateExamples.sh | 2 +- examples/validateExamplesWithJs.sh | 2 +- .../compose/test/utils/TestProject.kt | 2 +- .../cache-redirector.init.gradle | 32 ------------------- 5 files changed, 5 insertions(+), 37 deletions(-) rename {examples => ci}/cache-redirector.init.gradle (87%) delete mode 100644 gradle-plugins/compose/src/test/test-projects/cache-redirector.init.gradle diff --git a/examples/cache-redirector.init.gradle b/ci/cache-redirector.init.gradle similarity index 87% rename from examples/cache-redirector.init.gradle rename to ci/cache-redirector.init.gradle index 7b27edc2675..552ea102487 100644 --- a/examples/cache-redirector.init.gradle +++ b/ci/cache-redirector.init.gradle @@ -1,5 +1,5 @@ -// Resolves Maven Central artifacts of examples through JetBrains cache-redirector, -// to avoid hitting Maven Central rate limits (HTTP 429) on CI. Used only by validateExamples*.sh, not by the examples themselves. +// 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" diff --git a/examples/validateExamples.sh b/examples/validateExamples.sh index 98bd6c421cc..f3ef5c0c3a3 100755 --- a/examples/validateExamples.sh +++ b/examples/validateExamples.sh @@ -23,7 +23,7 @@ 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)/cache-redirector.init.gradle" +init_script="$(cd "$(dirname "$0")/.." && pwd)/ci/cache-redirector.init.gradle" runGradle() { local example="$1" diff --git a/examples/validateExamplesWithJs.sh b/examples/validateExamplesWithJs.sh index 94d17292dc9..84267509bb5 100755 --- a/examples/validateExamplesWithJs.sh +++ b/examples/validateExamplesWithJs.sh @@ -23,7 +23,7 @@ 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)/cache-redirector.init.gradle" +init_script="$(cd "$(dirname "$0")/.." && pwd)/ci/cache-redirector.init.gradle" runGradle() { local example="$1" 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 57d36c25fbe..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,7 +63,7 @@ class TestProject( "--stacktrace", "-Pkotlin.js.yarn=false", "-P${ComposeProperties.VERBOSE}=${testEnvironment.composeVerbose}", - "--init-script", testProjectsRootDir.resolve("cache-redirector.init.gradle").absolutePath, + "--init-script", File("../../ci/cache-redirector.init.gradle").absolutePath, if (testEnvironment.parsedGradleVersion < GradleVersion.version("8.0")) { null } else { diff --git a/gradle-plugins/compose/src/test/test-projects/cache-redirector.init.gradle b/gradle-plugins/compose/src/test/test-projects/cache-redirector.init.gradle deleted file mode 100644 index 47267ad5522..00000000000 --- a/gradle-plugins/compose/src/test/test-projects/cache-redirector.init.gradle +++ /dev/null @@ -1,32 +0,0 @@ -// Resolves Maven Central artifacts of test projects through JetBrains cache-redirector, -// to avoid hitting Maven Central rate limits (HTTP 429) on CI. -// 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) } - } -} From f86fb6c49d2a17eae980403ac79dfc781e18f2e8 Mon Sep 17 00:00:00 2001 From: Vladimir Mazunin Date: Wed, 14 Oct 2026 18:12:40 +0400 Subject: [PATCH 4/4] Route Maven Central through JetBrains cache-redirector in `ci/build-helpers` to mitigate rate limits during CI builds (for stage 5) --- ci/build-helpers/build.gradle.kts | 4 +++- ci/build-helpers/cli/buildSrc/build.gradle.kts | 4 +++- ci/build-helpers/settings.gradle.kts | 9 +++++++++ 3 files changed, 15 insertions(+), 2 deletions(-) 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