// Copyright 2019 The Nomulus Authors. All Rights Reserved.
//
// Licensed 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.

createUberJar('deployJar', 'proxy_server', 'google.registry.proxy.ProxyServer')

task buildProxyImage(dependsOn: deployJar, type: Exec) {
  commandLine 'docker', 'build', '-t', 'proxy', '.'
}

task deployProxy(dependsOn: buildProxyImage) {
  configure verifyDeploymentConfig
  doLast {
    exec {
      commandLine 'docker', 'tag', 'proxy', "gcr.io/${rootProject.gcpProject}/proxy"
    }
    exec {
      commandLine 'docker', 'push', "gcr.io/${rootProject.gcpProject}/proxy"
    }
    exec {
      commandLine './deploy-proxy-for-env.sh', "${rootProject.environment}"
    }
  }
}

project.build.dependsOn buildProxyImage

dependencies {
  def deps = rootProject.dependencyMap

  implementation deps['com.beust:jcommander']
  implementation deps['com.google.api-client:google-api-client']
  implementation deps['com.google.apis:google-api-services-cloudkms']
  implementation deps['com.google.apis:google-api-services-monitoring']
  implementation deps['com.google.auth:google-auth-library-credentials']
  implementation deps['com.google.auth:google-auth-library-oauth2-http']
  implementation deps['com.google.auto.value:auto-value-annotations']
  implementation deps['com.google.cloud:google-cloud-core']
  implementation deps['com.google.cloud:google-cloud-core-http']
  implementation deps['com.google.cloud:google-cloud-storage']
  implementation deps['com.google.code.findbugs:jsr305']
  implementation deps['com.google.code.gson:gson']
  implementation deps['com.google.dagger:dagger']
  implementation deps['com.google.flogger:flogger']
  implementation deps['com.google.guava:guava']
  implementation deps['com.google.http-client:google-http-client']
  implementation deps['com.google.monitoring-client:metrics']
  implementation deps['com.google.monitoring-client:stackdriver']
  implementation deps['io.netty:netty-buffer']
  implementation deps['io.netty:netty-codec-http']
  implementation deps['io.netty:netty-codec']
  implementation deps['io.netty:netty-common']
  implementation deps['io.netty:netty-handler']
  implementation deps['io.netty:netty-transport']
  implementation deps['javax.inject:javax.inject']
  implementation deps['joda-time:joda-time']
  implementation deps['org.bouncycastle:bcpkix-jdk15on']
  implementation deps['org.bouncycastle:bcprov-jdk15on']
  implementation project(':common')
  implementation project(':networking')
  implementation project(':util')

  runtimeOnly deps['com.google.flogger:flogger-system-backend']
  runtimeOnly deps['com.google.auto.value:auto-value']
  runtimeOnly deps['io.netty:netty-tcnative-boringssl-static']

  testImplementation deps['com.google.monitoring-client:contrib']
  testImplementation deps['com.google.truth:truth']
  testImplementation deps['junit:junit']
  testImplementation deps['org.junit.jupiter:junit-jupiter-api']
  testImplementation deps['org.junit.jupiter:junit-jupiter-engine']
  testImplementation deps['org.junit.jupiter:junit-jupiter-params']
  testImplementation deps['org.junit.platform:junit-platform-runner']
  testImplementation deps['org.junit.platform:junit-platform-suite-api']
  testImplementation deps['org.mockito:mockito-core']
  testImplementation deps['org.testcontainers:junit-jupiter']
  testImplementation deps['org.yaml:snakeyaml']
  testImplementation project(path: ':common', configuration: 'testing')
  testImplementation project(path: ':networking', configuration: 'testRuntimeOnly')

  // Include auto-value in compile until nebula-lint understands
  // annotationProcessor
  annotationProcessor deps['com.google.auto.value:auto-value']
  testAnnotationProcessor deps['com.google.auto.value:auto-value']
  annotationProcessor deps['com.google.dagger:dagger-compiler']
  testAnnotationProcessor deps['com.google.dagger:dagger-compiler']
}

test {
  useJUnitPlatform()
}
