def packageName = "vt2"
def devBranch = "develop"
def prodBranch = "master"
def currentBranch = env.BRANCH_NAME
if ( env.CHANGE_ID != null ) {
	currentBranch = env.CHANGE_BRANCH
}
def PKG_NAME = "vaulttransfer2"
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 --build-arg PKG_NAME=${PKG_NAME} --build-arg VER=`cat version` ."
                sh "docker container rm -f vt2builder || true"
                sh "rm -rf vaulttransfer_1*"
                sh "docker create  -it --name=vt2builder axcient/vt2 -e PKG_NAME=${PKG_NAME} -e VER=`cat version` bash"
                sh "docker cp  vt2builder:/dest/${PKG_NAME}_`cat version`-1.dsc ."
                sh "docker cp  vt2builder:/dest/${PKG_NAME}_`cat version`.orig.tar.xz ."
                sh "docker cp  vt2builder:/dest/${PKG_NAME}_`cat version`-1_amd64.build ."
                sh "docker cp  vt2builder:/dest/${PKG_NAME}_`cat version`-1_amd64.changes ."
                sh "docker cp  vt2builder:/dest/${PKG_NAME}_`cat version`-1_amd64.deb ."
                sh "docker cp  vt2builder:/dest/${PKG_NAME}_`cat version`-1.debian.tar.xz ."
                sh "scp ${PKG_NAME}_`cat version`*  apt.slc.efscloud.net:~/tmp_deb"
            }
        }
    }
}

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")
}
