// Jenkins build entry

@Library('pyscripts') _

pipeline {
    agent { label "${env.LABEL_PIPELINE}" }

    options {
        timeout(time: 30, unit: 'MINUTES') // 设置 30 分钟超时
    }

    parameters {
        string(
            name: 'JENKINS_CONTEXT',
            defaultValue: '',
            description: '填写 SDK 名称，作为上下文，例如 ZegoExpressEngine / ZIM / ZegoLiveRoom / ZegoEffects / ZegoConnection'
        )

        string(
            name: 'BRANCH',
            defaultValue: 'main',
            description: '要构建的 SDK 分支，常用分支：     main     develop     \n\n'
        )

        booleanParam(
            name: 'IS_RELEASE',
            defaultValue: false,
            description: '是否是正式版本'
        )

        booleanParam(
            name: 'SEND_ROBOT_NOTIFICATION',
            defaultValue: true,
            description: '是否发送机器人通知'
        )
    }

    stages {
        stage('Run') {
            agent { label "${env.LABEL_FLUTTER}" }

            steps {
                // 安装 pyscripts 仓库
                setup_pyscripts()

                script {
                    // 读取package.json中的版本号
                    env.RELEASE_VERSION = sh(returnStdout: true, script: 'cat pubspec.yaml | grep version | head -1 | awk \'{print $2}\' | tr -d \'",\' ').trim()

                    env.PACKAGE_NAME = sh(returnStdout: true, script: 'cat pubspec.yaml | grep name | head -1 | awk \'{print $2}\' | tr -d \'",\' ').trim()

                    echo "building ${env.PACKAGE_NAME} version=${env.RELEASE_VERSION}"

                    currentBuild.description = "${params.JENKINS_CONTEXT} - ${env.RELEASE_VERSION} - \"${params.BRANCH}\""

                    // 获取发起构建任务的用户 ID
                    buildUser = get_build_user()

                    // 检查 flutter 版本
                    sh 'flutter --version'

                    // sh 'flutter pub token list'

                    // 发布项目
                    if (!params.IS_RELEASE) {
                        // 修改 pubspec.yaml, 把版本号加个 dev
                        devVersion = "${env.RELEASE_VERSION}-dev.${BUILD_NUMBER}"
                        modifiedContent = sh(returnStdout: true, script: "cat pubspec.yaml | sed -E 's/version: ([0-9]+\\.[0-9]+\\.[0-9]+)/version: ${devVersion}/'").trim()
                        writeFile file: 'pubspec.yaml', text: modifiedContent
                        // 更新 change log
                        sh "echo '* ## ${devVersion} \\n\\n* ${params.JENKINS_CONTEXT}\\n' | cat - CHANGELOG.md > temp && mv temp CHANGELOG.md"
                    }
                    sh 'yes y | flutter pub publish --server=https://pub.dev'
                }
            }
        }
    }

    post {
        success {
            script {
                // 发送成功通知
                if (params.SEND_ROBOT_NOTIFICATION) {
                    def mdBody = "\n📝 上下文: ${currentBuild.description}"
                    mdBody += '\n🚀 SDK 已更新到 Pub'
                    mdBody += "\n🔖 包名：${env.PACKAGE_NAME}"
                    mdBody += "\n🔖 发布版本：${env.RELEASE_VERSION}"
                    report_lark(env.LARK_WEBHOOK, true, env.PROJECT_NAME, buildUser, mdBody)
                }
            }
        }

        unsuccessful {
            script {
                // 发送失败通知
                if (params.SEND_ROBOT_NOTIFICATION) {
                    def mdBody = "\n📝 上下文: ${currentBuild.description}"
                    mdBody += "\n🚨 <font color='red'>发布失败</font>"
                    report_lark(env.LARK_WEBHOOK, false, env.PROJECT_NAME, buildUser, mdBody)
                }
            }
        }

    // always {
    //   // 完成后清理 WorkSpace
    //   cleanWs()
    // }
    }
}
