plugins {
    id 'application' // Provide convenience executables for trying out the examples.
    id 'com.google.protobuf' version '0.9.5'
    // Generate IntelliJ IDEA's .idea & .iml project files
    id 'idea'
    id 'java'
}

repositories {
    mavenCentral()
    mavenLocal()
}

java {
    sourceCompatibility = JavaVersion.VERSION_1_8
    targetCompatibility = JavaVersion.VERSION_1_8
}

def grpcVersion = '1.83.1-SNAPSHOT' // CURRENT_GRPC_VERSION
def protocVersion = '3.25.8'

dependencies {
    implementation "io.grpc:grpc-protobuf:${grpcVersion}"
    implementation "io.grpc:grpc-services:${grpcVersion}"
    implementation "io.grpc:grpc-stub:${grpcVersion}"
    implementation "io.grpc:grpc-xds:${grpcVersion}"
}

protobuf {
    protoc { artifact = "com.google.protobuf:protoc:${protocVersion}" }
    plugins {
        grpc { artifact = "io.grpc:protoc-gen-grpc-java:${grpcVersion}" }
    }
    generateProtoTasks {
        all()*.plugins { grpc {} }
    }
}

startScripts.enabled = false

task CustomBackendMetricsClient(type: CreateStartScripts) {
    mainClass = 'io.grpc.examples.orca.CustomBackendMetricsClient'
    applicationName = 'custom-backend-metrics-client'
    outputDir = new File(project.buildDir, 'tmp/scripts/' + name)
    classpath = startScripts.classpath
}

task CustomBackendMetricsServer(type: CreateStartScripts) {
    mainClass = 'io.grpc.examples.orca.CustomBackendMetricsServer'
    applicationName = 'custom-backend-metrics-server'
    outputDir = new File(project.buildDir, 'tmp/scripts/' + name)
    classpath = startScripts.classpath
}

application {
    applicationDistribution.into('bin') {
        from(CustomBackendMetricsClient)
        from(CustomBackendMetricsServer)
        filePermissions {
            unix(0755)
        }
    }
}
