#!/usr/bin/env groovy def RPMSource() { dir ('source') { checkout([ $class: 'GitSCM', branches: [ [ name: '*/master' ] ], extensions: [ [ $class: 'CloneOption', timeout: 60 ],[ $class: 'SubmoduleOption', timeout: 60 ] ], userRemoteConfigs: [ [ url: 'https://review.coreboot.org/coreboot.git' ] ]]) } } def RPMBuild() { sh ''' # figure version commit="$(cd source; git describe --tags --long --match '[0-9]*')" ghash="${commit##*-}" commit="${commit%-*}" gcnt="${commit##*-}" commit="${commit%-*}" version="${commit}" # fresh snapshot tarball rm -f *.tar.gz tarball="coreboot-${ghash}.tar.gz" (cd source; git archive --format=tar --prefix="${tarball%.tar.gz}/" HEAD) \ > "${tarball%.gz}" (cd source/3rdparty/vboot; git archive --format=tar \ --prefix="${tarball%.tar.gz}/3rdparty/vboot/" \ HEAD) > "vboot.tar" tar --concatenate --file "${tarball%.gz}" "vboot.tar" rm "vboot.tar" gzip "${tarball%.gz}" # tweak spec file sed -i.orig \ -e "s/\\(Version:[ \\t]\\+\\)\\(.*\\)/\\1${version}/" \ -e "s/\\(Release:[ \\t]\\+\\)\\(.*\\)/\\1${gcnt}.${BUILD_NUMBER}.${ghash}/" \ -e "s/\\(Source0:[ \\t]\\+\\)\\(.*\\)/\\1${tarball}/" \ -e "s/\\(%setup\\)\\(.*\\)/\\1 -n ${tarball%.tar.gz}/" \ *.spec diff -u *.spec.orig *.spec || true # install deps /usr/local/bin/configure-mirror dnf builddep -y *.spec # build package rpmbuild \ --define "_specdir ${WORKSPACE}" \ --define "_sourcedir ${WORKSPACE}" \ --define "_rpmdir ${WORKSPACE}/rpms" \ --define "_srcrpmdir ${WORKSPACE}/rpms/src" \ --define "_builddir ${WORKSPACE}/build" \ --define "_buildrootdir ${WORKSPACE}/buildroot" \ -ba *.spec # revert spec file tweaks git reset --hard # drop source rpm rm -rf "${WORKSPACE}/rpms/src" # create rpm package repo createrepo_c rpms ''' archiveArtifacts 'rpms/*/*' } pipeline { agent { kubernetes { yamlFile 'fedora-rpmbuild.yaml' defaultContainer 'fedora-rpmbuild' slaveConnectTimeout '3600' nodeSelector 'kubernetes.io/os=linux,kubernetes.io/arch=amd64' } } options { buildDiscarder(logRotator(numToKeepStr: '3')) disableConcurrentBuilds() } triggers { pollSCM('H H(0-3) * * *') } stages { stage ('Prepare') { steps { RPMSource(); } } stage ("RPM Build") { steps { RPMBuild() } } } post { failure { emailext([ to: 'builds@kraxel.org', subject: "${JOB_NAME} - build #${BUILD_NUMBER} - FAILED!", body: "${BUILD_URL}\n", attachLog: true, ]) } } }