diff --git a/Jenkinsfile b/Jenkinsfile new file mode 100644 index 0000000..df9312c --- /dev/null +++ b/Jenkinsfile @@ -0,0 +1,177 @@ +pipeline { + agent { node { label 'ubuntu'; } } + + options { + buildDiscarder(logRotator(numToKeepStr: '5')) + } + + triggers { + pollSCM('H H(0-7) * * *') + } + + + environment { + DOC_DEPLOYER = credentials('Doc deployment') + } + + stages { + stage('Preparation') { + steps { + script { + branchName = 'guilhem/jenkins_1.0' + cred = '0c503fb7-7bad-459f-81f1-71467b382d39' + + env.PYTHON_VENV = """${sh( + returnStdout:true, + script: 'BTAG=$(echo ${BUILD_TAG} | sed "s,%,,g"); echo -n "${WORKSPACE}/${BTAG}"' + )}""" + } + } + } + stage('Source') { // for display purposes + steps { + git branch: branchName, credentialsId: cred, url: 'git@bitbucket.org:cosmicvoids/vide_public.git' + + sh 'python3 -m venv ${PYTHON_VENV}' + sh 'ls && echo ${PYTHON_VENV} && ls ${PYTHON_VENV}' + sh 'test -e ${PYTHON_VENV}' + +// sh 'git submodule init' +// sh 'git submodule update --recursive' + } + } +// stage('Download deps') { +// steps { +// ansiColor('xterm') { +// sh ''' +// export BORG_PREDOWNLOAD=/build/jenkins/borg_downloads +// if [[ -d ${BORG_PREDOWNLOAD} ]]; then +// rm -fr downloads/ +// rsync -r ${BORG_PREDOWNLOAD}/ downloads/ +// rm -f downloads/deps.txt +// fi +// bash build.sh --download-deps +// rsync -r downloads/ ${BORG_PREDOWNLOAD}/ +// ''' +// } +// } +// } + stage('Configure') { + steps { + ansiColor('xterm') { + sh ''' + . ${PYTHON_VENV}/bin/activate + export VIDE_PREDOWNLOAD=/build/jenkins/vide_downloads + if ! test -d ${VIDE_PREDOWNLOAD}; then + mkdir ${VIDE_PREDOWNLOAD} + fi + CMAKE_PREFIX_PATH=${VIRTUAL_ENV}:/opt/boost + export CMAKE_PREFIX_PATH + mkdir build + cd build + cmake -DVIDE_DOWNLOAD_CACHE=${VIDE_PREDOWNLOAD} -DINSTALL_PYTHON_LOCAL=OFF -DCMAKE_INSTALL_PREFIX=${PYTHON_VENV} .. + ''' + } + } + } + stage('Build') { + steps { + ansiColor('xterm') { + dir('build') { + sh 'make -j6' + } + } + } + } +// stage('Tests') { +// steps { +// dir('build') { +// sh """ +// . ${PYTHON_VENV}/bin/activate +// pip3 install wheel pytest jax[cpu] numpy deprecated +// ctest -V +// """ +// } +// } +// } +// stage('Install') { +// steps { +// dir('build') { +// sh 'make install' +// } +// } +// } +// stage("Doc") { +// steps { +// dir('docs') { +// sh """ +// . ${PYTHON_VENV}/bin/activate +// export PYTHONWARNINGS=always::ImportWarning +// pip3 install wheel +// pip3 install -r requirements.txt +// rm -fr source/_generate +// rm -fr _build +// make html +// tar -C _build/html -zcvf doc.tgz . +// curl -v -F filename=doc -F file=@doc.tgz http://athos.iap.fr:9595/deploy-doc2/$DOC_DEPLOYER/borg-main +// """ +// } +// } +// } + } + post { + failure { + notifyBuild("FAIL") + } + success { + notifyBuild("SUCCESS") + } + always { + + /* clean up our workspace */ + deleteDir() + /* clean up tmp directory */ + + dir("${PYTHON_VENV}") { + deleteDir() + } + dir("${workspace}@tmp") { + deleteDir() + } + } + } +} + +def notifyBuild(String buildStatus = 'STARTED') { + // build status of null means successful + buildStatus = buildStatus ?: 'SUCCESS' + + // Default values + def colorName = 'RED' + def colorCode = '#FF0000' + def subject = "${buildStatus}: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]'" + def summary = "${subject} (${env.BUILD_URL})" + + // Override default values based on build status + if (buildStatus == 'STARTED') { + color = 'YELLOW' + colorCode = '#0000FF' + } else if (buildStatus == 'SUCCESS') { + color = 'GREEN' + colorCode = '#00FF00' + } else { + color = 'RED' + colorCode = '#FF0000' + } + + def details = """
STARTED: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]':
+Check console output at "${env.JOB_NAME} [${env.BUILD_NUMBER}]"
+Build status: ${buildStatus}
""" + + emailext ( + mimeType: 'text/html', + subject: subject, + body: details, + recipientProviders: [developers(), requestor()] + ) +} diff --git a/external/external_build.cmake b/external/external_build.cmake index 1bc0ca4..6d72a28 100644 --- a/external/external_build.cmake +++ b/external/external_build.cmake @@ -1,5 +1,6 @@ include(FindOpenMP) +SET(VIDE_DOWNLOAD_CACHE "${CMAKE_SOURCE_DIR}/downloads" CACHE PATH "Cache directory for downloaded dependencies") OPTION(ENABLE_OPENMP "Set to Yes if Healpix and/or you need openMP" OFF) OPTION(SDF_SUPPORT "Set to Yes to activate support for SDF" ON) @@ -68,8 +69,10 @@ if (INTERNAL_GENGETOPT) SET(GENGETOPT_SOURCE_DIR ${BUILD_PREFIX}/gengetopt-prefix/src/gengetopt) SET(GENGETOPT_BIN_DIR ${CMAKE_BINARY_DIR}/ext_build/gengetopt) ExternalProject_Add(gengetopt + DOWNLOAD_DIR ${VIDE_DOWNLOAD_CACHE} PREFIX ${BUILD_PREFIX}/gengetopt-prefix URL ${GENGETOPT_URL} + DOWNLOAD_DIR ${VIDE_DOWNLOAD_CACHE} CONFIGURE_COMMAND ${GENGETOPT_SOURCE_DIR}/configure --prefix=${GENGETOPT_BIN_DIR} CPPFLAGS=${CONFIGURE_CPP_FLAGS} @@ -93,8 +96,10 @@ if (INTERNAL_HDF5) SET(HDF5_SOURCE_DIR ${BUILD_PREFIX}/hdf5-prefix/src/hdf5) SET(HDF5_BIN_DIR ${CMAKE_BINARY_DIR}/ext_build/hdf5) ExternalProject_Add(hdf5 + DOWNLOAD_DIR ${VIDE_DOWNLOAD_CACHE} PREFIX ${BUILD_PREFIX}/hdf5-prefix URL ${HDF5_URL} + DOWNLOAD_DIR ${VIDE_DOWNLOAD_CACHE} CONFIGURE_COMMAND ${HDF5_SOURCE_DIR}/configure --disable-shared --enable-cxx --with-pic --prefix=${HDF5_BIN_DIR} --libdir=${HDF5_BIN_DIR}/lib @@ -136,6 +141,7 @@ if (INTERNAL_NETCDF) SET(CONFIGURE_LDFLAGS "${CONFIGURE_LDFLAGS} -L${NETCDF_BIN_DIR}/lib") SET(EXTRA_NC_FLAGS CPPFLAGS=${CONFIGURE_CPP_FLAGS} LDFLAGS=${CONFIGURE_LDFLAGS} LIBS=${CONFIGURE_LIBS_FLAGS}) ExternalProject_Add(netcdf + DOWNLOAD_DIR ${VIDE_DOWNLOAD_CACHE} DEPENDS ${hdf5_built} PREFIX ${BUILD_PREFIX}/netcdf-prefix URL ${NETCDF_URL} @@ -179,6 +185,7 @@ if (INTERNAL_BOOST) SET(BOOST_SOURCE_DIR ${BUILD_PREFIX}/boost-prefix/src/boost) SET(cosmotool_DEPS ${cosmotool_DEPS} boost) ExternalProject_Add(boost + DOWNLOAD_DIR ${VIDE_DOWNLOAD_CACHE} URL ${BOOST_URL} PREFIX ${BUILD_PREFIX}/boost-prefix CONFIGURE_COMMAND @@ -199,6 +206,7 @@ mark_as_advanced(Boost_INCLUDE_DIRS Boost_LIBRARIES) IF(INTERNAL_GSL) SET(GSL_SOURCE_DIR ${BUILD_PREFIX}/gsl-prefix/src/gsl) ExternalProject_Add(gsl + DOWNLOAD_DIR ${VIDE_DOWNLOAD_CACHE} URL ${GSL_URL} PREFIX ${BUILD_PREFIX}/gsl-prefix CONFIGURE_COMMAND ${GSL_SOURCE_DIR}/configure @@ -225,6 +233,7 @@ mark_as_advanced(GSL_LIBRARY GSLCBLAS_LIBRARY GSL_INCLUDE_PATH) # Build cfitsio ################# ExternalProject_Add(cfitsio + DOWNLOAD_DIR ${VIDE_DOWNLOAD_CACHE} SOURCE_DIR ${CMAKE_SOURCE_DIR}/external/cfitsio PREFIX ${BUILD_PREFIX}/cfitsio-prefix CONFIGURE_COMMAND @@ -246,6 +255,7 @@ SET(CFITSIO_INCLUDE_PATH ${CFITSIO_PREFIX}/include) ################# ExternalProject_Add(healpix + DOWNLOAD_DIR ${VIDE_DOWNLOAD_CACHE} DEPENDS cfitsio PREFIX ${BUILD_PREFIX}/healpix-prefix SOURCE_DIR ${CMAKE_SOURCE_DIR}/external/healpix @@ -278,6 +288,7 @@ SET(NETCDF_LIBRARIES ${NETCDFCPP_LIBRARY} ${NETCDF_LIBRARY} ${HDF5HL_LIBRARY} ${ ############### if (INTERNAL_QHULL) ExternalProject_Add(qhull + DOWNLOAD_DIR ${VIDE_DOWNLOAD_CACHE} URL ${QHULL_URL} PREFIX ${BUILD_PREFIX}/qhull-prefix CMAKE_ARGS @@ -309,6 +320,7 @@ IF(SDF_SUPPORT) SET(LIBSDF_PATH ${CMAKE_SOURCE_DIR}/external/libsdf) ExternalProject_Add(libSDF + DOWNLOAD_DIR ${VIDE_DOWNLOAD_CACHE} URL ${CMAKE_SOURCE_DIR}/external/mswarren-libsdf-b4b9f9464b5b.tar.gz PREFIX ${BUILD_PREFIX}/libSDF-prefix CONFIGURE_COMMAND echo No configure