diff --git a/scripts/jenkins/clang-log-parser.rules b/scripts/jenkins/clang-log-parser.rules new file mode 100644 index 0000000000000000000000000000000000000000..f14556f8570a24c6a395304d7c5be0f6a4fbd537 --- /dev/null +++ b/scripts/jenkins/clang-log-parser.rules @@ -0,0 +1,15 @@ +# Workflow stages used for grouping +start /stage:/ + +# CMake +warning /CMake Warning/ +error /CMake Error/ + +# CTest +error \[*][*][*]Failed\ + +# Clang + +# Clang sanitizer +error /: runtime error:/ +error /==ERROR:/ diff --git a/scripts/jenkins/clang.groovy b/scripts/jenkins/clang.groovy new file mode 100644 index 0000000000000000000000000000000000000000..90773b8915b57b6f6788f11d8931d3cc44268c83 --- /dev/null +++ b/scripts/jenkins/clang.groovy @@ -0,0 +1,46 @@ +node('docker') +{ + // Checks out into subdirectory ogs + stage 'Checkout' + dir('ogs') { + checkout scm + } + + + // Multiple configurations are build in parallel + parallel linux: { + docker.image('ogs6/clang-ogs-base:latest').inside + { + catchError { + build 'build', '-DOGS_ADDRESS_SANITIZER=ON -DOGS_UNDEFINED_BEHAVIOR_SANITIZER=ON', '' + + stage 'Unit tests' + sh '''cd build + rm -rf tests/testrunner.xml + bin/testrunner --gtest_output=xml:./tests/testrunner.xml''' + + stage 'End-to-end tests' + sh '''cd build + make ctest''' + } + } + step([$class: 'LogParserPublisher', failBuildOnError: true, unstableOnWarning: true, + projectRulePath: 'ogs/scripts/jenkins/clang-log-parser.rules', useProjectRule: true]) + } + + step([$class: 'JUnitResultArchiver', + testResults: 'build/tests/testrunner.xml,build_win/tests/testrunner.xml']) + + archive 'build*/*.tar.gz,build_win*/*.zip' +} // end node + + +def build(buildDir, cmakeOptions, target) { + sh "rm -rf ${buildDir} && mkdir ${buildDir}" + + stage 'Configure' + sh "cd ${buildDir} && cmake ../ogs ${cmakeOptions}" + + stage 'Build' + sh "cd ${buildDir} && make -j 4 ${target}" +}