pipeline {
    agent any
    options {
        disableConcurrentBuilds()
        timeout(time: 20, unit: 'MINUTES')
    }
    environment {
        NORMAE_BASE_URL = 'https://controller.example.com'
        NORMAE_TENANT_ID = '7'
        CONFIG_DIR = 'config-sets/tenant7'
        CONFIG_SET_NAME = 'tenant7-portal'
        STATIC_RESOURCE_NAME = 'customer-portal'
        ENGINE_A_ID = '31'
        ENGINE_B_ID = '32'
        RELEASE_URL = 'https://portal.example.com/release.txt'
    }
    stages {
        stage('安装脚本依赖') {
            steps {
                sh '''
                    set -eu
                    python3 -m venv .venv
                    .venv/bin/python -m pip install -r ci/requirements.txt
                '''
            }
        }
        stage('构建前端') {
            steps {
                sh 'npm ci && npm run build'
            }
        }
        stage('准备发布包') {
            steps {
                sh '''
                    set -eu
                    test -n "$GIT_COMMIT"
                    printf '%s\n' "$GIT_COMMIT" > dist/release.txt
                    tar -czf portal.tar.gz -C dist .
                '''
                archiveArtifacts artifacts: 'portal.tar.gz,dist/release.txt', fingerprint: true
            }
        }
        stage('发布与验收') {
            environment {
                NORMAE_TOKEN = credentials('normae-tenant7-release-token')
            }
            steps {
                sh '''
                    set +x
                    set -eu
                    .venv/bin/python ci/static_resource_publish.py upload \
                        --tenant-id "$NORMAE_TENANT_ID" \
                        --name "$STATIC_RESOURCE_NAME" --archive portal.tar.gz
                    .venv/bin/python ci/config_set_sync.py "$CONFIG_DIR" \
                        --tenant-id "$NORMAE_TENANT_ID" --name "$CONFIG_SET_NAME"
                    .venv/bin/python ci/static_resource_publish.py verify \
                        --tenant-id "$NORMAE_TENANT_ID" --name "$STATIC_RESOURCE_NAME" \
                        --engine-id "$ENGINE_A_ID" --engine-id "$ENGINE_B_ID" \
                        --url "$RELEASE_URL" --expected-file dist/release.txt
                '''
            }
        }
    }
}
