apply plugin: 'maven-publish'
apply plugin: 'signing'

group = GROUP
version = VERSION_NAME

@SuppressWarnings('GrMethodMayBeStatic')
def isReleaseBuild() {
  return !VERSION_NAME.contains("SNAPSHOT")
}

def getReleaseRepositoryUrl() {
  return hasProperty('RELEASE_REPOSITORY_URL') ? RELEASE_REPOSITORY_URL
      : "https://oss.sonatype.org/service/local/staging/deploy/maven2/"
}

def getSnapshotRepositoryUrl() {
  return hasProperty('SNAPSHOT_REPOSITORY_URL') ? SNAPSHOT_REPOSITORY_URL
      : "https://oss.sonatype.org/content/repositories/snapshots/"
}

def configurePom(pom) {
  pom.name = POM_NAME
  pom.packaging = POM_PACKAGING
  pom.description = POM_DESCRIPTION
  pom.url = POM_URL

  pom.scm {
    url = POM_SCM_URL
    connection = POM_SCM_CONNECTION
    developerConnection = POM_SCM_DEV_CONNECTION
  }

  pom.licenses {
    license {
      name = POM_LICENCE_NAME
      url = POM_LICENCE_URL
      distribution = POM_LICENCE_DIST
    }
  }

  pom.developers {
    developer {
      id = POM_DEVELOPER_ID
      name = POM_DEVELOPER_NAME
      email = POM_DEVELOPER_MAIL
    }
  }
}

afterEvaluate { project ->
  if (project.getPlugins().hasPlugin('com.android.application') ||
      project.getPlugins().hasPlugin('com.android.library')) {

    task androidJavadocs(type: Javadoc) {
      source = android.sourceSets.main.java.source
      classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
      excludes = ['**/*.kt']
    }

    task androidJavadocsJar(type: Jar, dependsOn: androidJavadocs) {
      archiveClassifier = 'javadoc'
      from androidJavadocs.destinationDir
    }

    task androidSourcesJar(type: Jar) {
      archiveClassifier = 'sources'
      from android.sourceSets.main.java.source
    }
  }

  if (JavaVersion.current().isJava8Compatible()) {
    allprojects {
      tasks.withType(Javadoc) {
        options.addStringOption('Xdoclint:none', '-quiet')
      }
    }
  }

  if (JavaVersion.current().isJava9Compatible()) {
    allprojects {
      tasks.withType(Javadoc) {
        options.addBooleanOption('html5', true)
      }
    }
  }

  artifacts {
    if (project.getPlugins().hasPlugin('com.android.application') ||
        project.getPlugins().hasPlugin('com.android.library')) {
      archives androidSourcesJar
      archives androidJavadocsJar
    }
  }

  android.libraryVariants.all { variant ->
    tasks.androidJavadocs.doFirst {
      classpath += files(variant.javaCompileProvider.get().classpath.files.join(File.pathSeparator))
    }
  }

  publishing {
    publications {
      release(MavenPublication) {
        from components.release
        groupId = GROUP
        version = VERSION_NAME
        artifactId = POM_ARTIFACT_ID
        artifact androidSourcesJar
        artifact androidJavadocsJar
        configurePom(pom)
      }
    }

    repositories {
      maven {
        def releasesRepoUrl = getReleaseRepositoryUrl()
        def snapshotsRepoUrl = getSnapshotRepositoryUrl()
        url = isReleaseBuild() ? releasesRepoUrl : snapshotsRepoUrl

        credentials(PasswordCredentials) {
          username = getRepositoryUsername()
          password = getRepositoryPassword()
        }
      }
    }
  }

  signing {
    publishing.publications.all { publication ->
      sign publication
    }
  }
}

// Command:
// ./gradlew publishReleasePublicationToMavenRepository closeAndReleaseSonatypeStagingRepository
