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") }