Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions CTestConfig.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
## SPDX-FileCopyrightText: 2020 CERN
## SPDX-License-Identifier: Apache-2.0
##
## This file should be placed in the root directory of your project.
## Then modify the CMakeLists.txt file in the root directory of your
## project to incorporate the testing dashboard.
## # The following are required to uses Dart and the Cdash dashboard
## ENABLE_TESTING()
## INCLUDE(CTest)

set(CTEST_PROJECT_NAME "AdePT")
set(CTEST_NIGHTLY_START_TIME "00:00:00 UTC")

set(CTEST_DROP_METHOD "http")
set(CTEST_DROP_SITE "cdash.cern.ch")
set(CTEST_DROP_LOCATION "/submit.php?project=AdePT")
set(CTEST_DROP_SITE_CDASH TRUE)
102 changes: 102 additions & 0 deletions Jenkinsfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
//----------------------------------------------------------------------------------------------------------------------
// This declarative Jenkins pipeline encodes all the steps required for the nightly/continuous of a single platform.
// Other jobs may call this pipeline to execute the build, test and installation of a set platforms.
//
// Author: Pere Mato
// SPDX-FileCopyrightText: 2020 CERN
// SPDX-License-Identifier: Apache-2.0
//----------------------------------------------------------------------------------------------------------------------

pipeline {
parameters {
string(name: 'EXTERNALS', defaultValue: 'devAdePT/latest', description: 'LCG software stack in CVMFS')
choice(name: 'MODEL', choices: ['experimental', 'nightly', 'continuous'], description: 'CDash model')
choice(name: 'COMPILER', choices: ['gcc8', 'gcc10', 'clang10', 'native'])
choice(name: 'BUILDTYPE', choices: ['Release', 'Debug'])
string(name: 'LABEL', defaultValue: 'TeslaT4', description: 'Jenkins label for physical nodes or container image for docker')
string(name: 'ExtraCMakeOptions', defaultValue: '', description: 'CMake extra configuration options')
string(name: 'DOCKER_LABEL', defaultValue: 'docker-host-noafs', description: 'Label for the the nodes able to launch docker images')
}

environment {
CMAKE_SOURCE_DIR = 'AdePT'
CMAKE_BINARY_DIR = 'build'
CMAKE_INSTALL_PREFIX = 'install'
}

agent none

stages {
//------------------------------------------------------------------------------------------------------------------
//---Build & Test stages--------------------------------------------------------------------------------------------
//------------------------------------------------------------------------------------------------------------------
stage('Environment'){
steps {
setJobName()
}
}
stage('InDocker') {
when {
beforeAgent true
expression { params.LABEL =~ 'centos|ubuntu' }
}
agent {
docker {
image "gitlab-registry.cern.ch/sft/docker/$LABEL"
label "$DOCKER_LABEL"
args """-v /cvmfs:/cvmfs
-v /ec:/ec
-e SHELL
--net=host
--hostname ${LABEL}-docker
"""
}
}
stages {
stage('Build&Test') {
steps {
buildAndTest()
}
post {
success {
deleteDir()
}
}
}
}
}
stage('InBareMetal') {
when {
beforeAgent true
expression { params.LABEL =~ 'cuda|physical|TeslaT4' }
}
agent {
label "$LABEL"
}
stages {
stage('Build&Test') {
steps {
buildAndTest()
}
post {
success {
deleteDir()
}
}
}
}
}
}
}

def setJobName() {
currentBuild.displayName = "#${BUILD_NUMBER}" + ' ' + params.COMPILER + '-' + params.BUILDTYPE
}

def buildAndTest() {
sh label: 'build_and_test', script: """
source /cvmfs/sft.cern.ch/lcg/views/${EXTERNALS}/x86_64-centos7-${COMPILER}-opt/setup.sh
env | sort | sed 's/:/:? /g' | tr '?' '\n'
ctest -VV -S AdePT/jenkins/adept-ctest.cmake,$MODEL
"""
}
1 change: 1 addition & 0 deletions examples/Example1/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,4 @@ target_include_directories(example1 PUBLIC
$<INSTALL_INTERFACE:base>
)
target_link_libraries(example1 PRIVATE VecCore::VecCore VecGeom::vecgeom CopCore::CopCore)
add_test(NAME example1 COMMAND example1)
113 changes: 113 additions & 0 deletions jenkins/adept-ctest.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
# SPDX-FileCopyrightText: 2020 CERN
# SPDX-License-Identifier: Apache-2.0
################################################################################
# Before run should be exported next variables:
# CMAKE_SOURCE_DIR // CMake source directory
# CMAKE_BINARY_DIR // CMake binary directory
# CMAKE_INSTALL_PREFIX // Installation prefix for CMake (Jenkins trigger)
# BUILDTYPE // CMake build type: Debug, Release
# COMPILER // Compiler keyword: gcc8, clang10
# MODEL // CTest model (Experimental, Continuous, or Nightly)
# ExtraCMakeOptions // Additional options
################################################################################

# Build name settings (CTEST_BUILD_NAME)----------------------------------------
set(CTEST_BUILD_NAME "AdePT-$ENV{COMPILER}-$ENV{BUILDTYPE}")
if(NOT "$ENV{gitlabMergedByUser}$ENV{gitlabMergeRequestIid}" STREQUAL "")
set(CTEST_BUILD_NAME "$ENV{gitlabMergedByUser}#$ENV{gitlabMergeRequestIid}-${CTEST_BUILD_NAME}")
endif()

# Site name (CTEST_SITE)--------------------------------------------------------
if(DEFINED ENV{CTEST_SITE})
set(CTEST_SITE $ENV{CTEST_SITE})
elseif(DEFINED ENV{container} AND DEFINED ENV{NODE_NAME})
set(CTEST_SITE "$ENV{NODE_NAME}-$ENV{container}")
else()
find_program(HOSTNAME_CMD NAMES hostname)
exec_program(${HOSTNAME_CMD} ARGS OUTPUT_VARIABLE CTEST_SITE)
endif()

# Cdash Model (CTEST_MODEL)-----------------------------------------------------
if("$ENV{MODEL}" STREQUAL "")
set(CTEST_MODEL Experimental)
else()
set(CTEST_MODEL "$ENV{MODEL}")
endif()

# Use multiple CPU cores to build-----------------------------------------------
include(ProcessorCount)
ProcessorCount(N)
if(NOT N EQUAL 0)
set(ctest_test_args ${ctest_test_args} PARALLEL_LEVEL ${N})
endif()

# CTest/CMake settings----------------------------------------------------------
set(CTEST_CUSTOM_MAXIMUM_NUMBER_OF_ERRORS "1000")
set(CTEST_CUSTOM_MAXIMUM_NUMBER_OF_WARNINGS "1000")
set(CTEST_CUSTOM_MAXIMUM_PASSED_TEST_OUTPUT_SIZE "50000")
set(CTEST_TEST_TIMEOUT 900)
set(CTEST_BUILD_CONFIGURATION "$ENV{BUILDTYPE}")
set(CMAKE_INSTALL_PREFIX "$ENV{CMAKE_INSTALL_PREFIX}")
set(CTEST_SOURCE_DIRECTORY "$ENV{CMAKE_SOURCE_DIR}")
set(CTEST_BINARY_DIRECTORY "$ENV{CMAKE_BINARY_DIR}")
set(CTEST_INSTALL_PREFIX "$ENV{CMAKE_INSTALL_PREFIX}")
set(CTEST_CMAKE_GENERATOR "Unix Makefiles")
set(CTEST_BUILD_FLAGS "-j${N}")

# Fixed set of CMake options----------------------------------------------------
set(config_options -DCMAKE_INSTALL_PREFIX=${CTEST_INSTALL_PREFIX}
-DCMAKE_CUDA_ARCHITECTURES=75
$ENV{ExtraCMakeOptions})

# git command configuration------------------------------------------------------
find_program(CTEST_GIT_COMMAND NAMES git)
set(CTEST_GIT_UPDATE_COMMAND "${CTEST_GIT_COMMAND}")
if(${CTEST_MODEL} MATCHES Nightly OR Experimental)
if(NOT "$ENV{GIT_COMMIT}" STREQUAL "")
set(CTEST_CHECKOUT_COMMAND "cmake -E chdir ${CTEST_SOURCE_DIRECTORY} ${CTEST_GIT_COMMAND} checkout -f $ENV{GIT_PREVIOUS_COMMIT}")
set(CTEST_GIT_UPDATE_CUSTOM ${CTEST_GIT_COMMAND} checkout -f $ENV{GIT_COMMIT})
endif()
else()
if(NOT "$ENV{GIT_COMMIT}" STREQUAL "")
set(CTEST_CHECKOUT_COMMAND "cmake -E chdir ${CTEST_SOURCE_DIRECTORY} ${CTEST_GIT_COMMAND} checkout -f $ENV{GIT_COMMIT}")
set(CTEST_GIT_UPDATE_CUSTOM ${CTEST_GIT_COMMAND} checkout -f $ENV{GIT_COMMIT})
endif()
endif()

# Print summary information-----------------------------------------------------
foreach(v
CTEST_SITE
CTEST_BUILD_NAME
CTEST_SOURCE_DIRECTORY
CTEST_BINARY_DIRECTORY
CTEST_INSTALL_PREFIX
CTEST_CMAKE_GENERATOR
)
set(vars "${vars} ${v}=[${${v}}]\n")
endforeach(v)
message("Dashboard script configuration (check if everything is declared correctly):\n${vars}\n")

include("${CTEST_SOURCE_DIRECTORY}/CTestConfig.cmake")

# ctest_empty_binary_directory--------------------------------------------------
file(REMOVE_RECURSE ${CTEST_BINARY_DIRECTORY})

# Execute all the steps---------------------------------------------------------
ctest_start(${CTEST_MODEL} TRACK ${CTEST_MODEL})
ctest_update(SOURCE ${CTEST_SOURCE_DIRECTORY})

ctest_configure(BUILD ${CTEST_BINARY_DIRECTORY}
SOURCE ${CTEST_SOURCE_DIRECTORY}
OPTIONS "${config_options}"
APPEND)
ctest_submit(PARTS Update Configure Notes)

ctest_build(BUILD ${CTEST_BINARY_DIRECTORY}
TARGET install
APPEND)
ctest_submit(PARTS Build)

ctest_test(BUILD ${CTEST_BINARY_DIRECTORY}
${ctest_test_args}
APPEND)
ctest_submit(PARTS Test)