From 17afe3566fbd09999287946afeacf0e56dd6e3dc Mon Sep 17 00:00:00 2001 From: Nikita Ogorodnikov Date: Thu, 29 Oct 2026 12:31:18 +0100 Subject: [PATCH] RUM-19405: Improve Gradle setup --- build-logic/build.gradle.kts | 21 ----- build-logic/settings.gradle.kts | 32 +++++-- .../gradle/config/DepotRepositories.kt | 44 ---------- .../gradle/config/GradlePropertiesKeys.kt | 16 ---- .../plugin/aarmetadata/AarMetadataPlugin.kt | 3 +- .../plugin/apisurface/ApiSurfacePlugin.kt | 3 +- .../transdeps/TransitiveDependenciesPlugin.kt | 24 ++--- build.gradle.kts | 28 +----- .../build.gradle.kts | 1 - gradle/libs.versions.toml | 8 +- gradle/settings-plugin/build.gradle.kts | 18 ++++ gradle/settings-plugin/settings.gradle.kts | 9 ++ .../repositories/DatadogRepositories.java | 88 +++++++++++++++++++ .../repositories/RepositoriesPlugin.java | 22 +++++ instrumented/integration/build.gradle.kts | 7 -- .../dd-sdk-android-cronet/build.gradle.kts | 2 +- sample/tv/build.gradle.kts | 3 - settings.gradle.kts | 42 +++++++-- 18 files changed, 214 insertions(+), 157 deletions(-) delete mode 100644 build-logic/src/main/kotlin/com/datadog/gradle/config/DepotRepositories.kt create mode 100644 gradle/settings-plugin/build.gradle.kts create mode 100644 gradle/settings-plugin/settings.gradle.kts create mode 100644 gradle/settings-plugin/src/main/java/com/datadog/gradle/repositories/DatadogRepositories.java create mode 100644 gradle/settings-plugin/src/main/java/com/datadog/gradle/repositories/RepositoriesPlugin.java diff --git a/build-logic/build.gradle.kts b/build-logic/build.gradle.kts index 74008a02ab..eecedee65e 100644 --- a/build-logic/build.gradle.kts +++ b/build-logic/build.gradle.kts @@ -9,27 +9,6 @@ plugins { alias(libs.plugins.ktlintGradlePlugin) } -buildscript { - repositories { - // Magic Mirror Depot proxy (only set in CI via `.gitlab-ci.yml`). - listOf("gradlePluginProxy", "mavenRepositoryProxy") - .mapNotNull { providers.gradleProperty(it).orNull?.takeIf { url -> url.isNotBlank() } } - .forEach { url -> maven { setUrl(url) } } - mavenCentral() - } -} - -repositories { - // Magic Mirror Depot proxy (only set in CI via `.gitlab-ci.yml`). - listOf("gradlePluginProxy", "mavenRepositoryProxy") - .mapNotNull { providers.gradleProperty(it).orNull?.takeIf { url -> url.isNotBlank() } } - .forEach { url -> maven { setUrl(url) } } - mavenCentral() - google() - gradlePluginPortal() - maven { setUrl("https://jitpack.io") } -} - dependencies { // Plugins whose types are only referenced when configuring a consuming project. They are diff --git a/build-logic/settings.gradle.kts b/build-logic/settings.gradle.kts index 4d8a80b6f2..68bbda667f 100644 --- a/build-logic/settings.gradle.kts +++ b/build-logic/settings.gradle.kts @@ -4,16 +4,22 @@ * Copyright 2016-Present Datadog, Inc. */ +import com.datadog.gradle.repositories.DatadogRepositories + pluginManagement { - repositories { - // Magic Mirror Depot proxy (only set in CI via `.gitlab-ci.yml`). - listOf("gradlePluginProxy", "mavenRepositoryProxy") - .mapNotNull { providers.gradleProperty(it).orNull?.takeIf { url -> url.isNotBlank() } } - .forEach { url -> maven(url) } - gradlePluginPortal() - google() - mavenCentral() - } + includeBuild("../gradle/settings-plugin") +} + +plugins { + id("com.datadog.gradle.repositories") +} + +val datadogRepositories = DatadogRepositories(providers) + +pluginManagement.repositories { + datadogRepositories.gradlePluginPortalDepotProxied(this) + datadogRepositories.mavenCentralDepotProxied(this) + datadogRepositories.googleConstrained(this) } dependencyResolutionManagement { @@ -22,4 +28,12 @@ dependencyResolutionManagement { from(files("../gradle/libs.versions.toml")) } } + @Suppress("UnstableApiUsage") + repositories { + repositoriesMode = RepositoriesMode.FAIL_ON_PROJECT_REPOS + datadogRepositories.mavenCentralDepotProxied(this) + datadogRepositories.gradlePluginPortalDepotProxied(this) + datadogRepositories.googleConstrained(this) + datadogRepositories.jitpackConstrained(this) + } } diff --git a/build-logic/src/main/kotlin/com/datadog/gradle/config/DepotRepositories.kt b/build-logic/src/main/kotlin/com/datadog/gradle/config/DepotRepositories.kt deleted file mode 100644 index c69ebfc261..0000000000 --- a/build-logic/src/main/kotlin/com/datadog/gradle/config/DepotRepositories.kt +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. - * This product includes software developed at Datadog (https://www.datadoghq.com/). - * Copyright 2016-Present Datadog, Inc. - */ - -package com.datadog.gradle.config - -import org.gradle.api.Action -import org.gradle.api.artifacts.dsl.RepositoryHandler -import org.gradle.api.provider.ProviderFactory - -/** - * Prepends the Magic Mirror Depot proxy repositories (when the `gradlePluginProxy` and - * `mavenRepositoryProxy` Gradle properties are set) before invoking [configure] to - * declare the regular fallback repositories. - * - * The proxy properties are only set in CI (via `.gitlab-ci.yml`), so local builds keep - * resolving from public registries unchanged. - * - * Usage: - * ``` - * allprojects { - * repositories.depotProxied(providers) { - * google() - * mavenCentral() - * } - * } - * ``` - */ -fun RepositoryHandler.depotProxied( - providers: ProviderFactory, - configure: RepositoryHandler.() -> Unit -) { - val pluginProxy = providers.gradleProperty(GradlePropertiesKeys.GRADLE_PLUGIN_PROXY).orNull - if (!pluginProxy.isNullOrBlank()) { - maven(Action { setUrl(pluginProxy) }) - } - val mavenProxy = providers.gradleProperty(GradlePropertiesKeys.MAVEN_REPOSITORY_PROXY).orNull - if (!mavenProxy.isNullOrBlank()) { - maven(Action { setUrl(mavenProxy) }) - } - configure() -} diff --git a/build-logic/src/main/kotlin/com/datadog/gradle/config/GradlePropertiesKeys.kt b/build-logic/src/main/kotlin/com/datadog/gradle/config/GradlePropertiesKeys.kt index 8cf6f85451..7aab5ebdfa 100644 --- a/build-logic/src/main/kotlin/com/datadog/gradle/config/GradlePropertiesKeys.kt +++ b/build-logic/src/main/kotlin/com/datadog/gradle/config/GradlePropertiesKeys.kt @@ -9,20 +9,4 @@ object GradlePropertiesKeys { // you can set this property from your gradle.properties as: forceEnableLogcat = true | false const val FORCE_ENABLE_LOGCAT = "forceEnableLogcat" - - /** - * Maven repository proxy URL (Magic Mirror Depot). When set, prepended to dependency - * repositories so artifact resolution goes through Datadog's internal mirror instead of - * hitting public registries (e.g. Maven Central) directly. Used in CI to avoid 429s. - * Set via -PmavenRepositoryProxy=... or in gradle.properties. - */ - const val MAVEN_REPOSITORY_PROXY = "mavenRepositoryProxy" - - /** - * Gradle plugin portal proxy URL (Magic Mirror Depot). When set, prepended to plugin - * resolution repositories so plugin resolution goes through Datadog's internal mirror - * instead of hitting plugins.gradle.org directly. Used in CI to avoid 429s. - * Set via -PgradlePluginProxy=... or in gradle.properties. - */ - const val GRADLE_PLUGIN_PROXY = "gradlePluginProxy" } diff --git a/build-logic/src/main/kotlin/com/datadog/gradle/plugin/aarmetadata/AarMetadataPlugin.kt b/build-logic/src/main/kotlin/com/datadog/gradle/plugin/aarmetadata/AarMetadataPlugin.kt index b1b686bc91..58cfe96f15 100644 --- a/build-logic/src/main/kotlin/com/datadog/gradle/plugin/aarmetadata/AarMetadataPlugin.kt +++ b/build-logic/src/main/kotlin/com/datadog/gradle/plugin/aarmetadata/AarMetadataPlugin.kt @@ -37,8 +37,7 @@ class AarMetadataPlugin : Plugin { target.tasks .register(TASK_CHECK_AAR_METADATA) { - this.aarMetadataFile.set(aarMetadataFile) - dependsOn(generateAarMetadataTask) + this.aarMetadataFile.set(generateAarMetadataTask.flatMap { it.aarMetadataFile }) } target.extensions.configure("androidComponents") { diff --git a/build-logic/src/main/kotlin/com/datadog/gradle/plugin/apisurface/ApiSurfacePlugin.kt b/build-logic/src/main/kotlin/com/datadog/gradle/plugin/apisurface/ApiSurfacePlugin.kt index f65e1de88e..ff562ed7ee 100644 --- a/build-logic/src/main/kotlin/com/datadog/gradle/plugin/apisurface/ApiSurfacePlugin.kt +++ b/build-logic/src/main/kotlin/com/datadog/gradle/plugin/apisurface/ApiSurfacePlugin.kt @@ -67,8 +67,7 @@ class ApiSurfacePlugin : Plugin { target.tasks .register(TASK_CHECK_COMPILER_METADATA) { - this.metadataInfoFile.set(compilerMetaFile) - dependsOn(TASK_GEN_COMPILER_METADATA) + this.metadataInfoFile.set(generateCompilerMetaTask.flatMap { it.metadataInfoFile }) } target.taskConfig> { diff --git a/build-logic/src/main/kotlin/com/datadog/gradle/plugin/transdeps/TransitiveDependenciesPlugin.kt b/build-logic/src/main/kotlin/com/datadog/gradle/plugin/transdeps/TransitiveDependenciesPlugin.kt index a918eee4c9..c44ee2bbf3 100644 --- a/build-logic/src/main/kotlin/com/datadog/gradle/plugin/transdeps/TransitiveDependenciesPlugin.kt +++ b/build-logic/src/main/kotlin/com/datadog/gradle/plugin/transdeps/TransitiveDependenciesPlugin.kt @@ -17,20 +17,20 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompilationTask class TransitiveDependenciesPlugin : Plugin { override fun apply(target: Project) { - target.tasks.register(TASK_GEN_TRANSITIVE_DEPS) { - dependenciesFile.set(target.layout.projectDirectory.file(FILE_NAME)) - resolvedArtifacts.from( - target.configurations.named("releaseCompileClasspath").map { - it.incoming.artifactView { - componentFilter { it !is ProjectComponentIdentifier } - }.files - } - ) - } + val generateTransitiveDependenciesTask = target.tasks + .register(TASK_GEN_TRANSITIVE_DEPS) { + dependenciesFile.set(target.layout.projectDirectory.file(FILE_NAME)) + resolvedArtifacts.from( + target.configurations.named("releaseCompileClasspath").map { + it.incoming.artifactView { + componentFilter { it !is ProjectComponentIdentifier } + }.files + } + ) + } target.tasks.register(TASK_CHECK_TRANSITIVE_DEPS) { - dependenciesFile.set(target.layout.projectDirectory.file(FILE_NAME)) - dependsOn(TASK_GEN_TRANSITIVE_DEPS) + dependenciesFile.set(generateTransitiveDependenciesTask.flatMap { it.dependenciesFile }) } target.taskConfig> { diff --git a/build.gradle.kts b/build.gradle.kts index d3b94f1591..4fcb322262 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -6,7 +6,6 @@ @file:Suppress("StringLiteralDuplication") import com.datadog.gradle.config.AndroidConfig -import com.datadog.gradle.config.depotProxied import com.datadog.gradle.config.registerSubModuleAggregationTask import com.datadog.gradle.utils.CLONE_RUM_EVENTS_FORMAT_SCHEMAS_TASK_NAME import com.datadog.gradle.utils.GENERATE_JSON_MODELS_TASK_NAME @@ -29,36 +28,11 @@ plugins { alias(libs.plugins.kotlinAndroidPlugin) apply false alias(libs.plugins.dokkaGradlePlugin) apply false alias(libs.plugins.detektGradlePlugin) apply false + alias(libs.plugins.unmockGradlePlugin) apply false } version = AndroidConfig.VERSION.name -buildscript { - repositories { - // Magic Mirror Depot proxy (only set in CI via `.gitlab-ci.yml`). - // Inlined here because `buildscript {}` is resolved before the `build-logic` - // convention plugins are on the classpath. - listOf("gradlePluginProxy", "mavenRepositoryProxy") - .mapNotNull { providers.gradleProperty(it).orNull?.takeIf { url -> url.isNotBlank() } } - .forEach { url -> maven { setUrl(url) } } - google() - mavenCentral() - gradlePluginPortal() - } - - dependencies { - classpath(libs.unmockGradlePlugin) - } -} - -allprojects { - repositories.depotProxied(providers) { - google() - mavenCentral() - maven { setUrl("https://jitpack.io") } - } -} - nexusPublishing { this.repositories { sonatype { diff --git a/features/dd-sdk-android-session-replay-compose/build.gradle.kts b/features/dd-sdk-android-session-replay-compose/build.gradle.kts index dbd4cbc4a3..99af9c0b12 100644 --- a/features/dd-sdk-android-session-replay-compose/build.gradle.kts +++ b/features/dd-sdk-android-session-replay-compose/build.gradle.kts @@ -61,7 +61,6 @@ dependencies { implementation(platform(libs.androidXComposeBom)) implementation(libs.bundles.androidXCompose) - implementation(libs.androidXComposeMaterial) testImplementation(project(":tools:unit")) { attributes { diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 9c63129d67..d6ee75a3ad 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -8,9 +8,6 @@ cmake = "3.22.1" ndk = "28.0.13004108" # Commons -apollo = "4.3.3" -cronetApi = "143.7445.0" -cronetPlayServices = "18.1.1" gson = "2.10.1" # We have 2 different versions of Kotlin: one is for the buildscript classpath - Gradle Plugin, # Buildscript runtime dependency; another is for the SDK compile/runtime classpath. @@ -108,6 +105,9 @@ kotlinxSerializationCore = "1.8.1" lifecycleViewmodelNav3 = "1.0.0-alpha01" openFeature = "0.6.2" retrofit = "2.11.0" +apollo = "4.3.3" +cronetApi = "143.7445.0" +cronetPlayServices = "18.1.1" # Local Server ktor = "2.3.13" @@ -128,7 +128,6 @@ apolloRuntime = { module = "com.apollographql.apollo:apollo-runtime", version.re kotlinGradlePluginApi = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin-api", version.ref = "kotlinBuildscript" } dokkaGradlePlugin = { module = "org.jetbrains.dokka:dokka-gradle-plugin", version.ref = "dokka" } detektGradlePlugin = { module = "dev.detekt:detekt-gradle-plugin", version.ref = "detekt" } -unmockGradlePlugin = { module = "com.github.bjoernq:unmockplugin", version.ref = "unmock" } # Annotation processors glideKsp = { module = "com.github.bumptech.glide:ksp", version.ref = "glide" } @@ -407,3 +406,4 @@ kotlinxSerializationPlugin = { id = "org.jetbrains.kotlin.plugin.serialization", koverPlugin = { id = "org.jetbrains.kotlinx.kover", version.ref = "kover" } ktlintGradlePlugin = { id = "org.jlleitschuh.gradle.ktlint", version.ref = "ktlintGradlePlugin" } detektGradlePlugin = { id = "dev.detekt", version.ref = "detekt" } +unmockGradlePlugin = { id = "de.mobilej.unmock", version.ref = "unmock" } diff --git a/gradle/settings-plugin/build.gradle.kts b/gradle/settings-plugin/build.gradle.kts new file mode 100644 index 0000000000..f362afaaa5 --- /dev/null +++ b/gradle/settings-plugin/build.gradle.kts @@ -0,0 +1,18 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +plugins { + `java-gradle-plugin` +} + +gradlePlugin { + plugins { + create("repositories") { + id = "com.datadog.gradle.repositories" + implementationClass = "com.datadog.gradle.repositories.RepositoriesPlugin" + } + } +} diff --git a/gradle/settings-plugin/settings.gradle.kts b/gradle/settings-plugin/settings.gradle.kts new file mode 100644 index 0000000000..d0ba170d7b --- /dev/null +++ b/gradle/settings-plugin/settings.gradle.kts @@ -0,0 +1,9 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +// Only uses core Gradle plugins, so this build resolves nothing from remote repositories and can +// hold the repository definitions shared by the root build and build-logic. +rootProject.name = "settings-plugin" diff --git a/gradle/settings-plugin/src/main/java/com/datadog/gradle/repositories/DatadogRepositories.java b/gradle/settings-plugin/src/main/java/com/datadog/gradle/repositories/DatadogRepositories.java new file mode 100644 index 0000000000..c46d241d62 --- /dev/null +++ b/gradle/settings-plugin/src/main/java/com/datadog/gradle/repositories/DatadogRepositories.java @@ -0,0 +1,88 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +package com.datadog.gradle.repositories; + +import org.gradle.api.artifacts.dsl.RepositoryHandler; +import org.gradle.api.provider.ProviderFactory; + +/** + * Repository definitions shared by the settings scripts. + *

+ * When the Magic Mirror Depot proxy properties are set (only in CI, via `.gitlab-ci.yml`), the + * proxy replaces Maven Central and the Gradle Plugin Portal. + */ +public final class DatadogRepositories { + + /** + * Maven repository proxy URL (Magic Mirror Depot). When set, prepended to dependency + * repositories so artifact resolution goes through Datadog's internal mirror instead of + * hitting public registries (e.g. Maven Central) directly. Used in CI to avoid 429s. + * Set via -PmavenRepositoryProxy=... or in gradle.properties. + */ + private static final String MAVEN_REPOSITORY_PROXY = "mavenRepositoryProxy"; + + /** + * Gradle plugin portal proxy URL (Magic Mirror Depot). When set, prepended to plugin + * resolution repositories so plugin resolution goes through Datadog's internal mirror + * instead of hitting plugins.gradle.org directly. Used in CI to avoid 429s. + * Set via -PgradlePluginProxy=... or in gradle.properties. + */ + private static final String GRADLE_PLUGIN_PROXY = "gradlePluginProxy"; + + private static final String GOOGLE_GROUPS_REGEX = ".*(google|android|chromium).*"; + private static final String JITPACK_URL = "https://jitpack.io"; + private static final String JITPACK_GROUPS_REGEX = "^com\\.github\\..*"; + + private final String mavenProxy; + private final String gradlePluginProxy; + + public DatadogRepositories(ProviderFactory providers) { + this.mavenProxy = readProxy(providers, MAVEN_REPOSITORY_PROXY); + this.gradlePluginProxy = readProxy(providers, GRADLE_PLUGIN_PROXY); + } + + public void mavenCentralDepotProxied(RepositoryHandler repositories) { + if (mavenProxy != null) { + repositories.maven(repository -> { + repository.setName("Maven Datadog Depot"); + repository.setUrl(mavenProxy); + }); + } else { + repositories.mavenCentral(); + } + } + + public void gradlePluginPortalDepotProxied(RepositoryHandler repositories) { + if (gradlePluginProxy != null) { + repositories.maven(repository -> { + repository.setName("Gradle Plugin Datadog Depot"); + repository.setUrl(gradlePluginProxy); + }); + } + // Gradle Plugins repo is not cached by Depot but there are _some_ artifacts there. + // So try to hit Depot first, and if not found use fallback, unlike in case of Maven Central. + repositories.gradlePluginPortal(); + } + + public void googleConstrained(RepositoryHandler repositories) { + repositories.google(repository -> + repository.mavenContent(content -> content.includeGroupByRegex(GOOGLE_GROUPS_REGEX)) + ); + } + + public void jitpackConstrained(RepositoryHandler repositories) { + repositories.maven(repository -> { + repository.setUrl(JITPACK_URL); + repository.mavenContent(content -> content.includeGroupByRegex(JITPACK_GROUPS_REGEX)); + }); + } + + private static String readProxy(ProviderFactory providers, String propertyName) { + String value = providers.gradleProperty(propertyName).getOrNull(); + return value == null || value.isBlank() ? null : value; + } +} diff --git a/gradle/settings-plugin/src/main/java/com/datadog/gradle/repositories/RepositoriesPlugin.java b/gradle/settings-plugin/src/main/java/com/datadog/gradle/repositories/RepositoriesPlugin.java new file mode 100644 index 0000000000..2d8eec7697 --- /dev/null +++ b/gradle/settings-plugin/src/main/java/com/datadog/gradle/repositories/RepositoriesPlugin.java @@ -0,0 +1,22 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2016-Present Datadog, Inc. + */ + +package com.datadog.gradle.repositories; + +import org.gradle.api.Plugin; +import org.gradle.api.initialization.Settings; + +/** + * Puts {@link DatadogRepositories} on the settings script classpath. Declaring the repositories is + * left to each settings script. + */ +public abstract class RepositoriesPlugin implements Plugin { + + @Override + public void apply(Settings settings) { + // No-op: the plugin only ships the repository definitions. + } +} diff --git a/instrumented/integration/build.gradle.kts b/instrumented/integration/build.gradle.kts index dae2e8187c..bbd5b5de86 100644 --- a/instrumented/integration/build.gradle.kts +++ b/instrumented/integration/build.gradle.kts @@ -5,7 +5,6 @@ */ import com.datadog.gradle.config.AndroidConfig -import com.datadog.gradle.config.depotProxied import com.datadog.gradle.config.java17 import com.datadog.gradle.config.taskConfig import org.jetbrains.kotlin.gradle.tasks.KotlinCompile @@ -90,12 +89,6 @@ android { } } -repositories.depotProxied(providers) { - google() - mavenLocal() - mavenCentral() -} - dependencies { if (project.hasProperty(com.datadog.gradle.Properties.USE_DESUGARING)) { coreLibraryDesugaring(libs.androidDesugaringSdk) diff --git a/integrations/dd-sdk-android-cronet/build.gradle.kts b/integrations/dd-sdk-android-cronet/build.gradle.kts index 7dbe7d5156..e13bbb107b 100644 --- a/integrations/dd-sdk-android-cronet/build.gradle.kts +++ b/integrations/dd-sdk-android-cronet/build.gradle.kts @@ -59,7 +59,7 @@ dependencies { unmock(libs.robolectric) // Trying to add most recent lib version in order to test the instrumentation, see CronetApiInstrumentationTest - testImplementation("${libs.cronetApi.get().module}:+") + testImplementation(libs.cronetApi.map { "${it.module}:+" }) testImplementation(testFixtures(project(":dd-sdk-android-core"))) testImplementation(testFixtures(project(":dd-sdk-android-internal"))) testImplementation(testFixtures(project(":features:dd-sdk-android-rum"))) diff --git a/sample/tv/build.gradle.kts b/sample/tv/build.gradle.kts index 927094d38f..9bb617700a 100644 --- a/sample/tv/build.gradle.kts +++ b/sample/tv/build.gradle.kts @@ -6,7 +6,6 @@ import com.datadog.gradle.config.AndroidConfig import com.datadog.gradle.config.configureFlavorForTvApp -import com.datadog.gradle.config.depotProxied import com.datadog.gradle.config.java17 import com.datadog.gradle.config.taskConfig import org.jetbrains.kotlin.gradle.tasks.KotlinCompile @@ -66,8 +65,6 @@ android { } } -repositories.depotProxied(providers) {} - dependencies { implementation(project(":dd-sdk-android-core")) diff --git a/settings.gradle.kts b/settings.gradle.kts index b123e48320..88979480ac 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -4,22 +4,48 @@ * Copyright 2016-Present Datadog, Inc. */ +import com.datadog.gradle.repositories.DatadogRepositories + pluginManagement { - repositories { - // Magic Mirror Depot proxy (only set in CI via `.gitlab-ci.yml`). - listOf("gradlePluginProxy", "mavenRepositoryProxy") - .mapNotNull { providers.gradleProperty(it).orNull?.takeIf { url -> url.isNotBlank() } } - .forEach { url -> maven(url) } - gradlePluginPortal() - google() - mavenCentral() + resolutionStrategy { + eachPlugin { + // Unmock doesn't publish a plugin marker artifact, so map its id to the implementation module. + if (requested.id.id == "de.mobilej.unmock" && requested.version != null) { + useModule("com.github.bjoernq:unmockplugin:${requested.version}") + } + } } + // Repository definitions shared with build-logic. + includeBuild("./gradle/settings-plugin") + // Build logic (convention plugins + build-time code generators) lives in its own build so that // editing it doesn't invalidate the whole project the way a `buildSrc` change does. includeBuild("./build-logic") } +plugins { + id("com.datadog.gradle.repositories") +} + +val datadogRepositories = DatadogRepositories(providers) + +pluginManagement.repositories { + datadogRepositories.gradlePluginPortalDepotProxied(this) + datadogRepositories.googleConstrained(this) + datadogRepositories.mavenCentralDepotProxied(this) +} + +dependencyResolutionManagement { + @Suppress("UnstableApiUsage") + repositories { + repositoriesMode = RepositoriesMode.FAIL_ON_PROJECT_REPOS + datadogRepositories.mavenCentralDepotProxied(this) + datadogRepositories.googleConstrained(this) + datadogRepositories.jitpackConstrained(this) + } +} + // CORE LIBRARY include(":dd-sdk-android-core") include(":dd-sdk-android-internal")