#!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) { try { deleteDir() checkout scm sh """\ echo "export SIMPATH=\${SIMPATH_PREFIX}${spec.fairsoft}" >> Dart.cfg echo "export FAIRSOFT_VERSION=${spec.fairsoft}" >> Dart.cfg """ if ((spec.os == 'Debian8') && (spec.compiler == 'gcc8.1.0')) { sh '''\ echo "source /etc/profile.d/modules.sh" >> Dart.cfg echo "module use /cvmfs/it.gsi.de/modulefiles" >> Dart.cfg echo "module load compiler/gcc/8" >> Dart.cfg ''' } 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=dev" >> Dart.cfg echo "export EXTRA_FLAGS='-DCMAKE_CXX_COMPILER=g++'" >> Dart.cfg echo "echo \\\$PATH" >> Dart.cfg ''' sh 'cat Dart.cfg' callback.call(spec, label) deleteDir() } catch (e) { deleteDir() throw e } } } } return nodes } pipeline{ agent none triggers { cron('H 2 * * *') } stages { stage("Run Nightly Build/Test Matrix") { steps{ script { parallel(buildMatrix([ [os: 'Debian8', arch: 'x86_64', compiler: 'gcc8.1.0', fairsoft: 'fairmq_dev'], [os: 'MacOS10.13', arch: 'x86_64', compiler: 'AppleLLVM10.0.0', fairsoft: 'fairmq_dev'], ]) { spec, label -> sh './Dart.sh Nightly Dart.cfg' sh './Dart.sh Profile Dart.cfg' }) } } } } }