summaryrefslogtreecommitdiff
path: root/vars/cloneAndBuild.groovy
blob: f945ba75eaa28a92e1f6cad189fea006e115ae33 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#!/usr/bin/env groovy
// Copyright (C) 2021 VyOS maintainers and contributors
//
// This program is free software; you can redistribute it and/or modify
// in order to easy exprort images built to "external" world
// it under the terms of the GNU General Public License version 2 or later as
// published by the Free Software Foundation.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program.  If not, see <http://www.gnu.org/licenses/>.

def call(description, architecture, pkgList, buildCmd) {
    // package build must be done in "any" subdir. Without it the Debian build system
    // is unable to generate the *.deb files in the sources parent directory, which
    // will cause a "Permission denied" error.
    dir ("build-${architecture}") {
        // cleanup
        deleteDir()

        // checkout git repository which hold 'Jenkinsfile'
        checkout scm

        // Display Git commit Id used with the Jenkinsfile on the Job "Build History" pane
        def commitId = sh(returnStdout: true, script: 'git rev-parse --short=11 HEAD').trim()
        currentBuild.description = sprintf('Git SHA1: %s', commitId[-11..-1])

        if (pkgList) {
            // Fetch individual package source code, but only if a URL is defined, this will
            // let us reuse this script for packages like vyos-1x which ship a Jenkinfile in
            // their repositories root folder.
            pkgList.each { pkg ->
                dir(env.BASE_DIR + pkg.name) {
                    checkout([$class: 'GitSCM',
                        doGenerateSubmoduleConfigurations: false,
                        extensions: [[$class: 'CleanCheckout']],
                        branches: [[name: pkg.scmCommit]],
                        userRemoteConfigs: [[url: pkg.scmUrl]]])
                }
            }
        }

        // compile the source(s) ...
        if (pkgList) {
            pkgList.each { pkg ->
                dir(env.BASE_DIR + pkg.name) {
                    sh pkg.buildCmd
                }
            }
        } else if (buildCmd) {
            sh buildCmd
        } else {
            sh 'dpkg-buildpackage -uc -us -tc -b'
        }
    }
    if (architecture == 'amd64') {
        archiveArtifacts artifacts: "**/*.deb", fingerprint: true
    } else {
        archiveArtifacts artifacts: "**/*_${architecture}.deb", fingerprint: true
    }
}