#!groovy

@Library('jenkins-pipeline-helpers') _

packer = new tv.justin.vidcs.Packer()

properties([
    parameters([
        string(description: 'Project Name', name: 'repo'),
        string(defaultValue: 'video-coreservices', description: 'Org Name', name: 'org'),
        string(defaultValue: 'master', description: 'Branch or Ref', name: 'ref'),
        string(defaultValue: "${env.BUILD_NUMBER}", description: 'Build Number', name: 'build_number'),
    ])
])

node {
    deleteDir()
    if (params.repo != null) {
        environment {
            BUILD_NUMBER = "${params.build_number}"
        }
        stage('Setup') {
            checkout scm
            sh "docker run --rm -v \"\$PWD:/usr/src/fpm-helper\" -w /usr/src/fpm-helper golang:1.12 make test build"
        }
        withEnv(["PATH+PACKER=${packer.Update()}"]) {
            ansiColor('xterm') {
                stage("Build") {
                    checkout([$class: 'GitSCM',
                            branches: [[name: "*/${params.ref}"]],
                            doGenerateSubmoduleConfigurations: false,
                            extensions: [[$class: 'SubmoduleOption',
                                            disableSubmodules: false,
                                            parentCredentials: false,
                                            recursiveSubmodules: true,
                                            reference: '',
                                            trackingSubmodules: false]],
                            submoduleCfg: [],
                            userRemoteConfigs: [[credentialsId: 'git-aws-read-key', url: "git@git.xarth.tv:${params.org}/${params.repo}.git"]]])
                    sh "make"
                }
            }
        }
        stage('Package') {
            sh "find . -name fpm.json -print0 | xargs -0 -r -n1 ./fpm-helper"
            archiveArtifacts artifacts: '**/*.deb', allowEmptyArchive: true
            archiveArtifacts artifacts: '**/*.rpm', allowEmptyArchive: true
        }
        stage('Deploy') {
            checkout scm

            if ((env.BRANCH_NAME == 'master') && (params.ref == 'master')) {
                withCredentials([file(credentialsId:'dta_arti_creds', variable:'ARTI_CONFIG_FILE')]) {
                    sh """./deploy_packages.sh deb $ARTI_CONFIG_FILE"""
                    sh """./deploy_packages.sh rpm $ARTI_CONFIG_FILE"""
                }
            } else {
                withCredentials([file(credentialsId:'dta_arti_creds', variable:'ARTI_CONFIG_FILE')]) {
                    sh """./deploy_packages.sh deb $ARTI_CONFIG_FILE -p testing"""
                    sh 'arti -c $ARTI_CONFIG_FILE rpm -r ip-vidcs-dev $(find . -name *.rpm) || echo "No Packages matching *.rpm found"'
                }
            }
        }
    } else {
        error "No project_name given."
    }
}
