diff --git a/CI/run_reframe.sh b/CI/run_reframe.sh index 95edee7c..9d0be547 100755 --- a/CI/run_reframe.sh +++ b/CI/run_reframe.sh @@ -37,21 +37,11 @@ fi source "${CI_CONFIG}" # Set default configuration, but let anything set by CI_CONFIG take priority -if [ -z "${REFRAME_ARGS}" ]; then - REFRAME_ARGS="--tag CI --tag 1_node" -fi -if [ -z "${REFRAME_VERSION}"]; then - REFRAME_VERSION=4.8.1 -fi -if [ -z "${REFRAME_URL}" ]; then - REFRAME_URL='https://github.com/reframe-hpc/reframe.git' -fi -if [ -z "${REFRAME_BRANCH}" ]; then - REFRAME_BRANCH="v${REFRAME_VERSION}" -fi -if [ -z "${EESSI_TESTSUITE_URL}" ]; then - EESSI_TESTSUITE_URL='https://github.com/EESSI/test-suite.git' -fi +REFRAME_ARGS="${REFRAME_ARGS:---tag CI --tag 1_node}" +REFRAME_VERSION="${REFRAME_VERSION:-4.8.1}" +REFRAME_URL="${REFRAME_URL:-REFRAME_URL=https://github.com/reframe-hpc/reframe.git}" +REFRAME_BRANCH="${REFRAME_BRANCH:-v${REFRAME_VERSION}}" +EESSI_TESTSUITE_URL="${EESSI_TESTSUITE_URL:-https://github.com/EESSI/test-suite.git}" if [ -z "${EESSI_TESTSUITE_BRANCH}" ]; then git clone -n --depth=1 --filter=tree:0 ${EESSI_TESTSUITE_URL} "${TEMPDIR}/test-suite-version-checkout" cd "${TEMPDIR}/test-suite-version-checkout" @@ -62,44 +52,24 @@ if [ -z "${EESSI_TESTSUITE_BRANCH}" ]; then EESSI_TESTSUITE_BRANCH="${LATEST_VERSION}" cd ${TEMPDIR} fi -if [ -z "${EESSI_CONFIGS_TESTSUITE_URL}" ]; then - EESSI_CONFIGS_TESTSUITE_URL="${EESSI_TESTSUITE_URL}" -fi -if [ -z "${EESSI_CONFIGS_TESTSUITE_BRANCH}" ]; then - EESSI_CONFIGS_TESTSUITE_BRANCH="${EESSI_TESTSUITE_BRANCH}" -fi -if [ -z "${USE_EESSI_SOFTWARE_STACK}" ] || [ "$USE_EESSI_SOFTWARE_STACK" == "True" ]; then - export USE_EESSI_SOFTWARE_STACK=True - if [ -z "${EESSI_CVMFS_REPO}" ]; then - export EESSI_CVMFS_REPO=/cvmfs/software.eessi.io - fi - if [ -z "${EESSI_VERSION}" ]; then - export EESSI_VERSION=2023.06 - fi -fi -if [ -z "${RFM_CONFIG_FILES}" ]; then - export RFM_CONFIG_FILES="${TEMPDIR}/configs/config/${EESSI_CI_SYSTEM_NAME}.py" -fi -if [ -z "${RFM_CHECK_SEARCH_PATH}" ]; then - export RFM_CHECK_SEARCH_PATH="${TEMPDIR}/test-suite/eessi/testsuite/tests/" -fi -if [ -z "${RFM_CHECK_SEARCH_RECURSIVE}" ]; then - export RFM_CHECK_SEARCH_RECURSIVE=1 -fi -if [ -z "${RFM_PREFIX}" ]; then - export RFM_PREFIX="${HOME}/reframe_CI_runs" -fi -if [ -z "${REFRAME_TIMEOUT}" ]; then - # 10 minutes short of 1 day, since typically the test suite will be run daily. - # This will prevent multiple ReFrame runs from piling up and exceeding the quota on our Magic Castle clusters - export REFRAME_TIMEOUT=1430m -fi -if [ -z "${UNSET_MODULEPATH}" ]; then - export UNSET_MODULEPATH=True -fi -if [ -z "${SET_LOCAL_MODULE_ENV}" ]; then - export SET_LOCAL_MODULE_ENV=False -fi +EESSI_CONFIGS_TESTSUITE_URL="${EESSI_CONFIGS_TESTSUITE_URL:-${EESSI_TESTSUITE_URL}}" +EESSI_CONFIGS_TESTSUITE_BRANCH="${EESSI_CONFIGS_TESTSUITE_BRANCH:-${EESSI_TESTSUITE_BRANCH}}" +export USE_EESSI_SOFTWARE_STACK="${USE_EESSI_SOFTWARE_STACK:-True}" +if [ "$USE_EESSI_SOFTWARE_STACK" == "True" ]; then + export EESSI_CVMFS_REPO="${EESSI_CVMFS_REPO:-/cvmfs/software.eessi.io}" + export EESSI_VERSION="${EESSI_VERSION:-2023.06,2025.06}" +fi +export RFM_CONFIG_FILES="${RFM_CONFIG_FILES:-${TEMPDIR}/configs/config/${EESSI_CI_SYSTEM_NAME}.py}" +export RFM_CHECK_SEARCH_PATH="${RFM_CHECK_SEARCH_PATH:-${TEMPDIR}/test-suite/eessi/testsuite/tests/}" +export RFM_CHECK_SEARCH_RECURSIVE="${RFM_CHECK_SEARCH_RECURSIVE:-1}" +export RFM_PREFIX="${RFM_PREFIX:-${HOME}/reframe_CI_runs}" +# 10 minutes short of 1 day, since typically the test suite will be run daily. +# This will prevent multiple ReFrame runs from piling up and exceeding the quota on our Magic Castle clusters +export REFRAME_TIMEOUT="${REFRAME_TIMEOUT:-1430m}" +export UNSET_MODULEPATH="${UNSET_MODULEPATH:-True}" +export SET_LOCAL_MODULE_ENV="${SET_LOCAL_MODULE_ENV:-False}" +# If false, the script under versions//init/bash to initialize the environment will be sourced instead +export USE_EESSI_MODULE="${USE_EESSI_MODULE:-True}" # Create virtualenv for ReFrame using system python python3 -m venv "${TEMPDIR}"/reframe_venv @@ -149,48 +119,82 @@ if [ "$SET_LOCAL_MODULE_ENV" == "True" ]; then module load "${LOCAL_MODULES}" fi -# Start the EESSI environment +# Add correct path to MODULEPATH (only once, so outside the loop below) if [ "$USE_EESSI_SOFTWARE_STACK" == "True" ]; then - eessi_init_path="${EESSI_CVMFS_REPO}"/versions/"${EESSI_VERSION}"/init/bash - source "${eessi_init_path}" + if [ "$USE_EESSI_MODULE" == "True" ]; then + if command -v module &>/dev/null; then + # Module command available + module use "${EESSI_CVMFS_REPO}/init/modules/" + fi + fi fi -# Needed in order to make sure the reframe from our TEMPDIR is first on the PATH, -# prior to the one shipped with the 2021.12 compat layer -# Probably no longer needed with newer compat layer that doesn't include ReFrame -deactivate -source "${TEMPDIR}"/reframe_venv/bin/activate - -# Print ReFrame config -echo "Starting CI run with the follwing settings:" -echo "" -echo "TEMPDIR: ${TEMPDIR}" -echo "PYTHONPATH: ${PYTHONPATH}" -echo "EESSI test suite URL: ${EESSI_TESTSUITE_URL}" -echo "EESSI test suite version: ${EESSI_TESTSUITE_BRANCH}" -echo "EESSI test suite URL for configs: ${EESSI_CONFIGS_TESTSUITE_URL}" -echo "EESSI test suite version for configs: ${EESSI_CONFIGS_TESTSUITE_BRANCH}" -echo "HPCtestlib from ReFrame URL: ${REFRAME_URL}" -echo "HPCtestlib from ReFrame branch: ${REFRAME_BRANCH}" -echo "ReFrame executable: $(which reframe)" -echo "ReFrame version: $(reframe --version)" -echo "ReFrame config file: ${RFM_CONFIG_FILES}" -echo "ReFrame check search path: ${RFM_CHECK_SEARCH_PATH}" -echo "ReFrame check search recursive: ${RFM_CHECK_SEARCH_RECURSIVE}" -echo "ReFrame prefix: ${RFM_PREFIX}" -echo "ReFrame args: ${REFRAME_ARGS}" -echo "Using EESSI: ${USE_EESSI_SOFTWARE_STACK}" -echo "Using local software stack ${SET_LOCAL_MODULE_ENV}" -echo "MODULEPATH: ${MODULEPATH}" -echo "" - -# List tests -echo "Listing tests:" -reframe ${REFRAME_ARGS} --list - -# Run -echo "Run tests:" -timeout -v --preserve-status -s SIGTERM ${REFRAME_TIMEOUT} reframe ${REFRAME_ARGS} --run --setvar EESSI_CONFIGS_URL=${EESSI_CONFIGS_TESTSUITE_URL} --setvar EESSI_CONFIGS_BRANCH=${EESSI_CONFIGS_TESTSUITE_BRANCH} +# EESSI_VERSION can consist of multiple, comma-separated entries. Loop over those: +IFS=',' read -r -a eessi_version_array <<< "$EESSI_VERSION" + +# Don't loop over EESSI_VERSIONS if we a) don't use the EESSI software stack or b) don't load it from the module +# In this case, simply only retain the first element of the eessi_version_array to avoid looping +if (( ${#eessi_version_array[@]} > 1 )) && \ + [[ $USE_EESSI_SOFTWARE_STACK == "True" && $USE_EESSI_MODULE != "True" ]]; then + eessi_version_array=("${eessi_version_array[0]}") +fi + +for EESSI_VERSION in "${eessi_version_array[@]}"; do + # Start the EESSI environment + if [ "$USE_EESSI_SOFTWARE_STACK" == "True" ]; then + if [ "$USE_EESSI_MODULE" == "True" ]; then + if command -v module &>/dev/null; then + # Module command available + module load "EESSI/${EESSI_VERSION}" + else + source "${EESSI_CVMFS_REPO}/versions/${EESSI_VERSION}/init/lmod/bash" + fi + else + eessi_init_path="${EESSI_CVMFS_REPO}"/versions/"${EESSI_VERSION}"/init/bash + source "${eessi_init_path}" + fi + fi + + # Needed in order to make sure the reframe from our TEMPDIR is first on the PATH, + # prior to the one shipped with the 2021.12 compat layer + # Probably no longer needed with newer compat layer that doesn't include ReFrame + deactivate + source "${TEMPDIR}"/reframe_venv/bin/activate + + # Print ReFrame config + echo "Starting CI run with the follwing settings:" + echo "" + echo "TEMPDIR: ${TEMPDIR}" + echo "PYTHONPATH: ${PYTHONPATH}" + echo "EESSI test suite URL: ${EESSI_TESTSUITE_URL}" + echo "EESSI test suite version: ${EESSI_TESTSUITE_BRANCH}" + echo "EESSI test suite URL for configs: ${EESSI_CONFIGS_TESTSUITE_URL}" + echo "EESSI test suite version for configs: ${EESSI_CONFIGS_TESTSUITE_BRANCH}" + echo "HPCtestlib from ReFrame URL: ${REFRAME_URL}" + echo "HPCtestlib from ReFrame branch: ${REFRAME_BRANCH}" + echo "ReFrame executable: $(which reframe)" + echo "ReFrame version: $(reframe --version)" + echo "ReFrame config file: ${RFM_CONFIG_FILES}" + echo "ReFrame check search path: ${RFM_CHECK_SEARCH_PATH}" + echo "ReFrame check search recursive: ${RFM_CHECK_SEARCH_RECURSIVE}" + echo "ReFrame prefix: ${RFM_PREFIX}" + echo "ReFrame args: ${REFRAME_ARGS}" + echo "Using EESSI: ${USE_EESSI_SOFTWARE_STACK}" + echo "Using the EESSI module: ${USE_EESSI_MODULE}" + echo "Using EESSI version: ${EESSI_VERSION}" + echo "Using local software stack ${SET_LOCAL_MODULE_ENV}" + echo "MODULEPATH: ${MODULEPATH}" + echo "" + + # List tests + echo "Listing tests:" + reframe ${REFRAME_ARGS} --list + + # Run + echo "Run tests:" + timeout -v --preserve-status -s SIGTERM ${REFRAME_TIMEOUT} reframe ${REFRAME_ARGS} --run --setvar EESSI_CONFIGS_URL=${EESSI_CONFIGS_TESTSUITE_URL} --setvar EESSI_CONFIGS_BRANCH=${EESSI_CONFIGS_TESTSUITE_BRANCH} + +done # Cleanup rm -rf "${TEMPDIR}"