node {
    // Git checkout before load source the file
    checkout scm

    def rootDir = pwd()
    def yaml2Map = load "./sharedLibs/yaml2Map.groovy"
    def stages = load "./sharedLibs/stages.k8s.groovy"

    jdk = tool name: 'openJDK8'
    env.JAVA_HOME = "${jdk}"
    
    def GLOBAL_CONFIG = yaml2Map.read('global.yaml').project
    dir("poyee-order/DEV") {
        def PROJECT_CONFIG = yaml2Map.read('cfg.yaml').project
        def CONFIG = yaml2Map.merge(PROJECT_CONFIG, GLOBAL_CONFIG)
        CONFIG.docker.image = String.format(CONFIG.docker.image, CONFIG.service.name)
        println 'configs: ' + CONFIG

        def generateDockerfile = {->
            pathOfDockerfile='projdir'
            module = CONFIG.service.module
            module = module == null ? '' : (module[-1] == '/' ? module : module + '/')

            JAR = CONFIG.service.jar
            sh """cat > ${pathOfDockerfile}/Dockerfile<<EOF
FROM openjdk:17-alpine as final
ADD ${module}target/${JAR} /app/target/${JAR}
EOF
"""
            return pathOfDockerfile
        }

        String[] JAVA_ARGS = ["-Djava.security.egd=file:/dev/./urandom",
            "-Djava.awt.headless=true",
            "-Xmx1024m",
            "-Dspring.profiles.active=dev",
            "-Dserver.port=80",
            "-jar","/app/target/${CONFIG.service.jar}"]
        String[] JAVA_ARGS_2ND = ["-Djava.security.egd=file:/dev/./urandom",
            "-Djava.awt.headless=true",
            "-Xmx1024m",
            "-Dspring.profiles.active=dev",
            "-Dserver.port=80",
            "-jar","/app/target/${CONFIG.service.jar}"]
        String[] K8S_BACKUPS = []

        if ("upgrade" == action || "upgrade:selected" == action) {

            def base_branch = actionParameter.tokenize('/')[2]
            stages.upgrade(CONFIG, base_branch, K8S_BACKUPS, [
                'GENERATEDOCKERFILE': {generateDockerfile()},
                'K3SDEPLOY' : {
                    stages.deployWithConfigmapEnvOnly(CONFIG.service, CONFIG.k3s, "dev", JAVA_ARGS, "./configmap-env.ini","ahxpm")
                    stages.deployWithConfigmapEnvOnly2nd(CONFIG.service, CONFIG.k3s, "dev", JAVA_ARGS_2ND, './configmap-env.ini',"ahxpm")
                }
            ])
        }
    }
}