Commit bfcef3f9 authored by Dominik Charousset's avatar Dominik Charousset

Enable CI via Cirrus

parent 41660160
set(CAF_ENABLE_ACTOR_PROFILER ON CACHE BOOL "")
set(CAF_ENABLE_EXAMPLES ON CACHE BOOL "")
set(CAF_ENABLE_RUNTIME_CHECKS ON CACHE BOOL "")
set(CAF_LOG_LEVEL TRACE CACHE STRING "")
if(NOT MSVC AND NOT CMAKE_SYSTEM MATCHES BSD)
set(CMAKE_BUILD_TYPE Debug CACHE STRING "")
endif()
#!/bin/sh
echo "Preparing FreeBSD environment"
sysctl hw.model hw.machine hw.ncpu
set -e
set -x
env ASSUME_ALWAYS_YES=YES pkg bootstrap
pkg install -y bash git cmake
# Make sure network tests fail early.
sysctl -w net.inet.tcp.blackhole=0
set(CAF_ENABLE_ACTOR_PROFILER ON CACHE BOOL "")
set(CAF_ENABLE_EXAMPLES ON CACHE BOOL "")
set(CAF_LOG_LEVEL QUIET CACHE STRING "")
set(CMAKE_BUILD_TYPE Release CACHE STRING "")
......@@ -12,14 +12,29 @@ usage() {
exit 1
}
isRelative() {
case $1 in
/*) echo "no" ;;
*) echo "yes" ;;
esac
}
makeAbsolute() {
if [ `isRelative $1` = "yes" ]; then
echo "$WorkingDir/$1"
else
echo "$1"
fi
}
set -e
if [ $# = 4 ]; then
if [ "$1" = 'build' ] && [ -f "$2" ] && [ -d "$3" ]; then
Mode='build'
InitFile="$2"
SourceDir="$3"
BuildDir="$4"
InitFile=`makeAbsolute $2`
SourceDir=`makeAbsolute $3`
BuildDir=`makeAbsolute $4`
mkdir -p "$BuildDir"
else
usage
......@@ -27,7 +42,7 @@ if [ $# = 4 ]; then
elif [ $# = 2 ]; then
if [ "$1" = 'test' ] && [ -d "$2" ]; then
Mode='test'
BuildDir="$2"
BuildDir=`makeAbsolute $2`
elif [ "$1" = 'assert' ]; then
Mode='assert'
What="$2"
......
FROM mcr.microsoft.com/dotnet/framework/sdk:4.8-windowsservercore-ltsc2019
SHELL [ "powershell" ]
RUN Set-ExecutionPolicy Unrestricted -Force
# Get Chocolatey to install other dependencies.
RUN Set-ExecutionPolicy Bypass -Scope Process -Force; \
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; \
iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
# Install the Visual Studio tooling
RUN choco install -y --no-progress visualstudio2022buildtools
RUN choco install -y --no-progress visualstudio2022-workload-vctools
# Install Git and OpenSSL.
RUN choco install -y --no-progress msysgit openssl
# Add git to the global PATH
SHELL [ "cmd", "/c" ]
RUN setx /M PATH "%PATH%;C:\\Program Files\\Git\\bin"
call "c:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Auxiliary\Build\vcvarsall.bat" x86_amd64
cmake.exe ^
-S . ^
-B build ^
-G "Visual Studio 17 2022" ^
-C ".ci\debug-flags.cmake" ^
-DEXTRA_FLAGS=/MP%CIRRUS_CPU% ^
-DBUILD_SHARED_LIBS=OFF ^
-DCMAKE_C_COMPILER=cl.exe ^
-DCMAKE_CXX_COMPILER=cl.exe ^
-DOPENSSL_ROOT_DIR="C:\Program Files\OpenSSL-Win64"
cmake.exe --build build --target install --config debug || exit \b 1
call "c:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Auxiliary\Build\vcvarsall.bat" x86_amd64
cd build
ctest --output-on-failure -C debug || exit \b 1
# On community clusters, we can use up to 8 CPUs and up to 24 GB of memory.
# However, using less usually means we get workers more quickly.
resources_template: &RESOURCES_TEMPLATE
cpu: 4
memory: 16GB
debug_build_template: &DEBUG_BUILD_TEMPLATE
build_script: .ci/run.sh build .ci/debug-flags.cmake . build
test_script: .ci/run.sh test build
# CentOS 7 EOL: June 2024
centos7_task:
container:
dockerfile: .ci/centos-7/Dockerfile
<< : *RESOURCES_TEMPLATE
<< : *DEBUG_BUILD_TEMPLATE
# Debian 11 EOL: June 2026
debian11_task:
container:
dockerfile: .ci/debian-11/Dockerfile
<< : *RESOURCES_TEMPLATE
<< : *DEBUG_BUILD_TEMPLATE
# Ubuntu 20.04 EOL: April 2025
ubuntu20_task:
container:
dockerfile: .ci/ubuntu-20.04/Dockerfile
<< : *RESOURCES_TEMPLATE
<< : *DEBUG_BUILD_TEMPLATE
# FreeBSD 12.4 EOL: December 2023
freebsd12_task:
freebsd_instance:
image_family: freebsd-12-4
<< : *RESOURCES_TEMPLATE
prepare_script: .ci/freebsd-12/prepare.sh
<< : *DEBUG_BUILD_TEMPLATE
# Windows Server 2019 EOL: January 2024
windows_task:
timeout_in: 120m
windows_container:
dockerfile: .ci/windows/Dockerfile
os_version: 2019
<< : *RESOURCES_TEMPLATE
build_script: .ci/windows/build.cmd
test_script: .ci/windows/test.cmd
#!/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'],
]],
['almalinux-8', [
numCores: 4,
tags: ['docker'],
builds: ['release'],
]],
['debian-10', [
numCores: 4,
tags: ['docker'],
builds: ['release'],
]],
['debian-11', [
numCores: 4,
tags: ['docker'],
builds: ['release'],
]],
['ubuntu-18.04', [
numCores: 4,
tags: ['docker'],
builds: ['release'],
]],
['ubuntu-20.04', [
numCores: 4,
tags: ['docker'],
builds: ['release'],
]],
['ubuntu-22.04', [
numCores: 4,
tags: ['docker'],
builds: ['release'],
]],
['fedora-35', [
numCores: 4,
tags: ['docker'],
builds: ['release'],
]],
['fedora-36', [
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-36', [
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-36', [
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')
}
}
}
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