diff --git a/CTestConfig.cmake b/CTestConfig.cmake new file mode 100644 index 00000000..6e0fab9e --- /dev/null +++ b/CTestConfig.cmake @@ -0,0 +1,9 @@ +set(CTEST_PROJECT_NAME "FairMQ") +set(CTEST_NIGHTLY_START_TIME "00:00:00 CEST") + +set(CTEST_DROP_METHOD "https") +set(CTEST_DROP_SITE "cdash.gsi.de") +set(CTEST_DROP_LOCATION "/submit.php?project=FairMQ") +set(CTEST_DROP_SITE_CDASH TRUE) + +set(CTEST_TESTING_TIMEOUT 60) diff --git a/Dart.sh b/Dart.sh new file mode 100755 index 00000000..7dc7d524 --- /dev/null +++ b/Dart.sh @@ -0,0 +1,133 @@ +#!/bin/bash + + +function print_example(){ +echo "##################################################################" +echo "# To set the required parameters as source and the build #" +echo "# directory for ctest, the linux flavour and the SIMPATH #" +echo "# put the export commands below to a separate file which is read #" +echo "# during execution and which is defined on the command line. #" +echo "# Set all parameters according to your needs. #" +echo "# LINUX_FLAVOUR should be set to the distribution you are using #" +echo "# eg Debian, SuSe etc. #" +echo "# An additional varibale NCPU can overwrite the default number #" +echo "# of parallel processes used to compile the project. #" +echo "# This can be usefull if one can use a distributed build system #" +echo "# like icecream. #" +echo "# For example #" +echo "#!/bin/bash #" +echo "export LINUX_FLAVOUR= #" +echo "export FAIRSOFT_VERSION= #" +echo "export SIMPATH= #" +echo "export GIT_BRANCH=< master or dev> #" +echo "export BUILDDIR= #" +echo "export SOURCEDIR= #" +echo "#export NCPU=100 #" +echo "##################################################################" +} + +if [ "$#" -lt "2" ]; then + echo "" + echo "-- Error -- Please start script with two parameters" + echo "-- Error -- The first parameter is the ctest model." + echo "-- Error -- Possible arguments are Nightly, Experimental, " + echo "-- Error -- Continuous or Profile." + echo "-- Error -- The second parameter is the file containg the" + echo "-- Error -- Information about the setup at the client" + echo "-- Error -- installation (see example below)." + echo "" + print_example + exit 1 +fi + +# test if a valid ctest model is defined +if [ "$1" == "Experimental" -o "$1" == "Nightly" -o "$1" == "Continuous" -o "$1" == "Profile" -o "$1" == "alfa_ci" ]; then + echo "" +else + echo "-- Error -- This ctest model is not supported." + echo "-- Error -- Possible arguments are Nightly, Experimental, Continuous or Profile." + exit 1 +fi + +# test if the input file exists and execute it +if [ -e "$2" ];then + source $2 +else + echo "-- Error -- Input file does not exist." + echo "-- Error -- Please choose existing input file." + exit 1 +fi + +# set the ctest model to command line parameter +if [ "$1" == "alfa_ci" ]; then + export ctest_model=Experimental +else + export ctest_model=$1 +fi + + +# test for architecture +arch=$(uname -s | tr '[A-Z]' '[a-z]') +chip=$(uname -m | tr '[A-Z]' '[a-z]') + +# extract information about the system and the machine and set +# environment variables used by ctest +SYSTEM=$arch-$chip +if test -z $CXX ; then + if [ "$arch" == "darwin" ]; then + COMPILER=$(clang --version | head -n 1 | cut -d' ' -f1,2,4 | tr -d ' ') + else + COMPILER=gcc$(gcc -dumpversion) + fi +else + COMPILER=$CXX$($CXX -dumpversion) +fi + +if [ "$1" == "alfa_ci" ]; then + export LABEL1=alfa_ci-$COMPILER-FairLogger_$GIT_BRANCH + export LABEL=$(echo $LABEL1 | sed -e 's#/#_#g') +else + export LABEL1=${LINUX_FLAVOUR}-$chip-$COMPILER-FairLogger_$GIT_BRANCH + export LABEL=$(echo $LABEL1 | sed -e 's#/#_#g') +fi + +# get the number of processors +# and information about the host +if [ "$arch" = "linux" ]; +then + if [ "$NCPU" != "" ]; + then + export number_of_processors=$NCPU + else + export number_of_processors=$(cat /proc/cpuinfo | grep processor | wc -l) + fi + if [ -z "$SITE" ]; then + export SITE=$(hostname -f) + if [ -z "$SITE" ]; then + export SITE=$(uname -n) + fi + fi +elif [ "$arch" = "darwin" ]; +then + if [ "$NCPU" != "" ]; + then + export number_of_processors=$NCPU + else + export number_of_processors=$(sysctl -n hw.ncpu) + fi + if [ -z "$SITE" ]; then + export SITE=$(hostname -s) + fi +fi + +echo "************************" +date +echo "LABEL: " $LABEL +echo "SITE: " $SITE +echo "Model: " ${ctest_model} +echo "Nr. of processes: " $number_of_processors +echo "************************" + +cd $SOURCEDIR + +ctest -S FairMQTest.cmake -V --VV diff --git a/FairMQTest.cmake b/FairMQTest.cmake new file mode 100644 index 00000000..c8ad7f17 --- /dev/null +++ b/FairMQTest.cmake @@ -0,0 +1,73 @@ +################################################################################ +# Copyright (C) 2018 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH # +# # +# This software is distributed under the terms of the # +# GNU Lesser General Public Licence (LGPL) version 3, # +# copied verbatim in the file "LICENSE" # +################################################################################ +Set(CTEST_SOURCE_DIRECTORY $ENV{SOURCEDIR}) +Set(CTEST_BINARY_DIRECTORY $ENV{BUILDDIR}) +Set(CTEST_SITE $ENV{SITE}) +Set(CTEST_BUILD_NAME $ENV{LABEL}) +Set(CTEST_CMAKE_GENERATOR "Unix Makefiles") +Set(CTEST_PROJECT_NAME "FairMQ") + +Find_Program(CTEST_GIT_COMMAND NAMES git) +Set(CTEST_UPDATE_COMMAND "${CTEST_GIT_COMMAND}") + +Set(BUILD_COMMAND "make") +Set(CTEST_BUILD_COMMAND "${BUILD_COMMAND} -j$ENV{number_of_processors}") + +String(TOUPPER $ENV{ctest_model} _Model) +Set(configure_options "-DCMAKE_BUILD_TYPE=${_Model}") + +Set(CTEST_USE_LAUNCHERS 1) +Set(configure_options "${configure_options};-DCTEST_USE_LAUNCHERS=${CTEST_USE_LAUNCHERS}") + +Set(configure_options "${configure_options};-DDISABLE_COLOR=ON") + +Set(EXTRA_FLAGS $ENV{EXTRA_FLAGS}) +If(EXTRA_FLAGS) + Set(configure_options "${configure_options};${EXTRA_FLAGS}") +EndIf() + +If($ENV{ctest_model} MATCHES Nightly OR $ENV{ctest_model} MATCHES Profile) + + Find_Program(GCOV_COMMAND gcov) + If(GCOV_COMMAND) + Message("Found GCOV: ${GCOV_COMMAND}") + Set(CTEST_COVERAGE_COMMAND ${GCOV_COMMAND}) + EndIf(GCOV_COMMAND) + + Set(ENV{ctest_model} Nightly) + + CTEST_EMPTY_BINARY_DIRECTORY(${CTEST_BINARY_DIRECTORY}) + +EndIf() + +Ctest_Start($ENV{ctest_model}) + +If(NOT $ENV{ctest_model} MATCHES Experimental) + Ctest_Update(SOURCE "${CTEST_SOURCE_DIRECTORY}") +EndIf() + +Ctest_Configure(BUILD "${CTEST_BINARY_DIRECTORY}" + OPTIONS "${configure_options}" + ) + +Ctest_Build(BUILD "${CTEST_BINARY_DIRECTORY}") + +Ctest_Test(BUILD "${CTEST_BINARY_DIRECTORY}" + PARALLEL_LEVEL $ENV{number_of_processors} + RETURN_VALUE _ctest_test_ret_val + ) + +If(GCOV_COMMAND) + Ctest_Coverage(BUILD "${CTEST_BINARY_DIRECTORY}") +EndIf() + +Ctest_Submit() + +if (_ctest_test_ret_val) + Message(FATAL_ERROR "Some tests failed.") +endif() diff --git a/Jenkinsfile b/Jenkinsfile new file mode 100644 index 00000000..596c678b --- /dev/null +++ b/Jenkinsfile @@ -0,0 +1,56 @@ +#!groovy + +def specToLabel(Map spec) { + return "${spec.os}-${spec.arch}-${spec.compiler}-FairSoft_${spec.fairsoft}" +} + +def buildMatrix(List specs, Closure callback) { + def nodes = [:] + for (spec in specs) { + def label = specToLabel(spec) + nodes[label] = { + node(label) { + githubNotify(context: "alfa-ci/${label}", description: 'Building ...', status: 'PENDING') + try { + deleteDir() + checkout scm + + callback.call(spec, label) + + deleteDir() + githubNotify(context: "alfa-ci/${label}", description: 'Success', status: 'SUCCESS') + } catch (e) { + deleteDir() + githubNotify(context: "alfa-ci/${label}", description: 'Error', status: 'ERROR') + throw e + } + } + } + } + return nodes +} + +pipeline{ + agent none + stages { + stage("Run Build/Test Matrix") { + steps{ + script { + parallel(buildMatrix([ + [os: 'Debian8', arch: 'x86_64', compiler: 'gcc4.9', fairsoft: 'apr18'], + [os: 'MacOS10.11', arch: 'x86_64', compiler: 'AppleLLVM8.0.0', fairsoft: 'apr18'], + // [os: 'MacOS10.13', arch: 'x86_64', compiler: 'AppleLLVM9.0.0', fairsoft: 'oct17'], + ]) { spec, label -> + sh '''\ + echo "export BUILDDIR=$PWD/build" >> Dart.cfg + echo "export SOURCEDIR=$PWD" >> Dart.cfg + echo "export PATH=$SIMPATH/bin:$PATH" >> Dart.cfg + echo "export GIT_BRANCH=$JOB_BASE_NAME" >> Dart.cfg + ''' + sh './Dart.sh alfa_ci Dart.cfg' + }) + } + } + } + } +}