pipeline {
    agent { label 'LXCBuilder' }
    parameters {
        booleanParam description: 'Will only update Jenkins piplinefile (jenkinsfile)', name: 'OnlyUpdatePipeline'
        booleanParam defaultValue: true, description: 'Enable muticore support for ZX compression', name: 'ZX_Multicore'
        string defaultValue: '0', description: 'Set amount of core\'s ZX is allowed when compressing (use 0 for all cores)', name: 'ZX_Cores'
        string defaultValue: '192.168.200.11', description: 'Proxy server for packages, when enabled', name: 'ProxyServer'
        booleanParam description: 'will disable use of proxy server', name: 'DisProxy'
        choice choices: ['Alpine', 'Debian', 'Fedora'], description: 'Defines the distro that should be build', name: 'Distro'
        string description: 'Defines the version of distro that should be build', name: 'Version'
        string description: 'Defines the variant (Software selection) that should be build', name: 'BuildVariant'
    }
    options {
        skipDefaultCheckout()
        buildDiscarder(logRotator(numToKeepStr: '2', artifactNumToKeepStr: '1'))
    }
    stages {
        stage('Prepare') {
            steps {
                // Cleanup before starting
                cleanWs()
                // Checkout the repository
                checkout scm     
                // Get distrobuilder
                copyArtifacts filter: 'distrobuilder-BrampCustom', fingerprintArtifacts: true, flatten: true, projectName: 'LXC-ImgBuilder/DistroBuilder', selector: lastSuccessful()    
                // Setup Env
                sh '''mkdir $WORKSPACE/REL
                mv distrobuilder-* distrobuilder
                '''
                //Check if Proxy is disabled
                script{                       
                    if (env.DisProxy == 'true') {
                        sh '''bash Scripts/UpdateIMGBuildFile-CacheAndRepo.sh -d'''
                    } else {
                        env.ProxyServer = ProxyServer
                        sh '''bash Scripts/UpdateIMGBuildFile-CacheAndRepo.sh -e $ProxyServer'''
                    }
                    if (env.OnlyUpdatePipeline == 'true') {
                        error 'Build ended early, only updated jenkins file'
                    }
                } 
            }
        }
        stage('Image Configs'){
            steps{
                script{                   
					//Run build for requested Versions
                    env.ZX_Multicore = ZX_Multicore
                    env.ZX_Cores = ZX_Cores
                    env.BuildVariant = BuildVariant
                    env.Distro = Distro
                    env.Version = Version
                    stage("Build ${Distro}-${Version} ${BuildVariant}") {
                        catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
                            sh '''
                            if $ZX_Multicore; then 
                                export XZ_DEFAULTS="-T $ZX_Cores"
                            fi                            
                            sudo $WORKSPACE/distrobuilder build-lxc CT-Build/$Distro.yaml $WORKSPACE/REL/$Distro-$Version-$BuildVariant/ -o image.release=$Version -o image.variant=$BuildVariant
                            sudo chown jenkins:jenkins -R $WORKSPACE/REL
                            mv $WORKSPACE/REL/$Distro-$Version-$BuildVariant/rootfs.tar.xz "${Distro}-${Version}_${BuildVariant}.tar.xz"
                            '''     
                        }
                    }
                }
            }
        }
        stage('Finish') {
            steps {
            // Save generated files
            archiveArtifacts artifacts: '*.tar.xz', followSymlinks: false
            // Copy artifacts to /LXCBuild folder
            sh '''
            mkdir -p /LXCBuild/template/cache
            cp -f *.tar.xz /LXCBuild/template/cache
            '''
            // Cleaning WorkSpace when build successfully
            cleanWs cleanWhenAborted: false, cleanWhenFailure: false, cleanWhenNotBuilt: false, cleanWhenUnstable: false
            }
        }
    }
}