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'
}

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'
def openTelemetryVersion = '1.40.0'
def openTelemetryPrometheusVersion = '1.40.0-alpha'

dependencies {
    implementation "io.grpc:grpc-protobuf:${grpcVersion}"
    implementation "io.grpc:grpc-stub:${grpcVersion}"
    implementation "io.grpc:grpc-opentelemetry:${grpcVersion}"
    implementation "io.opentelemetry:opentelemetry-sdk:${openTelemetryVersion}"
    implementation "io.opentelemetry:opentelemetry-sdk-metrics:${openTelemetryVersion}"
    implementation "io.opentelemetry:opentelemetry-exporter-logging:${openTelemetryVersion}"
    implementation "io.opentelemetry:opentelemetry-exporter-prometheus:${openTelemetryPrometheusVersion}"
    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 OpenTelemetryHelloWorldServer(type: CreateStartScripts) {
    mainClass = 'io.grpc.examples.opentelemetry.OpenTelemetryServer'
    applicationName = 'opentelemetry-server'
    outputDir = new File(project.buildDir, 'tmp/scripts/' + name)
    classpath = startScripts.classpath
}

task OpenTelemetryHelloWorldClient(type: CreateStartScripts) {
    mainClass = 'io.grpc.examples.opentelemetry.OpenTelemetryClient'
    applicationName = 'opentelemetry-client'
    outputDir = new File(project.buildDir, 'tmp/scripts/' + name)
    classpath = startScripts.classpath
}

task LoggingOpenTelemetryHelloWorldServer(type: CreateStartScripts) {
    mainClass = 'io.grpc.examples.opentelemetry.logging.LoggingOpenTelemetryServer'
    applicationName = 'logging-opentelemetry-server'
    outputDir = new File(project.buildDir, 'tmp/scripts/' + name)
    classpath = startScripts.classpath
}

task LoggingOpenTelemetryHelloWorldClient(type: CreateStartScripts) {
    mainClass = 'io.grpc.examples.opentelemetry.logging.LoggingOpenTelemetryClient'
    applicationName = 'logging-opentelemetry-client'
    outputDir = new File(project.buildDir, 'tmp/scripts/' + name)
    classpath = startScripts.classpath
}

application {
    applicationDistribution.into('bin') {
        from(OpenTelemetryHelloWorldServer)
        from(OpenTelemetryHelloWorldClient)
        from(LoggingOpenTelemetryHelloWorldServer)
        from(LoggingOpenTelemetryHelloWorldClient)
        filePermissions {
            unix(0755)
        }
    }
}
