def getCurrentTime() {
  def dateFormat = new java.text.SimpleDateFormat('yyyyMMddHHmmss')
  return dateFormat.format(new Date())
}

pipeline {
  agent any
  parameters {
    //separator 需要安装插件Parameter Separator Plugin
    separator(name: "COMMON_PARAMATERS", sectionHeader: "公共参数", sectionHeaderStyle: """
				font-size: 34px;
			""")
    choice(name:'JENKIN_BUILD_PLATFORM', choices: ['FB', 'WEB-MOBILE', 'ANDROID', 'IOS'], description: '选择构建平台')
    booleanParam(name:'JENKIN_AUTO_INSTALL', defaultValue: false, description: '是否自动安装')
    booleanParam(name:'JENKIN_AUTO_DEPLOY', defaultValue: false, description: '是否自动发布')
    
    //FB参数
    separator(name: "FB_PARAMATERS", sectionHeader: "fb参数", sectionHeaderStyle: """
				font-size: 34px;
			""")
    string(name:'JENKIN_FB_COMMENT', defaultValue: 'no comment', description: 'fb发布的comment')

    //Android参数
    separator(name: "ANDROID_PARAMATERS", sectionHeader: "android参数", sectionHeaderStyle: """
				font-size: 34px;
			""")
    booleanParam(name:'JENKIN_ANDROID_DEBUG_FLAG', defaultValue: false, description: '是否构建android debug包')
    string(name:'JENKIN_ANDROID_VERSION_CODE', defaultValue: '3', description: 'android的Version Code')
    string(name:'JENKIN_ANDROID_VERSION_NAME', defaultValue: '1.0.7.2', description: 'android的Version Name')
    choice(name:'JENKIN_ANDROID_ARTIFACT_TYPE',choices: ['APK', 'AAB'], description: '构建android产物类型')

    //IOS参数
    separator(name: "IOS_PARAMATERS", sectionHeader: "IOS参数", sectionHeaderStyle: """
				font-size: 34px;
			""")
    booleanParam(name:'JENKIN_IOS_INTERNAL_TESTING_ONLY_FLAG', defaultValue: false, description: '是否testflight internal testing only')
    string(name:'JENKIN_IOS_BUNDLE_VERSION_SHORT', defaultValue: '1.0.0', description: 'IOS的Version Short')
    string(name:'JENKIN_IOS_BUNDLE_VERSION', defaultValue: '1.0.0.0', description: 'IOS的Version')
  }
  stages {
    stage('Print Infomations') {
      steps {
        echo "========================"
        echo "[BuildTag]: $env.BUILD_TAG"
        echo "[BuildId]: $env.BUILD_ID"
        echo "[构建平台]: $params.JENKIN_BUILD_PLATFORM"
        echo "[是否自动安装]: $params.JENKIN_AUTO_INSTALL"
        echo "[是否自动发布]: $params.JENKIN_AUTO_DEPLOY"

        script {
          if (params.JENKIN_BUILD_PLATFORM == 'FB') {
            echo "[FB Comment]: ${params.JENKIN_FB_COMMENT}"
          }else if(params.JENKIN_BUILD_PLATFORM == 'WEB-MOBILE'){
            echo "[WEB-MOBILE]: none"
          }else if(params.JENKIN_BUILD_PLATFORM == 'ANDROID'){
            echo "[ANDROID 是否debug]: ${params.JENKIN_ANDROID_DEBUG_FLAG}"
            echo "[ANDROID Version Code]: ${params.JENKIN_ANDROID_VERSION_CODE}"
            echo "[ANDROID Version Name]: ${params.JENKIN_ANDROID_VERSION_NAME}"
            echo "[ANDROID 产物]: ${params.JENKIN_ANDROID_ARTIFACT_TYPE}"
          }else if(params.JENKIN_BUILD_PLATFORM == 'IOS'){
            echo "[IOS 是否internal testing only]: ${params.JENKIN_IOS_INTERNAL_TESTING_ONLY_FLAG}"
            echo "[IOS Version Short]: ${params.JENKIN_IOS_BUNDLE_VERSION_SHORT}"
            echo "[IOS Version]: ${params.JENKIN_IOS_BUNDLE_VERSION}"
          }
        }

        echo "========================"
      }
    }
    stage('Build') {
      parallel {
        stage('Build-FB') {
          //构建FB
          when {
            //条件判断 构建平台选择了FB
            environment name:'JENKIN_BUILD_PLATFORM', value:'FB'
          }
          steps {
            echo 'Building FB..'
            sh "$WORKSPACE/jenkins/common-build-cocos.sh"
          }
          post {
            success {
              //存储产物
              echo 'Save Artifacts'
              archiveArtifacts artifacts: '**/build/fb-instant-games/*.zip', fingerprint: true
            }
          }
        }
        stage('Build-Web-Mobile') {
          //构建WEB-MOBILE
          when {
            //条件判断 构建平台选择了WEB-MOBILE
            environment name:'JENKIN_BUILD_PLATFORM', value:'WEB-MOBILE'
          }
          steps {
            echo 'Building WEB-MOBILE..'
            sh "$WORKSPACE/jenkins/common-build-cocos.sh"
          }
          post {
            success {
              //存储产物
              echo 'Zip Artifacts'
              zip archive: false, zipFile: "./build/web-mobile/archive-web-mobile-$env.BUILD_TAG-${getCurrentTime()}.zip", dir: './build/web-mobile'
              echo 'Save Artifacts'
              archiveArtifacts artifacts: '**/build/web-mobile/archive-web-mobile-*.zip', fingerprint: true
            }
          }
        }
        stage('Build-Android') {
          //构建Android
          when {
            //条件判断 构建平台选择了ANDROID
            environment name:'JENKIN_BUILD_PLATFORM', value:'ANDROID'
          }
          stages {
            stage('Build-Android-Aab'){
              when {
                //条件判断 生成产物是AAB
                environment name:'JENKIN_ANDROID_ARTIFACT_TYPE', value:'AAB'
              }
              steps {
                echo 'Building ANDROID AAB..'
                //构建项目
                sh "$WORKSPACE/jenkins/common-build-cocos.sh"
                //打包aab
                sh "$WORKSPACE/jenkins/android/build_aab.sh"
              }
              post {
                success {
                  //存储产物
                  echo 'Save Artifacts'
                  archiveArtifacts artifacts: '**/build/android/proj/build/app/outputs/bundle/**/*.aab', fingerprint: true
                }
              }
            }
            stage('Build-Android-Apk'){
              when {
                //条件判断 生成产物是APK
                environment name:'JENKIN_ANDROID_ARTIFACT_TYPE', value:'APK'
              }
              steps {
                echo 'Building ANDROID APK..'
                //构建项目
                sh "$WORKSPACE/jenkins/common-build-cocos.sh"
                //打包apk
                sh "$WORKSPACE/jenkins/android/build_apk.sh"
              }
              post {
                success {
                  //存储产物
                  echo 'Save Artifacts'
                  archiveArtifacts artifacts: '**/build/android/proj/build/app/outputs/apk/**/*.apk', fingerprint: true
                }
              }
            }
          }
        }
        stage('Build-IOS') {
          //构建IOS
          when {
            //条件判断 构建平台选择了IOS
            environment name:'JENKIN_BUILD_PLATFORM', value:'IOS'
          }
          steps {
            echo 'Building IOS..'
            sh "$WORKSPACE/jenkins/common-build-cocos.sh"
            //打包ipa
            sh "$WORKSPACE/jenkins/ios/build_ipa.sh"
          }
          post {
            success {
              //存储产物
              echo 'Save Artifacts'
              archiveArtifacts artifacts: '**/build/ios/proj/Archive/**/*.ipa', fingerprint: true
            }
          }
        }
      }
    }
    stage('Install') {
      when {
        //条件判断 自动安装
        expression { params.JENKIN_AUTO_INSTALL }
      }
      parallel{
        stage('Install-Android') {
          when {
            environment name:'JENKIN_BUILD_PLATFORM', value:'ANDROID'
          }
          steps {
            echo 'Installing ANDROID..'
            sh "$WORKSPACE/jenkins/android/install.sh"
          }
        }
      }
    }
    stage('Deploy') {
      when {
        //条件判断 自动发布
        expression { params.JENKIN_AUTO_DEPLOY }
      }
      parallel {
        stage('Deploy-FB') {
          when {
            environment name:'JENKIN_BUILD_PLATFORM', value:'FB'
          }
          steps {
            echo 'Deploying FB....'
            sh "$WORKSPACE/jenkins/fb/deploy.sh"
          }
        }
        stage('Deploy-Web-Mobile') {
          when {
              environment name:'JENKIN_BUILD_PLATFORM', value:'WEB-MOBILE'
          }
          steps {
            echo 'Deploying Web-Mobile....'
            sh "$WORKSPACE/jenkins/web-mobile/deploy.sh"
          }
        }
        stage('Deploy-Android') {
          when {
              environment name:'JENKIN_BUILD_PLATFORM', value:'ANDROID'
          }
          steps {
            echo 'Deploying Android....'
            script {
              def artifact_name = ""
              def artifact_file_path = ""
              if (params.JENKIN_ANDROID_ARTIFACT_TYPE == 'APK') {
                //apk
                def files = findFiles(glob: "**/build/android/proj/build/app/outputs/apk/**/*.apk")
                if (files[0] != null) {
                  artifact_name = files[0].name
                  artifact_file_path = files[0].path
                }
              }else {
                //aab
                def files = findFiles(glob: "**/build/android/proj/build/app/outputs/bundle/**/*.aab")
                if (files[0] != null) {
                  artifact_name = files[0].name
                  artifact_file_path = files[0].path
                }
              }
              if(artifact_name && artifact_file_path){
                sh "$WORKSPACE/jenkins/android/deploy.sh"

                //生成ftp远程下载链接
                ANDROID_ARTIFACT_REMOTE_URL=""

                echo "Remote Url : ${ANDROID_ARTIFACT_REMOTE_URL}"
              }
            }
          }
        }
        stage('Deploy-IOS') {
          when {
            environment name:'JENKIN_BUILD_PLATFORM', value:'IOS'
          }
          steps {
            echo 'Deploying IOS....'
            sh "$WORKSPACE/jenkins/ios/deploy.sh"
          }
        }
      }
      post {
        success {
          input message:'是否发送飞书通知', ok:'发送'
          echo "发送"
          script {
            def feishu_server_url = "" //飞书webhook
            def gitLog = sh(script: 'git log -1 --pretty=oneline ${GIT_COMMIT}', returnStdout: true).trim()
            def title = "${env.BRANCH_NAME} ${params.JENKIN_BUILD_PLATFORM}发布"
            def downloadLink = ""

            if (params.JENKIN_BUILD_PLATFORM == 'ANDROID') {
              //android才是生成下载链接
              downloadLink = ANDROID_ARTIFACT_REMOTE_URL
            }

            def json = """
            {
                "msg_type":"text",
                "content":{
                    "title":"${title}",
                    "text":"${gitLog}",
                    "archive_url":"${downloadLink}"
                }
            }
            """
            sh "curl -X POST -H 'Content-Type: application/json' -d '${json}' ${webhookUrl}"
          }
        }
      }
    }
  }
}
