Add codecov reports to PRs

This commit is contained in:
Dennis Klein 2018-07-19 16:54:31 +02:00 committed by Dennis Klein
parent 9bab3f9f4c
commit e403d18cb9
4 changed files with 66 additions and 36 deletions

26
Dart.sh
View File

@ -41,13 +41,15 @@ if [ "$#" -lt "2" ]; then
fi fi
# test if a valid ctest model is defined # 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 case "$1" in
echo "" Experimental|Nightly|Continuous|Profile|alfa_ci|codecov)
else ;;
*)
echo "-- Error -- This ctest model is not supported." echo "-- Error -- This ctest model is not supported."
echo "-- Error -- Possible arguments are Nightly, Experimental, Continuous or Profile." echo "-- Error -- Possible arguments are Nightly, Experimental, Continuous or Profile."
exit 1 exit 1
fi ;;
esac
# test if the input file exists and execute it # test if the input file exists and execute it
if [ -e "$2" ];then if [ -e "$2" ];then
@ -61,6 +63,9 @@ fi
# set the ctest model to command line parameter # set the ctest model to command line parameter
if [ "$1" == "alfa_ci" ]; then if [ "$1" == "alfa_ci" ]; then
export ctest_model=Experimental export ctest_model=Experimental
elif [ "$1" == "codecov" ]; then
export ctest_model=Profile
export do_codecov_upload=1
else else
export ctest_model=$1 export ctest_model=$1
fi fi
@ -83,13 +88,20 @@ else
COMPILER=$CXX$($CXX -dumpversion) COMPILER=$CXX$($CXX -dumpversion)
fi fi
if [ "$1" == "alfa_ci" ]; then case "$1" in
alfa_ci)
export LABEL1=alfa_ci-$COMPILER-FairMQ_$GIT_BRANCH export LABEL1=alfa_ci-$COMPILER-FairMQ_$GIT_BRANCH
export LABEL=$(echo $LABEL1 | sed -e 's#/#_#g') export LABEL=$(echo $LABEL1 | sed -e 's#/#_#g')
else ;;
codecov)
export LABEL1=codecov-$COMPILER-FairMQ_$GIT_BRANCH
export LABEL=$(echo $LABEL1 | sed -e 's#/#_#g')
;;
*)
export LABEL1=${LINUX_FLAVOUR}-$chip-$COMPILER-FairMQ_$GIT_BRANCH export LABEL1=${LINUX_FLAVOUR}-$chip-$COMPILER-FairMQ_$GIT_BRANCH
export LABEL=$(echo $LABEL1 | sed -e 's#/#_#g') export LABEL=$(echo $LABEL1 | sed -e 's#/#_#g')
fi ;;
esac
# get the number of processors # get the number of processors
# and information about the host # and information about the host

View File

@ -34,18 +34,16 @@ If(EXTRA_FLAGS)
Set(configure_options "${configure_options};${EXTRA_FLAGS}") Set(configure_options "${configure_options};${EXTRA_FLAGS}")
EndIf() EndIf()
If($ENV{ctest_model} MATCHES Nightly OR $ENV{ctest_model} MATCHES Profile) If($ENV{ctest_model} MATCHES Profile)
Find_Program(GCOV_COMMAND gcov) Find_Program(GCOV_COMMAND gcov)
If(GCOV_COMMAND) If(GCOV_COMMAND)
Message("Found GCOV: ${GCOV_COMMAND}") Message("Found GCOV: ${GCOV_COMMAND}")
Set(CTEST_COVERAGE_COMMAND ${GCOV_COMMAND}) Set(CTEST_COVERAGE_COMMAND ${GCOV_COMMAND})
EndIf(GCOV_COMMAND) EndIf(GCOV_COMMAND)
EndIf()
Set(ENV{ctest_model} Nightly) If($ENV{ctest_model} MATCHES Nightly OR $ENV{ctest_model} MATCHES Profile)
Ctest_Empty_Binary_Directory(${CTEST_BINARY_DIRECTORY})
CTEST_EMPTY_BINARY_DIRECTORY(${CTEST_BINARY_DIRECTORY})
EndIf() EndIf()
Ctest_Start($ENV{ctest_model}) Ctest_Start($ENV{ctest_model})
@ -62,7 +60,16 @@ Ctest_Test(BUILD "${CTEST_BINARY_DIRECTORY}"
) )
If(GCOV_COMMAND) If(GCOV_COMMAND)
Ctest_Coverage(BUILD "${CTEST_BINARY_DIRECTORY}") Ctest_Coverage(BUILD "${CTEST_BINARY_DIRECTORY}" LABELS coverage)
EndIf()
If("$ENV{do_codecov_upload}")
Execute_Process(COMMAND curl https://codecov.io/bash -o codecov_uploader.sh
WORKING_DIRECTORY ${CTEST_BINARY_DIRECTORY}
TIMEOUT 60)
Execute_Process(COMMAND bash ./codecov_uploader.sh -X gcov
WORKING_DIRECTORY ${CTEST_BINARY_DIRECTORY}
TIMEOUT 60)
EndIf() EndIf()
Ctest_Submit() Ctest_Submit()

40
Jenkinsfile vendored
View File

@ -4,24 +4,31 @@ def specToLabel(Map spec) {
return "${spec.os}-${spec.arch}-${spec.compiler}-FairSoft_${spec.fairsoft}" return "${spec.os}-${spec.arch}-${spec.compiler}-FairSoft_${spec.fairsoft}"
} }
def buildMatrix(List specs, Closure callback) { def jobMatrix(String prefix, List specs, Closure callback) {
def nodes = [:] def nodes = [:]
for (spec in specs) { for (spec in specs) {
def label = specToLabel(spec) def label = specToLabel(spec)
nodes[label] = { nodes["${prefix}/${label}"] = {
node(label) { node(label) {
githubNotify(context: "alfa-ci/${label}", description: 'Building ...', status: 'PENDING') githubNotify(context: "${prefix}/${label}", description: 'Building ...', status: 'PENDING')
try { try {
deleteDir() deleteDir()
checkout scm checkout scm
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
'''
callback.call(spec, label) callback.call(spec, label)
deleteDir() deleteDir()
githubNotify(context: "alfa-ci/${label}", description: 'Success', status: 'SUCCESS') githubNotify(context: "${prefix}/${label}", description: 'Success', status: 'SUCCESS')
} catch (e) { } catch (e) {
deleteDir() deleteDir()
githubNotify(context: "alfa-ci/${label}", description: 'Error', status: 'ERROR') githubNotify(context: "${prefix}/${label}", description: 'Error', status: 'ERROR')
throw e throw e
} }
} }
@ -33,22 +40,25 @@ def buildMatrix(List specs, Closure callback) {
pipeline{ pipeline{
agent none agent none
stages { stages {
stage("Run Build/Test Matrix") { stage("Run CI Matrix") {
steps{ steps{
script { script {
parallel(buildMatrix([ def build_jobs = jobMatrix('alfa-ci/build', [
[os: 'Debian8', arch: 'x86_64', compiler: 'gcc4.9', fairsoft: 'may18'], [os: 'Debian8', arch: 'x86_64', compiler: 'gcc4.9', fairsoft: 'may18'],
[os: 'MacOS10.11', arch: 'x86_64', compiler: 'AppleLLVM8.0.0', fairsoft: 'may18'],
[os: 'MacOS10.13', arch: 'x86_64', compiler: 'AppleLLVM9.0.0', fairsoft: 'may18'], [os: 'MacOS10.13', arch: 'x86_64', compiler: 'AppleLLVM9.0.0', fairsoft: 'may18'],
]) { spec, label -> ]) { 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' sh './Dart.sh alfa_ci Dart.cfg'
}) }
def profile_jobs = jobMatrix('alfa-ci/codecov', [
[os: 'Debian8', arch: 'x86_64', compiler: 'gcc4.9', fairsoft: 'may18'],
]) { spec, label ->
withCredentials([string(credentialsId: 'fairmq_codecov_token', variable: 'CODECOV_TOKEN')]) {
sh './Dart.sh codecov Dart.cfg'
}
}
parallel(build_jobs + profile_jobs)
} }
} }
} }

View File

@ -196,6 +196,7 @@ add_library(FairMQ SHARED
${FAIRMQ_PUBLIC_HEADER_FILES} # for IDE integration ${FAIRMQ_PUBLIC_HEADER_FILES} # for IDE integration
${FAIRMQ_PRIVATE_HEADER_FILES} # for IDE integration ${FAIRMQ_PRIVATE_HEADER_FILES} # for IDE integration
) )
set_target_properties(FairMQ PROPERTIES LABELS coverage)
####################### #######################
# include directories # # include directories #