Test VSIX release for releasebranch
diff --git a/meta/netbeansrelease.json b/meta/netbeansrelease.json
index a0fe9f2..3a93a62 100644
--- a/meta/netbeansrelease.json
+++ b/meta/netbeansrelease.json
@@ -409,6 +409,7 @@
         "jdk_apidoc": "https://docs.oracle.com/javase/8/docs/api/",
         "maven": "maven_3.3.9",
         "versionName": "12.4",
+        "vsixVersion": "12.4.0",
         "mavenversion": "RELEASE124",
         "tlp": "true",
         "apidocurl": "https://bits.netbeans.org/12.4/javadoc",
@@ -459,6 +460,7 @@
         "jdk_apidoc": "https://docs.oracle.com/javase/8/docs/api/",
         "maven": "maven_3.3.9",
         "versionName": "12.4.301",
+        "vsixVersion": "12.4.301",
         "tlp": "true",
         "apidocurl": "",
         "update_url": "https://netbeans.apache.org/nb/updates/12.4/updates.xml.gz?{$netbeans.hash.code}",
@@ -488,6 +490,7 @@
         "jdk_apidoc": "https://docs.oracle.com/javase/8/docs/api/",
         "maven": "maven_3.3.9",
         "versionName": "12.5",
+        "vsixVersion": "12.5.0",
         "mavenversion": "RELEASE125",
         "tlp": "true",
         "apidocurl": "https://bits.netbeans.org/12.5/javadoc",
@@ -526,6 +529,7 @@
         "jdk_apidoc": "https://docs.oracle.com/javase/8/docs/api/",
         "maven": "maven_3.3.9",
         "versionName": "12.5.301",
+        "vsixVersion": "12.5.301",
         "tlp": "true",
         "apidocurl": "https://bits.netbeans.org/12.5/javadoc",
         "update_url": "https://netbeans.apache.org/nb/updates/12.5/updates.xml.gz?{$netbeans.hash.code}",
@@ -555,6 +559,7 @@
         "jdk_apidoc": "https://docs.oracle.com/javase/8/docs/api/",
         "maven": "maven_3.3.9",
         "versionName": "12.6",
+        "vsixVersion": "12.6.0",
         "mavenversion": "RELEASE126",
         "tlp": "true",
         "apidocurl": "https://bits.netbeans.org/12.6/javadoc",
@@ -593,6 +598,7 @@
         "jdk_apidoc": "https://docs.oracle.com/javase/8/docs/api/",
         "maven": "maven_3.3.9",
         "versionName": "12.6.301",
+        "vsixVersion": "12.6.301",
         "tlp": "true",
         "apidocurl": "https://bits.netbeans.org/12.6/javadoc",
         "update_url": "https://netbeans.apache.org/nb/updates/12.6/updates.xml.gz?{$netbeans.hash.code}",
diff --git a/vars/asfMainNetBeansBuild.groovy b/vars/asfMainNetBeansBuild.groovy
index cf5951f..4c47455 100644
--- a/vars/asfMainNetBeansBuild.groovy
+++ b/vars/asfMainNetBeansBuild.groovy
@@ -34,6 +34,8 @@
 @groovy.transform.Field
 def rmversion=""
 @groovy.transform.Field
+def vsixversion=""
+@groovy.transform.Field
 def month=""
 @groovy.transform.Field
 def votecandidate=false
@@ -48,40 +50,46 @@
 
 def call(Map params = [:]) {
     // variable needed for apidoc
-    
-    
+
+
     pipeline {
         options {
             buildDiscarder(logRotator(numToKeepStr: '2'))
-            disableConcurrentBuilds() 
+            disableConcurrentBuilds()
             timeout(time: 180, unit: 'MINUTES')
         }
         agent { node { label 'ubuntu' } }
-        
+
         stages {
             stage("Preparing Variable") {
                 //agent { node { label 'ubuntu' } }
                 steps {
                     script {
-                        // test if we can do that 
+                        // test if we can do that
                         sh 'curl "https://gitbox.apache.org/repos/asf?p=netbeans-jenkins-lib.git;a=blob_plain;f=meta/netbeansrelease.json" -o netbeansrelease.json'
                         def releaseInformation = readJSON file: 'netbeansrelease.json'
                         sh 'rm -f netbeansrelease.json'
-                        def branch = env.BRANCH_NAME 
+                        def branch = env.BRANCH_NAME
                         def githash = env.GIT_COMMIT
-                        
+
                         println githash
                         println branch
-                        
+
                         if (!releaseInformation[branch]) {
                             // no branch definined in json exit build
-                            currentBuild.result = "FAILURE"
-                            throw new Exception("No entry in json for $branch")
+                            if (releaseInformation[branch.replace('vsnetbeans_previous_','release')]) {
+                                // branch is release1234
+                                branch = branch.replace('vsnetbeans_previous_','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;
@@ -103,7 +111,7 @@
                         tooling.jdktool = releaseInformation[branch].jdk
                         tooling.myMaven = releaseInformation[branch].maven
                         version = releaseInformation[branch].versionName;
-                        
+                        vsixversion = releaseInformation[branch].vsixVersion;
                         rmversion = version
                         //
                         if (releaseInformation[branch].milestones) {
@@ -118,59 +126,59 @@
                                         // other named version
                                         rmversion = rmversion+'-'+value['version']
                                     }
-                                }                             
+                                }
                             }
-                        } 
+                        }
                     }
-                }            
+                }
             }
             stage ('Master build') {
                 tools {
                     jdk tooling.jdktool
-                }        
+                }
                 when {
                     branch 'master'
                 }
                 stages {
                     stage ('build javadoc') {
                         steps {
-                            withAnt(installation: tooling.myAnt) {                
+                            withAnt(installation: tooling.myAnt) {
                                 sh "ant getallmavencoordinates"
                                 sh "ant build-nbms"
                                 sh "ant build-source-zips"
                                 sh "ant build-javadoc -Djavadoc.web.zip=${env.WORKSPACE}/WEBZIP.zip"
                                 archiveArtifacts 'WEBZIP.zip'
-                            }    
+                            }
                         }
                     }
-                    stage (' Populate Snapshots') {                                                                
+                    stage (' Populate Snapshots') {
                         when {
                             // thursday
                             expression { return Calendar.instance.get(Calendar.HOUR_OF_DAY) == 1 && Calendar.instance.get(Calendar.DAY_OF_WEEK) == 3}
                         }
                         steps {
-                            withAnt(installation: tooling.myAnt) {                
+                            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.1.1: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 ${commonparam} -DnetbeansNbmDirectory=${netbeansbase}/nbms -DnetbeansInstallDirectory=${netbeansbase}/netbeans -DnetbeansSourcesDirectory=${netbeansbase}/build/source-zips -DnetbeansJavadocDirectory=${netbeansbase}/build/javadoc -DparentGAV=org.apache.netbeans:netbeans-parent:2 -DforcedVersion=${mavenVersion} -DskipInstall=true -DdeployId=apache.snapshots.https -DdeployUrl=https://repository.apache.org/content/repositories/snapshots"
-                                    }                         
+                                    }
                                 }
                             }
                         }
-                    
+
                     }
                     //}
                 }
-            
+
             }
             stage ('Released javadoc rebuild') {
                 tools {
@@ -182,22 +190,22 @@
                         //branch pattern : "release\\d+",comparator:"REGEXP" wait for modern 1.4.1
                         expression { month !='Invalid'}
                     }
-                    
+
                 }
                 stages {
                     stage ('Archive Javadoc') {
                         steps {
-                
-                            withAnt(installation: tooling.myAnt) {                
+
+                            withAnt(installation: tooling.myAnt) {
                                 sh "ant"
                                 sh "ant build-javadoc -Djavadoc.web.zip=${env.WORKSPACE}/WEBZIP.zip"
                             }
                             archiveArtifacts 'WEBZIP.zip'
-                        
+
                         }
                     }
                 }
-                
+
             }
             stage ('Release preparation') {
                 tools {
@@ -212,9 +220,9 @@
                 }
                 steps {
                     script {
-                        
+
                         def clusterconfigs = [['platform','netbeans-platform'],['release','netbeans']]
-                                
+
                         if (votecandidate) {
                             versionpath = "${version}/vc${vote}/"
                         }
@@ -235,14 +243,14 @@
             } else {
             // we want to setup for release
             // apidoc + repomaven + dist bundle
-                                                                                            
+
             }
-            }                       
-            }                   
+            }
+            }
             }*/
         }
-            
-    
+
+
         post {
             cleanup {
                 cleanWs() // deleteDirs: true, notFailBuild: true, patterns: [[pattern: '**/.repository/**', type: 'INCLUDE']]
@@ -253,7 +261,7 @@
             failure {
                 slackSend (channel:'#netbeans-builds', message:"FAILED: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]'  (${env.BUILD_URL})",color:'#FF0000')
             }
-            
+
         }
     }
 }
@@ -264,7 +272,7 @@
         def path = cluster[1]
         stage("prepare ${clustername}") {
             sh "rm -rf nbbuild/build"
-                                
+
             sh "ant build-source-config -Dcluster.config=${clustername} -Dbuildnum=666"
             script {
                 def targets = ['verify-libs-and-licenses','rat','build']
@@ -273,111 +281,115 @@
                         // prepare a clean subfolder target - clustername prefixed
                         sh "rm -rf ${target}-${clustername}-temp && mkdir ${target}-${clustername}-temp && unzip nbbuild/build/${clustername}*.zip -d ${target}-${clustername}-temp && cp .gitignore ${env.WORKSPACE}/${target}-${clustername}-temp"
                         def add = "";
-                        // 
+                        //
                         if (target=="build" && env.BRANCH_NAME!="release90") {
                             add=" -Ddo.build.windows.launchers=true"
                         }
-                        
+
                         // build the target on the cluster defined common to all
                         sh "ant -f ${target}-${clustername}-temp/build.xml ${target} -Dcluster.config=${clustername} ${add}"
-                            
+
                         // for verify-libs-and-licenses we only want the reports
                         if (target=='verify-libs-and-licenses') {
-                            junit "verify-libs-and-licenses-${clustername}-temp/nbbuild/build/verifylibsandlicenses.xml"   
+                            junit "verify-libs-and-licenses-${clustername}-temp/nbbuild/build/verifylibsandlicenses.xml"
                         }
-                          
+
                         // for rat we only want the reports (junit fail at the moment empty test)
                         if (target=='rat') {
                             // save report and test for rat and verify..
                             archiveArtifacts "rat-${clustername}-temp/nbbuild/build/rat-report.txt"
-                            junit testResults: "rat-${clustername}-temp/nbbuild/build/rat/*.xml" , allowEmptyResults:true 
+                            junit testResults: "rat-${clustername}-temp/nbbuild/build/rat/*.xml" , allowEmptyResults:true
                         }
-                        
+
                         // build target is more complex,
                         if (target=='build') {
                             // prepare versionned path
                             def versionnedpath = "/${path}/${versionpath}"
-                          
+
                             sh "mkdir -p dist${versionnedpath}"
                             // source
                             sh "cp nbbuild/build/*${clustername}*.zip dist${versionnedpath}${path}-${rmversion}-source.zip"
                             // binaries
                             sh "cp build-${clustername}-temp/nbbuild/*${clustername}*.zip dist${versionnedpath}${path}-${rmversion}-bin.zip"
-                                
+
                             // special case for release prepare bits, maven, javadoc installer
                             if (clustername == "release") {
-                                        
+
                                 // installer we prepare a folder so that release manager can build mac os on his own
                                 sh "mkdir -p dist${versionnedpath}nbms"
                                 sh "mkdir -p dist/installers"
                                 sh "mkdir -p distpreparation${versionnedpath}installer"
-                                        
+                                sh "mkdir -p dist/vsix"
+
                                 def installer =  libraryResource 'org/apache/netbeans/installer.sh'
                                 writeFile file: "distpreparation${versionnedpath}installer/installer.sh", text: installer
-                                
+
                                 def installermac =  libraryResource 'org/apache/netbeans/installermac.sh'
                                 writeFile file: "distpreparation${versionnedpath}installer/installermac.sh", text: installermac
-                                        
+
                                 sh "chmod +x distpreparation${versionnedpath}installer/installer.sh"
-                                        
+
                                 sh "mkdir -p distpreparation${versionnedpath}installer/nbbuild/newbuild && cp build-${clustername}-temp/nbbuild/newbuild/* distpreparation${versionnedpath}installer/nbbuild/newbuild "
                                 sh "mkdir -p distpreparation${versionnedpath}installer/nbbuild/installer && cp -r build-${clustername}-temp/nbbuild/installer distpreparation${versionnedpath}installer/nbbuild "
                                 sh "mkdir -p distpreparation${versionnedpath}installer/nbi && cp -r build-${clustername}-temp/nbi distpreparation${versionnedpath}installer "
                                 sh "cp build-${clustername}-temp/nbbuild/binaries-default-properties.xml distpreparation${versionnedpath}installer/nbbuild/binaries-default-properties.xml "
                                 sh "mkdir -p distpreparation${versionnedpath}installer/nbbuild/build/ && cp -r build-${clustername}-temp/nbbuild/build/antclasses distpreparation${versionnedpath}installer/nbbuild/build/antclasses "
-                                        
+
                                 sh "mkdir -p distpreparation${versionnedpath}installer/nb/ide.launcher && cp -r build-${clustername}-temp/nb/ide.launcher/macosx distpreparation${versionnedpath}installer/nb/ide.launcher "
-                                        
-                                        
+
+
                                 sh "cp build-${clustername}-temp/nbbuild/*${clustername}*.zip dist${versionnedpath}${path}-${rmversion}-bin.zip"
                                 def binaryfile = "${env.WORKSPACE}/dist${versionnedpath}${path}-${rmversion}-bin.zip"
-                                def timestamp = sh(returnStdout: true, script: 'date +%y%m%d').trim() 
-                                        
+                                def timestamp = sh(returnStdout: true, script: 'date +%y%m%d').trim()
+
                                 sh "cd distpreparation${versionnedpath}installer && ./installer.sh ${binaryfile} ${version} ${timestamp}"
                                 sh "cp distpreparation${versionnedpath}installer/dist/bundles/* dist/installers/ "
                                 sh "rm -rf distpreparation${versionnedpath}installer/dist"
-                                archiveArtifacts 'distpreparation/**' 
-                                
+                                archiveArtifacts 'distpreparation/**'
+
                                 // the installer phase is ok we should have installer for linux / windows + scripts and a bit of source to build macos later
-                                
-                                
+
+
                                 // additionnal target to have maven ready
                                 // javadoc build
                                 sh "ant -f build-${clustername}-temp/build.xml build-nbms build-source-zips generate-uc-catalog -Dcluster.config=release -Ddo.build.windows.launchers=true"
-                                sh "ant -f build-${clustername}-temp/build.xml build-javadoc -Djavadoc.web.root='${apidocurl}' -Dmodules-javadoc-date='${date}' -Datom-date='${atomdate}' -Djavadoc.web.zip=${env.WORKSPACE}/WEBZIP.zip"                              
+                                sh "ant -f build-${clustername}-temp/build.xml build-javadoc -Djavadoc.web.root='${apidocurl}' -Dmodules-javadoc-date='${date}' -Datom-date='${atomdate}' -Djavadoc.web.zip=${env.WORKSPACE}/WEBZIP.zip"
                                 sh "cp -r build-${clustername}-temp/nbbuild/nbms/** dist${versionnedpath}nbms/"
-                                
+
                                 archiveArtifacts 'WEBZIP.zip'
-                            
+
                                 def localRepo = ".repository"
                                 def netbeansbase = "build-${clustername}-temp/nbbuild"
                                 sh "ant -f build-${clustername}-temp/build.xml getallmavencoordinates"
-                                        
+
                                 withMaven(maven:tooling.myMaven,jdk:tooling.jdktool,publisherStrategy: 'EXPLICIT',mavenLocalRepo: localRepo,options:[artifactsPublisher(disabled: true)])
                                 {
                                     sh "mvn org.apache.maven.plugins:maven-dependency-plugin:3.1.1:get -Dartifact=org.apache.netbeans.utilities:nb-repository-plugin:${repopluginversion} -Dmaven.repo.local=${env.WORKSPACE}/.repository -DremoteRepositories=apache.snapshots.https::::https://repository.apache.org/snapshots"
                                     def commonparam = "-Dexternallist=${netbeansbase}/build/external.info"
                                     //sh "mvn org.apache.netbeans.utilities:nb-repository-plugin:1.5:download ${commonparam} -DrepositoryUrl=https://repo.maven.apache.org/maven2"
                                     sh "mvn org.apache.netbeans.utilities:nb-repository-plugin:${repopluginversion}:populate ${commonparam} -DnetbeansNbmDirectory=${netbeansbase}/nbms -DnetbeansInstallDirectory=${netbeansbase}/netbeans -DnetbeansSourcesDirectory=${netbeansbase}/build/source-zips -DnetbeansJavadocDirectory=${netbeansbase}/build/javadoc -DparentGAV=org.apache.netbeans:netbeans-parent:2 -DforcedVersion=${mavenVersion} -DskipInstall=true -DdeployUrl=file://${env.WORKSPACE}/mavenrepository"
-                                }                            
+                                }
                                 archiveArtifacts 'mavenrepository/**'
-                                                   
+
+                                // make vsix available to dist to pickup (only for main release) 
+                                sh "ant -f build-${clustername}-temp/java/java.lsp.server build-vscode-ext -Dvsix.version=vsixversion"
+                                sh "cp -r build-${clustername}-temp/java/java.lsp.server/build/*.vsix dist${versionnedpath}nbms/"
                             }
-                       
+
                             // do checksum
                             def extensions = ['*.zip','*.nbm','*.gz','*.jar','*.xml','*.license']
-                            for (String extension in extensions) {                                
+                            for (String extension in extensions) {
                                 sh "cd dist"+' && for z in $(find . -name "'+"${extension}"+'") ; do cd $(dirname $z) ; sha512sum ./$(basename $z) > $(basename $z).sha512; cd - >/dev/null; done '
                             }
-                                    
-                            archiveArtifacts 'dist/**' 
-                                    
-                           
-                        }              
+
+                            archiveArtifacts 'dist/**'
+
+
+                        }
                     }
                 }
             }
         }
-    } 
+    }
 
 }