def packageName = "vt2"
def devBranch = "develop"
def prodBranch = "master"
def currentBranch = env.BRANCH_NAME
if ( env.CHANGE_ID != null ) {
	currentBranch = env.CHANGE_BRANCH
}

def buildNumber = env.BUILD_NUMBER
if ( env.BRANCH_NAME == prodBranch ) {
	buildNumber = ""
}
pipeline {
	options {
        buildDiscarder(logRotator(numToKeepStr: '10'))
    }
    agent none

    stages {
    	stage('Download SZS shared library') {
    	    agent { label 'build-replibit-freebsd' }
    		steps {
    			sh "rm -f szs-op.h libszs-op.so"
    			script {
					try {
						copyArtifacts(projectName: "build_szs_package/${escapedBranchName(currentBranch)}")
					} catch (Exception e) {
						println("Failed to copy artifacts from the same branch ('${currentBranch}'): ${e}")
						def anotherBranch = devBranch
						println("Trying another branch ('${anotherBranch}')")
						copyArtifacts(projectName: "build_szs_package/${escapedBranchName(anotherBranch)}")
					}
                }
			}
    	}
        stage('Build') {
            agent { label 'build-replibit-freebsd' }
            steps {
                sh "./build.sh ${buildNumber}"
            }
        }
        stage('Upload to Replibit FreeBSD Dev Mirror') {
            agent { label 'build-replibit-freebsd' }
            when { branch devBranch }
            steps {
                deployPackage(packageName, "dev")
            }
        }
        stage('Upload to Replibit FreeBSD Staging Mirror') {
            agent { label 'build-replibit-freebsd' }
			when { branch "release*" }
			steps {
				deployPackage(packageName, "staging")
			}
		}
		stage('Upload to Replibit FreeBSD Production Mirror') {
		    agent { label 'build-replibit-freebsd' }
			when { branch prodBranch }
			steps {
				deployPackage(packageName, "prod")
			}
		}
        stage('Build docker image') {
            agent { label 'build-replibit'}
            steps {
                sh "docker build -t axcient/vt2 ."
                sh "docker container rm -f vt2builder || true"
                sh "docker create  -it --name=vt2builder axcient/vt2 bash"
                sh "ls -l"
                sh "docker cp  vt2builder:/vt2client/vaulttransfer_2.dsc ."
                sh "docker cp  vt2builder:/vt2client/vaulttransfer_2.tar.xz ."
                sh "docker cp  vt2builder:/vt2client/vaulttransfer_2_amd64.build ."
                sh "docker cp  vt2builder:/vt2client/vaulttransfer_2_amd64.changes ."
                sh "docker cp  vt2builder:/vt2client/vaulttransfer_2_amd64.deb ."
                sh "scp vaulttransfer_2*  apt.slc.efscloud.net:/srv/apt/incoming-replibit/"
                sh "ssh apt.slc.efscloud.net 'sudo rep-rb list xenial-rb-alpha'"
                sh "ssh apt.slc.efscloud.net 'sudo rep-rb remove xenial-rb-alpha vaulttransfer-2_2ubuntu1'"
                sh "ssh apt.slc.efscloud.net 'sudo rep-rb processincoming incoming'"
                sh "ssh apt.slc.efscloud.net 'sudo rep-rb list xenial-rb-alpha'"
            }
        }
    }
}

def deployPackage(packageName, repo) {
	def pkgPattern = "${packageName}*.txz"
	def mirror = "jenkins@slcdev1-rb-bsdpkg1.slc.efscloud.net"
	def repoPath = "/data/pkg/repos/FreeBSD:12:amd64/${repo}"

    sh """
		ssh ${mirror} rm -f ${repoPath}/All/${pkgPattern}
		scp -o StrictHostKeyChecking=no ${pkgPattern} ${mirror}:${repoPath}/All/
		ssh ${mirror} pkg repo ${repoPath}
	"""
}

def escapedBranchName(String name) {
    return name.replace("/", "%2F")
}
