plugins {
    // Provide convenience executables for trying out the examples.
    id 'application'
    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
}

// IMPORTANT: You probably want the non-SNAPSHOT version of gRPC. Make sure you
// are looking at a tagged version of the example and not "master"!

// Feel free to delete the comment at the next line. It is just for safely
// updating the version in our release process.
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-stub:${grpcVersion}"
    implementation "io.grpc:grpc-gcp-observability:${grpcVersion}"
    compileOnly "org.apache.tomcat:annotations-api:6.0.53"
    runtimeOnly "io.grpc:grpc-netty-shaded:${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 ObservabilityHelloWorldServer(type: CreateStartScripts) {
    mainClass = 'io.grpc.examples.gcpobservability.GcpObservabilityServer'
    applicationName = 'gcp-observability-server'
    outputDir = new File(project.buildDir, 'tmp/scripts/' + name)
    classpath = startScripts.classpath
}

task ObservabilityHelloWorldClient(type: CreateStartScripts) {
    mainClass = 'io.grpc.examples.gcpobservability.GcpObservabilityClient'
    applicationName = 'gcp-observability-client'
    outputDir = new File(project.buildDir, 'tmp/scripts/' + name)
    classpath = startScripts.classpath
}

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