zeek/auxil/broker/caf/Jenkinsfile
Patrick Kelley 8fd444092b initial
2025-05-07 15:35:15 -04:00

194 lines
5.7 KiB
Groovy

#!/usr/bin/env groovy
@Library('caf-continuous-integration') _
// Configures the behavior of our stages.
config = [
// Version dependency for the caf-continuous-integration library.
ciLibVersion: 1.0,
// GitHub path to repository.
repository: 'actor-framework/actor-framework',
// List of enabled checks for email notifications.
checks: [
'build',
'style',
'tests',
// 'coverage', TODO: fix kcov setup
],
// Default CMake flags by build type.
buildFlags: [
'CAF_ENABLE_ACTOR_PROFILER:BOOL=ON',
'CAF_ENABLE_EXAMPLES:BOOL=ON',
'CAF_ENABLE_RUNTIME_CHECKS:BOOL=ON',
],
extraDebugFlags: [
'CAF_LOG_LEVEL:STRING=TRACE',
],
// Our build matrix. Keys are the operating system labels and values are build configurations.
buildMatrix: [
// Various Linux builds.
['centos-7', [
numCores: 4,
tags: ['docker'],
builds: ['release'],
]],
['centos-8', [
numCores: 4,
tags: ['docker'],
builds: ['release'],
]],
['debian-9', [
numCores: 4,
tags: ['docker'],
builds: ['release'],
]],
['debian-10', [
numCores: 4,
tags: ['docker'],
builds: ['release'],
]],
['ubuntu-16.04', [
numCores: 4,
tags: ['docker'],
builds: ['release'],
]],
['ubuntu-18.04', [
numCores: 4,
tags: ['docker'],
builds: ['release'],
]],
['ubuntu-20.04', [
numCores: 4,
tags: ['docker'],
builds: ['release'],
]],
['fedora-33', [
numCores: 4,
tags: ['docker'],
builds: ['release'],
]],
['fedora-34', [
numCores: 4,
tags: ['docker'],
builds: ['release'],
]],
// One extra debug build with exceptions disabled.
['centos-7', [
numCores: 4,
tags: ['docker'],
builds: ['debug'],
extraBuildFlags: [
'CAF_ENABLE_EXCEPTIONS:BOOL=OFF',
'CMAKE_CXX_FLAGS:STRING=-fno-exceptions',
],
]],
// One extra debug build for leak checking.
['fedora-34', [
numCores: 4,
tags: ['docker', 'LeakSanitizer'],
builds: ['debug'],
extraBuildFlags: [
'CAF_SANITIZERS:STRING=address',
],
extraBuildEnv: [
'ASAN_OPTIONS=detect_leaks=1',
],
]],
// One extra debug build with static libs, UBSan and hardening flags.
['fedora-34', [
numCores: 4,
tags: ['docker', 'UBSanitizer'],
builds: ['debug'],
extraBuildFlags: [
'BUILD_SHARED_LIBS:BOOL=OFF',
'CAF_SANITIZERS:STRING=address,undefined',
],
extraBuildEnv: [
'CXXFLAGS=-fno-sanitize-recover=undefined -D_GLIBCXX_DEBUG',
'LDFLAGS=-fno-sanitize-recover=undefined',
],
]],
// Other UNIX systems. On macOS, we also build *all* examples.
['macOS', [
numCores: 4,
builds: ['debug', 'release'],
extraBuildFlags: [
'CAF_ENABLE_CURL_EXAMPLES:BOOL=ON',
'CAF_ENABLE_PROTOBUF_EXAMPLES:BOOL=ON',
'CAF_ENABLE_QT6_EXAMPLES:BOOL=ON',
'OPENSSL_ROOT_DIR:PATH=/usr/local/opt/openssl',
'Qt6_DIR:PATH=/usr/local/opt/qt/lib/cmake/Qt6',
],
extraDebugBuildFlags: [
'CAF_SANITIZERS:STRING=address',
],
]],
['FreeBSD', [
numCores: 4,
builds: ['debug', 'release'],
extraBuildFlags: [
'CAF_SANITIZERS:STRING=address',
],
]],
// Non-UNIX systems.
['Windows', [
numCores: 4,
// TODO: debug build currently broken
//builds: ['debug', 'release'],
builds: ['release'],
extraBuildFlags: [
'OPENSSL_ROOT_DIR:PATH=C:\\Program Files\\OpenSSL-Win64',
],
]],
],
]
// Declarative pipeline for triggering all stages.
pipeline {
options {
buildDiscarder(logRotator(numToKeepStr: '50', artifactNumToKeepStr: '3'))
}
agent {
label 'master'
}
environment {
PrettyJobBaseName = env.JOB_BASE_NAME.replace('%2F', '/')
PrettyJobName = "CAF/$PrettyJobBaseName #${env.BUILD_NUMBER}"
}
stages {
stage('Checkout') {
steps {
getSources(config)
}
}
stage('Lint') {
agent { label 'clang-format' }
steps {
runClangFormat(config)
}
}
stage('Build') {
steps {
buildParallel(config)
}
}
stage('Notify') {
steps {
collectResults(config, PrettyJobName)
}
}
}
post {
failure {
emailext(
subject: "$PrettyJobName: " + config['checks'].collect{ "⛔️ ${it}" }.join(', '),
recipientProviders: [culprits(), developers(), requestor(), upstreamDevelopers()],
attachLog: true,
compressLog: true,
body: "Check console output at ${env.BUILD_URL} or see attached log.\n",
)
notifyAllChecks(config, 'failure', 'Failed due to earlier error')
}
}
}