From 4062a67f6798cc7ab9d7ce8d25478a4458e95df8 Mon Sep 17 00:00:00 2001
From: Christian Poessinger <christian@poessinger.com>
Date: Fri, 26 Jun 2020 10:56:41 +0200
Subject: packages: linux-kernel: T2625: move to library code

---
 packages/linux-kernel/Jenkinsfile | 180 ++++++++++++++------------------------
 1 file changed, 66 insertions(+), 114 deletions(-)

(limited to 'packages')

diff --git a/packages/linux-kernel/Jenkinsfile b/packages/linux-kernel/Jenkinsfile
index 06325266..8c68d889 100644
--- a/packages/linux-kernel/Jenkinsfile
+++ b/packages/linux-kernel/Jenkinsfile
@@ -15,63 +15,10 @@
 
 @NonCPS
 
-def getGitBranchName() {
-    def branch = scm.branches[0].name
-    return branch.split('/')[-1]
-}
-
-def getGitRepoURL() {
-    return scm.userRemoteConfigs[0].url
-}
-
-def getGitRepoName() {
-    return getGitRepoURL().split('/').last()
-}
-
-// Returns true if this is a custom build launched on any project fork.
-// Returns false if this is build from git@github.com:vyos/<reponame>.
-// <reponame> can be e.g. vyos-1x.git or vyatta-op.git
-def isCustomBuild() {
-    // GitHub organisation base URL
-    def gitURI = 'git@github.com:vyos/' + getGitRepoName()
-    def httpURI = 'https://github.com/vyos/' + getGitRepoName()
-
-    return !((getGitRepoURL() == gitURI) || (getGitRepoURL() == httpURI)) || env.CHANGE_ID
-}
-
-def setDescription() {
-    def item = Jenkins.instance.getItemByFullName(env.JOB_NAME)
-
-    // build up the main description text
-    def description = ""
-    description += "<h2>VyOS individual package build: " + getGitRepoName().replace('.git', '') + "</h2>"
-
-    if (isCustomBuild()) {
-        description += "<p style='border: 3px dashed red; width: 50%;'>"
-        description += "<b>Build not started from official Git repository!</b><br>"
-        description += "<br>"
-        description += "Repository: <font face = 'courier'>" + getGitRepoURL() + "</font><br>"
-        description += "Branch: <font face = 'courier'>" + getGitBranchName() + "</font><br>"
-        description += "</p>"
-    } else {
-        description += "Sources taken from Git branch: <font face = 'courier'>" + getGitBranchName() + "</font><br>"
-    }
-
-    item.setDescription(description)
-    item.save()
-}
-
-//
-// VyOS builds some Intel Out-of-Tree drivers
-// which are defined here
-//
-def IntelMap = [:]
-IntelMap['ixgbe']   = 'https://sourceforge.net/projects/e1000/files/ixgbe%20stable/5.6.5/ixgbe-5.6.5.tar.gz/download'
-IntelMap['igb']     = 'https://sourceforge.net/projects/e1000/files/igb%20stable/5.3.5.42/igb-5.3.5.42.tar.gz/download'
-IntelMap['i40e']    = 'https://sourceforge.net/projects/e1000/files/i40e%20stable/2.11.21/i40e-2.11.21.tar.gz/download'
-IntelMap['ixgbevf'] = 'https://sourceforge.net/projects/e1000/files/ixgbevf%20stable/4.6.3/ixgbevf-4.6.3.tar.gz/download'
-IntelMap['i40evf']  = 'https://sourceforge.net/projects/e1000/files/i40evf%20stable/3.6.15/i40evf-3.6.15.tar.gz/download'
-IntelMap['iavf']    = 'https://sourceforge.net/projects/e1000/files/iavf%20stable/3.9.3/iavf-3.9.3.tar.gz/download'
+// Using a version specifier library, use 'current' branch. The underscore (_)
+// is not a typo! You need this underscore if the line immediately after the
+// @Library annotation is not an import statement!
+@Library('vyos-build@crux')_
 
 /* Only keep the most recent builds. */
 def projectProperties = [
@@ -115,6 +62,7 @@ pipeline {
     }
     environment {
         DEBIAN_ARCH = sh(returnStdout: true, script: 'dpkg --print-architecture').trim()
+        BASE_DIR = 'packages/linux-kernel'
     }
     stages {
         stage('Fetch') {
@@ -130,7 +78,7 @@ pipeline {
             parallel {
                 stage('Kernel') {
                     steps {
-                        dir('linux') {
+                        dir(env.BASE_DIR + '/linux') {
                             checkout([$class: 'GitSCM',
                                 doGenerateSubmoduleConfigurations: false,
                                 extensions: [[$class: 'CleanCheckout'],
@@ -142,7 +90,7 @@ pipeline {
                 }
                 stage('WireGuard') {
                     steps {
-                        dir('wireguard') {
+                        dir(env.BASE_DIR + '/wireguard') {
                             checkout([$class: 'GitSCM',
                                 doGenerateSubmoduleConfigurations: false,
                                 extensions: [[$class: 'CleanCheckout']],
@@ -153,7 +101,7 @@ pipeline {
                 }
                 stage('Accel-PPP') {
                     steps {
-                        dir('accel-ppp') {
+                        dir(env.BASE_DIR + '/accel-ppp') {
                             checkout([$class: 'GitSCM',
                                 doGenerateSubmoduleConfigurations: false,
                                 extensions: [[$class: 'CleanCheckout']],
@@ -164,7 +112,7 @@ pipeline {
                 }
                 stage('Intel-QAT') {
                     steps {
-                        dir('intel-qat') {
+                        dir(env.BASE_DIR + '/intel-qat') {
                             checkout([$class: 'GitSCM',
                                 doGenerateSubmoduleConfigurations: false,
                                 extensions: [[$class: 'CleanCheckout']],
@@ -178,29 +126,39 @@ pipeline {
         }
         stage('Compile Kernel') {
             steps {
-                sh "./build-kernel.sh"
+                dir(env.BASE_DIR) {
+                    sh "./build-kernel.sh"
+                }
             }
         }
         stage('Intel Driver(s)') {
             steps {
-                sh "./build-intel-drivers.sh"
+                dir(env.BASE_DIR) {
+                    sh "./build-intel-drivers.sh"
+                }
             }
         }
         stage('Kernel Module(s)') {
             parallel {
                 stage('WireGuard') {
                     steps {
-                        sh "./build-wireguard.sh"
+                        dir(env.BASE_DIR) {
+                            sh "./build-wireguard.sh"
+                        }
                     }
                 }
                 stage('Accel-PPP') {
                     steps {
-                       sh "./build-accel-ppp.sh"
+                        dir(env.BASE_DIR) {
+                            sh "./build-accel-ppp.sh"
+                        }
                     }
                 }
                 stage('Intel-QAT') {
                     steps {
-                        sh "./build-intel-qat.sh"
+                        dir(env.BASE_DIR) {
+                            sh "./build-intel-qat.sh"
+                        }
                     }
                 }
             }
@@ -212,54 +170,48 @@ pipeline {
         }
         success {
             script {
-                // archive *.deb artifact on custom builds, deploy to repo otherwise
-                if ( isCustomBuild()) {
-                    archiveArtifacts artifacts: '*.deb', fingerprint: true
-                } else {
-                    // publish build result, using SSH-dev.packages.vyos.net Jenkins Credentials
-                    sshagent(['SSH-dev.packages.vyos.net']) {
-                        // build up some fancy groovy variables so we do not need to write/copy
-                        // every option over and over again!
-                        def RELEASE = getGitBranchName()
-                        if (getGitBranchName() == "master") {
-                            RELEASE = 'current'
-                        }
-
-                        def VYOS_REPO_PATH = '/home/sentrium/web/dev.packages.vyos.net/public_html/repositories/' + RELEASE + '/'
-                        if (getGitBranchName() == "crux")
-                            VYOS_REPO_PATH += 'vyos/'
-
-                        def SSH_OPTS = '-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o LogLevel=ERROR'
-                        def SSH_REMOTE = 'khagen@10.217.48.113'
-
-                        echo "Uploading package(s) and updating package(s) in the repository ..."
-
-                        files = findFiles(glob: '*.deb')
-                        files.each { PACKAGE ->
-                            def ARCH = sh(returnStdout: true, script: "dpkg-deb -f ${PACKAGE} Architecture").trim()
-                            def SUBSTRING = sh(returnStdout: true, script: "dpkg-deb -f ${PACKAGE} Package").trim()
-                            def SSH_DIR = '~/VyOS/' + RELEASE + '/' + ARCH
-                            def ARCH_OPT = ''
-                            if (ARCH != 'all')
-                                ARCH_OPT = '-A ' + ARCH
-
-                            // No need to explicitly check the return code. The pipeline
-                            // will fail if sh returns a non 0 exit code
-                            sh """
-                                ssh ${SSH_OPTS} ${SSH_REMOTE} -t "bash --login -c 'mkdir -p ${SSH_DIR}'"
-                            """
-                            sh """
-                                scp ${SSH_OPTS} ${PACKAGE} ${SSH_REMOTE}:${SSH_DIR}/
-                            """
-                            sh """
-                                ssh ${SSH_OPTS} ${SSH_REMOTE} -t "uncron-add 'reprepro -v -b ${VYOS_REPO_PATH} ${ARCH_OPT} remove ${RELEASE} ${SUBSTRING}'"
-                            """
-                            sh """
-                                ssh ${SSH_OPTS} ${SSH_REMOTE} -t "uncron-add 'reprepro -v -b ${VYOS_REPO_PATH} deleteunreferenced'"
-                            """
-                            sh """
-                                ssh ${SSH_OPTS} ${SSH_REMOTE} -t "uncron-add 'reprepro -v -b ${VYOS_REPO_PATH} ${ARCH_OPT} includedeb ${RELEASE} ${SSH_DIR}/${PACKAGE}'"
-                            """
+                dir(env.BASE_DIR) {
+                    // archive *.deb artifact on custom builds, deploy to repo otherwise
+                    if ( isCustomBuild()) {
+                        archiveArtifacts artifacts: '*.deb', fingerprint: true
+                    } else {
+                        // publish build result, using SSH-dev.packages.vyos.net Jenkins Credentials
+                        sshagent(['SSH-dev.packages.vyos.net']) {
+                            // build up some fancy groovy variables so we do not need to write/copy
+                            // every option over and over again!
+                            def RELEASE = getGitBranchName()
+                            if (getGitBranchName() == "master") {
+                                RELEASE = 'current'
+                            }
+
+                            def VYOS_REPO_PATH = '/home/sentrium/web/dev.packages.vyos.net/public_html/repositories/' + RELEASE + '/'
+                            if (getGitBranchName() == "crux")
+                                VYOS_REPO_PATH += 'vyos/'
+
+                            def SSH_OPTS = '-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o LogLevel=ERROR'
+                            def SSH_REMOTE = 'khagen@10.217.48.113'
+
+                            echo "Uploading package(s) and updating package(s) in the repository ..."
+
+                            files = findFiles(glob: '*.deb')
+                            files.each { PACKAGE ->
+                                def ARCH = sh(returnStdout: true, script: "dpkg-deb -f ${PACKAGE} Architecture").trim()
+                                def SUBSTRING = sh(returnStdout: true, script: "dpkg-deb -f ${PACKAGE} Package").trim()
+                                def SSH_DIR = '~/VyOS/' + RELEASE + '/' + ARCH
+                                def ARCH_OPT = ''
+                                if (ARCH != 'all')
+                                    ARCH_OPT = '-A ' + ARCH
+
+                                // No need to explicitly check the return code. The pipeline
+                                // will fail if sh returns a non 0 exit code
+                                sh """
+                                    ssh ${SSH_OPTS} ${SSH_REMOTE} -t "bash --login -c 'mkdir -p ${SSH_DIR}'"
+                                    scp ${SSH_OPTS} ${PACKAGE} ${SSH_REMOTE}:${SSH_DIR}/
+                                    ssh ${SSH_OPTS} ${SSH_REMOTE} -t "uncron-add 'reprepro -v -b ${VYOS_REPO_PATH} ${ARCH_OPT} remove ${RELEASE} ${SUBSTRING}'"
+                                    ssh ${SSH_OPTS} ${SSH_REMOTE} -t "uncron-add 'reprepro -v -b ${VYOS_REPO_PATH} deleteunreferenced'"
+                                    ssh ${SSH_OPTS} ${SSH_REMOTE} -t "uncron-add 'reprepro -v -b ${VYOS_REPO_PATH} ${ARCH_OPT} includedeb ${RELEASE} ${SSH_DIR}/${PACKAGE}'"
+                                """
+                            }
                         }
                     }
                 }
-- 
cgit v1.2.3