Skip to content
Snippets Groups Projects
Commit 64530c0a authored by Pierre-Alain Loizeau's avatar Pierre-Alain Loizeau
Browse files

[CDASH] add option to set end time for ctest tests + slurm script for it

parent 89de6d6a
No related branches found
No related tags found
1 merge request!1683[CDASH] add option to set end time for ctest tests + slurm script for it
Pipeline #27521 passed
......@@ -73,9 +73,18 @@ unset(repeat)
if(${_CMakeModel} MATCHES Continuous)
if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.17)
set(repeat REPEAT UNTIL_PASS:2)
endif()
endif()
EndIf()
# The stop time should be a date compatible string without day nor timezone
# Examples:
# => CTEST_END_TIME_LIMIT=`date -d "${END_TIME}CET -5minutes" +"%H:%M:%S"`
# => CTEST_END_TIME_LIMIT=`date -d "now +25minutes" +"%H:%M:%S"`
unset(stop_time)
If(DEFINED ENV{CTEST_END_TIME_LIMIT})
set(stop_time STOP_TIME "$ENV{CTEST_END_TIME_LIMIT}")
message(STATUS " End time for the ctest test runs set to ${stop_time}")
EndIf()
If(NOT ${_BuildType} MATCHES Experimental)
Ctest_Update(SOURCE "${CTEST_SOURCE_DIRECTORY}")
......@@ -113,6 +122,7 @@ If(NOT _RETVAL)
Ctest_Test(BUILD "${CTEST_BINARY_DIRECTORY}"
PARALLEL_LEVEL $ENV{number_of_processors}
${repeat}
${stop_time}
RETURN_VALUE _ctest_test_ret_val
)
......
#!/bin/bash
# Copyright (C) 2024 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
# SPDX-License-Identifier: GPL-3.0-only
# First commited by Pierre-Alain Loizeau
# Script used to compute a "safe" end time for the ctest test stage of a Dart/Cdash chain in order
# to have enough time to upload the CDASH results before a job is killed on a SLURM cluster (e.g. Virgo @ GSI)
#
# Usage:
# - with a full/relative/absolute path to an output Dart.cfg file as parameter, where the export will be added
# - without any parameter, then setting an export
#
# => Typical use case would be calling it in your sbatch script after setting up the other parts of the
# Dart.cfg gile and before the call to Dart.sh
#>> echo "export NCPU=10" >> ${DART_CFG}
#>> [...]
#>> ./scripts/find_slurm_ctest_stop_time.sh ${DART_CFG}
#>> [...]
#>> ./Dart.sh Weekly ./${DART_CFG} &> ${OUT_DIR}/Dart_weekly.log
# SLURM end time
END_TIME=`squeue -j ${SLURM_JOB_ID} -h --Format EndTime`
echo "SLURM Job end time ${END_TIME}"
# Ctest end time = SLURM -5 minutes (should be enough for coverage and uploads)
# => Not working as ctest expects the "time point in hours-minutes-seconds within current day"
# + hardcode the day/year/month to the current day...
# https://gitlab.kitware.com/cmake/cmake/-/blob/master/Help/manual/ctest.1.rst#L440
# https://gitlab.kitware.com/cmake/cmake/-/blob/master/Source/cmCTest.cxx#L1991
# https://gitlab.kitware.com/cmake/cmake/-/blob/master/Source/cmCTest.cxx#L3012
# https://gitlab.kitware.com/cmake/cmake/-/blob/master/Source/CTest/cmCTestRunTest.cxx#L811
# => Does not work for long running tests close to end of the day
# CTEST_END_TIME_LIMIT=`date -d "${END_TIME}CET -5minutes" +"%Y-%m-%d %H:%M:%S %z"`
# => But following should be ok for weeklies starting early in the morning
# => Does not work at least with cmake 3.22 and 3.24, seesm that timezone is breaking decoding
# (tried all timezone options of date, with and without space between time and timezone)
#CTEST_END_TIME_LIMIT=`date -d "${END_TIME}CET -5minutes" +"%H:%M:%S %z"`
# => Working! but probably unsafe on day of Summer time swaps + if tests run close to midnight...
CTEST_END_TIME_LIMIT=`date -d "${END_TIME}CET -5minutes" +"%H:%M:%S"`
echo "Setting the job time limit for ctest to ${CTEST_END_TIME_LIMIT} to make sure CDASH data is uploaded"
if [[ $# -eq 1 ]]; then
# Set the export in the chosen Dart.cfg file
echo "export CTEST_END_TIME_LIMIT=\"${CTEST_END_TIME_LIMIT}\"" >> $1
else
export CTEST_END_TIME_LIMIT=\"${CTEST_END_TIME_LIMIT}\"
fi
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment