diff options
-rw-r--r-- | packages/linux-kernel/Jenkinsfile | 180 | ||||
-rw-r--r-- | vars/README.md | 6 | ||||
-rw-r--r-- | vars/buildPackage.groovy | 197 | ||||
-rw-r--r-- | vars/getChangeSetPath.groovy | 25 | ||||
-rw-r--r-- | vars/getGitBranchName.groovy | 21 | ||||
-rw-r--r-- | vars/getGitRepoName.groovy | 20 | ||||
-rw-r--r-- | vars/getGitRepoURL.groovy | 20 | ||||
-rw-r--r-- | vars/getJenkinsfilePath.groovy | 24 | ||||
-rw-r--r-- | vars/isCustomBuild.groovy | 26 | ||||
-rw-r--r-- | vars/setDescription.groovy | 42 |
10 files changed, 447 insertions, 114 deletions
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}'" + """ + } } } } diff --git a/vars/README.md b/vars/README.md new file mode 100644 index 00000000..ca2f821f --- /dev/null +++ b/vars/README.md @@ -0,0 +1,6 @@ +# Jenkins Build Library + +Instead of writing the same code over and over again, place the common +parts into a Jenkins Library which is then consumed by every individual +build Job. This not only makes it less complex, it also increases +maintainability by several magnitudes. diff --git a/vars/buildPackage.groovy b/vars/buildPackage.groovy new file mode 100644 index 00000000..edd854b7 --- /dev/null +++ b/vars/buildPackage.groovy @@ -0,0 +1,197 @@ +#!/usr/bin/env groovy + +// Copyright (C) 2020 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=null, pkgList=null, buildCmd=null) { + // - description: Arbitrary text to print on Jenkins Job Description + // instead of package name + // - pkgList: Multiple packages can be build at once in a single Pipeline run + // - buildCmd: replace default build command "dpkg-buildpackage -uc -us -tc -b" + // with this custom version + + // Only keep the 10 most recent builds + def projectProperties = [ + [$class: 'BuildDiscarderProperty',strategy: [$class: 'LogRotator', numToKeepStr: '10']], + ] + + properties(projectProperties) + setDescription(description) + + node('Docker') { + stage('Define Agent') { + script { + // create container name on demand + def branchName = getGitBranchName() + // Adjust PR target branch name so we can re-map it to the proper + // Docker image. CHANGE_ID is set only for pull requests, so it is + // safe to access the pullRequest global variable + if (env.CHANGE_ID) { + branchName = "${env.CHANGE_TARGET}".toLowerCase() + } + if (branchName.equals("master")) { + branchName = "current" + } + env.DOCKER_IMAGE = "vyos/vyos-build:" + branchName + } + } + } + pipeline { + agent { + docker { + args "--sysctl net.ipv6.conf.lo.disable_ipv6=0 -e GOSU_UID=1006 -e GOSU_GID=1006" + image "${env.DOCKER_IMAGE}" + alwaysPull true + } + } + environment { + // get relative directory path to Jenkinsfile + BASE_DIR = getJenkinsfilePath() + CHANGESET_DIR = getChangeSetPath() + DEBIAN_ARCH = sh(returnStdout: true, script: 'dpkg --print-architecture').trim() + } + options { + skipDefaultCheckout() + timeout(time: 60, unit: 'MINUTES') + timestamps() + } + stages { + stage('Fetch Source') { + steps { + script { + // 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') { + // 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]]]) + } + } + } + } + } + } + } + stage('Build Source') { + when { + beforeOptions true + beforeAgent true + anyOf { + changeset pattern: "${env.CHANGESET_DIR}" + triggeredBy 'TimerTrigger' + triggeredBy cause: "UserIdCause" + } + } + steps { + script { + // 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') { + 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" + } + } + } + } + } + } + post { + cleanup { + deleteDir() + } + success { + script { + // 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. + def BIN_DIR = '' + if (env.BASE_DIR) { + BIN_DIR = 'build/' + env.BASE_DIR + } + dir (BIN_DIR) { + if (isCustomBuild()) { + // archive *.deb artifact on custom builds, deploy to repo otherwise + archiveArtifacts artifacts: '**/*.deb', allowEmptyArchive: 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' + + def SSH_DIR = '~/VyOS/' + RELEASE + '/' + env.DEBIAN_ARCH + def ARCH_OPT = '' + if (env.DEBIAN_ARCH != 'all') + ARCH_OPT = '-A ' + env.DEBIAN_ARCH + + files = findFiles(glob: '*.deb') + if (files) { + echo "Uploading package(s) and updating package(s) in the repository ..." + files.each { FILE -> + def PKG = sh(returnStdout: true, script: "dpkg-deb -f ${FILE} Package").trim() + // No need to explicitly check the return code. The pipeline + // will fail if sh returns a noni-zero exit code + sh """ + ssh ${SSH_OPTS} ${SSH_REMOTE} -t "bash --login -c 'mkdir -p ${SSH_DIR}'" + scp ${SSH_OPTS} ${FILE} ${SSH_REMOTE}:${SSH_DIR}/ + ssh ${SSH_OPTS} ${SSH_REMOTE} -t "uncron-add 'reprepro -v -b ${VYOS_REPO_PATH} ${ARCH_OPT} remove ${RELEASE} ${PKG}'" + 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}/${FILE}'" + """ + } + } + } + } + } + } + } + } + } +} diff --git a/vars/getChangeSetPath.groovy b/vars/getChangeSetPath.groovy new file mode 100644 index 00000000..f046d7cc --- /dev/null +++ b/vars/getChangeSetPath.groovy @@ -0,0 +1,25 @@ +#!/usr/bin/env groovy +// Copyright (C) 2020 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() { + tmp = getJenkinsfilePath() + if (tmp) + tmp = "**/" + tmp + "*" + else + tmp = "**/*" + return tmp +} + diff --git a/vars/getGitBranchName.groovy b/vars/getGitBranchName.groovy new file mode 100644 index 00000000..133734da --- /dev/null +++ b/vars/getGitBranchName.groovy @@ -0,0 +1,21 @@ +#!/usr/bin/env groovy +// Copyright (C) 2020 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() { + def branch = scm.branches[0].name + return branch.split('/')[-1] +} + diff --git a/vars/getGitRepoName.groovy b/vars/getGitRepoName.groovy new file mode 100644 index 00000000..058e4ff5 --- /dev/null +++ b/vars/getGitRepoName.groovy @@ -0,0 +1,20 @@ +#!/usr/bin/env groovy +// Copyright (C) 2020 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() { + return getGitRepoURL().split('/').last() +} + diff --git a/vars/getGitRepoURL.groovy b/vars/getGitRepoURL.groovy new file mode 100644 index 00000000..d36b48e6 --- /dev/null +++ b/vars/getGitRepoURL.groovy @@ -0,0 +1,20 @@ +#!/usr/bin/env groovy +// Copyright (C) 2020 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() { + return scm.userRemoteConfigs[0].url +} + diff --git a/vars/getJenkinsfilePath.groovy b/vars/getJenkinsfilePath.groovy new file mode 100644 index 00000000..a6690f5e --- /dev/null +++ b/vars/getJenkinsfilePath.groovy @@ -0,0 +1,24 @@ +#!/usr/bin/env groovy +// Copyright (C) 2020 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() { + tmp = currentBuild.rawBuild.parent.definition.scriptPath.replace('Jenkinsfile', '') + if (tmp == null) { + tmp = '' + } + return tmp +} + diff --git a/vars/isCustomBuild.groovy b/vars/isCustomBuild.groovy new file mode 100644 index 00000000..301fdd42 --- /dev/null +++ b/vars/isCustomBuild.groovy @@ -0,0 +1,26 @@ +#!/usr/bin/env groovy +// Copyright (C) 2020 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() { + // 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 + // 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 +} diff --git a/vars/setDescription.groovy b/vars/setDescription.groovy new file mode 100644 index 00000000..683dc20c --- /dev/null +++ b/vars/setDescription.groovy @@ -0,0 +1,42 @@ +#!/usr/bin/env groovy +// Copyright (C) 2020 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(text = null) { + def item = Jenkins.instance.getItemByFullName(env.JOB_NAME) + + // build up the main description text + def description = "" + if (text) { + description += "<h2>VyOS package build: " + text + "</h2>" + } else { + description += "<h2>VyOS 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() +} + |