evaluationDependsOn(":node:capsule")
buildscript {
    repositories {
        mavenLocal()
        mavenCentral()
        jcenter()
    }
    dependencies {
        classpath 'com.bmuschko:gradle-docker-plugin:3.4.4'
    }
}


import com.bmuschko.gradle.docker.DockerRemoteApiPlugin
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: DockerRemoteApiPlugin
apply plugin: 'application'
// 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
}

docker{
    registryCredentials  {
        url = System.env.DOCKER_URL
        username = System.env.DOCKER_USERNAME
        password = System.env.DOCKER_PASSWORD
    }
}

task buildDockerFolder(dependsOn: [":node:capsule:buildCordaJAR", shadowJar]) {
    doLast {
        def cordaJar = project(":node:capsule").buildCordaJAR.archivePath
        project.copy {
            into new File(project.buildDir, "docker-temp")
            from "src/bash/run-corda.sh"
            from cordaJar
            from shadowJar.archivePath
            from "src/config/starting-node.conf"
            from "src/bash/generate-config.sh"
            from "src/docker/DockerfileAL"
            from "src/docker/Dockerfile"
            rename(cordaJar.name, "corda.jar")
            rename(shadowJar.archivePath.name, "config-exporter.jar")
        }
    }
}

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-${project.version.toString().toLowerCase()}:${suffix}", "corda/corda-zulu-${project.version.toString().toLowerCase()}:latest"]
final correttoBuildTags = ["corda/corda-corretto-${project.version.toString().toLowerCase()}:${suffix}", "corda/corda-corretto-${project.version.toString().toLowerCase()}:latest"]

task buildOfficialZuluDockerImage(type: DockerBuildImage, dependsOn: [buildDockerFolder]) {
    inputDir = new File(project.buildDir, "docker-temp")
    tags = zuluBuildTags
    dockerFile = new File(new File(project.buildDir, "docker-temp"), "Dockerfile")
}

task buildOfficialCorrettoDockerImage(type: DockerBuildImage, dependsOn: [buildDockerFolder]) {
    inputDir = new File(project.buildDir, "docker-temp")
    tags = correttoBuildTags
    dockerFile = new File(new File(project.buildDir, "docker-temp"), "DockerfileAL")
}

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

task pushZuluLatestTag('type': DockerPushImage, dependsOn: [buildOfficialZuluDockerImage]){
    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])