plugins {
    // Provide convenience executables for trying out the examples.
    id 'application'
    // ASSUMES GRADLE 2.12 OR HIGHER. Use plugin version 0.7.5 with earlier gradle versions
    id 'com.google.protobuf' version '0.8.8'
    // Generate IntelliJ IDEA's .idea & .iml project files
    id 'idea'
}

repositories {
    maven { // The google mirror is less flaky than mavenCentral()
        url "https://maven-central.storage-download.googleapis.com/repos/central/data/"
    }
    mavenCentral()
    mavenLocal()
}

sourceCompatibility = 1.7
targetCompatibility = 1.7

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

dependencies {
    // grpc-alts transitively depends on grpc-netty-shaded, grpc-protobuf, and grpc-stub
    implementation "io.grpc:grpc-alts:${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 {} }
    }
}

// Inform IDEs like IntelliJ IDEA, Eclipse or NetBeans about the generated code.
sourceSets {
    main {
        java {
            srcDirs 'build/generated/source/proto/main/grpc'
            srcDirs 'build/generated/source/proto/main/java'
        }
    }
}

startScripts.enabled = false


task helloWorldAltsServer(type: CreateStartScripts) {
    mainClassName = 'io.grpc.examples.alts.HelloWorldAltsServer'
    applicationName = 'hello-world-alts-server'
    outputDir = new File(project.buildDir, 'tmp')
    classpath = startScripts.classpath
}

task helloWorldAltsClient(type: CreateStartScripts) {
    mainClassName = 'io.grpc.examples.alts.HelloWorldAltsClient'
    applicationName = 'hello-world-alts-client'
    outputDir = new File(project.buildDir, 'tmp')
    classpath = startScripts.classpath
}

applicationDistribution.into('bin') {
    from(helloWorldAltsServer)
    from(helloWorldAltsClient)
    fileMode = 0755
}
