pluginManagement {
    // https://issuetracker.google.com/issues/342522142#comment8
    // use D8/R8 8.0.44 or 8.1.44 with AGP 7.4 if needed.
    buildscript {
        repositories {
            mavenCentral()
            maven {
                url = uri("https://storage.googleapis.com/r8-releases/raw")
            }
        }
        dependencies {
            classpath("com.android.tools:r8:8.1.44")
        }
    }
    plugins {
        // https://developer.android.com/build/releases/gradle-plugin
        // 8+ has many changes: https://github.com/grpc/grpc-java/issues/10152
        id "com.android.application" version "7.4.1"
        id "com.android.library" version "7.4.1"
	// https://github.com/kt3k/coveralls-gradle-plugin/tags
        id "com.github.kt3k.coveralls" version "2.12.2"
	// https://github.com/GoogleCloudPlatform/appengine-plugins/releases
        id "com.google.cloud.tools.appengine" version "2.8.6"
        // https://github.com/GoogleContainerTools/jib/blob/master/jib-gradle-plugin/CHANGELOG.md
        id "com.google.cloud.tools.jib" version "3.5.1"
	// https://github.com/google/osdetector-gradle-plugin/tags
        id "com.google.osdetector" version "1.7.3"
        // https://github.com/google/protobuf-gradle-plugin/releases
        id "com.google.protobuf" version "0.9.5"
        // https://github.com/GradleUp/shadow/releases
        // 8.3.2+ requires Java 11+
        // 8.3.1 breaks apache imports for netty/shaded, fixed in 8.3.2
        id "com.gradleup.shadow" version "8.3.0"
        // https://github.com/melix/japicmp-gradle-plugin/blob/master/CHANGELOG.txt
        id "me.champeau.gradle.japicmp" version "0.4.2"
        // https://github.com/melix/jmh-gradle-plugin/releases
        id "me.champeau.jmh" version "0.7.3"
        // https://github.com/tbroyer/gradle-errorprone-plugin/releases
        id "net.ltgt.errorprone" version "4.3.0"
        // https://github.com/xvik/gradle-animalsniffer-plugin/releases
        id "ru.vyarus.animalsniffer" version "2.0.1"
    }
    resolutionStrategy {
        eachPlugin {
            if (target.id.namespace == "com.android") {
                useModule("com.android.tools.build:gradle:${target.version}")
            }
            if (requested.id.id.startsWith('com.google.cloud.tools.appengine')) {
                useModule("com.google.cloud.tools:appengine-gradle-plugin:${target.version}")
            }
        }
    }
    repositories {
        gradlePluginPortal()
        google()
    }
}

rootProject.name = "grpc"
include ":grpc-api"
include ":grpc-core"
include ":grpc-context"
include ":grpc-stub"
include ":grpc-census"
include ":grpc-auth"
include ":grpc-okhttp"
include ":grpc-protobuf"
include ":grpc-protobuf-lite"
include ":grpc-netty"
include ":grpc-netty-shaded"
include ":grpc-googleapis"
include ":grpc-grpclb"
include ":grpc-testing"
include ":grpc-testing-proto"
include ":grpc-interop-testing"
include ":grpc-gae-interop-testing-jdk8"
include ":grpc-all"
include ":grpc-alts"
include ":grpc-benchmarks"
include ":grpc-services"
include ":grpc-servlet"
include ":grpc-servlet-jakarta"
include ":grpc-s2a"
include ":grpc-xds"
include ":grpc-bom"
include ":grpc-rls"
include ":grpc-authz"
include ":grpc-gcp-csm-observability"
include ":grpc-gcp-observability"
include ":grpc-gcp-observability:interop"
include ":grpc-istio-interop-testing"
include ":grpc-inprocess"
include ":grpc-util"
include ":grpc-opentelemetry"
include ":grpc-context-override-opentelemetry"

project(':grpc-api').projectDir = "$rootDir/api" as File
project(':grpc-core').projectDir = "$rootDir/core" as File
project(':grpc-context').projectDir = "$rootDir/context" as File
project(':grpc-stub').projectDir = "$rootDir/stub" as File
project(':grpc-census').projectDir = "$rootDir/census" as File
project(':grpc-auth').projectDir = "$rootDir/auth" as File
project(':grpc-okhttp').projectDir = "$rootDir/okhttp" as File
project(':grpc-protobuf').projectDir = "$rootDir/protobuf" as File
project(':grpc-protobuf-lite').projectDir = "$rootDir/protobuf-lite" as File
project(':grpc-netty').projectDir = "$rootDir/netty" as File
project(':grpc-netty-shaded').projectDir = "$rootDir/netty/shaded" as File
project(':grpc-googleapis').projectDir = "$rootDir/googleapis" as File
project(':grpc-grpclb').projectDir = "$rootDir/grpclb" as File
project(':grpc-testing').projectDir = "$rootDir/testing" as File
project(':grpc-testing-proto').projectDir = "$rootDir/testing-proto" as File
project(':grpc-interop-testing').projectDir = "$rootDir/interop-testing" as File
project(':grpc-gae-interop-testing-jdk8').projectDir = "$rootDir/gae-interop-testing/gae-jdk8" as File
project(':grpc-all').projectDir = "$rootDir/all" as File
project(':grpc-alts').projectDir = "$rootDir/alts" as File
project(':grpc-benchmarks').projectDir = "$rootDir/benchmarks" as File
project(':grpc-services').projectDir = "$rootDir/services" as File
project(':grpc-servlet').projectDir = "$rootDir/servlet" as File
project(':grpc-servlet-jakarta').projectDir = "$rootDir/servlet/jakarta" as File
project(':grpc-s2a').projectDir = "$rootDir/s2a" as File
project(':grpc-xds').projectDir = "$rootDir/xds" as File
project(':grpc-bom').projectDir = "$rootDir/bom" as File
project(':grpc-rls').projectDir = "$rootDir/rls" as File
project(':grpc-authz').projectDir = "$rootDir/authz" as File
project(':grpc-gcp-csm-observability').projectDir = "$rootDir/gcp-csm-observability" as File
project(':grpc-gcp-observability').projectDir = "$rootDir/gcp-observability" as File
project(':grpc-gcp-observability:interop').projectDir = "$rootDir/gcp-observability/interop" as File
project(':grpc-istio-interop-testing').projectDir = "$rootDir/istio-interop-testing" as File
project(':grpc-inprocess').projectDir = "$rootDir/inprocess" as File
project(':grpc-util').projectDir = "$rootDir/util" as File
project(':grpc-opentelemetry').projectDir = "$rootDir/opentelemetry" as File
project(':grpc-context-override-opentelemetry').projectDir = "$rootDir/contextstorage" as File

if (settings.hasProperty('skipCodegen') && skipCodegen.toBoolean()) {
    println '*** Skipping the build of codegen and compilation of proto files because skipCodegen=true'
} else {
    include ":grpc-compiler"
    project(':grpc-compiler').projectDir = "$rootDir/compiler" as File
}

if (settings.hasProperty('skipAndroid') && skipAndroid.toBoolean()) {
    println '  * Skipping the build of Android projects because skipAndroid=true'
} else {
    println '*** Android SDK is required. To avoid building Android projects, set -PskipAndroid=true'
    include ":grpc-cronet"
    project(':grpc-cronet').projectDir = "$rootDir/cronet" as File
    include ":grpc-android"
    project(':grpc-android').projectDir = "$rootDir/android" as File
    include ":grpc-android-interop-testing"
    project(':grpc-android-interop-testing').projectDir = "$rootDir/android-interop-testing" as File
    include ":grpc-binder"
    project(':grpc-binder').projectDir = "$rootDir/binder" as File
}
