summaryrefslogtreecommitdiffstats
path: root/Jenkinsfile
diff options
context:
space:
mode:
authorGerd Hoffmann <kraxel@redhat.com>2019-10-16 07:21:10 +0200
committerGerd Hoffmann <kraxel@redhat.com>2019-10-16 07:21:10 +0200
commitb4e414127dba4d7f2c565b077e66a0b60b715cbb (patch)
treeec0cd962ff7146d9bac0128c820a78e73d1d147a /Jenkinsfile
parentce21579e605a02b6598f178191e3847895a1d3a5 (diff)
downloadqboot-b4e414127dba4d7f2c565b077e66a0b60b715cbb.tar.gz
add Jenkinsfile
Diffstat (limited to 'Jenkinsfile')
-rw-r--r--Jenkinsfile129
1 files changed, 129 insertions, 0 deletions
diff --git a/Jenkinsfile b/Jenkinsfile
new file mode 100644
index 0000000..3293f85
--- /dev/null
+++ b/Jenkinsfile
@@ -0,0 +1,129 @@
+#!/usr/bin/env groovy
+
+def RPMSource() {
+ dir ('source') {
+ checkout([
+ $class: 'GitSCM',
+ branches: [
+ [ name: '*/master' ]
+ ],
+ extensions: [
+ [
+ $class: 'CloneOption',
+ timeout: 60
+ ]
+ ],
+ userRemoteConfigs: [
+ [ url: 'https://github.com/bonzini/qboot.git' ]
+ ]])
+ }
+}
+
+def RPMBuild() {
+ sh '''
+ # figure version
+# commit="$(cd source; git describe --tags --long --match 'v*')"
+# ghash="${commit##*-}"
+# commit="${commit%-*}"
+# gcnt="${commit##*-}"
+# commit="${commit%-*}"
+# version="${commit#v}"
+ ghash="g$(cd source; git show --format='format:%h' | head -1)"
+ gcnt="$(git show --format='format:%ai' | head -1 | sed -e 's/ .*//' -e 's/-//g')"
+ version="0"
+
+ # fresh snapshot tarball
+ rm -f *.tar.gz
+ tarball="qboot-${ghash}.tar.gz"
+ (cd source; git archive --format=tar --prefix="${tarball%.tar.gz}/" HEAD) \
+ | gzip > "${tarball}"
+
+ # 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
+
+ # 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/*/*'
+}
+
+def RPMCleanup() {
+ dir ("build") {
+ deleteDir()
+ }
+ dir ("buildroot") {
+ deleteDir()
+ }
+ dir ("rpms") {
+ deleteDir()
+ }
+}
+
+pipeline {
+ agent {
+ node 'dist-rhel-7-x86_64'
+ }
+
+ options {
+ buildDiscarder(logRotator(numToKeepStr: '3'))
+ disableConcurrentBuilds()
+ }
+
+ triggers {
+ pollSCM('H * * * *')
+ }
+
+ stages {
+
+ stage ('Prepare') {
+ steps {
+ RPMSource();
+ }
+ }
+
+ stage ("RPM Build") {
+ steps {
+ RPMBuild()
+ }
+ }
+
+ stage ("Cleanup") {
+ steps {
+ RPMCleanup()
+ }
+ }
+ }
+
+ post {
+ failure {
+ emailext([
+ to: 'builds@kraxel.org',
+ subject: "${JOB_NAME} - build #${BUILD_NUMBER} - FAILED!",
+ body: "${BUILD_URL}\n",
+ attachLog: true,
+ ])
+ }
+ }
+}