plugins {
  id 'java-library'
  id 'maven' // TODO: migrate to 'maven-publish'
  id 'signing'
  id 'checkstyle'
  id 'org.sonarqube' version '3.0'
  id 'net.saliman.cobertura' version '4.0.0'
}

group = 'net.named-data.jndn-extra'
version = '1.3.0'

repositories {
  mavenLocal()
  jcenter()
  mavenCentral()
  maven {
    url 'https://oss.sonatype.org/content/repositories/releases'
  }
}

sourceSets {
  test {
    java {
      exclude '**/*IT.java'
    }
  }
  integrationTest {
    java {
      compileClasspath += main.output + test.output
      runtimeClasspath += main.output + test.output
      srcDir 'src/test/java'
      include '**/*IT.java'
    }
  }
}

configurations {
  integrationTestImplementation.extendsFrom testImplementation
  integrationTestRuntimeOnly.extendsFrom testRuntimeOnly
}

dependencies {
  api 'net.named-data:jndn:0.24'

  testImplementation 'junit:junit:4.12'
  testImplementation 'net.named-data.jndn-extra:jndn-mock:1.2.0'
  testRuntimeOnly 'org.slf4j:slf4j-api:1.7.30'
}

java {
  sourceCompatibility = JavaVersion.VERSION_1_8
  targetCompatibility = JavaVersion.VERSION_1_8
  withJavadocJar()
  withSourcesJar()
}

tasks.withType(JavaCompile) {
  options.deprecation = true
  options.encoding = 'UTF-8'
}

tasks.withType(Javadoc) {
  options.addBooleanOption('Xdoclint:none', true)
}

task integrationTest(type: Test) {
  description 'Runs integration tests.'
  group = 'verification'

  testClassesDirs = sourceSets.integrationTest.output.classesDirs
  classpath = sourceSets.integrationTest.runtimeClasspath

  shouldRunAfter test
}

tasks.withType(Test) {
  outputs.upToDateWhen { false }
  testLogging {
    events "passed", "failed", "skipped"
    exceptionFormat "full"
  }
}

checkstyle {
  toolVersion '8.23'
}
checkstyleMain {
  exclude 'com/intel/jndn/management/enums/NfdTlv.java'
}
checkstyleTest {
  configFile file('config/checkstyle/checkstyle-test.xml')
}
checkstyleIntegrationTest {
  configFile file('config/checkstyle/checkstyle-test.xml')
}

cobertura {
  coverageFormats = ['html', 'xml']
}

artifacts {
  archives javadocJar, sourcesJar
}

signing {
  required { gradle.taskGraph.hasTask("uploadArchives") }
  sign configurations.archives
}

uploadArchives {
  repositories {
    mavenDeployer {
      beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) }

      repository(url: "https://oss.sonatype.org/service/local/staging/deploy/maven2/") {
        try {
          authentication(userName: ossrhUsername, password: ossrhPassword)
        }
        catch (Exception e) {
        }
      }

      snapshotRepository(url: "https://oss.sonatype.org/content/repositories/snapshots/") {
        try {
          authentication(userName: ossrhUsername, password: ossrhPassword)
        }
        catch (Exception e) {
        }
      }

      pom.project {
        name 'jndn-management'
        packaging 'jar'
        description 'Tools for managing an NDN forwarding daemon'
        url 'https://github.com/named-data/jndn-management'

        scm {
          connection 'scm:git:https://github.com/named-data/jndn-management.git'
          developerConnection 'scm:git:ssh://git@github.com/named-data/jndn-management.git'
          url 'https://github.com/named-data/jndn-management'
        }

        licenses {
          license {
            name 'GNU Lesser General Public License, Version 3.0+'
            url 'https://www.gnu.org/licenses/lgpl-3.0.html'
          }
        }

        developers {
          developer {
            id 'andrewbrown'
            name 'Andrew Brown'
            url 'https://github.com/andrewsbrown'
          }
          developer {
            id 'cawka'
            name 'Alexander Afanasyev'
            email 'aa@cs.ucla.edu'
          }
        }
      }
    }
  }
}
