@Library('pipeline-library') _

pipeline {
    agent {
        kubernetes {
            label "oldbuild-${UUID.randomUUID().toString()}"
            defaultContainer 'jnlp'
            yaml """
apiVersion: v1
kind: Pod
spec:
  containers:
  - name: jnlp
    env:
    - name: JAVA_OPTS
      value: "-XX:MaxRAMPercentage=50 -XX:+PrintFlagsFinal"
    resources:
      requests:
        cpu: "100m"
        memory: "1024Mi"
      limits:
        memory: "1024Mi"
  - name: java6
    image: registry.gitlab.open-xchange.com/jenkins/debian-java6:master
    command:
    - sleep
    args:
    - 99d
    resources:
      requests:
        cpu: 2
        memory: 1Gi
      limits:
        memory: 1Gi
    tty: true
  - name: stunnel
    image: docker.io/vimagick/stunnel:latest
    command:
    - "/bin/sh"
    args:
    - "-c"
    - echo -e foreground=yes\\\\n[http]\\\\nclient=yes\\\\naccept=127.0.0.1:8080\\\\nconnect=buildapi.open-xchange.com:443\\\\n | stunnel -fd 0
    resources:
      requests:
        cpu: 10m
        memory: 10Mi
      limits:
        memory: 10Mi
    tty: true
  imagePullSecrets:
  - name: gitlab
"""
        }
    }
    options {
        gitLabConnection('Gitlab')
        gitlabBuilds(builds: ['Java 6'])
    }
    triggers {
        cron(env.BRANCH_NAME == 'master' ? '@midnight' : '')
    }
    stages {
        stage('Java 6') {
            options {
                gitlabCommitStatus(name: 'Java 6')
            }
            tools {
                ant 'ant'
            }
            environment {
                ANT_OPTS = "-Xmx768M"
            }
            when {
                anyOf {
                    branch 'master'
                    triggeredBy cause: 'UserIdCause'
                }
            }
            steps {
                container('java6') {
                    sh 'java -version'
                    sh 'ant -version'
                    cleanWs()
                    script {
                        def middleware = checkout([
                            $class: 'GitSCM',
                            branches: [[name: '*/master-7.6.3']],
                            doGenerateSubmoduleConfigurations: false,
                            extensions: [[
                                $class: 'CloneOption',
                                noTags: true,
                                reference: '',
                                shallow: true
                            ]],
                            gitTool: 'Linux',
                            submoduleCfg: [],
                            userRemoteConfigs: [[
                                credentialsId: '9a40d6b1-813a-4c46-9b0d-18320a0a4ef4',
                                url: 'git@gitlab.open-xchange.com:middleware/core.git'
                            ]]
                        ])
                        def workspace = pwd()
                        dir('build') {
                            checkout scm
                            container('jnlp') {
                              sh 'ant -f build.xml depsForBuild'
                            }
                            for (int i = 0; i < 2; i++) {
                                sh """ant -f releaseNumbers.xml \
                                -DprojectSets=backend-packages \
                                -DreleaseNotes="testing release build" \
                                -DversionPropFile=${workspace}/releaseVersion.properties \
                                loadProjectSets increaseRevision"""
                            }
                            def releaseProperties = readProperties file: "${workspace}/releaseVersion.properties"
                            lock('backend-' + releaseProperties.versionNumber) {
                                containerLog 'stunnel'
                                sh """ant -f obs.xml \
                                -Dbranch=master-7.6.3 \
                                -DReleaseVersion=${releaseProperties.versionNumber} \
                                -DprojectSets=backend-packages \
                                -DfullProductName=backend \
                                -DshortProductName=backend \
                                -Dgitcommit=${middleware.GIT_COMMIT} \
                                -DbuildPropFile=${workspace}/buildsystem.properties \
                                -Durl=http://127.0.0.1:8080 \
                                determineProject createProject deleteObsoletePackages"""
                                try {
                                    sh """ant -f buildAll.xml \
                                    -Dbranch=master-7.6.3 \
                                    -DReleaseVersion=${releaseProperties.versionNumber} \
                                    -DprojectSets=backend-packages \
                                    -DfullProductName=backend \
                                    -DshortProductName=backend \
                                    -Dgitcommit=${middleware.GIT_COMMIT} \
                                    -Durl=http://127.0.0.1:8080 \
                                    determineProject upload"""
                                    sh 'rm -rf tmp'
                                    sh """ant -f obs.xml \
                                    -Dbranch=master-7.6.3 \
                                    -DReleaseVersion=${releaseProperties.versionNumber} \
                                    -DprojectSets=backend-packages \
                                    -DfullProductName=backend \
                                    -DshortProductName=backend \
                                    -Dgitcommit=${middleware.GIT_COMMIT} \
                                    -Durl=http://127.0.0.1:8080 \
                                    determineProject wait4Project"""
                                    sh """ant -f buildAll.xml \
                                    -Dbranch=master-7.6.3 \
                                    -DReleaseVersion=${releaseProperties.versionNumber} \
                                    -DprojectSets=backend-packages \
                                    -DfullProductName=backend \
                                    -DshortProductName=backend \
                                    -Dgitcommit=${middleware.GIT_COMMIT} \
                                    -DdebDir=${workspace}/deb \
                                    -Durl=http://127.0.0.1:8080 \
                                    determineProject fetch"""
                                } finally {
                                    sh """ant -f obs.xml \
                                    -Dbranch=master-7.6.3 \
                                    -DReleaseVersion=${releaseProperties.versionNumber} \
                                    -DprojectSets=backend-packages \
                                    -DfullProductName=backend \
                                    -DshortProductName=backend \
                                    -Dgitcommit=${middleware.GIT_COMMIT} \
                                    -Durl=http://127.0.0.1:8080 \
                                    determineProject deleteProject"""
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    post {
        failure {
            emailext attachLog: true,
                subject: "${env.JOB_NAME} (#${env.BUILD_NUMBER}) - ${currentBuild.result}",
                body: "${env.BUILD_URL} failed.\nFull log at: ${env.BUILD_URL}console\n\n",
                recipientProviders: [[$class: 'RequesterRecipientProvider'], [$class: 'UpstreamComitterRecipientProvider'], [$class: 'DevelopersRecipientProvider']],
                to: 'release-team@open-xchange.com'
        }
    }
}
