Commit 224713d2 authored by Dominik Charousset's avatar Dominik Charousset Committed by Joseph Noir

Cleanup + add coverage, logging and release builds

parent 27a63fa0
#!/usr/bin/env groovy
// Currently unused, but the goal would be to generate the stages from this.
def clang_builds = ["Linux && clang && LeakSanitizer",
"macOS && clang"]
def gcc_builds = ["Linux && gcc4.8",
"Linux && gcc4.9",
"Linux && gcc5.1",
"Linux && gcc6.3",
"Linux && gcc7.2"]
def msvc_builds = ["msbuild"]
// The options we use for the builds.
def gcc_cmake_opts = "-DCAF_NO_PROTOBUF_EXAMPLES:BOOL=yes " +
"-DCAF_NO_QT_EXAMPLES:BOOL=yes " +
"-DCAF_MORE_WARNINGS:BOOL=yes" +
"-DCAF_ENABLE_ADDRESS_SANITIZER:BOOL=yes" +
"-DCAF_ENABLE_RUNTIME_CHECKS:BOOL=yes" +
"-DCAF_USE_ASIO:BOOL=yes" +
"-DCAF_NO_BENCHMARKS:BOOL=yes" +
"-DOPENSSL_ROOT_DIR=/usr/local/opt/openssl" +
"-DOPENSSL_INCLUDE_DIR=/usr/local/opt/openssl"
def clang_cmake_opts = "-DCAF_NO_PROTOBUF_EXAMPLES:BOOL=yes " +
"-DCAF_NO_QT_EXAMPLES:BOOL=yes " +
"-DCAF_MORE_WARNINGS:BOOL=yes " +
"-DCAF_ENABLE_ADDRESS_SANITIZER:BOOL=yes " +
"-DCAF_ENABLE_RUNTIME_CHECKS:BOOL=yes " +
"-DCAF_USE_ASIO:BOOL=yes " +
"-DCAF_NO_BENCHMARKS:BOOL=yes " +
"-DCAF_NO_OPENCL:BOOL=yes " +
"-DOPENSSL_ROOT_DIR=/usr/local/opt/openssl " +
"-DOPENSSL_INCLUDE_DIR=/usr/local/opt/openssl"
def unix_opts = "-DCAF_NO_PROTOBUF_EXAMPLES:BOOL=yes " +
"-DCAF_NO_QT_EXAMPLES:BOOL=yes " +
"-DCAF_MORE_WARNINGS:BOOL=yes" +
"-DCAF_ENABLE_ADDRESS_SANITIZER:BOOL=yes" +
"-DCAF_ENABLE_RUNTIME_CHECKS:BOOL=yes" +
"-DCAF_USE_ASIO:BOOL=yes" +
"-DCAF_NO_BENCHMARKS:BOOL=yes" +
"-DOPENSSL_ROOT_DIR=/usr/local/opt/openssl" +
"-DOPENSSL_INCLUDE_DIR=/usr/local/opt/openssl"
def msbuild_opts = "-DCAF_BUILD_STATIC_ONLY:BOOL=yes " +
"-DCAF_NO_BENCHMARKS:BOOL=yes " +
"-DCAF_NO_EXAMPLES:BOOL=yes " +
"-DCAF_NO_MEM_MANAGEMENT:BOOL=yes " +
"-DCAF_NO_OPENCL:BOOL=yes " +
"-DCAF_LOG_LEVEL:INT=0 " +
"-DCMAKE_CXX_FLAGS=\"/MP\""
def ms_opts = "-DCAF_BUILD_STATIC_ONLY:BOOL=yes " +
"-DCAF_NO_BENCHMARKS:BOOL=yes " +
"-DCAF_NO_EXAMPLES:BOOL=yes " +
"-DCAF_NO_MEM_MANAGEMENT:BOOL=yes " +
"-DCAF_NO_OPENCL:BOOL=yes " +
"-DCAF_LOG_LEVEL:INT=0 " +
"-DCMAKE_CXX_FLAGS=\"/MP\""
pipeline {
agent none
......@@ -53,7 +32,7 @@ pipeline {
node ('master') {
deleteDir()
dir('caf-sources') {
checkout scm
checkout scm
}
stash includes: 'caf-sources/**', name: 'caf-sources'
}
......@@ -61,40 +40,79 @@ pipeline {
}
stage ('Build & Test') {
parallel {
// gcc builds
stage ("Linux && gcc4.8") {
agent { label "Linux && gcc4.8" }
steps { do_unix_stuff(gcc_cmake_opts) }
stage ('Linux && gcc4.8') {
agent { label "${STAGE_NAME}" }
steps { unixBuild() }
}
stage ('Linux && gcc4.9') {
agent { label "${STAGE_NAME}" }
steps { unixBuild() }
}
stage ('Linux && gcc5.1') {
agent { label "${STAGE_NAME}" }
steps { unixBuild() }
}
stage ('Linux && gcc6.3') {
agent { label "${STAGE_NAME}" }
steps { unixBuild() }
}
stage ("Linux && gcc4.9") {
agent { label "Linux && gcc4.9" }
steps { do_unix_stuff(gcc_cmake_opts) }
stage ('Linux && gcc7.2') {
agent { label "${STAGE_NAME}" }
steps { unixBuild() }
}
stage ("Linux && gcc5.1") {
agent { label "Linux && gcc5.1" }
steps { do_unix_stuff(gcc_cmake_opts) }
stage ('Linux && clang') {
agent { label "${STAGE_NAME}" }
steps { unixBuild() }
}
stage ("Linux && gcc6.3") {
agent { label "Linux && gcc6.3" }
steps { do_unix_stuff(gcc_cmake_opts) }
stage ('macOS && clang') {
agent { label "${STAGE_NAME}" }
steps { unixBuild() }
}
stage ("Linux && gcc7.2") {
agent { label "Linux && gcc7.2" }
steps { do_unix_stuff(gcc_cmake_opts) }
stage ('macOS && gcc') {
agent { label "${STAGE_NAME}" }
steps { unixBuild() }
}
// clang builds
stage ("macOS && clang") {
agent { label "macOS && clang" }
steps { do_unix_stuff(clang_cmake_opts) }
stage('Linux && LeakSanitizer') {
agent { label "${STAGE_NAME}" }
steps { unixBuild() }
}
stage('Linux && clang && LeakSanitizer') {
agent { label "Linux && clang && LeakSanitizer" }
steps { do_unix_stuff(clang_cmake_opts) }
stage('Logging') {
agent { label 'Linux' }
steps { unixBuild([buildOpts: '-D CAF_LOG_LEVEL=4']) }
}
stage('Release') {
agent { label 'Linux' }
steps { unixBuild('Release') }
}
stage('Coverage') {
agent { label "gcovr" }
steps {
unixBuild([buildOpts: '-D CAF_ENABLE_GCOV=yes'])
dir('caf-sources') {
sh 'gcovr -e libcaf_test -e ".*/test/.*" -x -r .. > coverage.xml'
cobertura([
autoUpdateHealth: false,
autoUpdateStability: false,
coberturaReportFile: '**/coverage.xml',
conditionalCoverageTargets: '70, 0, 0',
failUnhealthy: false,
failUnstable: false,
lineCoverageTargets: '80, 0, 0',
maxNumberOfBuilds: 0,
methodCoverageTargets: '80, 0, 0',
onlyStable: false,
sourceEncoding: 'ASCII',
zoomCoverageChart: false,
])
}
}
}
// windows builds
stage('msbuild') {
agent { label "msbuild" }
steps { do_ms_stuff("msbuild", msbuild_opts) }
agent { label "${STAGE_NAME}" }
environment {
PATH = 'C:\\Windows\\System32;C:\\Program Files\\CMake\\bin;C:\\Program Files\\Git\\cmd;C:\\Program Files\\Git\\bin'
}
steps { msBuild() }
}
}
}
......@@ -115,26 +133,25 @@ pipeline {
Build number: ${env.BUILD_NUMBER}""",
// TODO: Uncomment the following line:
// recipientProviders: [[$class: 'CulpritsRecipientProvider'], [$class: 'RequesterRecipientProvider']]
to: 'hiesgen' // add multiple separated with ';'
to: 'hiesgen;neverlord' // add multiple separated with ';'
)
}
}
}
def do_unix_stuff(cmake_opts = "",
build_type = "Debug",
generator = "Unix Makefiles",
build_opts = "",
clean_build = true) {
def unixBuild(buildType = 'Debug',
generator = 'Unix Makefiles',
buildOpts = '',
cleanBuild = true) {
deleteDir()
unstash('caf-sources')
dir('caf-sources') {
// Configure and build.
cmakeBuild([
buildDir: 'build',
buildType: "$build_type",
cleanBuild: clean_build,
cmakeArgs: "$cmake_opts",
buildType: "$buildType",
cleanBuild: cleanBuild,
cmakeArgs: "$unix_opts $buildOpts",
generator: "$generator",
installation: 'cmake in search path',
preloadScript: '../cmake/jenkins.cmake',
......@@ -144,28 +161,26 @@ def do_unix_stuff(cmake_opts = "",
// Test.
ctest([
arguments: '--output-on-failure',
installation: 'cmake auto install',
installation: 'cmake in search path',
workingDir: 'build',
])
}
}
def do_ms_stuff(cmake_opts = "",
build_type = "Debug",
generator = "Visual Studio 15 2017",
build_opts = "",
clean_build = true) {
withEnv(['PATH=C:\\Windows\\System32;C:\\Program Files\\CMake\\bin;C:\\Program Files\\Git\\cmd;C:\\Program Files\\Git\\bin']) {
deleteDir()
// TODO: pull from mirror, not from GitHub, (RIOT fetch func?)
checkout scm
def msBuild(buildType = 'Debug',
generator = 'Visual Studio 15 2017',
buildOpts = '',
cleanBuild = true) {
deleteDir()
unstash('caf-sources')
dir('caf-sources') {
// Configure and build.
// installation can be either 'cmake auto install' or 'cmake in search path'
// cmakeBuild buildDir: 'build', buildType: "$build_type", cleanBuild: clean_build, cmakeArgs: "$cmake_opts", generator: "$generator", installation: 'cmake in search path', preloadScript: '../cmake/jenkins.cmake', sourceDir: '.', steps: [[args: 'all']]
// cmakeBuild buildDir: 'build', buildType: "$buildType", cleanBuild: cleanBuild, cmakeArgs: "$ms_opts", generator: "$generator", installation: 'cmake in search path', preloadScript: '../cmake/jenkins.cmake', sourceDir: '.', steps: [[args: 'all']]
def ret = bat(returnStatus: true,
script: """cmake -E make_directory build
cd build
cmake -DCMAKE_BUILD_TYPE=${build_type} -G "${generator}" ${cmake_opts} ..
cmake -DCMAKE_buildType=${buildType} -G "${generator}" ${ms_opts} ..
IF /I "%ERRORLEVEL%" NEQ "0" (
EXIT 1
)
......@@ -190,6 +205,10 @@ def do_ms_stuff(cmake_opts = "",
return
}
// Test.
ctest arguments: '--output-on-failure', installation: 'cmake auto install', workingDir: 'build'
ctest([
arguments: '--output-on-failure',
installation: 'cmake auto install',
workingDir: 'build',
])
}
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment