#!/usr/bin/env groovy

library 'functions'

def packageBuildNames = [
    'core.mendel-minimal',
    'core.base-files',
    'core.edgetpuvision',
    'core.edgetpudemo',
    'core.mdt-services',
    'core.mendel-distro-info-data',
    'core.mendel-keyring',
    'core.runonce',
    'core.usb-gadget',
    'core.vitalsd',
    'core.meta-mendel'
]

def label = "build-jenkins-operator-${UUID.randomUUID().toString()}"
def home = "/home/jenkins"
def workspace = "${home}/workspace/build-pbuilder-cross"
def workdir = "${workspace}/src"

podTemplate(label: label,
        containers: [
                containerTemplate(name: 'jnlp', image: 'jenkins/jnlp-slave:alpine'),
                containerTemplate(name: 'debian', image: 'debian:buster-slim', command: 'cat', ttyEnabled: true, privileged: true),
        ],
        envVars: [
        ],
        ) {

    node(label) {
        dir(workdir) {
            stage('Init') {
                container('debian') {
                    packageBuildNames.each {
                        copyArtifacts(projectName: it, filter: '**/*', flatten: true, selector: lastSuccessful())
                    }

                    sh """
                       echo "deb http://packages.cloud.google.com/apt buster main" > /etc/apt/sources.list.d/gcsfuse.list
                       curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
                       apt-get update
                       apt-get -y install apt-utils gcsfuse
                       """
                }
            }

            stage('Build') {
                container('debian') {
                    sh """
                       mkdir archive/pool
                       cp out/target/product/*/packages/*/* archive/pool
                       cd archive
                       apt-ftparchive -o APT::FTPArchive::SHA512=false pool > Packages
                       """
                }
            }

            stage('Deploy') {
                container('debian') {
                    googleStorageUpload bucket: 'gs://mendel-linux-apt/',
                                        credentialsId: 'mendel-linux-cloud-infra',
                                        pattern: 'archive/**',
                                        pathPrefix: 'archive/',
                                        sharedPublicly: true
                }
            }
        }
    }
}
