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.75.0-SNAPSHOT' // CURRENT_GRPC_VERSION
def protocVersion = '3.25.5'

dependencies {
    implementation "io.grpc:grpc-protobuf:${grpcVersion}"
    implementation "io.grpc:grpc-services:${grpcVersion}"
    implementation "io.grpc:grpc-stub:${grpcVersion}"
    implementation "io.grpc:grpc-netty-shaded:${grpcVersion}"
    compileOnly "org.apache.tomcat:annotations-api:6.0.53"

}

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 ReflectionServer(type: CreateStartScripts) {
    mainClass = 'io.grpc.examples.reflection.ReflectionServer'
    applicationName = 'reflection-server'
    outputDir = new File(project.buildDir, 'tmp/scripts/' + name)
    classpath = startScripts.classpath
}

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