plugins {
    id 'com.github.johnrengelman.shadow' version '7.1.2'
}

def compileJavaVersion = "8"
def testJavaVersion = project.findProperty("testJavaVersion") ?: "17"
def jvmVendor = null
logger.lifecycle("Compiling for Java ${compileJavaVersion} and later, testing against Java ${testJavaVersion}")

subprojects {
    apply plugin: 'java'
    apply plugin: 'maven-publish'
    apply plugin: 'signing'
    apply plugin: 'com.github.johnrengelman.shadow'

    group = "com.github.therapi"
    version = "0.16.0-SNAPSHOT"

    repositories {
        mavenCentral()
    }

    dependencies {
        testImplementation 'junit:junit:4.13.2'
    }

    java {
        withJavadocJar()
        withSourcesJar()

        toolchain {
            languageVersion = JavaLanguageVersion.of(compileJavaVersion)
            vendor = jvmVendor
        }
    }

    tasks.withType(Test) {
        testLogging.showStandardStreams = true
        javaLauncher = javaToolchains.launcherFor {
            languageVersion = JavaLanguageVersion.of(testJavaVersion)
            vendor = jvmVendor
        }
    }

    jar.enabled = false // interferes with shadow tasks

    shadowJar {
        archiveClassifier.set('')
        mergeServiceFiles()
        relocate 'com.eclipsesource.json', 'com.github.therapi.runtimejavadoc.repack.com.eclipsesource.json'
    }

    publishing {
        publications {
            mavenJava(MavenPublication) { publication ->
                project.shadow.component(publication)

                artifacts = [shadowJar, javadocJar, sourcesJar]

                pom {
                    def githubProjectName = "therapi-runtime-javadoc"

                    name = "${group}:${project.name}"
                    description = project.description // defined in gradle.properties
                    url = "https://github.com/dnault/${githubProjectName}"
                    licenses {
                        license {
                            name = 'The Apache License, Version 2.0'
                            url = 'http://www.apache.org/licenses/LICENSE-2.0.txt'
                        }
                    }
                    developers {
                        developer {
                            id = 'dnault'
                            name = 'David Nault'
                            email = 'dnault@mac.com'
                            organization = 'dnault'
                            organizationUrl = 'https://github.com/dnault'
                        }
                    }
                    scm {
                        def gitUrl = "git@github.com:dnault/${githubProjectName}.git"

                        connection = "scm:git:${gitUrl}"
                        developerConnection = "scm:git:${gitUrl}"
                        url = "${gitUrl}"
                    }
                }
            }
        }

        repositories {
            maven {
                def releasesRepoUrl = "https://oss.sonatype.org/service/local/staging/deploy/maven2/"
                def snapshotsRepoUrl = "https://oss.sonatype.org/content/repositories/snapshots/"
                url = version.endsWith('SNAPSHOT') ? snapshotsRepoUrl : releasesRepoUrl

                credentials {
                    // defined externally in gradle.properties
                    username = project.properties["ossrhUsername"]
                    password = project.properties["ossrhPassword"]
                }
            }
        }
    }

    signing {
        // Use GPG agent
        // https://docs.gradle.org/current/userguide/signing_plugin.html#sec:using_gpg_agent
        // Requires "signing.gnupg.keyName" property defined externally in gradle.properties
        useGpgCmd()

        sign publishing.publications.mavenJava
    }

    task install {
        dependsOn(publishToMavenLocal)
    }

}
