From ce68b9c1bec03471d7e7aaddba072305616ad1f5 Mon Sep 17 00:00:00 2001
From: P-A Loizeau <p.-a.loizeau@gsi.de>
Date: Fri, 24 May 2024 15:38:43 +0200
Subject: [PATCH] [CI/CD/QA] Fix-improve Weekly-SLURM-job-End-time Finder
 script for Virgo3

---
 scripts/find_slurm_ctest_stop_time.sh | 50 ++++++++++++++++-----------
 1 file changed, 30 insertions(+), 20 deletions(-)

diff --git a/scripts/find_slurm_ctest_stop_time.sh b/scripts/find_slurm_ctest_stop_time.sh
index 2f1e7bb17e..fcf534e3b3 100755
--- a/scripts/find_slurm_ctest_stop_time.sh
+++ b/scripts/find_slurm_ctest_stop_time.sh
@@ -19,28 +19,38 @@
 #>> ./Dart.sh Weekly ./${DART_CFG} &> ${OUT_DIR}/Dart_weekly.log
 
 # SLURM end time
-END_TIME=`squeue -j ${SLURM_JOB_ID} -h --Format EndTime`
-CET_CEST=`date +"%Z"`
-echo "SLURM Job end time ${END_TIME} probably ${CET_CEST}"
+# 1. From SLURM env variables if possible (virgo3)
+if [[ -n ${SLURM_JOB_END_TIME} ]]; then
+  echo "Env variable SLURM_JOB_END_TIME=${SLURM_JOB_END_TIME}"
+  SLURM_JOB_END_TIME_DATE=`date -d "@${SLURM_JOB_END_TIME}"`
+  echo "SLURM_JOB_END_TIME in human format: ${SLURM_JOB_END_TIME_DATE}"
+  CTEST_END_TIME_LIMIT=`date -d "${SLURM_JOB_END_TIME_DATE} -5minutes" +"%H:%M:%S"`
+else
+  # 2. From what squeue return if not possible directly from environment (virgo2)
+  # ==> Broken from bare-metal submit nodes end May 2024, maybe bug?
+  END_TIME=`squeue -j ${SLURM_JOB_ID} -h --Format EndTime`
+  CET_CEST=`date +"%Z"`
+  echo "SLURM Job end time ${END_TIME} probably ${CET_CEST}"
 
-# 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...
-# => Fixed for summer time but will probably still fail on the day of the swap itself... so twice a year
-CTEST_END_TIME_LIMIT=`date -d "${END_TIME}${CET_CEST} -5minutes" +"%H:%M:%S"`
-echo "Setting the job time limit for ctest to ${CTEST_END_TIME_LIMIT} to make sure CDASH data is uploaded"
+  # 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...
+  # => Fixed for summer time but will probably still fail on the day of the swap itself... so twice a year
+  CTEST_END_TIME_LIMIT=`date -d "${END_TIME}${CET_CEST} -5minutes" +"%H:%M:%S"`
+fi
 
+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
-- 
GitLab