pipeline {
    agent any

    parameters {
        booleanParam(name: 'DEPLOY', defaultValue: false, description: 'Publish bundles to release portal (/srv/releases, served on :8081)')
    }

    tools {
        gradle 'gradle-8.14'
    }

    options {
        timestamps()
        buildDiscarder(logRotator(numToKeepStr: '10'))
    }

    stages {
        stage('Assemble') {
            steps {
                sh 'gradle :modules:orgflow-domain:assemble'
            }
        }
        stage('jvm (x86_64)') {
            steps {
                sh 'gradle :modules:orgflow-domain:jvmTest'
            }
        }
        stage('android') {
            steps {
                sh 'gradle :modules:orgflow-domain:testDebugUnitTest :modules:orgflow-domain:testReleaseUnitTest'
            }
        }
        stage('wasm') {
            steps {
                sh 'gradle :modules:orgflow-domain:wasmJsNodeTest'
            }
        }
        stage('linux native (x86_64)') {
            steps {
                sh 'gradle :modules:orgflow-domain:linuxX64Test'
            }
        }
        stage('Archive') {
            steps {
                archiveArtifacts artifacts: 'modules/orgflow-domain/build/libs/*.jar,modules/orgflow-domain/build/outputs/aar/*.aar,modules/orgflow-domain/build/js/packages/kukuri-wasm-js/kotlin/*,modules/orgflow-domain/build/bin/linuxX64/*/kukuri.kexe', fingerprint: true
            }
        }
        stage('Deploy') {
            when { expression { return params.DEPLOY } }
            steps {
                sh 'gradle :modules:orgflow-domain:bundleDesktop :modules:orgflow-domain:bundleWasmNode :modules:orgflow-domain:bundleWeb :modules:orgflow-domain:bundleNative'
                sh '''set -e
                PW=$(cat /run/secrets/git_pass)
                BASE="ftp://192.168.3.110/var/www/html/artifact/kukuri/latest"
                D="latest"
                # disk-constrained server: only 'latest' is kept (overwrites previous)
                for f in modules/orgflow-domain/build/distributions/*.zip; do
                  curl -sf -u ketsuban:$PW --ftp-create-dirs -T "$f" "$BASE/$D/$(basename "$f")"
                done
                # browser-runnable wasm app -> latest/web/
                rm -rf webout && mkdir -p webout
                unzip -q build/distributions/kukuri-wasm-web-*.zip -d webout
                for f in webout/*; do
                  curl -sf -u ketsuban:$PW --ftp-create-dirs -T "$f" "$BASE/web/$(basename "$f")"
                done
                '''
            }
        }
    }

    post {
        always {
            junit allowEmptyResults: true, testResults: 'build/test-results/**/*.xml'
        }
    }
}
