evaluationDependsOn(":node:capsule")

import com.bmuschko.gradle.docker.tasks.image.DockerBuildImage
import com.bmuschko.gradle.docker.tasks.image.DockerPushImage

import java.time.LocalDateTime
import java.time.format.DateTimeFormatter

apply plugin: 'kotlin'
apply plugin: 'application'
apply plugin: 'com.bmuschko.docker-remote-api'

// We need to set mainClassName before applying the shadow plugin.
mainClassName = 'net.corda.core.ConfigExporterMain'
apply plugin: 'com.github.johnrengelman.shadow'

dependencies{
    compile project(':node')
}

shadowJar {
    baseName = 'config-exporter'
    classifier = null
    version = null
    zip64 true
    exclude '**/Log4j2Plugins.dat'
}

docker{
    registryCredentials  {
        url = System.env.DOCKER_URL ?: "hub.docker.com"
        username = System.env.DOCKER_USERNAME
        password = System.env.DOCKER_PASSWORD
    }
}

final dockerTempDir = file("$buildDir/docker-temp")

task buildDockerFolder(type: Copy) {
    into dockerTempDir
    from "src/bash/run-corda.sh"
    from(project(':node:capsule').tasks.buildCordaJAR) {
        rename 'corda-(.*)', 'corda.jar'
    }
    from(shadowJar) {
        rename 'config-exporter-(.*).jar', 'config-exporter.jar'
    }
    from "src/config/starting-node.conf"
    from "src/bash/generate-config.sh"
    from "src/docker/DockerfileAL"
    from "src/docker/Dockerfile"
    from "src/docker/Dockerfile11"
}

final String runTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))
final String suffix = project.version.toString().toLowerCase().contains("snapshot") ?  runTime : "RELEASE"
final zuluBuildTags = ["corda/corda-zulu-java${JavaVersion.current()}-${project.version.toString().toLowerCase()}:${suffix}", "corda/corda-zulu-java${JavaVersion.current()}-${project.version.toString().toLowerCase()}:latest"]
final correttoBuildTags = ["corda/corda-corretto-java${JavaVersion.current()}-${project.version.toString().toLowerCase()}:${suffix}", "corda/corda-corretto-java${JavaVersion.current()}-${project.version.toString().toLowerCase()}:latest"]

task buildOfficialZuluDockerImage(type: DockerBuildImage, dependsOn: [buildDockerFolder]) {
    inputDir = dockerTempDir
    tags = zuluBuildTags
    dockerFile = new File(dockerTempDir, "Dockerfile")
}

task buildOfficialZuluJDK11DockerImage(type: DockerBuildImage, dependsOn: [buildDockerFolder]) {
    inputDir = dockerTempDir
    tags = zuluBuildTags
    dockerFile = new File(dockerTempDir, "Dockerfile11")
}

task buildOfficialCorrettoDockerImage(type: DockerBuildImage, dependsOn: [buildDockerFolder]) {
    inputDir = dockerTempDir
    tags = correttoBuildTags
    dockerFile = new File(dockerTempDir, "DockerfileAL")
}

task pushZuluTimeStampedTag('type': DockerPushImage, dependsOn: [buildOfficialZuluDockerImage]){
    imageName = zuluBuildTags[0]
}

task pushZuluLatestTag('type': DockerPushImage, dependsOn: [buildOfficialZuluDockerImage]){
    imageName = zuluBuildTags[1]
}

task pushZulu11TimeStampedTag('type': DockerPushImage, dependsOn: [buildOfficialZuluJDK11DockerImage]){
    imageName = zuluBuildTags[0]
}

task pushZulu11LatestTag('type': DockerPushImage, dependsOn: [buildOfficialZuluJDK11DockerImage]){
    imageName = zuluBuildTags[1]
}

task pushCorrettoTimeStampedTag('type': DockerPushImage, dependsOn: [buildOfficialCorrettoDockerImage]){
    imageName = correttoBuildTags[0]
}

task pushCorrettoLatestTag('type': DockerPushImage, dependsOn: [buildOfficialCorrettoDockerImage]){
    imageName = correttoBuildTags[1]
}

task pushOfficialImages(dependsOn: [pushZuluTimeStampedTag, pushZuluLatestTag, pushCorrettoTimeStampedTag, pushCorrettoLatestTag])