/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

apply plugin: 'scala'
apply plugin: 'eclipse'
apply plugin: 'maven'
apply plugin: 'org.scoverage'

ext.dockerImageName = 'scala'
apply from: '../../gradle/docker.gradle'

project.archivesBaseName = "openwhisk-common"

repositories {
    mavenCentral()
}

dependencies {
    compile "org.scala-lang:scala-library:${gradle.scala.version}"

    compile 'com.github.pureconfig:pureconfig_2.11:0.9.0'
    compile 'io.spray:spray-json_2.11:1.3.4'

    compile 'com.typesafe.akka:akka-actor_2.11:2.5.12'
    compile 'com.typesafe.akka:akka-stream_2.11:2.5.12'
    compile 'com.typesafe.akka:akka-slf4j_2.11:2.5.12'

    compile 'com.typesafe.akka:akka-http-core_2.11:10.1.1'
    compile 'com.typesafe.akka:akka-http-spray-json_2.11:10.1.1'

    compile 'com.lightbend.akka:akka-stream-alpakka-file_2.11:0.15'

    compile 'ch.qos.logback:logback-classic:1.2.3'
    compile 'org.slf4j:jcl-over-slf4j:1.7.25'
    compile 'org.slf4j:log4j-over-slf4j:1.7.25'
    compile 'commons-codec:commons-codec:1.9'
    compile 'commons-io:commons-io:2.6'
    compile 'commons-collections:commons-collections:3.2.2'
    compile 'org.apache.kafka:kafka-clients:0.11.0.1'
    compile ('org.apache.httpcomponents:httpclient:4.4.1') {
        exclude group: 'commons-logging'
    }
    compile ('com.fasterxml.uuid:java-uuid-generator:3.1.3') {
        exclude group: 'log4j'
    }
    compile 'com.github.ben-manes.caffeine:caffeine:2.4.0'
    compile 'com.google.code.findbugs:jsr305:3.0.2'
    compile 'io.fabric8:kubernetes-client:2.5.7'
    compile 'io.kamon:kamon-core_2.11:0.6.7'
    compile 'io.kamon:kamon-statsd_2.11:0.6.7'
    //for mesos
    compile 'com.adobe.api.platform.runtime:mesos-actor:0.0.7'

    //tracing support
    compile 'io.opentracing:opentracing-api:0.31.0'
    compile 'io.opentracing:opentracing-util:0.31.0'
    compile 'io.opentracing.brave:brave-opentracing:0.31.0'
    compile 'io.zipkin.reporter2:zipkin-sender-okhttp3:2.6.1'
    compile 'io.zipkin.reporter2:zipkin-reporter:2.6.1'

    scoverage gradle.scoverage.deps
}

tasks.withType(ScalaCompile) {
    scalaCompileOptions.additionalParameters = gradle.scala.compileFlags
}
