def call()

in vars/asfMainNetBeansBuild.groovy [59:281]


def call(Map params = [:]) {
    // variable needed for apidoc


    pipeline {
        options {
            buildDiscarder(logRotator(numToKeepStr: '2'))
            disableConcurrentBuilds()
            timeout(time: 340, unit: 'MINUTES')
        }
        // 
        agent { node { label 'ubuntu && !ephemeral' } }

        parameters {
            booleanParam(name: 'INSTALLERS', defaultValue: false, description: 'Build installers?')
            booleanParam(name: 'VSIX', defaultValue: false, description: 'Build VSCode plugin?')
            booleanParam(name: 'NIGHTLIES', defaultValue: false, description: 'Publish to nightlies.apache.org?')
        }

        stages {
            stage("Preparing Variable") {
                //agent { node { label 'ubuntu && !nocredentials' } }
                steps {
                    script {
                        // test if we can do that
                        sh 'curl "https://netbeans.apache.org/nbbuild/netbeansrelease.json" -L -o netbeansrelease.json'
                        def releaseInformation = readJSON file: 'netbeansrelease.json'
                        sh 'rm -f netbeansrelease.json'
                        branch = env.BRANCH_NAME
                        def githash = env.GIT_COMMIT
                        println '20231904'
                        println githash
                        println branch
                        // we need npm later test early
                        sh 'npm --version'
                        if (!releaseInformation[branch]) {
                            // no branch definined in json exit build
                            if (releaseInformation[branch.replace('vsnetbeans_preview_','release')]) {
                                // branch is release1234 for vsnetbeans_preview_1237
                                branch = branch.replace('vsnetbeans_preview_','release')
                            } else if (releaseInformation[branch.replace('vsnetbeans_','release')]) {
                                // branch is release1234 for vsnetbeans_1237
                                branch = branch.replace('vsnetbeans_','release')
                            }
                            else {
                                // no branch definined in json exit build
                                currentBuild.result = "FAILURE"
                                throw new Exception("No entry in json for $branch")
                            }
                        }
                        tooling.myAnt = releaseInformation[branch].ant;
                        apidocurl = releaseInformation[branch].apidocurl
                        mavenVersion=releaseInformation[branch].mavenversion

                        switch (releaseInformation[branch].releasedate['month']) {
                        case '01':month  = 'Jan'; break;
                        case '02':month  = 'Feb'; break;
                        case '03':month  = 'Mar'; break;
                        case '04':month  = 'Apr'; break;
                        case '05':month  = 'May'; break;
                        case '06':month  = 'Jun'; break;
                        case '07':month  = 'Jul'; break;
                        case '08':month  = 'Aug'; break;
                        case '09':month  = 'Sep'; break;
                        case '10':month  = 'Oct'; break;
                        case '11':month  = 'Nov'; break;
                        case '12':month  = 'Dec'; break;
                        default: month ='Invalid';
                        }
                        date  = releaseInformation[branch].releasedate['day'] + ' '+ month + ' '+releaseInformation[branch].releasedate['year']
                        //2018-07-29T12:00:00Z
                        atomdate = releaseInformation[branch].releasedate['year']+'-'+releaseInformation[branch].releasedate['month']+'-'+releaseInformation[branch].releasedate['day']+'T12:00:00Z'
                        tooling.jdktool = releaseInformation[branch].jdk
                        if (releaseInformation[branch].jdktoolapidoc) {
                            tooling.jdktoolapidoc = releaseInformation[branch].jdktoolapidoc
                        }else {
                            tooling.jdktoolapidoc = releaseInformation[branch].jdk
                        }
                        tooling.myMaven = releaseInformation[branch].maven
                        version = releaseInformation[branch].versionName;
                        vsixversion = releaseInformation[branch].vsixVersion;
                        // make a new attribute in json for this.
                        heavyrelease = releaseInformation[branch].publish_apidoc == 'true';
                        rmversion = version
                        //
                        if (releaseInformation[branch].milestones) {
                            releaseInformation[branch].milestones.each{key,value ->
                                if (key==githash) {
                                    // vote candidate prior
                                    if (value['vote']) {
                                        votecandidate = true
                                        vote = value['vote']
                                        rmversion = rmversion
                                    } else if (value['version']){
                                        // other named version
                                        rmversion = rmversion+'-'+value['version']
                                    }
                                }
                            }
                        }
                        debversion = rmversion.replace('-','~')
                    }
                }
            }
            stage ('Master build') {
                tools {
                    jdk tooling.jdktool
                }
                when {
                    branch 'master'
                }
                stages {
                    stage ('build javadoc') {
                        steps {
                            withAnt(installation: tooling.myAnt) {
                                sh "ant getallmavencoordinates"
                                sh "ant build-nbms"
                                sh "ant build-source-zips"
                            }
                            withEnv( ["ANT_OPTS=-Djdk.xml.totalEntitySizeLimit=200000"]){
                                withAnt(installation: tooling.myAnt, jdk: tooling.jdktoolapidoc) {

                                    sh "ant build-javadoc -Djavadoc.web.zip=${env.WORKSPACE}/WEBZIP.zip"

                                    junit 'nbbuild/build/javadoc/checklinks-errors.xml'

                                    publishToNightlies("/netbeans/apidocs/${env.BRANCH_NAME}","**/WEBZIP.zip")
                                }
                            }
                        }
                    }
                    stage (' Populate Snapshots') {
                        steps {
                            withAnt(installation: tooling.myAnt) {
                                script {
                                    def localRepo = "${env.WORKSPACE}/.repository"
                                    def netbeansbase = "nbbuild"
                                    def commonparam = "-Dexternallist=${netbeansbase}/build/external.info"

                                    sh "rm -rf ${env.WORKSPACE}/.repository"
                                    withMaven(maven:tooling.myMaven,jdk:tooling.jdktool,publisherStrategy: 'EXPLICIT',mavenLocalRepo: localRepo)
                                    {
                                        sh "mvn org.apache.maven.plugins:maven-dependency-plugin:3.5.0:get -Dartifact=org.apache.netbeans.utilities:nb-repository-plugin:${repopluginversion} -DremoteRepositories=apache.snapshots.https::::https://repository.apache.org/snapshots"

                                        //sh "mvn org.apache.netbeans.utilities:nb-repository-plugin:1.5:download -DnexusIndexDirectory=${env.WORKSPACE}/repoindex -DrepositoryUrl=https://repo.maven.apache.org/maven2"
                                        sh "mvn org.apache.netbeans.utilities:nb-repository-plugin:${repopluginversion}:populate -X ${commonparam} -DnetbeansNbmDirectory=${netbeansbase}/nbms -DnetbeansInstallDirectory=${netbeansbase}/netbeans -DnetbeansSourcesDirectory=${netbeansbase}/build/source-zips -DnetbeansJavadocDirectory=${netbeansbase}/build/javadoc -DparentGAV=org.apache.netbeans:netbeans-parent:4 -DforcedVersion=${mavenVersion} -DskipInstall=true -DdeployId=apache.snapshots.https -DdeployUrl=https://repository.apache.org/content/repositories/snapshots"
                                    }
                                }
                            }
                        }
                    }
                }
            }            
            stage ('Release preparation') {
                tools {
                    jdk tooling.jdktool
                }
                when {
                    allOf {
                        //expression { BRANCH_NAME ==~ /release[0-9]+/  || BRANCH_NAME ==~ /vsnetbeans_preview_[0-9]+/ }
                        branch pattern : "release\\d+|vsnetbeans_preview_\\d+",comparator:"REGEXP"
                        //wait for modern 1.4.1
                        expression { month =='Invalid' }
                    }
                }
                steps {
                    script {
                        def clusterconfigs = [/*['platform','netbeans-platform'],*/['release','netbeans']]
                        doParallelClusters(clusterconfigs);
                    }
                }
            }
            stage ('Release branch javadoc rebuild to nightlies') {
                tools {
                    jdk tooling.jdktool
                }
                when {
                    allOf {
                        //expression { BRANCH_NAME ==~ /release[0-9]+/ }
                        branch pattern : "release\\d+",comparator:"REGEXP"
                        //wait for modern 1.4.1
                    }

                }
                stages {
                    stage ('Archive Javadoc') {
                        steps {
                            withAnt(installation: tooling.myAnt) {
                                sh "ant"
                            }
                            // use jdk version aligned to max supported
                            withEnv( ["ANT_OPTS=-Djdk.xml.totalEntitySizeLimit=200000"]){
                                withAnt(installation: tooling.myAnt, jdk: tooling.jdktoolapidoc) {
                                    sh "ant build-javadoc -Djavadoc.web.zip=${env.WORKSPACE}/WEBZIP.zip"
                                }
                            }
                            junit 'nbbuild/build/javadoc/checklinks-errors.xml'
                            publishToNightlies("/netbeans/apidocs/${env.BRANCH_NAME}","**/WEBZIP.zip")
                        }
                    }
                }

            }
        }


        post {
            cleanup {
                cleanWs()
            }
            success {
                slackSend (channel:'#netbeans-builds', message:"SUCCESS: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]' (${env.BUILD_URL}) ",color:'good')
            }
            unstable {
                slackSend (channel:'#netbeans-builds', message:"UNSTABLE: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]' (${env.BUILD_URL}) ",color:'warning')
            }
            failure {
                slackSend (channel:'#netbeans-builds', message:"FAILED: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]'  (${env.BUILD_URL})",color:'danger')
            }

        }
    }
}