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.2.0'

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

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

  testImplementation 'junit:junit:4.12'
  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)
}

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

tasks.withType(Checkstyle) {
  checkstyleClasspath = project.configurations.checkstyleConfig
  checkstyleTest {
    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-mock'
        packaging 'jar'
        description 'Tools for testing NDN Java code without using network IO'
        url 'https://github.com/named-data/jndn-mock'

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

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