From ef1ae0baaf21cbf7f69d4d74b6a4aef24502905c Mon Sep 17 00:00:00 2001 From: hugo meiland Date: Wed, 18 Jan 2023 19:40:41 +0100 Subject: [PATCH 001/698] add support for Raspberry Pi --- .github/workflows/tests_archdetect.yml | 1 + init/arch_specs/eessi_arch_arm_part.spec | 5 +++++ init/eessi_archdetect.sh | 22 ++++++++++++++----- .../arm/cortex-a72/debian-rpi4.cpuinfo | 8 +++++++ .../aarch64/arm/cortex-a72/debian-rpi4.output | 1 + 5 files changed, 31 insertions(+), 6 deletions(-) create mode 100755 init/arch_specs/eessi_arch_arm_part.spec create mode 100644 tests/archdetect/aarch64/arm/cortex-a72/debian-rpi4.cpuinfo create mode 100644 tests/archdetect/aarch64/arm/cortex-a72/debian-rpi4.output diff --git a/.github/workflows/tests_archdetect.yml b/.github/workflows/tests_archdetect.yml index 4fffce0dde..227071fcd3 100644 --- a/.github/workflows/tests_archdetect.yml +++ b/.github/workflows/tests_archdetect.yml @@ -15,6 +15,7 @@ jobs: - aarch64/arm/neoverse-n1/Azure-Ubuntu20-Altra - aarch64/arm/neoverse-n1/AWS-awslinux-graviton2 - aarch64/arm/neoverse-v1/AWS-awslinux-graviton3 + - aarch64/arm/cortex-a72/debian-rpi4 fail-fast: false steps: - uses: actions/checkout@v2 diff --git a/init/arch_specs/eessi_arch_arm_part.spec b/init/arch_specs/eessi_arch_arm_part.spec new file mode 100755 index 0000000000..7a56b222ba --- /dev/null +++ b/init/arch_specs/eessi_arch_arm_part.spec @@ -0,0 +1,5 @@ +# ARM CPU architecture specifications +# Software path in EESSI | Vendor ID | List of defining CPU features +"aarch64/arm/cortex-a72" "" "0xd08" # Raspberry Pi 4 +"aarch64/arm/neoverse-n1" "" "0xd0c" # AWS Graviton2 +"aarch64/arm/neoverse-v1" "" "0xd40" # AWS Graviton3 diff --git a/init/eessi_archdetect.sh b/init/eessi_archdetect.sh index af63e36f3a..68d3e600b4 100755 --- a/init/eessi_archdetect.sh +++ b/init/eessi_archdetect.sh @@ -78,27 +78,37 @@ cpupath(){ local machine_type=${EESSI_MACHINE_TYPE:-$(uname -m)} log "DEBUG" "cpupath: Host CPU architecture identified as '$machine_type'" + # Identify the host CPU vendor + local cpu_vendor_tag="vendor[ _]id" + local cpu_vendor=$(get_cpuinfo "$cpu_vendor_tag") + log "DEBUG" "cpupath: CPU vendor of host system: '$cpu_vendor'" + + # Identify the host CPU part + local cpu_part_tag="cpu[ _]part" + local cpu_part=$(get_cpuinfo "$cpu_part_tag") + log "DEBUG" "cpupath: CPU part of host system: '$cpu_part'" + # Populate list of supported specs for this architecture case $machine_type in "x86_64") local spec_file="eessi_arch_x86.spec";; - "aarch64") local spec_file="eessi_arch_arm.spec";; + "aarch64") + local spec_file="eessi_arch_arm.spec" + [ ! "${cpu_part}x" == "x" ] && local spec_file="eessi_arch_arm_part.spec" + ;; "ppc64le") local spec_file="eessi_arch_ppc.spec";; *) log "ERROR" "cpupath: Unsupported CPU architecture $machine_type" esac + # spec files are located in a subfolder with this script local base_dir=$(dirname $(realpath $0)) update_arch_specs cpu_arch_spec "$base_dir/arch_specs/${spec_file}" - # Identify the host CPU vendor - local cpu_vendor_tag="vendor[ _]id" - local cpu_vendor=$(get_cpuinfo "$cpu_vendor_tag") - log "DEBUG" "cpupath: CPU vendor of host system: '$cpu_vendor'" - # Identify the host CPU flags or features local cpu_flag_tag='flags' # cpuinfo systems print different line identifiers, eg features, instead of flags [ "${cpu_vendor}" == "ARM" ] && cpu_flag_tag='flags' [ "${machine_type}" == "aarch64" ] && [ "${cpu_vendor}x" == "x" ] && cpu_flag_tag='features' + [ "${machine_type}" == "aarch64" ] && [ ! "${cpu_part}x" == "x" ] && cpu_flag_tag='cpu part' [ "${machine_type}" == "ppc64le" ] && cpu_flag_tag='cpu' local cpu_flags=$(get_cpuinfo "$cpu_flag_tag") diff --git a/tests/archdetect/aarch64/arm/cortex-a72/debian-rpi4.cpuinfo b/tests/archdetect/aarch64/arm/cortex-a72/debian-rpi4.cpuinfo new file mode 100644 index 0000000000..045264e878 --- /dev/null +++ b/tests/archdetect/aarch64/arm/cortex-a72/debian-rpi4.cpuinfo @@ -0,0 +1,8 @@ +processor : 0 +BogoMIPS : 108.00 +Features : fp asimd evtstrm crc32 cpuid +CPU implementer : 0x41 +CPU architecture: 8 +CPU variant : 0x0 +CPU part : 0xd08 +CPU revision : 3 diff --git a/tests/archdetect/aarch64/arm/cortex-a72/debian-rpi4.output b/tests/archdetect/aarch64/arm/cortex-a72/debian-rpi4.output new file mode 100644 index 0000000000..4fe0bd1183 --- /dev/null +++ b/tests/archdetect/aarch64/arm/cortex-a72/debian-rpi4.output @@ -0,0 +1 @@ +aarch64/arm/cortex-a72 From c858fb47ce0b3856bee5c1a711a17491c3af8f56 Mon Sep 17 00:00:00 2001 From: hugo meiland Date: Wed, 18 Jan 2023 22:22:00 +0100 Subject: [PATCH 002/698] clarify cpu part identification for ARM --- init/arch_specs/eessi_arch_arm_part.spec | 2 +- init/eessi_archdetect.sh | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/init/arch_specs/eessi_arch_arm_part.spec b/init/arch_specs/eessi_arch_arm_part.spec index 7a56b222ba..1dee340771 100755 --- a/init/arch_specs/eessi_arch_arm_part.spec +++ b/init/arch_specs/eessi_arch_arm_part.spec @@ -1,5 +1,5 @@ # ARM CPU architecture specifications -# Software path in EESSI | Vendor ID | List of defining CPU features +# Software path in EESSI | Vendor ID | CPU part (ARM uarch identification) "aarch64/arm/cortex-a72" "" "0xd08" # Raspberry Pi 4 "aarch64/arm/neoverse-n1" "" "0xd0c" # AWS Graviton2 "aarch64/arm/neoverse-v1" "" "0xd40" # AWS Graviton3 diff --git a/init/eessi_archdetect.sh b/init/eessi_archdetect.sh index 5458028d15..049399c233 100755 --- a/init/eessi_archdetect.sh +++ b/init/eessi_archdetect.sh @@ -83,7 +83,7 @@ cpupath(){ local cpu_vendor=$(get_cpuinfo "$cpu_vendor_tag") log "DEBUG" "cpupath: CPU vendor of host system: '$cpu_vendor'" - # Identify the host CPU part + # Identify the host CPU part local cpu_part_tag="cpu[ _]part" local cpu_part=$(get_cpuinfo "$cpu_part_tag") log "DEBUG" "cpupath: CPU part of host system: '$cpu_part'" @@ -92,6 +92,7 @@ cpupath(){ case $machine_type in "x86_64") local spec_file="eessi_arch_x86.spec";; "aarch64") + # look for ARM core identification through cpu part when available, otherwise fall back to features local spec_file="eessi_arch_arm.spec" [ ! "${cpu_part}x" == "x" ] && local spec_file="eessi_arch_arm_part.spec" ;; From bbc5d73e0d9b19b1c7a016ddb0c2da6790669c29 Mon Sep 17 00:00:00 2001 From: Thomas Roeblitz Date: Tue, 18 Apr 2023 11:44:11 +0200 Subject: [PATCH 003/698] first version of bot/check-result.sh for software-layer - follows what has been implemented in the EESSI/eessi-bot-software-layer for checking the result of a job - re-uses code from a small script that was run manually on a bot instance to check a job's result - also re-uses code from the check-result.sh script in EESSI/compatibility-layer --- bot/check-result.sh | 195 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 195 insertions(+) create mode 100755 bot/check-result.sh diff --git a/bot/check-result.sh b/bot/check-result.sh new file mode 100755 index 0000000000..38e76c3abc --- /dev/null +++ b/bot/check-result.sh @@ -0,0 +1,195 @@ +#!/bin/bash +# +# Script to check the result of building the EESSI software layer. +# Intended use is that it is called by a (batch) job running on a compute +# node. +# +# This script is part of the EESSI compatibility layer, see +# https://github.com/EESSI/compatibility-layer.git +# +# author: Thomas Roeblitz (@trz42) +# +# license: GPLv2 +# + +# result cases + +# - SUCCESS (all of) +# - working directory contains slurm-JOBID.out file +# - working directory contains eessi*tar.gz +# - no message ERROR +# - no message FAILED +# - no message ' required modules missing:' +# - one or more of 'No missing modules!' +# - message regarding created tarball +# - FAILED (one of ... implemented as NOT SUCCESS) +# - no slurm-JOBID.out file +# - no tarball +# - message with ERROR +# - message with FAILED +# - message with ' required modules missing:' +# - no message regarding created tarball + +# stop as soon as something fails +# set -e + +TOPDIR=$(dirname $(realpath $0)) + +source ${TOPDIR}/scripts/utils.sh +source ${TOPDIR}/scripts/cfg_files.sh + +display_help() { + echo "usage: $0 [OPTIONS]" + echo " OPTIONS:" + echo " -h | --help - display this usage information [default: false]" + echo " -v | --verbose - display more information [default: false]" +} + +# set defaults for command line arguments +VERBOSE=0 + +POSITIONAL_ARGS=() + +while [[ $# -gt 0 ]]; do + case $1 in + -h|--help) + display_help + exit 0 + ;; + -v|--verbose) + VERBOSE=1 + shift 1 + ;; + --) + shift + POSITIONAL_ARGS+=("$@") # save positional args + break + ;; + -*|--*) + fatal_error "Unknown option: $1" "${CMDLINE_ARG_UNKNOWN_EXITCODE}" + ;; + *) # No more options + POSITIONAL_ARGS+=("$1") # save positional arg + shift + ;; + esac +done + +set -- "${POSITIONAL_ARGS[@]}" + +job_dir=${PWD} + +[[ ${VERBOSE} -ne 0 ]] && echo ">> analysing job in directory ${job_dir}" + +GP_slurm_out="slurm-${SLURM_JOB_ID}.out" +[[ ${VERBOSE} -ne 0 ]] && echo ">> searching for job output file(s) matching '"${GP_slurm_out}"'" +job_out=$(ls ${job_dir} | grep "${GP_slurm_out}") +[[ $? -eq 0 ]] && SLURM=1 || SLURM=0 +[[ ${VERBOSE} -ne 0 ]] && echo " found slurm output file '"${job_out}"'" + +GP_error='ERROR: ' +[[ ${VERBOSE} -ne 0 ]] && echo ">> searching for '"${GP_error}"'" +grep_out=$(grep "${GP_error}" ${job_dir}/${job_out}) +[[ $? -eq 0 ]] && ERROR=1 || ERROR=0 +[[ ${VERBOSE} -ne 0 ]] && echo "${grep_out}" + +GP_failed='FAILED: ' +[[ ${VERBOSE} -ne 0 ]] && echo ">> searching for '"${GP_failed}"'" +grep_out=$(grep "${GP_failed}" ${job_dir}/${job_out}) +[[ $? -eq 0 ]] && FAILED=1 || FAILED=0 +[[ ${VERBOSE} -ne 0 ]] && echo "${grep_out}" + +GP_req_missing=' required modules missing:' +[[ ${VERBOSE} -ne 0 ]] && echo ">> searching for '"${GP_req_missing}"'" +grep_out=$(grep "${GP_req_missing}" ${job_dir}/${job_out}) +[[ $? -eq 0 ]] && MISSING=1 || MISSING=0 +[[ ${VERBOSE} -ne 0 ]] && echo "${grep_out}" + +GP_no_missing='No missing modules!' +[[ ${VERBOSE} -ne 0 ]] && echo ">> searching for '"${GP_no_missing}"'" +grep_out=$(grep "${GP_no_missing}" ${job_dir}/${job_out}) +[[ $? -eq 0 ]] && NO_MISSING=1 || NO_MISSING=0 +[[ ${VERBOSE} -ne 0 ]] && echo "${grep_out}" + +GP_tgz_created="tar.gz created!" +[[ ${VERBOSE} -ne 0 ]] && echo ">> searching for '"${GP_tgz_created}"'" +grep_out=$(grep "${GP_tgz_created}" ${job_dir}/${job_out}) +TARBALL= +if [[ $? -eq 0 ]]; then + TGZ=1 + TARBALL=$(echo ${grep_out} | sed -e 's@^.*\(eessi[^/ ]*\) .*$@\1@') +else + TGZ=0 +fi +[[ ${VERBOSE} -ne 0 ]] && echo "${grep_out}" + +echo "SUMMARY: ${job_dir}/${job_out}" +echo " test name : result (expected result)" +echo " ERROR......: $([[ $ERROR -eq 1 ]] && echo 'yes' || echo 'no') (no)" +echo " FAILED.....: $([[ $FAILED -eq 1 ]] && echo 'yes' || echo 'no') (no)" +echo " REQ_MISSING: $([[ $MISSING -eq 1 ]] && echo 'yes' || echo 'no') (no)" +echo " NO_MISSING.: $([[ $NO_MISSING -eq 1 ]] && echo 'yes' || echo 'no') (yes)" +echo " TGZ_CREATED: $([[ $TGZ -eq 1 ]] && echo 'yes' || echo 'no') (yes)" + +if [[ ${SLURM} -eq 1 ]] && \ + [[ ${ERROR} -eq 0 ]] && \ + [[ ${FAILED} -eq 0 ]] && \ + [[ ${MISSING} -eq 0 ]] && \ + [[ ${NO_MISSING} -eq 1 ]] && \ + [[ ${TGZ} -eq 1 ]] && \ + [[ ! -z ${TARBALL} ]]; then + # SUCCESS + echo "[RESULT]" > ${job_result_file} + echo "summary = :grin: SUCCESS" >> ${job_result_file} + echo "details =" >> ${job_result_file} +else + # FAILURE + echo "[RESULT]" > ${job_result_file} + echo "summary = :cry: FAILURE" >> ${job_result_file} + echo "details =" >> ${job_result_file} +fi + +if [[ ${SLURM} -eq 1 ]]; then + # need to indent by 4 spaces + echo " job output file ${job_out} (pattern: ${GP_slurm_out})" >> ${job_result_file} +else + echo " no job output file matching ${GP_slurm_out}" >> ${job_result_file} +fi + +if [[ ${ERROR} -eq 0 ]]; then + echo " job output lacks message matching ${GP_error}" >> ${job_result_file} +else + echo " job output contains message matching ${GP_error}" >> ${job_result_file} +fi + +if [[ ${FAILED} -eq 0 ]]; then + echo " job output lacks message matching ${GP_failed}" >> ${job_result_file} +else + echo " job output contains message matching ${GP_failed}" >> ${job_result_file} +fi + +if [[ ${MISSING} -eq 0 ]]; then + echo " job output lacks message matching ${GP_req_missing}" >> ${job_result_file} +else + echo " job output contains message matching ${GP_req_missing}" >> ${job_result_file} +fi + +if [[ ${NO_MISSING} -eq 1 ]]; then + echo " found message(s) matching ${GP_no_missing}" >> ${job_result_file} +else + echo " found no message matching ${GP_no_missing}" >> ${job_result_file} +fi + +if [[ ${TGZ} -eq 1 ]]; then + echo " found message matching ${GP_tgz_created}" >> ${job_result_file} +else + echo " found no message matching ${GP_tgz_created}" >> ${job_result_file} +fi + +echo "artefacts =" >> ${job_result_file} + +if [[ ! -z ${TARBALL} ]]; then + echo " ${TARBALL}" >> ${job_result_file} +fi + +exit 0 From fb04876141a464d98eb4cbb1aa3e34e4bc1a321c Mon Sep 17 00:00:00 2001 From: Thomas Roeblitz Date: Tue, 18 Apr 2023 14:34:27 +0200 Subject: [PATCH 004/698] fix path to helper scripts + define result file name --- bot/check-result.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/bot/check-result.sh b/bot/check-result.sh index 38e76c3abc..15356f10cf 100755 --- a/bot/check-result.sh +++ b/bot/check-result.sh @@ -35,8 +35,8 @@ TOPDIR=$(dirname $(realpath $0)) -source ${TOPDIR}/scripts/utils.sh -source ${TOPDIR}/scripts/cfg_files.sh +source ${TOPDIR}/../scripts/utils.sh +source ${TOPDIR}/../scripts/cfg_files.sh display_help() { echo "usage: $0 [OPTIONS]" @@ -131,6 +131,8 @@ echo " REQ_MISSING: $([[ $MISSING -eq 1 ]] && echo 'yes' || echo 'no') (no)" echo " NO_MISSING.: $([[ $NO_MISSING -eq 1 ]] && echo 'yes' || echo 'no') (yes)" echo " TGZ_CREATED: $([[ $TGZ -eq 1 ]] && echo 'yes' || echo 'no') (yes)" +job_result_file=_bot_job${SLURM_JOB_ID}.result + if [[ ${SLURM} -eq 1 ]] && \ [[ ${ERROR} -eq 0 ]] && \ [[ ${FAILED} -eq 0 ]] && \ From 5ebc5d92014b97738b85102d175edf77d14e2799 Mon Sep 17 00:00:00 2001 From: Thomas Roeblitz Date: Tue, 18 Apr 2023 15:41:45 +0200 Subject: [PATCH 005/698] define functions for standardizing result output --- bot/check-result.sh | 33 ++++++++++++++++++++------------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/bot/check-result.sh b/bot/check-result.sh index 15356f10cf..dbc76e2dc9 100755 --- a/bot/check-result.sh +++ b/bot/check-result.sh @@ -151,41 +151,48 @@ else echo "details =" >> ${job_result_file} fi +function succeeded() { + echo "    :heavy_check_mark:${1}" +} + +function failed() { + echo "    :heavy_multiplication_x:${1}" +} + if [[ ${SLURM} -eq 1 ]]; then - # need to indent by 4 spaces - echo " job output file ${job_out} (pattern: ${GP_slurm_out})" >> ${job_result_file} + succeeded "job output file ${job_out}" >> ${job_result_file} else - echo " no job output file matching ${GP_slurm_out}" >> ${job_result_file} + failed "no job output file matching ${GP_slurm_out}" >> ${job_result_file} fi if [[ ${ERROR} -eq 0 ]]; then - echo " job output lacks message matching ${GP_error}" >> ${job_result_file} + succeeded "job output lacks message matching ${GP_error}" >> ${job_result_file} else - echo " job output contains message matching ${GP_error}" >> ${job_result_file} + failed "job output contains message matching ${GP_error}" >> ${job_result_file} fi if [[ ${FAILED} -eq 0 ]]; then - echo " job output lacks message matching ${GP_failed}" >> ${job_result_file} + succeeded "job output lacks message matching ${GP_failed}" >> ${job_result_file} else - echo " job output contains message matching ${GP_failed}" >> ${job_result_file} + failed "job output contains message matching ${GP_failed}" >> ${job_result_file} fi if [[ ${MISSING} -eq 0 ]]; then - echo " job output lacks message matching ${GP_req_missing}" >> ${job_result_file} + succeeded "job output lacks message matching ${GP_req_missing}" >> ${job_result_file} else - echo " job output contains message matching ${GP_req_missing}" >> ${job_result_file} + failed "job output contains message matching ${GP_req_missing}" >> ${job_result_file} fi if [[ ${NO_MISSING} -eq 1 ]]; then - echo " found message(s) matching ${GP_no_missing}" >> ${job_result_file} + succeeded "found message(s) matching ${GP_no_missing}" >> ${job_result_file} else - echo " found no message matching ${GP_no_missing}" >> ${job_result_file} + failed "found no message matching ${GP_no_missing}" >> ${job_result_file} fi if [[ ${TGZ} -eq 1 ]]; then - echo " found message matching ${GP_tgz_created}" >> ${job_result_file} + succeeded "found message matching ${GP_tgz_created}" >> ${job_result_file} else - echo " found no message matching ${GP_tgz_created}" >> ${job_result_file} + failed "found no message matching ${GP_tgz_created}" >> ${job_result_file} fi echo "artefacts =" >> ${job_result_file} From b8621545003d3d3e9bd482152a84f1aada2227ed Mon Sep 17 00:00:00 2001 From: Thomas Roeblitz Date: Wed, 19 Apr 2023 11:29:05 +0200 Subject: [PATCH 006/698] polishing formating of status messages --- bot/check-result.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bot/check-result.sh b/bot/check-result.sh index dbc76e2dc9..9e34f81dd8 100755 --- a/bot/check-result.sh +++ b/bot/check-result.sh @@ -152,11 +152,11 @@ else fi function succeeded() { - echo "    :heavy_check_mark:${1}" + echo " :heavy_check_mark:${1}" } function failed() { - echo "    :heavy_multiplication_x:${1}" + echo " :heavy_multiplication_x:${1}" } if [[ ${SLURM} -eq 1 ]]; then From 95e8ff8e55f316852aeb1ec09ce94db5cacb1b62 Mon Sep 17 00:00:00 2001 From: Thomas Roeblitz Date: Wed, 19 Apr 2023 12:29:56 +0200 Subject: [PATCH 007/698] more polishing of comment details --- bot/check-result.sh | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/bot/check-result.sh b/bot/check-result.sh index 9e34f81dd8..2d2f33be06 100755 --- a/bot/check-result.sh +++ b/bot/check-result.sh @@ -166,33 +166,33 @@ else fi if [[ ${ERROR} -eq 0 ]]; then - succeeded "job output lacks message matching ${GP_error}" >> ${job_result_file} + succeeded "no message matching ${GP_error}" >> ${job_result_file} else - failed "job output contains message matching ${GP_error}" >> ${job_result_file} + failed "found message matching ${GP_error}" >> ${job_result_file} fi if [[ ${FAILED} -eq 0 ]]; then - succeeded "job output lacks message matching ${GP_failed}" >> ${job_result_file} + succeeded "no message matching ${GP_failed}" >> ${job_result_file} else - failed "job output contains message matching ${GP_failed}" >> ${job_result_file} + failed "found message matching ${GP_failed}" >> ${job_result_file} fi if [[ ${MISSING} -eq 0 ]]; then - succeeded "job output lacks message matching ${GP_req_missing}" >> ${job_result_file} + succeeded "no message matching ${GP_req_missing}" >> ${job_result_file} else - failed "job output contains message matching ${GP_req_missing}" >> ${job_result_file} + failed "found message matching ${GP_req_missing}" >> ${job_result_file} fi if [[ ${NO_MISSING} -eq 1 ]]; then succeeded "found message(s) matching ${GP_no_missing}" >> ${job_result_file} else - failed "found no message matching ${GP_no_missing}" >> ${job_result_file} + failed "no message matching ${GP_no_missing}" >> ${job_result_file} fi if [[ ${TGZ} -eq 1 ]]; then succeeded "found message matching ${GP_tgz_created}" >> ${job_result_file} else - failed "found no message matching ${GP_tgz_created}" >> ${job_result_file} + failed "no message matching ${GP_tgz_created}" >> ${job_result_file} fi echo "artefacts =" >> ${job_result_file} From 6724b49b18dc0a4cabc87c5526e0e8741b148686 Mon Sep 17 00:00:00 2001 From: Thomas Roeblitz Date: Wed, 19 Apr 2023 13:06:15 +0200 Subject: [PATCH 008/698] minor polishing of job result messages --- bot/check-result.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bot/check-result.sh b/bot/check-result.sh index 2d2f33be06..1598e9ca1b 100755 --- a/bot/check-result.sh +++ b/bot/check-result.sh @@ -152,11 +152,11 @@ else fi function succeeded() { - echo " :heavy_check_mark:${1}" + echo " :heavy_check_mark: ${1}" } function failed() { - echo " :heavy_multiplication_x:${1}" + echo " :heavy_multiplication_x: ${1}" } if [[ ${SLURM} -eq 1 ]]; then From b70c858d65eadba24366518d30f63a3fdca3b686 Mon Sep 17 00:00:00 2001 From: Thomas Roeblitz Date: Wed, 19 Apr 2023 13:36:15 +0200 Subject: [PATCH 009/698] only log if run with --verbose --- bot/check-result.sh | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/bot/check-result.sh b/bot/check-result.sh index 1598e9ca1b..55276c405a 100755 --- a/bot/check-result.sh +++ b/bot/check-result.sh @@ -123,13 +123,13 @@ else fi [[ ${VERBOSE} -ne 0 ]] && echo "${grep_out}" -echo "SUMMARY: ${job_dir}/${job_out}" -echo " test name : result (expected result)" -echo " ERROR......: $([[ $ERROR -eq 1 ]] && echo 'yes' || echo 'no') (no)" -echo " FAILED.....: $([[ $FAILED -eq 1 ]] && echo 'yes' || echo 'no') (no)" -echo " REQ_MISSING: $([[ $MISSING -eq 1 ]] && echo 'yes' || echo 'no') (no)" -echo " NO_MISSING.: $([[ $NO_MISSING -eq 1 ]] && echo 'yes' || echo 'no') (yes)" -echo " TGZ_CREATED: $([[ $TGZ -eq 1 ]] && echo 'yes' || echo 'no') (yes)" +[[ ${VERBOSE} -ne 0 ]] && echo "SUMMARY: ${job_dir}/${job_out}" +[[ ${VERBOSE} -ne 0 ]] && echo " test name : result (expected result)" +[[ ${VERBOSE} -ne 0 ]] && echo " ERROR......: $([[ $ERROR -eq 1 ]] && echo 'yes' || echo 'no') (no)" +[[ ${VERBOSE} -ne 0 ]] && echo " FAILED.....: $([[ $FAILED -eq 1 ]] && echo 'yes' || echo 'no') (no)" +[[ ${VERBOSE} -ne 0 ]] && echo " REQ_MISSING: $([[ $MISSING -eq 1 ]] && echo 'yes' || echo 'no') (no)" +[[ ${VERBOSE} -ne 0 ]] && echo " NO_MISSING.: $([[ $NO_MISSING -eq 1 ]] && echo 'yes' || echo 'no') (yes)" +[[ ${VERBOSE} -ne 0 ]] && echo " TGZ_CREATED: $([[ $TGZ -eq 1 ]] && echo 'yes' || echo 'no') (yes)" job_result_file=_bot_job${SLURM_JOB_ID}.result From 677c36296f1ab433964b8caa230ad8ef32c5d625 Mon Sep 17 00:00:00 2001 From: Thomas Roeblitz Date: Thu, 20 Apr 2023 15:22:40 +0200 Subject: [PATCH 010/698] fix small bug when checking for tarball msg --- bot/check-result.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bot/check-result.sh b/bot/check-result.sh index 55276c405a..3f0c89ea21 100755 --- a/bot/check-result.sh +++ b/bot/check-result.sh @@ -112,9 +112,9 @@ grep_out=$(grep "${GP_no_missing}" ${job_dir}/${job_out}) [[ ${VERBOSE} -ne 0 ]] && echo "${grep_out}" GP_tgz_created="tar.gz created!" +TARBALL= [[ ${VERBOSE} -ne 0 ]] && echo ">> searching for '"${GP_tgz_created}"'" grep_out=$(grep "${GP_tgz_created}" ${job_dir}/${job_out}) -TARBALL= if [[ $? -eq 0 ]]; then TGZ=1 TARBALL=$(echo ${grep_out} | sed -e 's@^.*\(eessi[^/ ]*\) .*$@\1@') From e4932eefaff86adee6e91265efdfd5268efdf52a Mon Sep 17 00:00:00 2001 From: Thomas Roeblitz Date: Thu, 20 Apr 2023 15:31:36 +0200 Subject: [PATCH 011/698] avoid creating false positives --- bot/check-result.sh | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/bot/check-result.sh b/bot/check-result.sh index 3f0c89ea21..e28ae4e38e 100755 --- a/bot/check-result.sh +++ b/bot/check-result.sh @@ -82,38 +82,42 @@ job_dir=${PWD} [[ ${VERBOSE} -ne 0 ]] && echo ">> analysing job in directory ${job_dir}" GP_slurm_out="slurm-${SLURM_JOB_ID}.out" -[[ ${VERBOSE} -ne 0 ]] && echo ">> searching for job output file(s) matching '"${GP_slurm_out}"'" job_out=$(ls ${job_dir} | grep "${GP_slurm_out}") [[ $? -eq 0 ]] && SLURM=1 || SLURM=0 +# have to be careful to not add searched for pattern into slurm out file +[[ ${VERBOSE} -ne 0 ]] && echo ">> searching for job output file(s) matching '"${GP_slurm_out}"'" [[ ${VERBOSE} -ne 0 ]] && echo " found slurm output file '"${job_out}"'" GP_error='ERROR: ' -[[ ${VERBOSE} -ne 0 ]] && echo ">> searching for '"${GP_error}"'" grep_out=$(grep "${GP_error}" ${job_dir}/${job_out}) [[ $? -eq 0 ]] && ERROR=1 || ERROR=0 +# have to be careful to not add searched for pattern into slurm out file +[[ ${VERBOSE} -ne 0 ]] && echo ">> searching for '"${GP_error}"'" [[ ${VERBOSE} -ne 0 ]] && echo "${grep_out}" GP_failed='FAILED: ' -[[ ${VERBOSE} -ne 0 ]] && echo ">> searching for '"${GP_failed}"'" grep_out=$(grep "${GP_failed}" ${job_dir}/${job_out}) [[ $? -eq 0 ]] && FAILED=1 || FAILED=0 +# have to be careful to not add searched for pattern into slurm out file +[[ ${VERBOSE} -ne 0 ]] && echo ">> searching for '"${GP_failed}"'" [[ ${VERBOSE} -ne 0 ]] && echo "${grep_out}" GP_req_missing=' required modules missing:' -[[ ${VERBOSE} -ne 0 ]] && echo ">> searching for '"${GP_req_missing}"'" grep_out=$(grep "${GP_req_missing}" ${job_dir}/${job_out}) [[ $? -eq 0 ]] && MISSING=1 || MISSING=0 +# have to be careful to not add searched for pattern into slurm out file +[[ ${VERBOSE} -ne 0 ]] && echo ">> searching for '"${GP_req_missing}"'" [[ ${VERBOSE} -ne 0 ]] && echo "${grep_out}" GP_no_missing='No missing modules!' -[[ ${VERBOSE} -ne 0 ]] && echo ">> searching for '"${GP_no_missing}"'" grep_out=$(grep "${GP_no_missing}" ${job_dir}/${job_out}) [[ $? -eq 0 ]] && NO_MISSING=1 || NO_MISSING=0 +# have to be careful to not add searched for pattern into slurm out file +[[ ${VERBOSE} -ne 0 ]] && echo ">> searching for '"${GP_no_missing}"'" [[ ${VERBOSE} -ne 0 ]] && echo "${grep_out}" GP_tgz_created="tar.gz created!" TARBALL= -[[ ${VERBOSE} -ne 0 ]] && echo ">> searching for '"${GP_tgz_created}"'" grep_out=$(grep "${GP_tgz_created}" ${job_dir}/${job_out}) if [[ $? -eq 0 ]]; then TGZ=1 @@ -121,6 +125,8 @@ if [[ $? -eq 0 ]]; then else TGZ=0 fi +# have to be careful to not add searched for pattern into slurm out file +[[ ${VERBOSE} -ne 0 ]] && echo ">> searching for '"${GP_tgz_created}"'" [[ ${VERBOSE} -ne 0 ]] && echo "${grep_out}" [[ ${VERBOSE} -ne 0 ]] && echo "SUMMARY: ${job_dir}/${job_out}" From 9a0e220db5a21b6285785ab09683bc0bb62e3108 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Mon, 5 Jun 2023 18:48:43 +0200 Subject: [PATCH 012/698] also filter OpenSSL dependency in EasyBuild configuration --- configure_easybuild | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure_easybuild b/configure_easybuild index 245553f342..5d4e9b5a48 100644 --- a/configure_easybuild +++ b/configure_easybuild @@ -26,7 +26,7 @@ fi # note: filtering Bison may break some installations, like Qt5 (see https://github.com/EESSI/software-layer/issues/49) # filtering pkg-config breaks R-bundle-Bioconductor installation (see also https://github.com/easybuilders/easybuild-easyconfigs/pull/11104) # problems occur when filtering pkg-config with gnuplot too (picks up Lua 5.1 from $EPREFIX rather than from Lua 5.3 dependency) -DEPS_TO_FILTER=Autoconf,Automake,Autotools,binutils,bzip2,cURL,DBus,flex,gettext,gperf,help2man,intltool,libreadline,libtool,Lua,M4,makeinfo,ncurses,util-linux,XZ,zlib +DEPS_TO_FILTER=Autoconf,Automake,Autotools,binutils,bzip2,cURL,DBus,flex,gettext,gperf,help2man,intltool,libreadline,libtool,Lua,M4,makeinfo,ncurses,OpenSSL,util-linux,XZ,zlib # For aarch64 we need to also filter out Yasm. # See https://github.com/easybuilders/easybuild-easyconfigs/issues/11190 if [[ "$EESSI_CPU_FAMILY" == "aarch64" ]]; then From 0a41c207e0ee1646cff53768cc86f83a8f740205 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 14 Jun 2023 08:14:02 +0200 Subject: [PATCH 013/698] bump version to 2023.06 --- init/eessi_defaults | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/init/eessi_defaults b/init/eessi_defaults index f482cbc269..0143dc38ab 100644 --- a/init/eessi_defaults +++ b/init/eessi_defaults @@ -9,4 +9,4 @@ # export EESSI_CVMFS_REPO="${EESSI_CVMFS_REPO_OVERRIDE:=/cvmfs/pilot.eessi-hpc.org}" -export EESSI_PILOT_VERSION="${EESSI_PILOT_VERSION_OVERRIDE:=2021.12}" +export EESSI_PILOT_VERSION="${EESSI_PILOT_VERSION_OVERRIDE:=2023.06}" From 88a758a4c250111d35ca3c76e1516bd62c3e2620 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 14 Jun 2023 08:14:45 +0200 Subject: [PATCH 014/698] configure EasyBuild to allow experimental features (like using easystack files) --- configure_easybuild | 3 +++ 1 file changed, 3 insertions(+) diff --git a/configure_easybuild b/configure_easybuild index 245553f342..23f3920154 100644 --- a/configure_easybuild +++ b/configure_easybuild @@ -36,3 +36,6 @@ fi export EASYBUILD_FILTER_DEPS=$DEPS_TO_FILTER export EASYBUILD_MODULE_EXTENSIONS=1 + +# need to enable use of experimental features, since we're using easystack files +export EASYBUILD_EXPERIMENTAL=1 From 8aa1c25b69e84a76ce286029bb320e910e8aff3b Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 14 Jun 2023 08:23:22 +0200 Subject: [PATCH 015/698] update install script to use EasyBuild 4.7.2 + use easystack file for foss/2021a --- EESSI-pilot-install-software.sh | 244 +++---------------------------- eessi-2023.04-eb-4.7.2-2021a.yml | 6 + 2 files changed, 24 insertions(+), 226 deletions(-) create mode 100644 eessi-2023.04-eb-4.7.2-2021a.yml diff --git a/EESSI-pilot-install-software.sh b/EESSI-pilot-install-software.sh index d9bcf20231..f58903f8cd 100755 --- a/EESSI-pilot-install-software.sh +++ b/EESSI-pilot-install-software.sh @@ -137,235 +137,27 @@ else echo_green ">> MODULEPATH set up: ${MODULEPATH}" fi -REQ_EB_VERSION='4.5.0' - -# load EasyBuild module (will be installed if it's not available yet) -source ${TOPDIR}/load_easybuild_module.sh ${REQ_EB_VERSION} - -echo_green "All set, let's start installing some software in ${EASYBUILD_INSTALLPATH}..." - -# install Java with fixed custom easyblock that uses patchelf to ensure right glibc is picked up, -# see https://github.com/EESSI/software-layer/issues/123 -# and https://github.com/easybuilders/easybuild-easyblocks/pull/2557 -ok_msg="Java installed, off to a good (?) start!" -fail_msg="Failed to install Java, woopsie..." -$EB Java-11.eb --robot --include-easyblocks-from-pr 2557 -check_exit_code $? "${ok_msg}" "${fail_msg}" - -# install GCC for foss/2020a -export GCC_EC="GCC-9.3.0.eb" -echo ">> Starting slow with ${GCC_EC}..." -ok_msg="${GCC_EC} installed, yippy! Off to a good start..." -fail_msg="Installation of ${GCC_EC} failed!" -# pull in easyconfig from https://github.com/easybuilders/easybuild-easyconfigs/pull/14453, -# which includes patch to fix build of GCC 9.3 when recent kernel headers are in place -$EB ${GCC_EC} --robot --from-pr 14453 GCCcore-9.3.0.eb -check_exit_code $? "${ok_msg}" "${fail_msg}" - -# install CMake with custom easyblock that patches CMake when --sysroot is used -echo ">> Install CMake with fixed easyblock to take into account --sysroot" -ok_msg="CMake installed!" -fail_msg="Installation of CMake failed, what the ..." -$EB CMake-3.16.4-GCCcore-9.3.0.eb --robot --include-easyblocks-from-pr 2248 -check_exit_code $? "${ok_msg}" "${fail_msg}" - -# If we're building OpenBLAS for GENERIC, we need https://github.com/easybuilders/easybuild-easyblocks/pull/1946 -echo ">> Installing OpenBLAS..." -ok_msg="Done with OpenBLAS!" -fail_msg="Installation of OpenBLAS failed!" -if [[ $GENERIC -eq 1 ]]; then - echo_yellow ">> Using https://github.com/easybuilders/easybuild-easyblocks/pull/1946 to build generic OpenBLAS." - openblas_include_easyblocks_from_pr="--include-easyblocks-from-pr 1946" -else - openblas_include_easyblocks_from_pr='' -fi -$EB $openblas_include_easyblocks_from_pr OpenBLAS-0.3.9-GCC-9.3.0.eb --robot -check_exit_code $? "${ok_msg}" "${fail_msg}" - -echo ">> Installing OpenMPI..." -ok_msg="OpenMPI installed, w00!" -fail_msg="Installation of OpenMPI failed, that's not good..." -$EB OpenMPI-4.0.3-GCC-9.3.0.eb --robot -check_exit_code $? "${ok_msg}" "${fail_msg}" - -# install Python -echo ">> Install Python 2.7.18 and Python 3.8.2..." -ok_msg="Python 2.7.18 and 3.8.2 installed, yaay!" -fail_msg="Installation of Python failed, oh no..." -$EB Python-2.7.18-GCCcore-9.3.0.eb Python-3.8.2-GCCcore-9.3.0.eb --robot -check_exit_code $? "${ok_msg}" "${fail_msg}" - -echo ">> Installing Perl..." -ok_msg="Perl installed, making progress..." -fail_msg="Installation of Perl failed, this never happens..." -# use enhanced Perl easyblock from https://github.com/easybuilders/easybuild-easyblocks/pull/2640 -# to avoid trouble when using long installation prefix (for example with EESSI pilot 2021.12 on skylake_avx512...) -$EB Perl-5.30.2-GCCcore-9.3.0.eb --robot --include-easyblocks-from-pr 2640 -check_exit_code $? "${ok_msg}" "${fail_msg}" - -echo ">> Installing Qt5..." -ok_msg="Qt5 installed, phieuw, that was a big one!" -fail_msg="Installation of Qt5 failed, that's frustrating..." -$EB Qt5-5.14.1-GCCcore-9.3.0.eb --robot -check_exit_code $? "${ok_msg}" "${fail_msg}" - -# skip test step when installing SciPy-bundle on aarch64, -# to dance around problem with broken numpy tests; -# cfr. https://github.com/easybuilders/easybuild-easyconfigs/issues/11959 -echo ">> Installing SciPy-bundle" -ok_msg="SciPy-bundle installed, yihaa!" -fail_msg="SciPy-bundle installation failed, bummer..." -SCIPY_EC=SciPy-bundle-2020.03-foss-2020a-Python-3.8.2.eb -if [[ "$(uname -m)" == "aarch64" ]]; then - $EB $SCIPY_EC --robot --skip-test-step -else - $EB $SCIPY_EC --robot -fi -check_exit_code $? "${ok_msg}" "${fail_msg}" - -echo ">> Installing GROMACS..." -ok_msg="GROMACS installed, wow!" -fail_msg="Installation of GROMACS failed, damned..." -$EB GROMACS-2020.1-foss-2020a-Python-3.8.2.eb GROMACS-2020.4-foss-2020a-Python-3.8.2.eb --robot -check_exit_code $? "${ok_msg}" "${fail_msg}" - -# note: compiling OpenFOAM is memory hungry (16GB is not enough with 8 cores)! -# 32GB is sufficient to build with 16 cores -echo ">> Installing OpenFOAM (twice!)..." -ok_msg="OpenFOAM installed, now we're talking!" -fail_msg="Installation of OpenFOAM failed, we were so close..." -$EB OpenFOAM-8-foss-2020a.eb OpenFOAM-v2006-foss-2020a.eb --robot -check_exit_code $? "${ok_msg}" "${fail_msg}" - -if [ ! "${EESSI_CPU_FAMILY}" = "ppc64le" ]; then - echo ">> Installing QuantumESPRESSO..." - ok_msg="QuantumESPRESSO installed, let's go quantum!" - fail_msg="Installation of QuantumESPRESSO failed, did somebody observe it?!" - $EB QuantumESPRESSO-6.6-foss-2020a.eb --robot - check_exit_code $? "${ok_msg}" "${fail_msg}" -fi +for eb_version in '4.7.2'; do -echo ">> Installing R 4.0.0 (better be patient)..." -ok_msg="R installed, wow!" -fail_msg="Installation of R failed, so sad..." -$EB R-4.0.0-foss-2020a.eb --robot --parallel-extensions-install --experimental -check_exit_code $? "${ok_msg}" "${fail_msg}" - -echo ">> Installing Bioconductor 3.11 bundle..." -ok_msg="Bioconductor installed, enjoy!" -fail_msg="Installation of Bioconductor failed, that's annoying..." -$EB R-bundle-Bioconductor-3.11-foss-2020a-R-4.0.0.eb --robot -check_exit_code $? "${ok_msg}" "${fail_msg}" - -echo ">> Installing TensorFlow 2.3.1..." -ok_msg="TensorFlow 2.3.1 installed, w00!" -fail_msg="Installation of TensorFlow failed, why am I not surprised..." -$EB TensorFlow-2.3.1-foss-2020a-Python-3.8.2.eb --robot --include-easyblocks-from-pr 2218 -check_exit_code $? "${ok_msg}" "${fail_msg}" - -echo ">> Installing Horovod 0.21.3..." -ok_msg="Horovod installed! Go do some parallel training!" -fail_msg="Horovod installation failed. There comes the headache..." -$EB Horovod-0.21.3-foss-2020a-TensorFlow-2.3.1-Python-3.8.2.eb --robot -check_exit_code $? "${ok_msg}" "${fail_msg}" - -if [ ! "${EESSI_CPU_FAMILY}" = "ppc64le" ]; then - - echo ">> Installing code-server 3.7.3..." - ok_msg="code-server 3.7.3 installed, now you can use VS Code!" - fail_msg="Installation of code-server failed, that's going to be hard to fix..." - $EB code-server-3.7.3.eb --robot - check_exit_code $? "${ok_msg}" "${fail_msg}" -fi + # load EasyBuild module (will be installed if it's not available yet) + source ${TOPDIR}/load_easybuild_module.sh ${REQ_EB_VERSION} -echo ">> Installing RStudio-Server 1.3.1093..." -ok_msg="RStudio-Server installed, enjoy!" -fail_msg="Installation of RStudio-Server failed, might be OS deps..." -$EB RStudio-Server-1.3.1093-foss-2020a-Java-11-R-4.0.0.eb --robot -check_exit_code $? "${ok_msg}" "${fail_msg}" - -echo ">> Installing OSU-Micro-Benchmarks 5.6.3..." -ok_msg="OSU-Micro-Benchmarks installed, yihaa!" -fail_msg="Installation of OSU-Micro-Benchmarks failed, that's unexpected..." -$EB OSU-Micro-Benchmarks-5.6.3-gompi-2020a.eb -r -check_exit_code $? "${ok_msg}" "${fail_msg}" - -echo ">> Installing Spark 3.1.1..." -ok_msg="Spark installed, set off the fireworks!" -fail_msg="Installation of Spark failed, no fireworks this time..." -$EB Spark-3.1.1-foss-2020a-Python-3.8.2.eb -r -check_exit_code $? "${ok_msg}" "${fail_msg}" - -echo ">> Installing IPython 7.15.0..." -ok_msg="IPython installed, launch your Jupyter Notebooks!" -fail_msg="Installation of IPython failed, that's unexpected..." -$EB IPython-7.15.0-foss-2020a-Python-3.8.2.eb -r -check_exit_code $? "${ok_msg}" "${fail_msg}" - -echo ">> Installing WRF 3.9.1.1..." -ok_msg="WRF installed, it's getting hot in here!" -fail_msg="Installation of WRF failed, that's unexpected..." -OMPI_MCA_pml=ucx UCX_TLS=tcp $EB WRF-3.9.1.1-foss-2020a-dmpar.eb -r --include-easyblocks-from-pr 2648 -check_exit_code $? "${ok_msg}" "${fail_msg}" - -echo ">> Installing R 4.1.0 (better be patient)..." -ok_msg="R installed, wow!" -fail_msg="Installation of R failed, so sad..." -$EB --from-pr 14821 X11-20210518-GCCcore-10.3.0.eb -r && $EB --from-pr 16011 R-4.1.0-foss-2021a.eb --robot --parallel-extensions-install --experimental -check_exit_code $? "${ok_msg}" "${fail_msg}" - -echo ">> Installing Nextflow 22.10.1..." -ok_msg="Nextflow installed, the work must flow..." -fail_msg="Installation of Nextflow failed, that's unexpected..." -$EB -r --from-pr 16531 Nextflow-22.10.1.eb -check_exit_code $? "${ok_msg}" "${fail_msg}" - -echo ">> Installing OSU-Micro-Benchmarks/5.7.1-gompi-2021a..." -ok_msg="OSU-Micro-Benchmarks installed, yihaa!" -fail_msg="Installation of OSU-Micro-Benchmarks failed, that's unexpected..." -$EB OSU-Micro-Benchmarks-5.7.1-gompi-2021a.eb -r -check_exit_code $? "${ok_msg}" "${fail_msg}" - -echo ">> Installing EasyBuild 4.5.1..." -ok_msg="EasyBuild v4.5.1 installed" -fail_msg="EasyBuild v4.5.1 failed to install" -$EB --from-pr 14545 --include-easyblocks-from-pr 2805 -check_exit_code $? "${ok_msg}" "${fail_msg}" - -LMOD_IGNORE_CACHE=1 module swap EasyBuild/4.5.1 -check_exit_code $? "Swapped to EasyBuild/4.5.1" "Couldn't swap to EasyBuild/4.5.1" - -echo ">> Installing SciPy-bundle with foss/2021a..." -ok_msg="SciPy-bundle with foss/2021a installed, welcome to the modern age" -fail_msg="Installation of SciPy-bundle with foss/2021a failed, back to the stone age..." -# use GCCcore easyconfig from https://github.com/easybuilders/easybuild-easyconfigs/pull/14454 -# which includes patch to fix installation with recent Linux kernel headers -$EB --from-pr 14454 GCCcore-10.3.0.eb --robot -# use enhanced Perl easyblock from https://github.com/easybuilders/easybuild-easyblocks/pull/2640 -# to avoid trouble when using long installation prefix (for example with EESSI pilot 2021.12 on skylake_avx512...) -$EB Perl-5.32.1-GCCcore-10.3.0.eb --robot --include-easyblocks-from-pr 2640 -# use enhanced CMake easyblock to patch CMake's UnixPaths.cmake script if --sysroot is set -# from https://github.com/easybuilders/easybuild-easyblocks/pull/2248 -$EB CMake-3.20.1-GCCcore-10.3.0.eb --robot --include-easyblocks-from-pr 2248 -# use Rust easyconfig from https://github.com/easybuilders/easybuild-easyconfigs/pull/14584 -# that includes patch to fix bootstrap problem when using alternate sysroot -$EB --from-pr 14584 Rust-1.52.1-GCCcore-10.3.0.eb --robot -# use OpenBLAS easyconfig from https://github.com/easybuilders/easybuild-easyconfigs/pull/15885 -# which includes a patch to fix installation on POWER -$EB $openblas_include_easyblocks_from_pr --from-pr 15885 OpenBLAS-0.3.15-GCC-10.3.0.eb --robot -# ignore failing FlexiBLAS tests when building on POWER; -# some tests are failing due to a segmentation fault due to "invalid memory reference", -# see also https://github.com/easybuilders/easybuild-easyconfigs/pull/12476; -# using -fstack-protector-strong -fstack-clash-protection should fix that, -# but it doesn't for some reason when building for ppc64le/generic... -if [ "${EESSI_SOFTWARE_SUBDIR}" = "ppc64le/generic" ]; then - $EB FlexiBLAS-3.0.4-GCC-10.3.0.eb --ignore-test-failure -else - $EB FlexiBLAS-3.0.4-GCC-10.3.0.eb -fi + echo_green "All set, let's start installing some software with EasyBuild v${eb_version} in ${EASYBUILD_INSTALLPATH}..." + + for gen in '2021a'; do + + es="eessi-${EESSI_PILOT_VERSION}-eb-${eb_version}-${gen}.yml" -$EB SciPy-bundle-2021.05-foss-2021a.eb --robot -check_exit_code $? "${ok_msg}" "${fail_msg}" + if [ -f ${es} ]; then + echo_green "Feeding easystack file ${es} to EasyBuild..." + + ${EB} --easystack ${TOPDIR}/${es} -M && ${EB} --easystack ${TOPDIR}/${es} --robot + else + fatal_error "Easystack file ${es} not found!" + fi + done + +done ### add packages here diff --git a/eessi-2023.04-eb-4.7.2-2021a.yml b/eessi-2023.04-eb-4.7.2-2021a.yml new file mode 100644 index 0000000000..9b1312ba9a --- /dev/null +++ b/eessi-2023.04-eb-4.7.2-2021a.yml @@ -0,0 +1,6 @@ +easyconfigs: + - GCC-10.3.0 + - CMake-3.20.1-GCCcore-10.3.0.eb: + options: + include-easyblocks-from-pr: 2248 + - foss-2021a From b7870afd2e543cd19a07b4cafb94a9e1633b71b0 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 14 Jun 2023 08:24:00 +0200 Subject: [PATCH 016/698] implement pre-configure hook for OpenBLAS to use DYNAMIC_ARCH=1 when building for a generic CPU target --- eb_hooks.py | 56 +++++++++++++++++++++++++++++++++-------------------- 1 file changed, 35 insertions(+), 21 deletions(-) diff --git a/eb_hooks.py b/eb_hooks.py index 2fba925b01..787e990e75 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -11,6 +11,13 @@ from easybuild.tools.systemtools import AARCH64, POWER, X86_64, get_cpu_architecture, get_cpu_features from easybuild.tools.toolchain.compiler import OPTARCH_GENERIC +# prefer importing LooseVersion from easybuild.tools, but fall back to distuils in case EasyBuild <= 4.7.0 is used +try: + from easybuild.tools import LooseVersion +except ImportError: + from distutils.version import LooseVersion + + EESSI_RPATH_OVERRIDE_ATTR = 'orig_rpath_override_dirs' @@ -56,13 +63,6 @@ def parse_hook(ec, *args, **kwargs): PARSE_HOOKS[ec.name](ec, eprefix) -def pre_configure_hook(self, *args, **kwargs): - """Main pre-configure hook: trigger custom functions based on software name.""" - - if self.name in PRE_CONFIGURE_HOOKS: - PRE_CONFIGURE_HOOKS[self.name](self, *args, **kwargs) - - def pre_prepare_hook(self, *args, **kwargs): """Main pre-prepare hook: trigger custom functions.""" @@ -91,7 +91,7 @@ def pre_prepare_hook(self, *args, **kwargs): mpi_family, rpath_override_dirs) -def gcc_postprepare(self, *args, **kwargs): +def post_prepare_hook_gcc_prefixed_ld_rpath_wrapper(self, *args, **kwargs): """ Post-configure hook for GCCcore: - copy RPATH wrapper script for linker commands to also have a wrapper in place with system type prefix like 'x86_64-pc-linux-gnu' @@ -121,6 +121,7 @@ def gcc_postprepare(self, *args, **kwargs): else: raise EasyBuildError("GCCcore-specific hook triggered for non-GCCcore easyconfig?!") + def post_prepare_hook(self, *args, **kwargs): """Main post-prepare hook: trigger custom functions.""" @@ -134,7 +135,7 @@ def post_prepare_hook(self, *args, **kwargs): POST_PREPARE_HOOKS[self.name](self, *args, **kwargs) -def cgal_toolchainopts_precise(ec, eprefix): +def parse_hook_cgal_toolchainopts_precise(ec, eprefix): """Enable 'precise' rather than 'strict' toolchain option for CGAL on POWER.""" if ec.name == 'CGAL': if get_cpu_architecture() == POWER: @@ -147,7 +148,7 @@ def cgal_toolchainopts_precise(ec, eprefix): raise EasyBuildError("CGAL-specific hook triggered for non-CGAL easyconfig?!") -def fontconfig_add_fonts(ec, eprefix): +def parse_hook_fontconfig_add_fonts(ec, eprefix): """Inject --with-add-fonts configure option for fontconfig.""" if ec.name == 'fontconfig': # make fontconfig aware of fonts included with compat layer @@ -158,7 +159,7 @@ def fontconfig_add_fonts(ec, eprefix): raise EasyBuildError("fontconfig-specific hook triggered for non-fontconfig easyconfig?!") -def ucx_eprefix(ec, eprefix): +def parse_hook_ucx_eprefix(ec, eprefix): """Make UCX aware of compatibility layer via additional configuration options.""" if ec.name == 'UCX': ec.update('configopts', '--with-sysroot=%s' % eprefix) @@ -174,7 +175,19 @@ def pre_configure_hook(self, *args, **kwargs): PRE_CONFIGURE_HOOKS[self.name](self, *args, **kwargs) -def libfabric_disable_psm3_x86_64_generic(self, *args, **kwargs): +def pre_configure_hook_openblas_optarch_generic(self, *args, **kwargs): + """ + Pre-configure hook for OpenBLAS: add DYNAMIC_ARCH=1 to build/test/install options when using --optarch=GENERIC + """ + if self.name == 'OpenBLAS': + if build_option('optarch') == OPTARCH_GENERIC: + for step in ('build', 'test', 'install'): + self.cfg.update(f'{step}opts', "DYNAMIC_ARCH=1") + else: + raise EasyBuildError("OpenBLAS-specific hook triggered for non-OpenBLAS easyconfig?!") + + +def pre_configure_hook_libfabric_disable_psm3_x86_64_generic(self, *args, **kwargs): """Add --disable-psm3 to libfabric configure options when building with --optarch=GENERIC on x86_64.""" if self.name == 'libfabric': if get_cpu_architecture() == X86_64: @@ -187,7 +200,7 @@ def libfabric_disable_psm3_x86_64_generic(self, *args, **kwargs): raise EasyBuildError("libfabric-specific hook triggered for non-libfabric easyconfig?!") -def metabat_preconfigure(self, *args, **kwargs): +def pre_configure_hook_metabat_filtered_zlib_dep(self, *args, **kwargs): """ Pre-configure hook for MetaBAT: - take into account that zlib is a filtered dependency, @@ -201,7 +214,7 @@ def metabat_preconfigure(self, *args, **kwargs): raise EasyBuildError("MetaBAT-specific hook triggered for non-MetaBAT easyconfig?!") -def wrf_preconfigure(self, *args, **kwargs): +def pre_configure_hook_wrf_aarch64(self, *args, **kwargs): """ Pre-configure hook for WRF: - patch arch/configure_new.defaults so building WRF with foss toolchain works on aarch64 @@ -217,17 +230,18 @@ def wrf_preconfigure(self, *args, **kwargs): PARSE_HOOKS = { - 'CGAL': cgal_toolchainopts_precise, - 'fontconfig': fontconfig_add_fonts, - 'UCX': ucx_eprefix, + 'CGAL': parse_hook_cgal_toolchainopts_precise, + 'fontconfig': parse_hook_fontconfig_add_fonts, + 'UCX': parse_hook_ucx_eprefix, } POST_PREPARE_HOOKS = { - 'GCCcore': gcc_postprepare, + 'GCCcore': post_prepare_hook_gcc_prefixed_ld_rpath_wrapper, } PRE_CONFIGURE_HOOKS = { - 'libfabric': libfabric_disable_psm3_x86_64_generic, - 'MetaBAT': metabat_preconfigure, - 'WRF': wrf_preconfigure, + 'libfabric': pre_configure_hook_libfabric_disable_psm3_x86_64_generic, + 'MetaBAT': pre_configure_hook_metabat_filtered_zlib_dep, + 'OpenBLAS': pre_configure_hook_openblas_optarch_generic, + 'WRF': pre_configure_hook_wrf_aarch64, } From a4790b442d2f44b84f3be1bb1f025ed44247586c Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 14 Jun 2023 17:20:42 +0200 Subject: [PATCH 017/698] consistently use ${eb_version} rather than ${REQ_EB_VERSION} --- EESSI-pilot-install-software.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/EESSI-pilot-install-software.sh b/EESSI-pilot-install-software.sh index f58903f8cd..74887db93b 100755 --- a/EESSI-pilot-install-software.sh +++ b/EESSI-pilot-install-software.sh @@ -140,7 +140,7 @@ fi for eb_version in '4.7.2'; do # load EasyBuild module (will be installed if it's not available yet) - source ${TOPDIR}/load_easybuild_module.sh ${REQ_EB_VERSION} + source ${TOPDIR}/load_easybuild_module.sh ${eb_version} echo_green "All set, let's start installing some software with EasyBuild v${eb_version} in ${EASYBUILD_INSTALLPATH}..." From 9cdc38e34f6b00ce49b2ac1b24b82c473e028433 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 14 Jun 2023 17:24:09 +0200 Subject: [PATCH 018/698] rename easystack file for EESSI 2023.06 to use correct EESSI version --- ...2023.04-eb-4.7.2-2021a.yml => eessi-2023.06-eb-4.7.2-2021a.yml | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename eessi-2023.04-eb-4.7.2-2021a.yml => eessi-2023.06-eb-4.7.2-2021a.yml (100%) diff --git a/eessi-2023.04-eb-4.7.2-2021a.yml b/eessi-2023.06-eb-4.7.2-2021a.yml similarity index 100% rename from eessi-2023.04-eb-4.7.2-2021a.yml rename to eessi-2023.06-eb-4.7.2-2021a.yml From 64132649925ce3f040a4551589eeef8f9df9c0c3 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 14 Jun 2023 18:57:54 +0200 Subject: [PATCH 019/698] update check_missing_installations.sh to take path to easystack file as an argument, and hoist it into for loop that iterates over all easystack files --- EESSI-pilot-install-software.sh | 6 +++--- check_missing_installations.sh | 11 +++++------ 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/EESSI-pilot-install-software.sh b/EESSI-pilot-install-software.sh index 74887db93b..f2d50dfe91 100755 --- a/EESSI-pilot-install-software.sh +++ b/EESSI-pilot-install-software.sh @@ -151,7 +151,9 @@ for eb_version in '4.7.2'; do if [ -f ${es} ]; then echo_green "Feeding easystack file ${es} to EasyBuild..." - ${EB} --easystack ${TOPDIR}/${es} -M && ${EB} --easystack ${TOPDIR}/${es} --robot + ${EB} --easystack ${TOPDIR}/${es} --missing && ${EB} --easystack ${TOPDIR}/${es} --robot + + $TOPDIR/check_missing_installations.sh ${TOPDIR}/${es} else fatal_error "Easystack file ${es} not found!" fi @@ -170,7 +172,5 @@ fi $TOPDIR/update_lmod_cache.sh ${EPREFIX} ${EASYBUILD_INSTALLPATH} -$TOPDIR/check_missing_installations.sh - echo ">> Cleaning up ${TMPDIR}..." rm -r ${TMPDIR} diff --git a/check_missing_installations.sh b/check_missing_installations.sh index 4a5316c09f..3627d1d0b5 100755 --- a/check_missing_installations.sh +++ b/check_missing_installations.sh @@ -1,6 +1,6 @@ #!/bin/bash # -# Script to check for missing installations in EESSI pilot software stack (version 2021.12) +# Script to check for missing installations in EESSI pilot software stack (version 2023.06) # # author: Kenneth Hoste (@boegel) # author: Thomas Roeblitz (@trz42) @@ -10,10 +10,11 @@ TOPDIR=$(dirname $(realpath $0)) -if [ -z ${EESSI_PILOT_VERSION} ]; then - echo "ERROR: \${EESSI_PILOT_VERSION} must be set to run $0!" >&2 +if [ $# -ne 1 ]; then + echo "ERROR: Usage: $0 " >&2 exit 1 fi +easystack=$1 LOCAL_TMPDIR=$(mktemp -d) @@ -23,9 +24,7 @@ source $TOPDIR/configure_easybuild echo ">> Checking for missing installations in ${EASYBUILD_INSTALLPATH}..." eb_missing_out=$LOCAL_TMPDIR/eb_missing.out -# we need to use --from-pr to pull in some easyconfigs that are not available in EasyBuild version being used -# PR #16531: Nextflow-22.10.1.eb -${EB:-eb} --from-pr 16531 --easystack eessi-${EESSI_PILOT_VERSION}.yml --experimental --missing 2>&1 | tee ${eb_missing_out} +${EB:-eb} --easystack ${easystack} --missing 2>&1 | tee ${eb_missing_out} exit_code=${PIPESTATUS[0]} ok_msg="Command 'eb --missing ...' succeeded, analysing output..." From 2b6d630c36eb078a268548b812af98143c15da8f Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 14 Jun 2023 19:14:15 +0200 Subject: [PATCH 020/698] update test workflow to test with version 2023.06 of EESSI pilot repo --- .github/workflows/test_eessi.yml | 17 ++++++++--------- .github/workflows/tests_scripts.yml | 2 +- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/.github/workflows/test_eessi.yml b/.github/workflows/test_eessi.yml index 04195dd619..65415f87fc 100644 --- a/.github/workflows/test_eessi.yml +++ b/.github/workflows/test_eessi.yml @@ -10,7 +10,7 @@ jobs: fail-fast: false matrix: EESSI_VERSION: - - 2021.12 + - 2023.06 EESSI_SOFTWARE_SUBDIR: - aarch64/generic - aarch64/graviton2 @@ -20,6 +20,8 @@ jobs: - x86_64/intel/haswell - x86_64/intel/skylake_avx512 - x86_64/generic + EASYSTACK_FILE: + - eessi-2023.06-eb-4.7.2-2021a.yml steps: - name: Check out software-layer repository uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # v3.1.0 @@ -41,7 +43,7 @@ jobs: export EESSI_SOFTWARE_SUBDIR=${{matrix.EESSI_SOFTWARE_SUBDIR}} env | grep ^EESSI | sort echo "just run check_missing_installations.sh (should use eessi-${{matrix.EESSI_VERSION}}.yml)" - ./check_missing_installations.sh + ./check_missing_installations.sh ${{matrix.EASYSTACK_FILE}} - name: Test check_missing_installations.sh with missing package (GCC/8.3.0) run: | @@ -52,18 +54,15 @@ jobs: export EESSI_OS_TYPE=linux export EESSI_SOFTWARE_SUBDIR=${{matrix.EESSI_SOFTWARE_SUBDIR}} env | grep ^EESSI | sort - echo "modify eessi-${{matrix.EESSI_VERSION}}.yml by adding a missing package (GCC/8.3.0)" - echo " GCC:" >> eessi-${{matrix.EESSI_VERSION}}.yml - echo " toolchains:" >> eessi-${{matrix.EESSI_VERSION}}.yml - echo " SYSTEM:" >> eessi-${{matrix.EESSI_VERSION}}.yml - echo " versions: '8.3.0'" >> eessi-${{matrix.EESSI_VERSION}}.yml - tail -n 4 eessi-${{matrix.EESSI_VERSION}}.yml + echo "modify easystack file by adding a missing package (GCC/8.3.0)" + echo " - GCC-8.3.0:" >> ${{matrix.EASYSTACK_FILE}} + tail -n 5 ${{matrix.EASYSTACK_FILE}} # note, check_missing_installations.sh exits 1 if a package was # missing, which is intepreted as false (exit code based, not # boolean logic), hence when the script exits 0 if no package was # missing it is interpreted as true, thus the test did not capture # the missing package - if ./check_missing_installations.sh; then + if ./check_missing_installations.sh ${{matrix.EASYSTACK_FILE}}; then echo "did NOT capture missing package; test FAILED" exit 1 else diff --git a/.github/workflows/tests_scripts.yml b/.github/workflows/tests_scripts.yml index 5c0b3893ae..8ad4928993 100644 --- a/.github/workflows/tests_scripts.yml +++ b/.github/workflows/tests_scripts.yml @@ -92,6 +92,6 @@ jobs: # since create_directory_tarballs.sh must be accessible from within build container cp -a * /tmp/ cd /tmp - ./build_container.sh run /tmp/$USER/EESSI /tmp/create_directory_tarballs.sh 2021.12 + ./build_container.sh run /tmp/$USER/EESSI /tmp/create_directory_tarballs.sh 2023.06 # check if tarballs have been produced ls -l *.tar.gz From a6b5bdef363abf7a35e5e315adfd992ea19b2c33 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 15 Jun 2023 22:46:54 +0200 Subject: [PATCH 021/698] update bot configuration for EESSI 2023.06 --- bot/bot-eessi-aws-citc.cfg | 149 +++++++++++++++++++++++++++++-------- 1 file changed, 116 insertions(+), 33 deletions(-) diff --git a/bot/bot-eessi-aws-citc.cfg b/bot/bot-eessi-aws-citc.cfg index 5b3ad34612..2766104d62 100644 --- a/bot/bot-eessi-aws-citc.cfg +++ b/bot/bot-eessi-aws-citc.cfg @@ -21,7 +21,23 @@ app_name = eessi-bot-citc-aws installation_id = 33078935 # path to the private key that was generated when the GitHub App was registered -private_key = /mnt/shared/home/bot/eessi-bot-software-layer/eessi-bot-citc-aws-private-key.pem +private_key = /mnt/shared/home/bot/eessi-bot-software-layer/eessi-bot-citc-aws.2023-01-12.private-key.pem + + +[bot_control] +# which GH accounts have the permission to send commands to the bot +# if value is left/empty everyone can send commands +# value can be a space delimited list of GH accounts +command_permission = boegel trz42 bedroge + +# format of the response when processing bot commands +command_response_fmt = +
Updates by the bot instance {app_name} + (click for details) + + {comment_response} + {comment_result} +
[buildenv] @@ -35,7 +51,7 @@ container_cachedir = /mnt/shared/home/bot/eessi-bot-software-layer/containers-ca # it may happen that we need to customize some CVMFS configuration # the value of cvmfs_customizations is a dictionary which maps a file # name to an entry that needs to be added to that file -cvmfs_customizations = {} +# cvmfs_customizations = {} # if compute nodes have no internet connection, we need to set http(s)_proxy # or commands such as pip3 cannot download software from package repositories @@ -52,7 +68,7 @@ jobs_base_dir = /mnt/shared/home/bot/eessi-bot-software-layer/jobs # useful/needed if some tool is not provided as system-wide package # (read by bot and handed over to build_job_script via parameter # --load-modules) -load_modules = +# load_modules = # PATH to temporary directory on build node ... ends up being used for # for example, EESSI_TMPDIR --> /tmp/$USER/EESSI @@ -78,22 +94,93 @@ submit_command = /usr/bin/sbatch # value can be a space delimited list of GH accounts build_permission = boegel trz42 bedroge +# template for comment when user who set a label has no permission to trigger build jobs +no_build_permission_comment = Label `bot:build` has been set by user `{build_labeler}`, but only users `{build_permission_users}` have permission to trigger the action + + +[deploycfg] +# script for uploading built software packages +tarball_upload_script = /mnt/shared/home/bot/eessi-bot-software-layer/scripts/eessi-upload-to-staging + +# URL to S3/minio bucket +# if attribute is set, bucket_base will be constructed as follows +# bucket_base=${endpoint_url}/${bucket_name} +# otherwise, bucket_base will be constructed as follows +# bucket_base=https://${bucket_name}.s3.amazonaws.com +# - The former variant is used for non AWS S3 services, eg, minio, or when +# the bucket name is not provided in the hostname (see latter case). +# - The latter variant is used for AWS S3 services. +# endpoint_url = URL_TO_S3_SERVER + +# bucket name +bucket_name = eessi-staging + +# upload policy: defines what policy is used for uploading built artefacts +# to an S3 bucket +# 'all' ..: upload all artefacts (mulitple uploads of the same artefact possible) +# 'latest': for each build target (eessi-VERSION-{software,init,compat}-OS-ARCH) +# only upload the latest built artefact +# 'once' : only once upload any built artefact for the build target +# 'none' : do not upload any built artefacts +upload_policy = once + +# which GH account has the permission to trigger the deployment (by setting +# the label 'bot:deploy' (apparently this cannot be restricted on GitHub) +# if value is left/empty everyone can trigger the deployment +# value can be a space delimited list of GH accounts +deploy_permission = boegel trz42 bedroge + +# template for comment when user who set a label has no permission to trigger deploying tarballs +no_deploy_permission_comment = Label `bot:deploy` has been set by user `{deploy_labeler}`, but only users `{deploy_permission_users}` have permission to trigger the action + + [architecturetargets] # defines both for which architectures the bot will build # and what submission parameters shall be used +# 5 c4.2xlarge haswell 8 vCPU, 15 GiB RAM (1 + generic) +# 2 c4.4xlarge haswell 16 vCPU, 30 GiB RAM +# 5 c5.2xlarge skylake_avx512 8 vCPU, 16 GiB RAM (1) +# 1 c5.4xlarge skylake_avx512 16 vCPU, 32 GiB RAM +# 5 c5a.2xlarge zen2 8 vCPU, 16 GiB RAM (1) +# 1 c5a.4xlarge zen2 16 vCPU, 32 GiB RAM +# 5 c5d.2xlarge skylake_avx512 8 vCPU, 16 GiB RAM + 200 GB NVMe +# 5 c6a.2xlarge zen3 8 vCPU, 16 GiB RAM (1) +# 1 c6a.4xlarge zen3 16 vCPU, 32 GiB RAM +# 5 c6g.2xlarge graviton2 8 vCPU, 16 GiB RAM (1 + generic) +# 2 c6g.4xlarge graviton2 16 vCPU, 32 GiB RAM +# 1 c6g.8xlarge graviton2 32 vCPU, 64 GiB RAM +# 1 c6i.2xlarge cascadelake 8 vCPU, 16 GiB RAM (1) +# 5 c7g.2xlarge graviton3 8 vCPU, 16 GiB RAM (1) +# 1 c7g.4xlarge graviton3 16 vCPU, 32 GiB RAM # medium instances (8 cores, 16GB RAM) #arch_target_map = { "linux/x86_64/generic" : "--constraint shape=c4.4xlarge", "linux/x86_64/intel/haswell" : "--constraint shape=c4.4xlarge", "linux/x86_64/intel/skylake_avx512" : "--constraint shape=c5.4xlarge", "linux/x86_64/amd/zen2": "--constraint shape=c5a.4xlarge", "linux/x86_64/amd/zen3" : "--constraint shape=c6a.4xlarge", "linux/aarch64/generic" : "--constraint shape=c6g.4xlarge", "linux/aarch64/graviton2" : "--constraint shape=c6g.4xlarge", "linux/aarch64/graviton3" : "--constraint shape=c7g.4xlarge"} # larger instances (16 cores, 32GB RAM) -arch_target_map = { "linux/x86_64/generic" : "--constraint shape=c4.4xlarge", "linux/x86_64/intel/haswell" : "--constraint shape=c4.4xlarge", "linux/x86_64/intel/skylake_avx512" : "--constraint shape=c5.4xlarge", "linux/x86_64/amd/zen2": "--constraint shape=c5a.4xlarge", "linux/x86_64/amd/zen3" : "--constraint shape=c6a.4xlarge", "linux/aarch64/generic" : "--constraint shape=c6g.4xlarge", "linux/aarch64/graviton2" : "--constraint shape=c6g.4xlarge", "linux/aarch64/graviton3" : "--constraint shape=c7g.4xlarge"} +arch_target_map = { + "linux/x86_64/generic" : "--constraint shape=c4.4xlarge", + "linux/x86_64/intel/haswell" : "--constraint shape=c4.4xlarge", + "linux/x86_64/intel/skylake_avx512" : "--constraint shape=c5.4xlarge", + "linux/x86_64/amd/zen2": "--constraint shape=c5a.4xlarge", + "linux/x86_64/amd/zen3" : "--constraint shape=c6a.4xlarge", + "linux/aarch64/generic" : "--constraint shape=c6g.4xlarge", + "linux/aarch64/graviton2" : "--constraint shape=c6g.4xlarge", + "linux/aarch64/graviton3" : "--constraint shape=c7g.4xlarge" } [repo_targets] # defines for which repository a arch_target should be build for # # only building for repository EESSI-pilot -repo_target_map = { "linux/x86_64/generic" : ["EESSI-pilot"], "linux/x86_64/intel/haswell" : ["EESSI-pilot"], "linux/x86_64/intel/skylake_avx512" : ["EESSI-pilot"], "linux/x86_64/amd/zen2": ["EESSI-pilot"], "linux/x86_64/amd/zen3" : ["EESSI-pilot"], "linux/aarch64/generic" : ["EESSI-pilot"], "linux/aarch64/graviton2" : ["EESSI-pilot"], "linux/aarch64/graviton3" : ["EESSI-pilot"]} +repo_target_map = { + "linux/x86_64/generic" : ["eessi-2021.12","eessi-2023.04","eessi-2023.06-compat","eessi-2023.06-software"], + "linux/x86_64/intel/haswell" : ["eessi-2021.12","eessi-2023.04","eessi-2023.06-compat","eessi-2023.06-software"], + "linux/x86_64/intel/skylake_avx512" : ["eessi-2021.12","eessi-2023.04","eessi-2023.06-compat","eessi-2023.06-software"], + "linux/x86_64/amd/zen2" : ["eessi-2021.12","eessi-2023.04","eessi-2023.06-compat","eessi-2023.06-software"], + "linux/x86_64/amd/zen3" : ["eessi-2021.12","eessi-2023.04","eessi-2023.06-compat","eessi-2023.06-software"], + "linux/aarch64/generic" : ["eessi-2021.12","eessi-2023.04","eessi-2023.06-compat","eessi-2023.06-software"], + "linux/aarch64/graviton2" : ["eessi-2021.12","eessi-2023.04","eessi-2023.06-compat","eessi-2023.06-software"], + "linux/aarch64/graviton3" : ["eessi-2021.12","eessi-2023.04","eessi-2023.06-compat","eessi-2023.06-software"] } # points to definition of repositories (default EESSI-pilot defined by build container) -repos_cfg_dir = /mnt/shared/home/bot/eessi-bot-software-layer/cfg-bundles +repos_cfg_dir = /mnt/shared/home/bot/eessi-bot-software-layer/repos # configuration for event handler which receives events from a GitHub repository. [event_handler] @@ -118,34 +205,30 @@ poll_interval = 60 # full path to the command for manipulating existing jobs scontrol_command = /usr/bin/scontrol -[deploycfg] -# script for uploading built software packages -tarball_upload_script = /mnt/shared/home/bot/eessi-bot-software-layer/scripts/eessi-upload-to-staging -# URL to S3/minio bucket -# if attribute is set, bucket_base will be constructed as follows -# bucket_base=${endpoint_url}/${bucket_name} -# otherwise, bucket_base will be constructed as follows -# bucket_base=https://${bucket_name}.s3.amazonaws.com -# - The former variant is used for non AWS S3 services, eg, minio, or when -# the bucket name is not provided in the hostname (see latter case). -# - The latter variant is used for AWS S3 services. -#endpoint_url = URL_TO_S3_SERVER +# variable 'comment' under 'submitted_job_comments' should not be changed as there are regular expression patterns matching it +[submitted_job_comments] +initial_comment = New job on instance `{app_name}` for architecture `{arch_name}` for repository `{repo_id}` in job dir `{symlink}` +awaits_release = job id `{job_id}` awaits release by job manager -# bucket name -bucket_name = eessi-staging -# upload policy: defines what policy is used for uploading built artefacts -# to an S3 bucket -# 'all' ..: upload all artefacts (mulitple uploads of the same artefact possible) -# 'latest': for each build target (eessi-VERSION-{software,init,compat}-OS-ARCH) -# only upload the latest built artefact -# 'once' : only once upload any built artefact for the build target -# 'none' : do not upload any built artefacts -upload_policy = once +[new_job_comments] +awaits_launch = job awaits launch by Slurm scheduler -# which GH account has the permission to trigger the deployment (by setting -# the label 'bot:deploy' (apparently this cannot be restricted on GitHub) -# if value is left/empty everyone can trigger the deployment -# value can be a space delimited list of GH accounts -deploy_permission = boegel trz42 bedroge + +[running_job_comments] +running_job = job `{job_id}` is running + + +[finished_job_comments] +success = :grin: SUCCESS tarball `{tarball_name}` ({tarball_size} GiB) in job dir +failure = :cry: FAILURE +no_slurm_out = No slurm output `{slurm_out}` in job dir +slurm_out = Found slurm output `{slurm_out}` in job dir +missing_modules = Slurm output lacks message "No missing modules!". +no_tarball_message = Slurm output lacks message about created tarball. +no_matching_tarball = No tarball matching `{tarball_pattern}` found in job dir. +multiple_tarballs = Found {num_tarballs} tarballs in job dir - only 1 matching `{tarball_pattern}` expected. +job_result_comment_fmt =
{summary} _(click triangle for detailed information)_Details:{details}
Artefacts:{artefacts}
+job_result_details_item_fmt =
    {item} +job_result_artefacts_item_fmt =
  • {item}
  • From cf85694390f4c44d6461e386f8ad052a6d89cc00 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 15 Jun 2023 23:01:06 +0200 Subject: [PATCH 022/698] drop 2023.04 repo + use aarch64/neoverse_n1 and aarch64/neoverse_v1 instead of linux/aarch64/graviton* --- bot/bot-eessi-aws-citc.cfg | 34 ++++++++++++++++------------------ 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/bot/bot-eessi-aws-citc.cfg b/bot/bot-eessi-aws-citc.cfg index 2766104d62..dca81ef2ab 100644 --- a/bot/bot-eessi-aws-citc.cfg +++ b/bot/bot-eessi-aws-citc.cfg @@ -146,15 +146,13 @@ no_deploy_permission_comment = Label `bot:deploy` has been set by user `{deploy_ # 5 c5d.2xlarge skylake_avx512 8 vCPU, 16 GiB RAM + 200 GB NVMe # 5 c6a.2xlarge zen3 8 vCPU, 16 GiB RAM (1) # 1 c6a.4xlarge zen3 16 vCPU, 32 GiB RAM -# 5 c6g.2xlarge graviton2 8 vCPU, 16 GiB RAM (1 + generic) -# 2 c6g.4xlarge graviton2 16 vCPU, 32 GiB RAM -# 1 c6g.8xlarge graviton2 32 vCPU, 64 GiB RAM +# 5 c6g.2xlarge neoverse_n1 8 vCPU, 16 GiB RAM (1 + generic) +# 2 c6g.4xlarge neoverse_n1 16 vCPU, 32 GiB RAM +# 1 c6g.8xlarge neoverse_n1 32 vCPU, 64 GiB RAM # 1 c6i.2xlarge cascadelake 8 vCPU, 16 GiB RAM (1) -# 5 c7g.2xlarge graviton3 8 vCPU, 16 GiB RAM (1) -# 1 c7g.4xlarge graviton3 16 vCPU, 32 GiB RAM -# medium instances (8 cores, 16GB RAM) -#arch_target_map = { "linux/x86_64/generic" : "--constraint shape=c4.4xlarge", "linux/x86_64/intel/haswell" : "--constraint shape=c4.4xlarge", "linux/x86_64/intel/skylake_avx512" : "--constraint shape=c5.4xlarge", "linux/x86_64/amd/zen2": "--constraint shape=c5a.4xlarge", "linux/x86_64/amd/zen3" : "--constraint shape=c6a.4xlarge", "linux/aarch64/generic" : "--constraint shape=c6g.4xlarge", "linux/aarch64/graviton2" : "--constraint shape=c6g.4xlarge", "linux/aarch64/graviton3" : "--constraint shape=c7g.4xlarge"} -# larger instances (16 cores, 32GB RAM) +# 5 c7g.2xlarge neoverse_v1 8 vCPU, 16 GiB RAM (1) +# 1 c7g.4xlarge neoverse_v1 16 vCPU, 32 GiB RAM +# larger instances (*.4xlarge => 16 cores, 32GB RAM) arch_target_map = { "linux/x86_64/generic" : "--constraint shape=c4.4xlarge", "linux/x86_64/intel/haswell" : "--constraint shape=c4.4xlarge", @@ -162,22 +160,22 @@ arch_target_map = { "linux/x86_64/amd/zen2": "--constraint shape=c5a.4xlarge", "linux/x86_64/amd/zen3" : "--constraint shape=c6a.4xlarge", "linux/aarch64/generic" : "--constraint shape=c6g.4xlarge", - "linux/aarch64/graviton2" : "--constraint shape=c6g.4xlarge", - "linux/aarch64/graviton3" : "--constraint shape=c7g.4xlarge" } + "linux/aarch64/neoverse_n1" : "--constraint shape=c6g.4xlarge", + "linux/aarch64/neoverse_v1" : "--constraint shape=c7g.4xlarge" } [repo_targets] # defines for which repository a arch_target should be build for # # only building for repository EESSI-pilot repo_target_map = { - "linux/x86_64/generic" : ["eessi-2021.12","eessi-2023.04","eessi-2023.06-compat","eessi-2023.06-software"], - "linux/x86_64/intel/haswell" : ["eessi-2021.12","eessi-2023.04","eessi-2023.06-compat","eessi-2023.06-software"], - "linux/x86_64/intel/skylake_avx512" : ["eessi-2021.12","eessi-2023.04","eessi-2023.06-compat","eessi-2023.06-software"], - "linux/x86_64/amd/zen2" : ["eessi-2021.12","eessi-2023.04","eessi-2023.06-compat","eessi-2023.06-software"], - "linux/x86_64/amd/zen3" : ["eessi-2021.12","eessi-2023.04","eessi-2023.06-compat","eessi-2023.06-software"], - "linux/aarch64/generic" : ["eessi-2021.12","eessi-2023.04","eessi-2023.06-compat","eessi-2023.06-software"], - "linux/aarch64/graviton2" : ["eessi-2021.12","eessi-2023.04","eessi-2023.06-compat","eessi-2023.06-software"], - "linux/aarch64/graviton3" : ["eessi-2021.12","eessi-2023.04","eessi-2023.06-compat","eessi-2023.06-software"] } + "linux/x86_64/generic" : ["eessi-2021.12","eessi-2023.06-compat","eessi-2023.06-software"], + "linux/x86_64/intel/haswell" : ["eessi-2021.12","eessi-2023.06-compat","eessi-2023.06-software"], + "linux/x86_64/intel/skylake_avx512" : ["eessi-2021.12","eessi-2023.06-compat","eessi-2023.06-software"], + "linux/x86_64/amd/zen2" : ["eessi-2021.12","eessi-2023.06-compat","eessi-2023.06-software"], + "linux/x86_64/amd/zen3" : ["eessi-2021.12","eessi-2023.06-compat","eessi-2023.06-software"], + "linux/aarch64/generic" : ["eessi-2021.12","eessi-2023.06-compat","eessi-2023.06-software"], + "linux/aarch64/neoverse_n1" : ["eessi-2021.12","eessi-2023.06-compat","eessi-2023.06-software"], + "linux/aarch64/neoverse_v1" : ["eessi-2021.12","eessi-2023.06-compat","eessi-2023.06-software"] } # points to definition of repositories (default EESSI-pilot defined by build container) repos_cfg_dir = /mnt/shared/home/bot/eessi-bot-software-layer/repos From 633de6a2349286a604ec85ecf51af30e4446e9b2 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 16 Jun 2023 17:49:23 +0200 Subject: [PATCH 023/698] bump EESSI pilot version to 2023.06 + update create_directory_tarballs.sh script to use '2023.06' branch of EESSI/software-layer repo --- create_directory_tarballs.sh | 2 +- init/eessi_defaults | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/create_directory_tarballs.sh b/create_directory_tarballs.sh index 70e666f871..4465465082 100755 --- a/create_directory_tarballs.sh +++ b/create_directory_tarballs.sh @@ -1,6 +1,6 @@ #!/bin/bash -SOFTWARE_LAYER_TARBALL_URL=https://github.com/EESSI/software-layer/tarball/main +SOFTWARE_LAYER_TARBALL_URL=https://github.com/EESSI/software-layer/tarball/2023.06 set -eo pipefail diff --git a/init/eessi_defaults b/init/eessi_defaults index f482cbc269..0143dc38ab 100644 --- a/init/eessi_defaults +++ b/init/eessi_defaults @@ -9,4 +9,4 @@ # export EESSI_CVMFS_REPO="${EESSI_CVMFS_REPO_OVERRIDE:=/cvmfs/pilot.eessi-hpc.org}" -export EESSI_PILOT_VERSION="${EESSI_PILOT_VERSION_OVERRIDE:=2021.12}" +export EESSI_PILOT_VERSION="${EESSI_PILOT_VERSION_OVERRIDE:=2023.06}" From ddbaaab7c3386b20656c6d27e0ad654f0d217554 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 16 Jun 2023 17:57:18 +0200 Subject: [PATCH 024/698] also run tests for README and scripts for non-main branches --- .github/workflows/tests_readme.yml | 2 -- .github/workflows/tests_scripts.yml | 2 -- 2 files changed, 4 deletions(-) diff --git a/.github/workflows/tests_readme.yml b/.github/workflows/tests_readme.yml index 5c6d0318d4..ac906125ab 100644 --- a/.github/workflows/tests_readme.yml +++ b/.github/workflows/tests_readme.yml @@ -7,8 +7,6 @@ on: - init/eessi_defaults pull_request: - branches: - - main paths: - README.md - init/eessi_defaults diff --git a/.github/workflows/tests_scripts.yml b/.github/workflows/tests_scripts.yml index 5c0b3893ae..81a3633b72 100644 --- a/.github/workflows/tests_scripts.yml +++ b/.github/workflows/tests_scripts.yml @@ -13,8 +13,6 @@ on: - update_lmod_cache.sh pull_request: - branches: - - main paths: - build_container.sh - create_directory_tarballs.sh From 60d60a34070f6bf892e8f3451c9078a3c7ed59ee Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 16 Jun 2023 17:58:29 +0200 Subject: [PATCH 025/698] update README for 2023.06 --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index daf02eebc2..e24de45b0e 100644 --- a/README.md +++ b/README.md @@ -9,14 +9,14 @@ See also https://eessi.github.io/docs/software_layer. You can set up your environment by sourcing the init script: ``` -$ source /cvmfs/pilot.eessi-hpc.org/versions/2021.12/init/bash -Found EESSI pilot repo @ /cvmfs/pilot.eessi-hpc.org/versions/2021.12! +$ source /cvmfs/pilot.eessi-hpc.org/versions/2023.06/init/bash +Found EESSI pilot repo @ /cvmfs/pilot.eessi-hpc.org/versions/2023.06! Derived subdirectory for software layer: x86_64/intel/haswell Using x86_64/intel/haswell subdirectory for software layer (HARDCODED) Initializing Lmod... -Prepending /cvmfs/pilot.eessi-hpc.org/versions/2021.12/software/x86_64/intel/haswell/modules/all to $MODULEPATH... +Prepending /cvmfs/pilot.eessi-hpc.org/versions/2023.06/software/x86_64/intel/haswell/modules/all to $MODULEPATH... Environment set up to use EESSI pilot software stack, have fun! -[EESSI pilot 2021.12] $ +[EESSI pilot 2023.06] $ ``` ### Accessing EESSI via a container From 074d7a1847ab2353e43045978dec6acd72a95cb1 Mon Sep 17 00:00:00 2001 From: Thomas Roeblitz Date: Sun, 18 Jun 2023 20:06:08 +0200 Subject: [PATCH 026/698] update check-result.sh to state tested in NESSI PR125 --- bot/check-result.sh | 429 ++++++++++++++++++++++++++++++++++++-------- 1 file changed, 351 insertions(+), 78 deletions(-) diff --git a/bot/check-result.sh b/bot/check-result.sh index e28ae4e38e..04a23962e2 100755 --- a/bot/check-result.sh +++ b/bot/check-result.sh @@ -4,8 +4,8 @@ # Intended use is that it is called by a (batch) job running on a compute # node. # -# This script is part of the EESSI compatibility layer, see -# https://github.com/EESSI/compatibility-layer.git +# This script is part of the EESSI software layer, see +# https://github.com/EESSI/software-layer.git # # author: Thomas Roeblitz (@trz42) # @@ -38,6 +38,20 @@ TOPDIR=$(dirname $(realpath $0)) source ${TOPDIR}/../scripts/utils.sh source ${TOPDIR}/../scripts/cfg_files.sh +# defaults +export JOB_CFG_FILE="${JOB_CFG_FILE_OVERRIDE:=./cfg/job.cfg}" + +# check if ${JOB_CFG_FILE} exists +if [[ ! -r "${JOB_CFG_FILE}" ]]; then + echo_red "job config file (JOB_CFG_FILE=${JOB_CFG_FILE}) does not exist or not readable" +else + echo "bot/check-result.sh: showing ${JOB_CFG_FILE} from software-layer side" + cat ${JOB_CFG_FILE} + + echo "bot/check-result.sh: obtaining configuration settings from '${JOB_CFG_FILE}'" + cfg_load ${JOB_CFG_FILE} +fi + display_help() { echo "usage: $0 [OPTIONS]" echo " OPTIONS:" @@ -88,46 +102,61 @@ job_out=$(ls ${job_dir} | grep "${GP_slurm_out}") [[ ${VERBOSE} -ne 0 ]] && echo ">> searching for job output file(s) matching '"${GP_slurm_out}"'" [[ ${VERBOSE} -ne 0 ]] && echo " found slurm output file '"${job_out}"'" -GP_error='ERROR: ' -grep_out=$(grep "${GP_error}" ${job_dir}/${job_out}) -[[ $? -eq 0 ]] && ERROR=1 || ERROR=0 -# have to be careful to not add searched for pattern into slurm out file -[[ ${VERBOSE} -ne 0 ]] && echo ">> searching for '"${GP_error}"'" -[[ ${VERBOSE} -ne 0 ]] && echo "${grep_out}" +ERROR=-1 +if [[ ${SLURM} -eq 1 ]]; then + GP_error='ERROR: ' + grep_out=$(grep -v "^>> searching for " ${job_dir}/${job_out} | grep "${GP_error}") + [[ $? -eq 0 ]] && ERROR=1 || ERROR=0 + # have to be careful to not add searched for pattern into slurm out file + [[ ${VERBOSE} -ne 0 ]] && echo ">> searching for '"${GP_error}"'" + [[ ${VERBOSE} -ne 0 ]] && echo "${grep_out}" +fi -GP_failed='FAILED: ' -grep_out=$(grep "${GP_failed}" ${job_dir}/${job_out}) -[[ $? -eq 0 ]] && FAILED=1 || FAILED=0 -# have to be careful to not add searched for pattern into slurm out file -[[ ${VERBOSE} -ne 0 ]] && echo ">> searching for '"${GP_failed}"'" -[[ ${VERBOSE} -ne 0 ]] && echo "${grep_out}" +FAILED=-1 +if [[ ${SLURM} -eq 1 ]]; then + GP_failed='FAILED: ' + grep_out=$(grep -v "^>> searching for " ${job_dir}/${job_out} | grep "${GP_failed}") + [[ $? -eq 0 ]] && FAILED=1 || FAILED=0 + # have to be careful to not add searched for pattern into slurm out file + [[ ${VERBOSE} -ne 0 ]] && echo ">> searching for '"${GP_failed}"'" + [[ ${VERBOSE} -ne 0 ]] && echo "${grep_out}" +fi -GP_req_missing=' required modules missing:' -grep_out=$(grep "${GP_req_missing}" ${job_dir}/${job_out}) -[[ $? -eq 0 ]] && MISSING=1 || MISSING=0 -# have to be careful to not add searched for pattern into slurm out file -[[ ${VERBOSE} -ne 0 ]] && echo ">> searching for '"${GP_req_missing}"'" -[[ ${VERBOSE} -ne 0 ]] && echo "${grep_out}" +MISSING=-1 +if [[ ${SLURM} -eq 1 ]]; then + GP_req_missing=' required modules missing:' + grep_out=$(grep -v "^>> searching for " ${job_dir}/${job_out} | grep "${GP_req_missing}") + [[ $? -eq 0 ]] && MISSING=1 || MISSING=0 + # have to be careful to not add searched for pattern into slurm out file + [[ ${VERBOSE} -ne 0 ]] && echo ">> searching for '"${GP_req_missing}"'" + [[ ${VERBOSE} -ne 0 ]] && echo "${grep_out}" +fi -GP_no_missing='No missing modules!' -grep_out=$(grep "${GP_no_missing}" ${job_dir}/${job_out}) -[[ $? -eq 0 ]] && NO_MISSING=1 || NO_MISSING=0 -# have to be careful to not add searched for pattern into slurm out file -[[ ${VERBOSE} -ne 0 ]] && echo ">> searching for '"${GP_no_missing}"'" -[[ ${VERBOSE} -ne 0 ]] && echo "${grep_out}" +NO_MISSING=-1 +if [[ ${SLURM} -eq 1 ]]; then + GP_no_missing='No missing installations' + grep_out=$(grep -v "^>> searching for " ${job_dir}/${job_out} | grep "${GP_no_missing}") + [[ $? -eq 0 ]] && NO_MISSING=1 || NO_MISSING=0 + # have to be careful to not add searched for pattern into slurm out file + [[ ${VERBOSE} -ne 0 ]] && echo ">> searching for '"${GP_no_missing}"'" + [[ ${VERBOSE} -ne 0 ]] && echo "${grep_out}" +fi -GP_tgz_created="tar.gz created!" +TGZ=-1 TARBALL= -grep_out=$(grep "${GP_tgz_created}" ${job_dir}/${job_out}) -if [[ $? -eq 0 ]]; then - TGZ=1 - TARBALL=$(echo ${grep_out} | sed -e 's@^.*\(eessi[^/ ]*\) .*$@\1@') -else - TGZ=0 +if [[ ${SLURM} -eq 1 ]]; then + GP_tgz_created="\.tar\.gz created!" + grep_out=$(grep -v "^>> searching for " ${job_dir}/${job_out} | grep "${GP_tgz_created}" | sort -u) + if [[ $? -eq 0 ]]; then + TGZ=1 + TARBALL=$(echo ${grep_out} | sed -e 's@^.*\(eessi[^/ ]*\) .*$@\1@') + else + TGZ=0 + fi + # have to be careful to not add searched for pattern into slurm out file + [[ ${VERBOSE} -ne 0 ]] && echo ">> searching for '"${GP_tgz_created}"'" + [[ ${VERBOSE} -ne 0 ]] && echo "${grep_out}" fi -# have to be careful to not add searched for pattern into slurm out file -[[ ${VERBOSE} -ne 0 ]] && echo ">> searching for '"${GP_tgz_created}"'" -[[ ${VERBOSE} -ne 0 ]] && echo "${grep_out}" [[ ${VERBOSE} -ne 0 ]] && echo "SUMMARY: ${job_dir}/${job_out}" [[ ${VERBOSE} -ne 0 ]] && echo " test name : result (expected result)" @@ -147,64 +176,308 @@ if [[ ${SLURM} -eq 1 ]] && \ [[ ${TGZ} -eq 1 ]] && \ [[ ! -z ${TARBALL} ]]; then # SUCCESS - echo "[RESULT]" > ${job_result_file} - echo "summary = :grin: SUCCESS" >> ${job_result_file} - echo "details =" >> ${job_result_file} + status="SUCCESS" + summary=":grin: SUCCESS" else # FAILURE - echo "[RESULT]" > ${job_result_file} - echo "summary = :cry: FAILURE" >> ${job_result_file} - echo "details =" >> ${job_result_file} + status="FAILURE" + summary=":cry: FAILURE" fi -function succeeded() { - echo " :heavy_check_mark: ${1}" +### Example details/descriptions +# Note, final string must not contain any line breaks. Below examples include +# line breaks for the sake of readability. +#
    +# :cry: FAILURE _(click triangle for detailed information)_ +# Details:
    +#     :heavy_check_mark: job output file slurm-470503.out
    +#     :heavy_multiplication_x: found message matching ERROR:
    +#     :heavy_multiplication_x: found message matching FAILED:
    +#     :heavy_multiplication_x: found message matching required modules missing:
    +#     :heavy_check_mark: found message(s) matching No missing installations
    +#     :heavy_check_mark: found message matching tar.gz created!
    +# Artefacts: +#
  • eessi-2023.04-software-linux-x86_64-amd-zen2-1682384569.tar.gz
  • +#
    +# +#
    +# :grin: SUCCESS _(click triangle for detailed information)_ +# Details:
    +#     :heavy_check_mark: job output file slurm-470503.out
    +#     :heavy_check_mark: found message matching ERROR:
    +#     :heavy_check_mark: found message matching FAILED:
    +#     :heavy_check_mark: found message matching required modules missing:
    +#     :heavy_check_mark: found message(s) matching No missing installations
    +#     :heavy_check_mark: found message matching tar.gz created!
    +# Artefacts: +#
  • eessi-2023.04-software-linux-x86_64-amd-zen2-1682384569.tar.gz
  • +#
    +# +#
    +# :grin: SUCCESS _(click triangle for detailed information)_ +#
    +#
    _Details_
    +#
    +# :heavy_check_mark: job output file slurm-4682.out
    +# :heavy_check_mark: no message matching ERROR:
    +# :heavy_check_mark: no message matching FAILED:
    +# :heavy_check_mark: no message matching required modules missing:
    +# :heavy_check_mark: found message(s) matching No missing installations
    +# :heavy_check_mark: found message matching tar.gz created!
    +#
    +#
    _Artefacts_
    +#
    +#
    +# eessi-2023.04-software-linux-x86_64-generic-1682696567.tar.gz +# size: 234 MiB (245366784 bytes)
    +# entries: 1234
    +# modules under _2023.04/software/linux/x86_64/intel/cascadelake/modules/all/_
    +#
    +#           GCC/9.3.0.lua
    +# GCC/10.3.0.lua
    +# OpenSSL/1.1.lua +#
    +# software under _2023.04/software/linux/x86_64/intel/cascadelake/software/_ +#
    +#           GCC/9.3.0/
    +# CMake/3.20.1-GCCcore-10.3.0/
    +# OpenMPI/4.1.1-GCC-10.3.0/ +#
    +# other under _2023.04/software/linux/x86_64/intel/cascadelake/_ +#
    +#           .lmod/cache/spiderT.lua
    +# .lmod/cache/spiderT.luac_5.1
    +# .lmod/cache/timestamp +#
    +#
    +#
    +#
    +#
    +# +### + +# construct and write complete PR comment details: implements third alternative +comment_template="
    __SUMMARY_FMT__
    __DETAILS_FMT____ARTEFACTS_FMT__
    " +comment_summary_fmt="__SUMMARY__ _(click triangle for details)_" +comment_details_fmt="
    _Details_
    __DETAILS_LIST__
    " +comment_success_item_fmt=":heavy_check_mark: __ITEM__" +comment_failure_item_fmt=":heavy_multiplication_x: __ITEM__" +comment_artefacts_fmt="
    _Artefacts_
    __ARTEFACTS_LIST__
    " +comment_artefact_details_fmt="
    __ARTEFACT_SUMMARY____ARTEFACT_DETAILS__
    " + +function print_br_item() { + format="${1}" + item="${2}" + echo -n "${format//__ITEM__/${item}}
    " } -function failed() { - echo " :heavy_multiplication_x: ${1}" +function print_br_item2() { + format="${1}" + item="${2}" + item2="${3}" + format1="${format//__ITEM__/${item}}" + echo -n "${format1//__ITEM2__/${item2}}
    " } -if [[ ${SLURM} -eq 1 ]]; then - succeeded "job output file ${job_out}" >> ${job_result_file} -else - failed "no job output file matching ${GP_slurm_out}" >> ${job_result_file} -fi +function print_code_item() { + format="${1}" + item="${2}" + echo -n "${format//__ITEM__/${item}}" +} -if [[ ${ERROR} -eq 0 ]]; then - succeeded "no message matching ${GP_error}" >> ${job_result_file} -else - failed "found message matching ${GP_error}" >> ${job_result_file} -fi +function print_dd_item() { + format="${1}" + item="${2}" + echo -n "
    ${format//__ITEM__/${item}}
    " +} -if [[ ${FAILED} -eq 0 ]]; then - succeeded "no message matching ${GP_failed}" >> ${job_result_file} -else - failed "found message matching ${GP_failed}" >> ${job_result_file} -fi +function print_list_item() { + format="${1}" + item="${2}" + echo -n "
  • ${format//__ITEM__/${item}}
  • " +} -if [[ ${MISSING} -eq 0 ]]; then - succeeded "no message matching ${GP_req_missing}" >> ${job_result_file} -else - failed "found message matching ${GP_req_missing}" >> ${job_result_file} -fi +function print_pre_item() { + format="${1}" + item="${2}" + echo -n "
    ${format//__ITEM__/${item}}
    " +} -if [[ ${NO_MISSING} -eq 1 ]]; then - succeeded "found message(s) matching ${GP_no_missing}" >> ${job_result_file} -else - failed "no message matching ${GP_no_missing}" >> ${job_result_file} -fi +function success() { + format="${comment_success_item_fmt}" + item="$1" + print_br_item "${format}" "${item}" +} -if [[ ${TGZ} -eq 1 ]]; then - succeeded "found message matching ${GP_tgz_created}" >> ${job_result_file} -else - failed "no message matching ${GP_tgz_created}" >> ${job_result_file} -fi +function failure() { + format="${comment_failure_item_fmt}" + item="$1" + print_br_item "${format}" "${item}" +} + +function add_detail() { + actual=${1} + expected=${2} + success_msg="${3}" + failure_msg="${4}" + if [[ ${actual} -eq ${expected} ]]; then + success "${success_msg}" + else + failure "${failure_msg}" + fi +} + +echo "[RESULT]" > ${job_result_file} +echo -n "comment_description = " >> ${job_result_file} + +# construct values for placeholders in comment_template: +# - __SUMMARY_FMT__ -> variable $comment_summary +# - __DETAILS_FMT__ -> variable $comment_details +# - __ARTEFACTS_FMT__ -> variable $comment_artefacts -echo "artefacts =" >> ${job_result_file} +comment_summary="${comment_summary_fmt/__SUMMARY__/${summary}}" +# first construct comment_details_list, abbreviated CoDeList +# then use it to set comment_details +CoDeList="" + +success_msg="job output file ${job_out}" +failure_msg="no job output file matching ${GP_slurm_out}" +CoDeList=${CoDeList}$(add_detail ${SLURM} 1 "${success_msg}" "${failure_msg}") + +success_msg="no message matching ${GP_error}" +failure_msg="found message matching ${GP_error}" +CoDeList=${CoDeList}$(add_detail ${ERROR} 0 "${success_msg}" "${failure_msg}") + +success_msg="no message matching ${GP_failed}" +failure_msg="found message matching ${GP_failed}" +CoDeList=${CoDeList}$(add_detail ${FAILED} 0 "${success_msg}" "${failure_msg}") + +success_msg="no message matching ${GP_req_missing}" +failure_msg="found message matching ${GP_req_missing}" +CoDeList=${CoDeList}$(add_detail ${MISSING} 0 "${success_msg}" "${failure_msg}") + +success_msg="found message(s) matching ${GP_no_missing}" +failure_msg="no message matching ${GP_no_missing}" +CoDeList=${CoDeList}$(add_detail ${NO_MISSING} 1 "${success_msg}" "${failure_msg}") + +success_msg="found message matching ${GP_tgz_created}" +failure_msg="no message matching ${GP_tgz_created}" +CoDeList=${CoDeList}$(add_detail ${TGZ} 1 "${success_msg}" "${failure_msg}") + +comment_details="${comment_details_fmt/__DETAILS_LIST__/${CoDeList}}" + + +# first construct comment_artefacts_list, abbreviated CoArList +# then use it to set comment_artefacts +CoArList="" + +# TARBALL should only contain a single tarball if [[ ! -z ${TARBALL} ]]; then - echo " ${TARBALL}" >> ${job_result_file} + # TODO add tarball details: size, num entries, modules, software pkgs, misc + #
    + #
    + # eessi-2023.04-software-linux-x86_64-generic-1682696567.tar.gz + # size: 234 MiB (245366784 bytes)
    + # entries: 1234
    + # modules under _2023.04/software/linux/x86_64/intel/cascadelake/modules/all/_
    + #
    +    #       GCC/9.3.0.lua
    + # GCC/10.3.0.lua
    + # OpenSSL/1.1.lua + #
    + # software under _2023.04/software/linux/x86_64/intel/cascadelake/software/_ + #
    +    #       GCC/9.3.0/
    + # CMake/3.20.1-GCCcore-10.3.0/
    + # OpenMPI/4.1.1-GCC-10.3.0/ + #
    + # other under _2023.04/software/linux/x86_64/intel/cascadelake/_ + #
    +    #       .lmod/cache/spiderT.lua
    + # .lmod/cache/spiderT.luac_5.1
    + # .lmod/cache/timestamp + #
    + #
    + #
    + size="$(stat --dereference --printf=%s ${TARBALL})" + size_mib=$((${size} >> 20)) + tmpfile=$(mktemp --tmpdir=. tarfiles.XXXX) + tar tf ${TARBALL} > ${tmpfile} + entries=$(cat ${tmpfile} | wc -l) + # determine prefix from job config: VERSION/software/OS_TYPE/CPU_FAMILY/ARCHITECTURE + # 2023.04/software/linux/x86_64/intel/skylake_avx512 + # repo_version = 2022.11 + # software + # os_type = linux + # software_subdir = aarch64/generic + repo_version=$(cfg_get_value "repository" "repo_version") + os_type=$(cfg_get_value "architecture" "os_type") + software_subdir=$(cfg_get_value "architecture" "software_subdir") + prefix="${repo_version}/software/${os_type}/${software_subdir}" + modules_entries=$(grep "${prefix}/modules" ${tmpfile}) + software_entries=$(grep "${prefix}/software" ${tmpfile}) + lmod_entries=$(grep "${prefix}/.lmod/cache" ${tmpfile}) + other_entries=$(cat ${tmpfile} | grep -v "${prefix}/modules" | grep -v "${prefix}/software") + other_shortened=$(echo "${other_entries}" | sed -e "s@^.*${prefix}/@@" | sort -u) + modules=$(echo "${modules_entries}" | grep "/all/.*/.*lua$" | sed -e 's@^.*/\([^/]*/[^/]*.lua\)$@\1@' | sort -u) + software_pkgs=$(echo "${software_entries}" | sed -e "s@${prefix}/software/@@" | awk -F/ '{if (NR >= 2) {print $1 "/" $2}}' | sort -u) + lmod_shortened=$(echo "${lmod_entries}" | sed -e "s@${prefix}/@@") + + artefact_summary="$(print_code_item '__ITEM__' ${TARBALL})" + CoArList="" + CoArList="${CoArList}$(print_br_item2 'size: __ITEM__ MiB (__ITEM2__ bytes)' ${size_mib} ${size})" + CoArList="${CoArList}$(print_br_item 'entries: __ITEM__' ${entries})" + CoArList="${CoArList}$(print_br_item 'modules under ___ITEM___' ${prefix}/modules/all)" + CoArList="${CoArList}
    "
    +    if [[ ! -z ${modules} ]]; then
    +        while IFS= read -r mod ; do
    +            CoArList="${CoArList}$(print_br_item '__ITEM__' ${mod})"
    +        done <<< "${modules}"
    +    else
    +        CoArList="${CoArList}$(print_br_item '__ITEM__' 'no module files in tarball')"
    +    fi
    +    CoArList="${CoArList}
    " + CoArList="${CoArList}$(print_br_item 'software under ___ITEM___' ${prefix}/software)" + CoArList="${CoArList}
    "
    +    if [[ ! -z ${software_pkgs} ]]; then
    +        while IFS= read -r sw_pkg ; do
    +            CoArList="${CoArList}$(print_br_item '__ITEM__' ${sw_pkg})"
    +        done <<< "${software_pkgs}"
    +    else
    +        CoArList="${CoArList}$(print_br_item '__ITEM__' 'no software packages in tarball')"
    +    fi
    +    CoArList="${CoArList}
    " + CoArList="${CoArList}$(print_br_item 'other under ___ITEM___' ${prefix})" + CoArList="${CoArList}
    "
    +    if [[ ! -z ${other_shortened} ]]; then
    +        while IFS= read -r other ; do
    +            CoArList="${CoArList}$(print_br_item '__ITEM__' ${other})"
    +        done <<< "${other_shortened}"
    +    else
    +        CoArList="${CoArList}$(print_br_item '__ITEM__' 'no other files in tarball')"
    +    fi
    +    CoArList="${CoArList}
    " +else + CoArList="${CoArList}$(print_dd_item 'No artefacts were created or found.' '')" fi +comment_artefacts_details="${comment_artefact_details_fmt/__ARTEFACT_SUMMARY__/${artefact_summary}}" +comment_artefacts_details="${comment_artefacts_details/__ARTEFACT_DETAILS__/${CoArList}}" +comment_artefacts="${comment_artefacts_fmt/__ARTEFACTS_LIST__/${comment_artefacts_details}}" + +# now put all pieces together creating comment_details from comment_template +comment_description=${comment_template/__SUMMARY_FMT__/${comment_summary}} +comment_description=${comment_description/__DETAILS_FMT__/${comment_details}} +comment_description=${comment_description/__ARTEFACTS_FMT__/${comment_artefacts}} + +echo "${comment_description}" >> ${job_result_file} + +# add overall result: SUCCESS, FAILURE, UNKNOWN + artefacts +# - this should make use of subsequent steps such as deploying a tarball more +# efficient +echo "status = ${status}" >> ${job_result_file} +echo "artefacts = " >> ${job_result_file} +echo "${TARBALL}" | sed -e 's/^/ /g' >> ${job_result_file} + exit 0 From 3c43a92524f4f8f6d5db167c8a58cedc273d51a0 Mon Sep 17 00:00:00 2001 From: Thomas Roeblitz Date: Sun, 18 Jun 2023 20:09:00 +0200 Subject: [PATCH 027/698] check for missing installations requires a few updates for check-result.sh --- check_missing_installations.sh | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/check_missing_installations.sh b/check_missing_installations.sh index 926f475903..3627d1d0b5 100755 --- a/check_missing_installations.sh +++ b/check_missing_installations.sh @@ -1,18 +1,20 @@ #!/bin/bash # -# Script to check for missing installations in EESSI pilot software stack (version 2021.12) +# Script to check for missing installations in EESSI pilot software stack (version 2023.06) # # author: Kenneth Hoste (@boegel) +# author: Thomas Roeblitz (@trz42) # # license: GPLv2 # TOPDIR=$(dirname $(realpath $0)) -if [ -z ${EESSI_PILOT_VERSION} ]; then - echo "ERROR: \${EESSI_PILOT_VERSION} must be set to run $0!" >&2 +if [ $# -ne 1 ]; then + echo "ERROR: Usage: $0 " >&2 exit 1 fi +easystack=$1 LOCAL_TMPDIR=$(mktemp -d) @@ -21,12 +23,13 @@ source $TOPDIR/scripts/utils.sh source $TOPDIR/configure_easybuild echo ">> Checking for missing installations in ${EASYBUILD_INSTALLPATH}..." -ok_msg="No missing installations, party time!" -fail_msg="On no, some installations are still missing, how did that happen?!" eb_missing_out=$LOCAL_TMPDIR/eb_missing.out -# we need to use --from-pr to pull in some easyconfigs that are not available in EasyBuild version being used -# PR #16531: Nextflow-22.10.1.eb -${EB:-eb} --from-pr 16531 --easystack eessi-${EESSI_PILOT_VERSION}.yml --experimental --missing | tee ${eb_missing_out} +${EB:-eb} --easystack ${easystack} --missing 2>&1 | tee ${eb_missing_out} +exit_code=${PIPESTATUS[0]} + +ok_msg="Command 'eb --missing ...' succeeded, analysing output..." +fail_msg="Command 'eb --missing ...' failed, check log '${eb_missing_out}'" +check_exit_code ${exit_code} "${ok_msg}" "${fail_msg}" # the above assesses the installed software for each easyconfig provided in # the easystack file and then print messages such as @@ -37,8 +40,11 @@ ${EB:-eb} --from-pr 16531 --easystack eessi-${EESSI_PILOT_VERSION}.yml --experim # output does not contain any line with ` required modules missing:` grep " required modules missing:" ${eb_missing_out} > /dev/null +exit_code=$? # if grep returns 1 (` required modules missing:` was NOT found), we set # MODULES_MISSING to 0, otherwise (it was found or another error) we set it to 1 -[[ $? -eq 1 ]] && MODULES_MISSING=0 || MODULES_MISSING=1 +[[ ${exit_code} -eq 1 ]] && MODULES_MISSING=0 || MODULES_MISSING=1 +ok_msg="No missing installations, party time!" +fail_msg="On no, some installations are still missing, how did that happen?!" check_exit_code ${MODULES_MISSING} "${ok_msg}" "${fail_msg}" From 5a0294e0bf1c553a108ab5ceba5dff07b90be8d6 Mon Sep 17 00:00:00 2001 From: Thomas Roeblitz Date: Sun, 18 Jun 2023 20:09:43 +0200 Subject: [PATCH 028/698] make sure experimental EasyBuild features can be used --- configure_easybuild | 3 +++ 1 file changed, 3 insertions(+) diff --git a/configure_easybuild b/configure_easybuild index 19b2d7454b..8e79f3a35a 100644 --- a/configure_easybuild +++ b/configure_easybuild @@ -35,3 +35,6 @@ fi export EASYBUILD_FILTER_DEPS=$DEPS_TO_FILTER export EASYBUILD_MODULE_EXTENSIONS=1 + +# need to enable use of experimental features, since we're using easystack files +export EASYBUILD_EXPERIMENTAL=1 From 4110548e9280795f32a4c60ed979430217a50771 Mon Sep 17 00:00:00 2001 From: Thomas Roeblitz Date: Tue, 20 Jun 2023 10:35:44 +0200 Subject: [PATCH 029/698] removed OpenSSL from filter deps --- configure_easybuild | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure_easybuild b/configure_easybuild index ad34487902..23f3920154 100644 --- a/configure_easybuild +++ b/configure_easybuild @@ -26,7 +26,7 @@ fi # note: filtering Bison may break some installations, like Qt5 (see https://github.com/EESSI/software-layer/issues/49) # filtering pkg-config breaks R-bundle-Bioconductor installation (see also https://github.com/easybuilders/easybuild-easyconfigs/pull/11104) # problems occur when filtering pkg-config with gnuplot too (picks up Lua 5.1 from $EPREFIX rather than from Lua 5.3 dependency) -DEPS_TO_FILTER=Autoconf,Automake,Autotools,binutils,bzip2,cURL,DBus,flex,gettext,gperf,help2man,intltool,libreadline,libtool,Lua,M4,makeinfo,ncurses,OpenSSL,util-linux,XZ,zlib +DEPS_TO_FILTER=Autoconf,Automake,Autotools,binutils,bzip2,cURL,DBus,flex,gettext,gperf,help2man,intltool,libreadline,libtool,Lua,M4,makeinfo,ncurses,util-linux,XZ,zlib # For aarch64 we need to also filter out Yasm. # See https://github.com/easybuilders/easybuild-easyconfigs/issues/11190 if [[ "$EESSI_CPU_FAMILY" == "aarch64" ]]; then From f709a8a72d425acfa02dd9d3e8114af99b796b1f Mon Sep 17 00:00:00 2001 From: Thomas Roeblitz Date: Tue, 20 Jun 2023 10:43:56 +0200 Subject: [PATCH 030/698] let script's return value reflect SUCCESS (0) or FAILURE (1) --- bot/check-result.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bot/check-result.sh b/bot/check-result.sh index 04a23962e2..ec58fea557 100755 --- a/bot/check-result.sh +++ b/bot/check-result.sh @@ -480,4 +480,6 @@ echo "status = ${status}" >> ${job_result_file} echo "artefacts = " >> ${job_result_file} echo "${TARBALL}" | sed -e 's/^/ /g' >> ${job_result_file} +test "${status}" == "SUCCESS" +exit $? exit 0 From 5cfb4e1510cd8a0c93824af33ff5c4a805e3bd11 Mon Sep 17 00:00:00 2001 From: Thomas Roeblitz Date: Tue, 20 Jun 2023 10:52:06 +0200 Subject: [PATCH 031/698] use test to check if slurm-*.out exists + fix reporting message --- bot/check-result.sh | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/bot/check-result.sh b/bot/check-result.sh index ec58fea557..6c23cae680 100755 --- a/bot/check-result.sh +++ b/bot/check-result.sh @@ -96,11 +96,14 @@ job_dir=${PWD} [[ ${VERBOSE} -ne 0 ]] && echo ">> analysing job in directory ${job_dir}" GP_slurm_out="slurm-${SLURM_JOB_ID}.out" -job_out=$(ls ${job_dir} | grep "${GP_slurm_out}") -[[ $? -eq 0 ]] && SLURM=1 || SLURM=0 -# have to be careful to not add searched for pattern into slurm out file [[ ${VERBOSE} -ne 0 ]] && echo ">> searching for job output file(s) matching '"${GP_slurm_out}"'" -[[ ${VERBOSE} -ne 0 ]] && echo " found slurm output file '"${job_out}"'" +if [[ -f ${GP_slurm_out} ]]; then + SLURM=1 + [[ ${VERBOSE} -ne 0 ]] && echo " found slurm output file '"${GP_slurm_out}"'" +else + SLURM=0 + [[ ${VERBOSE} -ne 0 ]] && echo " Slurm output file '"${GP_slurm_out}"' NOT found" +fi ERROR=-1 if [[ ${SLURM} -eq 1 ]]; then From 26a929fd23b5a96d26681d700059f3bb0f00a80b Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 20 Jun 2023 11:04:35 +0200 Subject: [PATCH 032/698] switch to new dedicated bucket for version 2023.06 --- bot/bot-eessi-aws-citc.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bot/bot-eessi-aws-citc.cfg b/bot/bot-eessi-aws-citc.cfg index dca81ef2ab..8329005ae5 100644 --- a/bot/bot-eessi-aws-citc.cfg +++ b/bot/bot-eessi-aws-citc.cfg @@ -113,7 +113,7 @@ tarball_upload_script = /mnt/shared/home/bot/eessi-bot-software-layer/scripts/ee # endpoint_url = URL_TO_S3_SERVER # bucket name -bucket_name = eessi-staging +bucket_name = eessi-staging-2023.06 # upload policy: defines what policy is used for uploading built artefacts # to an S3 bucket From 7478e7d65ab2836135e62fc6f866d84d27a7b0a7 Mon Sep 17 00:00:00 2001 From: Thomas Roeblitz Date: Tue, 20 Jun 2023 11:09:34 +0200 Subject: [PATCH 033/698] more polishing to address multiple comments/suggestions --- bot/check-result.sh | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/bot/check-result.sh b/bot/check-result.sh index 6c23cae680..33542d61ed 100755 --- a/bot/check-result.sh +++ b/bot/check-result.sh @@ -152,7 +152,7 @@ if [[ ${SLURM} -eq 1 ]]; then grep_out=$(grep -v "^>> searching for " ${job_dir}/${job_out} | grep "${GP_tgz_created}" | sort -u) if [[ $? -eq 0 ]]; then TGZ=1 - TARBALL=$(echo ${grep_out} | sed -e 's@^.*\(eessi[^/ ]*\) .*$@\1@') + TARBALL=$(echo ${grep_out} | sed -e 's@^.*/\(eessi[^/ ]*\) .*$@\1@') else TGZ=0 fi @@ -162,7 +162,7 @@ if [[ ${SLURM} -eq 1 ]]; then fi [[ ${VERBOSE} -ne 0 ]] && echo "SUMMARY: ${job_dir}/${job_out}" -[[ ${VERBOSE} -ne 0 ]] && echo " test name : result (expected result)" +[[ ${VERBOSE} -ne 0 ]] && echo " : ()" [[ ${VERBOSE} -ne 0 ]] && echo " ERROR......: $([[ $ERROR -eq 1 ]] && echo 'yes' || echo 'no') (no)" [[ ${VERBOSE} -ne 0 ]] && echo " FAILED.....: $([[ $FAILED -eq 1 ]] && echo 'yes' || echo 'no') (no)" [[ ${VERBOSE} -ne 0 ]] && echo " REQ_MISSING: $([[ $MISSING -eq 1 ]] && echo 'yes' || echo 'no') (no)" @@ -377,25 +377,28 @@ CoArList="" # TARBALL should only contain a single tarball if [[ ! -z ${TARBALL} ]]; then - # TODO add tarball details: size, num entries, modules, software pkgs, misc + # Example of the detailed information for a tarball. The actual result MUST be a + # single line (no '\n') or it would break the structure of the markdown table + # that holds status updates of a bot job. + # #
    #
    - # eessi-2023.04-software-linux-x86_64-generic-1682696567.tar.gz + # eessi-2023.06-software-linux-x86_64-generic-1682696567.tar.gz # size: 234 MiB (245366784 bytes)
    # entries: 1234
    - # modules under _2023.04/software/linux/x86_64/intel/cascadelake/modules/all/_
    + # modules under _2023.06/software/linux/x86_64/intel/cascadelake/modules/all/_
    #
         #       GCC/9.3.0.lua
    # GCC/10.3.0.lua
    # OpenSSL/1.1.lua #
    - # software under _2023.04/software/linux/x86_64/intel/cascadelake/software/_ + # software under _2023.06/software/linux/x86_64/intel/cascadelake/software/_ #
         #       GCC/9.3.0/
    # CMake/3.20.1-GCCcore-10.3.0/
    # OpenMPI/4.1.1-GCC-10.3.0/ #
    - # other under _2023.04/software/linux/x86_64/intel/cascadelake/_ + # other under _2023.06/software/linux/x86_64/intel/cascadelake/_ #
         #       .lmod/cache/spiderT.lua
    # .lmod/cache/spiderT.luac_5.1
    @@ -409,23 +412,25 @@ if [[ ! -z ${TARBALL} ]]; then tar tf ${TARBALL} > ${tmpfile} entries=$(cat ${tmpfile} | wc -l) # determine prefix from job config: VERSION/software/OS_TYPE/CPU_FAMILY/ARCHITECTURE - # 2023.04/software/linux/x86_64/intel/skylake_avx512 - # repo_version = 2022.11 - # software + # e.g., 2023.06/software/linux/x86_64/intel/skylake_avx512 + # cfg/job.cfg contains (only the attributes to be used are shown below): + # [repository] + # repo_version = 2023.06 + # [architecture] # os_type = linux - # software_subdir = aarch64/generic + # software_subdir = x86_64/intel/skylake_avx512 repo_version=$(cfg_get_value "repository" "repo_version") os_type=$(cfg_get_value "architecture" "os_type") software_subdir=$(cfg_get_value "architecture" "software_subdir") prefix="${repo_version}/software/${os_type}/${software_subdir}" + + # extract directories/entries from tarball content modules_entries=$(grep "${prefix}/modules" ${tmpfile}) software_entries=$(grep "${prefix}/software" ${tmpfile}) - lmod_entries=$(grep "${prefix}/.lmod/cache" ${tmpfile}) other_entries=$(cat ${tmpfile} | grep -v "${prefix}/modules" | grep -v "${prefix}/software") other_shortened=$(echo "${other_entries}" | sed -e "s@^.*${prefix}/@@" | sort -u) modules=$(echo "${modules_entries}" | grep "/all/.*/.*lua$" | sed -e 's@^.*/\([^/]*/[^/]*.lua\)$@\1@' | sort -u) software_pkgs=$(echo "${software_entries}" | sed -e "s@${prefix}/software/@@" | awk -F/ '{if (NR >= 2) {print $1 "/" $2}}' | sort -u) - lmod_shortened=$(echo "${lmod_entries}" | sed -e "s@${prefix}/@@") artefact_summary="$(print_code_item '__ITEM__' ${TARBALL})" CoArList="" From 827e686edfc1540d82a4bbf5d069ed9460822efc Mon Sep 17 00:00:00 2001 From: Thomas Roeblitz Date: Tue, 20 Jun 2023 11:14:01 +0200 Subject: [PATCH 034/698] remove tmpfile + clarify/improve exit --- bot/check-result.sh | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/bot/check-result.sh b/bot/check-result.sh index 33542d61ed..2ffbcd6be6 100755 --- a/bot/check-result.sh +++ b/bot/check-result.sh @@ -488,6 +488,11 @@ echo "status = ${status}" >> ${job_result_file} echo "artefacts = " >> ${job_result_file} echo "${TARBALL}" | sed -e 's/^/ /g' >> ${job_result_file} +# remove tmpfile +if [[ -f ${tmpfile} ]]; then + rm ${tmpfile} +fi + +# exit script with value that reflects overall job result: SUCCESS (0), FAILURE (1) test "${status}" == "SUCCESS" exit $? -exit 0 From 9296ed75e52b680bf278aba9ff2fb82ec5318765 Mon Sep 17 00:00:00 2001 From: Thomas Roeblitz Date: Tue, 20 Jun 2023 11:47:19 +0200 Subject: [PATCH 035/698] polishing examples + comments --- bot/check-result.sh | 62 ++++++++++++++++++++------------------------- 1 file changed, 28 insertions(+), 34 deletions(-) diff --git a/bot/check-result.sh b/bot/check-result.sh index 2ffbcd6be6..51e1777bab 100755 --- a/bot/check-result.sh +++ b/bot/check-result.sh @@ -20,7 +20,7 @@ # - no message ERROR # - no message FAILED # - no message ' required modules missing:' -# - one or more of 'No missing modules!' +# - one or more of 'No missing installations' # - message regarding created tarball # - FAILED (one of ... implemented as NOT SUCCESS) # - no slurm-JOBID.out file @@ -188,36 +188,12 @@ else fi ### Example details/descriptions -# Note, final string must not contain any line breaks. Below examples include -# line breaks for the sake of readability. +# Note, final string must not contain any line breaks. Below example include +# line breaks for the sake of readability. In case of FAILURE, the structure is +# very similar (incl. information about Artefacts if any was produced), however, +# under Details some lines will be marked with :heavy_multiplication_x: #
    -# :cry: FAILURE _(click triangle for detailed information)_ -# Details:
    -#     :heavy_check_mark: job output file slurm-470503.out
    -#     :heavy_multiplication_x: found message matching ERROR:
    -#     :heavy_multiplication_x: found message matching FAILED:
    -#     :heavy_multiplication_x: found message matching required modules missing:
    -#     :heavy_check_mark: found message(s) matching No missing installations
    -#     :heavy_check_mark: found message matching tar.gz created!
    -# Artefacts: -#
  • eessi-2023.04-software-linux-x86_64-amd-zen2-1682384569.tar.gz
  • -#
    -# -#
    -# :grin: SUCCESS _(click triangle for detailed information)_ -# Details:
    -#     :heavy_check_mark: job output file slurm-470503.out
    -#     :heavy_check_mark: found message matching ERROR:
    -#     :heavy_check_mark: found message matching FAILED:
    -#     :heavy_check_mark: found message matching required modules missing:
    -#     :heavy_check_mark: found message(s) matching No missing installations
    -#     :heavy_check_mark: found message matching tar.gz created!
    -# Artefacts: -#
  • eessi-2023.04-software-linux-x86_64-amd-zen2-1682384569.tar.gz
  • -#
    -# -#
    -# :grin: SUCCESS _(click triangle for detailed information)_ +# :grin: SUCCESS _(click triangle for details)_ #
    #
    _Details_
    #
    @@ -231,22 +207,22 @@ fi #
    _Artefacts_
    #
    #
    -# eessi-2023.04-software-linux-x86_64-generic-1682696567.tar.gz +# eessi-2023.06-software-linux-x86_64-generic-1682696567.tar.gz # size: 234 MiB (245366784 bytes)
    # entries: 1234
    -# modules under _2023.04/software/linux/x86_64/intel/cascadelake/modules/all/_
    +# modules under _2023.06/software/linux/x86_64/generic/modules/all/_
    #
     #           GCC/9.3.0.lua
    # GCC/10.3.0.lua
    # OpenSSL/1.1.lua #
    -# software under _2023.04/software/linux/x86_64/intel/cascadelake/software/_ +# software under _2023.06/software/linux/x86_64/generic/software/_ #
     #           GCC/9.3.0/
    # CMake/3.20.1-GCCcore-10.3.0/
    # OpenMPI/4.1.1-GCC-10.3.0/ #
    -# other under _2023.04/software/linux/x86_64/intel/cascadelake/_ +# other under _2023.06/software/linux/x86_64/generic/_ #
     #           .lmod/cache/spiderT.lua
    # .lmod/cache/spiderT.luac_5.1
    @@ -257,6 +233,24 @@ fi #
    #
    # +#
    +# :cry: FAILURE _(click triangle for details)_ +#
    +#
    _Details_
    +#
    +# :heavy_check_mark: job output file slurm-4682.out
    +# :heavy_multiplication_x: no message matching ERROR:
    +# :heavy_check_mark: no message matching FAILED:
    +# :heavy_multiplication_x: no message matching required modules missing:
    +# :heavy_check_mark: found message(s) matching No missing installations
    +# :heavy_check_mark: found message matching tar.gz created!
    +#
    +#
    _Artefacts_
    +#
    +# No artefacts were created or found. +#
    +#
    +#
    ### # construct and write complete PR comment details: implements third alternative From 78a9dc8e9e67dc998c39e6f74f06b72117e0f22d Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 20 Jun 2023 13:50:37 +0200 Subject: [PATCH 036/698] make sure that $job_out is defined in bot/check-result.sh --- bot/check-result.sh | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/bot/check-result.sh b/bot/check-result.sh index 51e1777bab..182b8555a8 100755 --- a/bot/check-result.sh +++ b/bot/check-result.sh @@ -95,14 +95,14 @@ job_dir=${PWD} [[ ${VERBOSE} -ne 0 ]] && echo ">> analysing job in directory ${job_dir}" -GP_slurm_out="slurm-${SLURM_JOB_ID}.out" -[[ ${VERBOSE} -ne 0 ]] && echo ">> searching for job output file(s) matching '"${GP_slurm_out}"'" -if [[ -f ${GP_slurm_out} ]]; then +job_out="slurm-${SLURM_JOB_ID}.out" +[[ ${VERBOSE} -ne 0 ]] && echo ">> searching for job output file(s) matching '"${job_out}"'" +if [[ -f ${job_out} ]]; then SLURM=1 - [[ ${VERBOSE} -ne 0 ]] && echo " found slurm output file '"${GP_slurm_out}"'" + [[ ${VERBOSE} -ne 0 ]] && echo " found slurm output file '"${job_out}"'" else SLURM=0 - [[ ${VERBOSE} -ne 0 ]] && echo " Slurm output file '"${GP_slurm_out}"' NOT found" + [[ ${VERBOSE} -ne 0 ]] && echo " Slurm output file '"${job_out}"' NOT found" fi ERROR=-1 @@ -339,7 +339,7 @@ comment_summary="${comment_summary_fmt/__SUMMARY__/${summary}}" CoDeList="" success_msg="job output file ${job_out}" -failure_msg="no job output file matching ${GP_slurm_out}" +failure_msg="no job output file ${job_out}" CoDeList=${CoDeList}$(add_detail ${SLURM} 1 "${success_msg}" "${failure_msg}") success_msg="no message matching ${GP_error}" From 4cc8f4135fd030f942950af70559a40aa43143cd Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 20 Jun 2023 20:53:32 +0200 Subject: [PATCH 037/698] don't run 'eb --missing' in install script, since it confuses the bot's check-result script because of 'required modules missing' messages in job output --- EESSI-pilot-install-software.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/EESSI-pilot-install-software.sh b/EESSI-pilot-install-software.sh index f2d50dfe91..287688a61f 100755 --- a/EESSI-pilot-install-software.sh +++ b/EESSI-pilot-install-software.sh @@ -151,7 +151,7 @@ for eb_version in '4.7.2'; do if [ -f ${es} ]; then echo_green "Feeding easystack file ${es} to EasyBuild..." - ${EB} --easystack ${TOPDIR}/${es} --missing && ${EB} --easystack ${TOPDIR}/${es} --robot + ${EB} --easystack ${TOPDIR}/${es} --robot $TOPDIR/check_missing_installations.sh ${TOPDIR}/${es} else From 4ecbbbbd09b8f8da8f66d4b99ef08618f4208d91 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 20 Jun 2023 21:05:45 +0200 Subject: [PATCH 038/698] add required job_result_unknown_fmt bot config setting --- bot/bot-eessi-aws-citc.cfg | 1 + 1 file changed, 1 insertion(+) diff --git a/bot/bot-eessi-aws-citc.cfg b/bot/bot-eessi-aws-citc.cfg index 8329005ae5..de25fc9445 100644 --- a/bot/bot-eessi-aws-citc.cfg +++ b/bot/bot-eessi-aws-citc.cfg @@ -230,3 +230,4 @@ multiple_tarballs = Found {num_tarballs} tarballs in job dir - only 1 matching ` job_result_comment_fmt =
    {summary} _(click triangle for detailed information)_Details:{details}
    Artefacts:{artefacts}
    job_result_details_item_fmt =
        {item} job_result_artefacts_item_fmt =
  • {item}
  • +job_result_unknown_fmt =
    :shrug: UNKNOWN _(click triangle for detailed information)_
    • Job results file `{filename}` does not exist in job directory or reading it failed.
    • No artefacts were found/reported.
    From 9226b8169b4ffa51587e6de6631ba319aa6310b1 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 20 Jun 2023 21:30:55 +0200 Subject: [PATCH 039/698] tweak slurm parameters to use 16 cores for jobs --- bot/bot-eessi-aws-citc.cfg | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/bot/bot-eessi-aws-citc.cfg b/bot/bot-eessi-aws-citc.cfg index de25fc9445..a82d4010d3 100644 --- a/bot/bot-eessi-aws-citc.cfg +++ b/bot/bot-eessi-aws-citc.cfg @@ -83,7 +83,8 @@ local_tmp = /tmp/$USER/EESSI # NOTE 2 '--get-user-env' may be needed on systems where the job's environment needs # to be initialised as if it is for a login shell. # note: hardcoded 24h time limit until https://github.com/EESSI/eessi-bot-software-layer/issues/146 is fixed -slurm_params = --hold --time=24:0:0 +# note: 16 cores which corresponds to *.4xlarge node types, see also arch_target_map +slurm_params = --hold --time=24:0:0 --nodes=1 --ntasks-per-node=16 # full path to the job submission command submit_command = /usr/bin/sbatch From 7a4336348066319ada0b8f17cd6aa365478b5850 Mon Sep 17 00:00:00 2001 From: Thomas Roeblitz Date: Tue, 20 Jun 2023 22:00:29 +0200 Subject: [PATCH 040/698] three obsolete settings removed from bot cfg --- bot/bot-eessi-aws-citc.cfg | 3 --- 1 file changed, 3 deletions(-) diff --git a/bot/bot-eessi-aws-citc.cfg b/bot/bot-eessi-aws-citc.cfg index a82d4010d3..456ab8a5a3 100644 --- a/bot/bot-eessi-aws-citc.cfg +++ b/bot/bot-eessi-aws-citc.cfg @@ -228,7 +228,4 @@ missing_modules = Slurm output lacks message "No missing modules!". no_tarball_message = Slurm output lacks message about created tarball. no_matching_tarball = No tarball matching `{tarball_pattern}` found in job dir. multiple_tarballs = Found {num_tarballs} tarballs in job dir - only 1 matching `{tarball_pattern}` expected. -job_result_comment_fmt =
    {summary} _(click triangle for detailed information)_Details:{details}
    Artefacts:{artefacts}
    -job_result_details_item_fmt =
        {item} -job_result_artefacts_item_fmt =
  • {item}
  • job_result_unknown_fmt =
    :shrug: UNKNOWN _(click triangle for detailed information)_
    • Job results file `{filename}` does not exist in job directory or reading it failed.
    • No artefacts were found/reported.
    From 1013f88487006d0456c51bd264e5d4030e6d6358 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 21 Jun 2023 14:37:22 +0200 Subject: [PATCH 041/698] only test load_easybuild_module.sh script with EasyBuild v4.5.2 or newer --- .github/workflows/tests_scripts.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/tests_scripts.yml b/.github/workflows/tests_scripts.yml index 81a3633b72..6ef9d57975 100644 --- a/.github/workflows/tests_scripts.yml +++ b/.github/workflows/tests_scripts.yml @@ -40,7 +40,9 @@ jobs: # bind current directory into container as /software-layer export SINGULARITY_BIND="${PWD}:/software-layer" - for EB_VERSION in '4.5.0' '4.5.1' '4.7.2'; do + # can't test with EasyBuild versions older than v4.5.2 when using EESSI pilot 2023.06, + # since Python in compat layer is Python 3.11.x + for EB_VERSION in '4.5.2' '4.6.0' '4.7.2'; do # Create script that uses load_easybuild_module.sh which we can run in compat layer environment # note: Be careful with single vs double quotes below! # ${EB_VERSION} should be expanded, so use double quotes; From 5d7e367e32af6e8d6765b2c3a88451901043237f Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 22 Jun 2023 17:41:02 +0200 Subject: [PATCH 042/698] use correct aarch64 CPU targets for tests that rely on EESSI pilot 2023.06 --- .github/workflows/test_eessi.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test_eessi.yml b/.github/workflows/test_eessi.yml index 65415f87fc..3d18e56816 100644 --- a/.github/workflows/test_eessi.yml +++ b/.github/workflows/test_eessi.yml @@ -13,8 +13,8 @@ jobs: - 2023.06 EESSI_SOFTWARE_SUBDIR: - aarch64/generic - - aarch64/graviton2 - - aarch64/graviton3 + - aarch64/neoverse_n1 + - aarch64/neoverse_v1 - x86_64/amd/zen2 - x86_64/amd/zen3 - x86_64/intel/haswell From 745151f0f74d9f11824e36f5cbe71f3f13a07a4a Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 22 Jun 2023 18:24:27 +0200 Subject: [PATCH 043/698] switch to colored emojis in bot/check-result.sh --- bot/check-result.sh | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/bot/check-result.sh b/bot/check-result.sh index 182b8555a8..22ad50a0b7 100755 --- a/bot/check-result.sh +++ b/bot/check-result.sh @@ -191,18 +191,18 @@ fi # Note, final string must not contain any line breaks. Below example include # line breaks for the sake of readability. In case of FAILURE, the structure is # very similar (incl. information about Artefacts if any was produced), however, -# under Details some lines will be marked with :heavy_multiplication_x: +# under Details some lines will be marked with :x: #
    # :grin: SUCCESS _(click triangle for details)_ #
    #
    _Details_
    #
    -# :heavy_check_mark: job output file slurm-4682.out
    -# :heavy_check_mark: no message matching ERROR:
    -# :heavy_check_mark: no message matching FAILED:
    -# :heavy_check_mark: no message matching required modules missing:
    -# :heavy_check_mark: found message(s) matching No missing installations
    -# :heavy_check_mark: found message matching tar.gz created!
    +# :white_check_mark: job output file slurm-4682.out
    +# :white_check_mark: no message matching ERROR:
    +# :white_check_mark: no message matching FAILED:
    +# :white_check_mark: no message matching required modules missing:
    +# :white_check_mark: found message(s) matching No missing installations
    +# :white_check_mark: found message matching tar.gz created!
    #
    #
    _Artefacts_
    #
    @@ -238,12 +238,12 @@ fi #
    #
    _Details_
    #
    -# :heavy_check_mark: job output file slurm-4682.out
    -# :heavy_multiplication_x: no message matching ERROR:
    -# :heavy_check_mark: no message matching FAILED:
    -# :heavy_multiplication_x: no message matching required modules missing:
    -# :heavy_check_mark: found message(s) matching No missing installations
    -# :heavy_check_mark: found message matching tar.gz created!
    +# :white_check_mark: job output file slurm-4682.out
    +# :x: no message matching ERROR:
    +# :white_check_mark: no message matching FAILED:
    +# :x: no message matching required modules missing:
    +# :white_check_mark: found message(s) matching No missing installations
    +# :white_check_mark: found message matching tar.gz created!
    #
    #
    _Artefacts_
    #
    @@ -257,8 +257,8 @@ fi comment_template="
    __SUMMARY_FMT__
    __DETAILS_FMT____ARTEFACTS_FMT__
    " comment_summary_fmt="__SUMMARY__ _(click triangle for details)_" comment_details_fmt="
    _Details_
    __DETAILS_LIST__
    " -comment_success_item_fmt=":heavy_check_mark: __ITEM__" -comment_failure_item_fmt=":heavy_multiplication_x: __ITEM__" +comment_success_item_fmt=":white_check_mark: __ITEM__" +comment_failure_item_fmt=":x: __ITEM__" comment_artefacts_fmt="
    _Artefacts_
    __ARTEFACTS_LIST__
    " comment_artefact_details_fmt="
    __ARTEFACT_SUMMARY____ARTEFACT_DETAILS__
    " From e93d7dfcacf4cd57a5231aa7b435e539299ba3c5 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 22 Jun 2023 18:25:32 +0200 Subject: [PATCH 044/698] add GCC/11.2.0 to EESSI pilot 2023.06 --- EESSI-pilot-install-software.sh | 4 +--- eessi-2023.06-eb-4.7.2-2021b.yml | 2 ++ 2 files changed, 3 insertions(+), 3 deletions(-) create mode 100644 eessi-2023.06-eb-4.7.2-2021b.yml diff --git a/EESSI-pilot-install-software.sh b/EESSI-pilot-install-software.sh index 287688a61f..12878b7e6c 100755 --- a/EESSI-pilot-install-software.sh +++ b/EESSI-pilot-install-software.sh @@ -144,9 +144,7 @@ for eb_version in '4.7.2'; do echo_green "All set, let's start installing some software with EasyBuild v${eb_version} in ${EASYBUILD_INSTALLPATH}..." - for gen in '2021a'; do - - es="eessi-${EESSI_PILOT_VERSION}-eb-${eb_version}-${gen}.yml" + for es in $(ls eessi-${EESSI_PILOT_VERSION}-eb-${eb_version}-*.yml); do if [ -f ${es} ]; then echo_green "Feeding easystack file ${es} to EasyBuild..." diff --git a/eessi-2023.06-eb-4.7.2-2021b.yml b/eessi-2023.06-eb-4.7.2-2021b.yml new file mode 100644 index 0000000000..beffbdca0d --- /dev/null +++ b/eessi-2023.06-eb-4.7.2-2021b.yml @@ -0,0 +1,2 @@ +easyconfigs: + - GCC-11.2.0 From e7b12c4e1db99208cffd94352bcac3de9106326a Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 22 Jun 2023 22:40:01 +0200 Subject: [PATCH 045/698] add easystack file for 2021b generation to test workflow --- .github/workflows/test_eessi.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/test_eessi.yml b/.github/workflows/test_eessi.yml index 3d18e56816..8e766c3a5c 100644 --- a/.github/workflows/test_eessi.yml +++ b/.github/workflows/test_eessi.yml @@ -22,6 +22,7 @@ jobs: - x86_64/generic EASYSTACK_FILE: - eessi-2023.06-eb-4.7.2-2021a.yml + - eessi-2023.06-eb-4.7.2-2021b.yml steps: - name: Check out software-layer repository uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # v3.1.0 From d639d27c31b7e581dbdfb285a6cec95a3399aaed Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 22 Jun 2023 23:23:44 +0200 Subject: [PATCH 046/698] test load_easybuild_module.sh with a single EasyBuild version --- .github/workflows/tests_scripts.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/tests_scripts.yml b/.github/workflows/tests_scripts.yml index 65224ebb66..74e2ebcffe 100644 --- a/.github/workflows/tests_scripts.yml +++ b/.github/workflows/tests_scripts.yml @@ -41,8 +41,9 @@ jobs: export SINGULARITY_BIND="${PWD}:/software-layer" # can't test with EasyBuild versions older than v4.5.2 when using EESSI pilot 2023.06, - # since Python in compat layer is Python 3.11.x - for EB_VERSION in '4.5.2' '4.6.0' '4.7.2'; do + # since Python in compat layer is Python 3.11.x; + # testing with a single EasyBuild version takes a while in GitHub Actions, so stick to a single sensible version + for EB_VERSION in '4.6.0'; do # Create script that uses load_easybuild_module.sh which we can run in compat layer environment # note: Be careful with single vs double quotes below! # ${EB_VERSION} should be expanded, so use double quotes; From cbd2739667cfd23d30cefa9b86963cc6facb280a Mon Sep 17 00:00:00 2001 From: laraPPr Date: Fri, 23 Jun 2023 10:50:49 +0200 Subject: [PATCH 047/698] adding foss/2021b with GCC/11.2.0 to EESSI pilot 2023.06 --- eessi-2023.06-eb-4.7.2-2021b.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/eessi-2023.06-eb-4.7.2-2021b.yml b/eessi-2023.06-eb-4.7.2-2021b.yml index beffbdca0d..4f5c56dfe5 100644 --- a/eessi-2023.06-eb-4.7.2-2021b.yml +++ b/eessi-2023.06-eb-4.7.2-2021b.yml @@ -1,2 +1,3 @@ easyconfigs: - GCC-11.2.0 + - foss-2021b From 0c32e5dd6289541098c428addc46e0c6b9915818 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 23 Jun 2023 12:03:45 +0200 Subject: [PATCH 048/698] grant more build/deploy permissions --- bot/bot-eessi-aws-citc.cfg | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/bot/bot-eessi-aws-citc.cfg b/bot/bot-eessi-aws-citc.cfg index 456ab8a5a3..71a674a0db 100644 --- a/bot/bot-eessi-aws-citc.cfg +++ b/bot/bot-eessi-aws-citc.cfg @@ -28,7 +28,7 @@ private_key = /mnt/shared/home/bot/eessi-bot-software-layer/eessi-bot-citc-aws.2 # which GH accounts have the permission to send commands to the bot # if value is left/empty everyone can send commands # value can be a space delimited list of GH accounts -command_permission = boegel trz42 bedroge +command_permission = boegel trz42 bedroge laraPPr ocaisa casparvl satishskamath maxim-masterov TopRichard xinan1911 # format of the response when processing bot commands command_response_fmt = @@ -93,7 +93,7 @@ submit_command = /usr/bin/sbatch # the label 'bot:build' (apparently this cannot be restricted on GitHub) # if value is left/empty everyone can trigger the build # value can be a space delimited list of GH accounts -build_permission = boegel trz42 bedroge +build_permission = boegel trz42 bedroge laraPPr ocaisa casparvl satishskamath maxim-masterov TopRichard xinan1911 # template for comment when user who set a label has no permission to trigger build jobs no_build_permission_comment = Label `bot:build` has been set by user `{build_labeler}`, but only users `{build_permission_users}` have permission to trigger the action @@ -129,7 +129,7 @@ upload_policy = once # the label 'bot:deploy' (apparently this cannot be restricted on GitHub) # if value is left/empty everyone can trigger the deployment # value can be a space delimited list of GH accounts -deploy_permission = boegel trz42 bedroge +deploy_permission = boegel trz42 bedroge ocaisa casparvl # template for comment when user who set a label has no permission to trigger deploying tarballs no_deploy_permission_comment = Label `bot:deploy` has been set by user `{deploy_labeler}`, but only users `{deploy_permission_users}` have permission to trigger the action From 223c71cc4c144d2a6cb8846d8c3b51dba41c1c00 Mon Sep 17 00:00:00 2001 From: Lara Ramona Peeters <49882639+laraPPr@users.noreply.github.com> Date: Fri, 23 Jun 2023 12:22:39 +0200 Subject: [PATCH 049/698] Add CMake-3.21.1 and CMake-3.22.1 Also removed foss/2021b --- eessi-2023.06-eb-4.7.2-2021b.yml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/eessi-2023.06-eb-4.7.2-2021b.yml b/eessi-2023.06-eb-4.7.2-2021b.yml index 4f5c56dfe5..ba2a300a52 100644 --- a/eessi-2023.06-eb-4.7.2-2021b.yml +++ b/eessi-2023.06-eb-4.7.2-2021b.yml @@ -1,3 +1,8 @@ easyconfigs: - GCC-11.2.0 - - foss-2021b + - CMake-3.21.1-GCCcore-11.2.0.eb: + options: + include-easyblocks-from-pr: 2248 + - CMake-3.22.1-GCCcore-11.2.0.eb: + options: + include-easyblocks-from-pr: 2248 From 5b2987c61fcc294a0ffa6487aefb7b599f0f578a Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Fri, 23 Jun 2023 14:23:47 +0200 Subject: [PATCH 050/698] Added libpng --- eessi-2023.06-eb-4.7.2-2021a.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/eessi-2023.06-eb-4.7.2-2021a.yml b/eessi-2023.06-eb-4.7.2-2021a.yml index 9b1312ba9a..eb79be6257 100644 --- a/eessi-2023.06-eb-4.7.2-2021a.yml +++ b/eessi-2023.06-eb-4.7.2-2021a.yml @@ -4,3 +4,4 @@ easyconfigs: options: include-easyblocks-from-pr: 2248 - foss-2021a + - libpng-1.6.37-GCCcore-10.3.0.eb: From 8adb0135cf63f95da8395ff901afacdf2d24f08c Mon Sep 17 00:00:00 2001 From: Satish Kamath Date: Fri, 23 Jun 2023 14:52:49 +0200 Subject: [PATCH 051/698] Adding libjpeg-turbo-2.0.6-GCCcore-10.3.0.eb to eessi pilot 2023.06. --- eessi-2023.06-eb-4.7.2-2021a.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/eessi-2023.06-eb-4.7.2-2021a.yml b/eessi-2023.06-eb-4.7.2-2021a.yml index 9b1312ba9a..f0ba6aa0b0 100644 --- a/eessi-2023.06-eb-4.7.2-2021a.yml +++ b/eessi-2023.06-eb-4.7.2-2021a.yml @@ -4,3 +4,4 @@ easyconfigs: options: include-easyblocks-from-pr: 2248 - foss-2021a + - libjpeg-turbo-2.0.6-GCCcore-10.3.0.eb From 9a36d19918533549f4f9fdf844ae01e1407bfffd Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 23 Jun 2023 17:14:01 +0200 Subject: [PATCH 052/698] change upload_policy to 'latest' --- bot/bot-eessi-aws-citc.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bot/bot-eessi-aws-citc.cfg b/bot/bot-eessi-aws-citc.cfg index 71a674a0db..b4381f7e2c 100644 --- a/bot/bot-eessi-aws-citc.cfg +++ b/bot/bot-eessi-aws-citc.cfg @@ -123,7 +123,7 @@ bucket_name = eessi-staging-2023.06 # only upload the latest built artefact # 'once' : only once upload any built artefact for the build target # 'none' : do not upload any built artefacts -upload_policy = once +upload_policy = latest # which GH account has the permission to trigger the deployment (by setting # the label 'bot:deploy' (apparently this cannot be restricted on GitHub) From 32ed420fc70750feb71d7054fcd6729b034905c8 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Mon, 26 Jun 2023 09:19:33 +0200 Subject: [PATCH 053/698] {2023.06}[2022a] GCC 11.3.0 --- .github/workflows/test_eessi.yml | 1 + eessi-2023.06-eb-4.7.2-2022a.yml | 2 ++ 2 files changed, 3 insertions(+) create mode 100644 eessi-2023.06-eb-4.7.2-2022a.yml diff --git a/.github/workflows/test_eessi.yml b/.github/workflows/test_eessi.yml index 8e766c3a5c..17ccc42747 100644 --- a/.github/workflows/test_eessi.yml +++ b/.github/workflows/test_eessi.yml @@ -23,6 +23,7 @@ jobs: EASYSTACK_FILE: - eessi-2023.06-eb-4.7.2-2021a.yml - eessi-2023.06-eb-4.7.2-2021b.yml + - eessi-2023.06-eb-4.7.2-2022a.yml steps: - name: Check out software-layer repository uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # v3.1.0 diff --git a/eessi-2023.06-eb-4.7.2-2022a.yml b/eessi-2023.06-eb-4.7.2-2022a.yml new file mode 100644 index 0000000000..b8f0cc17bc --- /dev/null +++ b/eessi-2023.06-eb-4.7.2-2022a.yml @@ -0,0 +1,2 @@ +easyconfigs: + - GCC-11.3.0 From 3ed2b91597a8777c2922d428ad9313619768be7b Mon Sep 17 00:00:00 2001 From: lara Date: Mon, 26 Jun 2023 10:38:51 +0200 Subject: [PATCH 054/698] {2023.06}[2021b] zlib v1.2.11 --- eessi-2023.06-eb-4.7.2-2021b.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/eessi-2023.06-eb-4.7.2-2021b.yml b/eessi-2023.06-eb-4.7.2-2021b.yml index ba2a300a52..9f06908f0d 100644 --- a/eessi-2023.06-eb-4.7.2-2021b.yml +++ b/eessi-2023.06-eb-4.7.2-2021b.yml @@ -6,3 +6,4 @@ easyconfigs: - CMake-3.22.1-GCCcore-11.2.0.eb: options: include-easyblocks-from-pr: 2248 + - zlib-1.2.11-GCCcore-11.2.0 From 9417bfb1b71c1114ce4825523cb17399d2e32d64 Mon Sep 17 00:00:00 2001 From: Richard Top Date: Mon, 26 Jun 2023 08:50:48 +0000 Subject: [PATCH 055/698] adding QuantumESPRESSO/6.7 with GCC/10.3.0 to EESSI pilot 2023.06 --- eessi-2023.06-eb-4.7.2-2021a.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/eessi-2023.06-eb-4.7.2-2021a.yml b/eessi-2023.06-eb-4.7.2-2021a.yml index 83dff0ad4e..461c22b7ed 100644 --- a/eessi-2023.06-eb-4.7.2-2021a.yml +++ b/eessi-2023.06-eb-4.7.2-2021a.yml @@ -5,4 +5,5 @@ easyconfigs: include-easyblocks-from-pr: 2248 - foss-2021a - libpng-1.6.37-GCCcore-10.3.0.eb: - - libjpeg-turbo-2.0.6-GCCcore-10.3.0.eb \ No newline at end of file + - libjpeg-turbo-2.0.6-GCCcore-10.3.0.eb + - QuantumESPRESSO-6.7-foss-2021a.eb From 01a813c72fd88e9df1a62348ad5c821ce8ae1e3a Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Mon, 26 Jun 2023 16:08:16 +0200 Subject: [PATCH 056/698] {2023.06}[2022b] GCC 12.2.0 --- .github/workflows/test_eessi.yml | 1 + eessi-2023.06-eb-4.7.2-2022b.yml | 2 ++ 2 files changed, 3 insertions(+) create mode 100644 eessi-2023.06-eb-4.7.2-2022b.yml diff --git a/.github/workflows/test_eessi.yml b/.github/workflows/test_eessi.yml index 8e766c3a5c..32d594fa05 100644 --- a/.github/workflows/test_eessi.yml +++ b/.github/workflows/test_eessi.yml @@ -23,6 +23,7 @@ jobs: EASYSTACK_FILE: - eessi-2023.06-eb-4.7.2-2021a.yml - eessi-2023.06-eb-4.7.2-2021b.yml + - eessi-2023.06-eb-4.7.2-2022b.yml steps: - name: Check out software-layer repository uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # v3.1.0 diff --git a/eessi-2023.06-eb-4.7.2-2022b.yml b/eessi-2023.06-eb-4.7.2-2022b.yml new file mode 100644 index 0000000000..15c99b5e0b --- /dev/null +++ b/eessi-2023.06-eb-4.7.2-2022b.yml @@ -0,0 +1,2 @@ +easyconfigs: + - GCC-12.2.0 From 82fe73e19995a5bf70a55d8d5562c07f462fa1cb Mon Sep 17 00:00:00 2001 From: TopRichard Date: Tue, 27 Jun 2023 06:46:37 +0000 Subject: [PATCH 057/698] {2023.06}[foss/2021a] Qt5 V5.15.2 --- eessi-2023.06-eb-4.7.2-2021a.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/eessi-2023.06-eb-4.7.2-2021a.yml b/eessi-2023.06-eb-4.7.2-2021a.yml index 461c22b7ed..9468f268c7 100644 --- a/eessi-2023.06-eb-4.7.2-2021a.yml +++ b/eessi-2023.06-eb-4.7.2-2021a.yml @@ -7,3 +7,4 @@ easyconfigs: - libpng-1.6.37-GCCcore-10.3.0.eb: - libjpeg-turbo-2.0.6-GCCcore-10.3.0.eb - QuantumESPRESSO-6.7-foss-2021a.eb + - Qt5-5.15.2-GCCcore-10.3.0.eb From f2b4ede6270bc3481a89086e1c4fb869a9438d18 Mon Sep 17 00:00:00 2001 From: TopRichard Date: Tue, 27 Jun 2023 10:10:16 +0000 Subject: [PATCH 058/698] added --from-pr option --- eessi-2023.06-eb-4.7.2-2021a.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/eessi-2023.06-eb-4.7.2-2021a.yml b/eessi-2023.06-eb-4.7.2-2021a.yml index 9468f268c7..3f8dd5954e 100644 --- a/eessi-2023.06-eb-4.7.2-2021a.yml +++ b/eessi-2023.06-eb-4.7.2-2021a.yml @@ -7,4 +7,6 @@ easyconfigs: - libpng-1.6.37-GCCcore-10.3.0.eb: - libjpeg-turbo-2.0.6-GCCcore-10.3.0.eb - QuantumESPRESSO-6.7-foss-2021a.eb - - Qt5-5.15.2-GCCcore-10.3.0.eb + - Qt5-5.15.2-GCCcore-10.3.0.eb: + options: + -from-pr: 18087 From 237a16f6cefeaeffda24c5cc0b161eab2164572e Mon Sep 17 00:00:00 2001 From: TopRichard Date: Tue, 27 Jun 2023 15:01:20 +0000 Subject: [PATCH 059/698] added from-pr option --- eessi-2023.06-eb-4.7.2-2021a.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eessi-2023.06-eb-4.7.2-2021a.yml b/eessi-2023.06-eb-4.7.2-2021a.yml index 3f8dd5954e..79fe7a0716 100644 --- a/eessi-2023.06-eb-4.7.2-2021a.yml +++ b/eessi-2023.06-eb-4.7.2-2021a.yml @@ -9,4 +9,4 @@ easyconfigs: - QuantumESPRESSO-6.7-foss-2021a.eb - Qt5-5.15.2-GCCcore-10.3.0.eb: options: - -from-pr: 18087 + from-pr: 18087 From 77afe94f055a774a70ba50b7eb9e5fccf48f8ac9 Mon Sep 17 00:00:00 2001 From: lara Date: Wed, 28 Jun 2023 09:37:00 +0200 Subject: [PATCH 060/698] {2023.06}[2021b] OpenMPI v4.1.1 --- eessi-2023.06-eb-4.7.2-2021b.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/eessi-2023.06-eb-4.7.2-2021b.yml b/eessi-2023.06-eb-4.7.2-2021b.yml index 9f06908f0d..5e13dd68e2 100644 --- a/eessi-2023.06-eb-4.7.2-2021b.yml +++ b/eessi-2023.06-eb-4.7.2-2021b.yml @@ -7,3 +7,4 @@ easyconfigs: options: include-easyblocks-from-pr: 2248 - zlib-1.2.11-GCCcore-11.2.0 + - OpenMI-4.1.1-GCC-11.2.0 From b5b780c4ff3d3b68b6c1aeaee8d16f8a0ff55f13 Mon Sep 17 00:00:00 2001 From: lara Date: Wed, 28 Jun 2023 09:54:33 +0200 Subject: [PATCH 061/698] {2023.06}[foss/2021a] GROMACS v2021.3 --- eessi-2023.06-eb-4.7.2-2021a.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/eessi-2023.06-eb-4.7.2-2021a.yml b/eessi-2023.06-eb-4.7.2-2021a.yml index 461c22b7ed..223bfad6c4 100644 --- a/eessi-2023.06-eb-4.7.2-2021a.yml +++ b/eessi-2023.06-eb-4.7.2-2021a.yml @@ -7,3 +7,4 @@ easyconfigs: - libpng-1.6.37-GCCcore-10.3.0.eb: - libjpeg-turbo-2.0.6-GCCcore-10.3.0.eb - QuantumESPRESSO-6.7-foss-2021a.eb + - GROMACS-2021.3-foss-2021a.eb From a04bbf14346ee4165f46df22f32d4a6dd2cb1563 Mon Sep 17 00:00:00 2001 From: Lara Ramona Peeters <49882639+laraPPr@users.noreply.github.com> Date: Wed, 28 Jun 2023 10:07:43 +0200 Subject: [PATCH 062/698] change OpenMPI line --- eessi-2023.06-eb-4.7.2-2021b.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eessi-2023.06-eb-4.7.2-2021b.yml b/eessi-2023.06-eb-4.7.2-2021b.yml index 5e13dd68e2..c379896d25 100644 --- a/eessi-2023.06-eb-4.7.2-2021b.yml +++ b/eessi-2023.06-eb-4.7.2-2021b.yml @@ -7,4 +7,4 @@ easyconfigs: options: include-easyblocks-from-pr: 2248 - zlib-1.2.11-GCCcore-11.2.0 - - OpenMI-4.1.1-GCC-11.2.0 + - OpenMPI-4.1.1-GCC-11.2.0 From 9b840928923e4a9ff18afbbf9bf6d032545cf9ee Mon Sep 17 00:00:00 2001 From: TopRichard Date: Wed, 28 Jun 2023 10:54:36 +0000 Subject: [PATCH 063/698] {2023.06}[foss/2021b] QuantumESPRESSO V6.8 --- eessi-2023.06-eb-4.7.2-2021b.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/eessi-2023.06-eb-4.7.2-2021b.yml b/eessi-2023.06-eb-4.7.2-2021b.yml index 9f06908f0d..ec83ab018c 100644 --- a/eessi-2023.06-eb-4.7.2-2021b.yml +++ b/eessi-2023.06-eb-4.7.2-2021b.yml @@ -7,3 +7,4 @@ easyconfigs: options: include-easyblocks-from-pr: 2248 - zlib-1.2.11-GCCcore-11.2.0 + - QuantumESPRESSO-6.8-foss-2021b.eb From 7f27f248bdc4df693e07b9ec71aea878cf8ce748 Mon Sep 17 00:00:00 2001 From: Lara Ramona Peeters <49882639+laraPPr@users.noreply.github.com> Date: Wed, 28 Jun 2023 13:08:53 +0200 Subject: [PATCH 064/698] Update eessi-2023.06-eb-4.7.2-2021b.yml --- eessi-2023.06-eb-4.7.2-2021b.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eessi-2023.06-eb-4.7.2-2021b.yml b/eessi-2023.06-eb-4.7.2-2021b.yml index 5e13dd68e2..d6f22b87d0 100644 --- a/eessi-2023.06-eb-4.7.2-2021b.yml +++ b/eessi-2023.06-eb-4.7.2-2021b.yml @@ -7,4 +7,4 @@ easyconfigs: options: include-easyblocks-from-pr: 2248 - zlib-1.2.11-GCCcore-11.2.0 - - OpenMI-4.1.1-GCC-11.2.0 + From 71122ecfbef0a5295846879eff382b3ea080a15a Mon Sep 17 00:00:00 2001 From: Lara Ramona Peeters <49882639+laraPPr@users.noreply.github.com> Date: Wed, 28 Jun 2023 13:09:27 +0200 Subject: [PATCH 065/698] Update eessi-2023.06-eb-4.7.2-2021b.yml --- eessi-2023.06-eb-4.7.2-2021b.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/eessi-2023.06-eb-4.7.2-2021b.yml b/eessi-2023.06-eb-4.7.2-2021b.yml index d6f22b87d0..9f06908f0d 100644 --- a/eessi-2023.06-eb-4.7.2-2021b.yml +++ b/eessi-2023.06-eb-4.7.2-2021b.yml @@ -7,4 +7,3 @@ easyconfigs: options: include-easyblocks-from-pr: 2248 - zlib-1.2.11-GCCcore-11.2.0 - From 6fc4c8ee9676991b02110e81d24f85dbdb992f0e Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 30 Jun 2023 10:04:11 +0200 Subject: [PATCH 066/698] {2023.06}[2021b] FlexiBLAS v3.0.4 (+ OpenBLAS v0.3.18) --- eessi-2023.06-eb-4.7.2-2021b.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/eessi-2023.06-eb-4.7.2-2021b.yml b/eessi-2023.06-eb-4.7.2-2021b.yml index c379896d25..5857bf8977 100644 --- a/eessi-2023.06-eb-4.7.2-2021b.yml +++ b/eessi-2023.06-eb-4.7.2-2021b.yml @@ -8,3 +8,4 @@ easyconfigs: include-easyblocks-from-pr: 2248 - zlib-1.2.11-GCCcore-11.2.0 - OpenMPI-4.1.1-GCC-11.2.0 + - FlexiBLAS-3.0.4-GCC-11.2.0.eb From 7b9f662504419327bb02a568f30c4ca2b010492a Mon Sep 17 00:00:00 2001 From: TopRichard Date: Fri, 30 Jun 2023 09:57:06 +0000 Subject: [PATCH 067/698] adding the option:ignore-test-failure --- eessi-2023.06-eb-4.7.2-2021a.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/eessi-2023.06-eb-4.7.2-2021a.yml b/eessi-2023.06-eb-4.7.2-2021a.yml index 5db011b245..de0572ed77 100644 --- a/eessi-2023.06-eb-4.7.2-2021a.yml +++ b/eessi-2023.06-eb-4.7.2-2021a.yml @@ -11,3 +11,4 @@ easyconfigs: - Qt5-5.15.2-GCCcore-10.3.0.eb: options: from-pr: 18087 + ignore-test-failure From 5436f8b507a279cdce598c57cdd7b69b67bb3a27 Mon Sep 17 00:00:00 2001 From: TopRichard Date: Fri, 30 Jun 2023 10:14:53 +0000 Subject: [PATCH 068/698] removed the option:ignore-test-failure --- eessi-2023.06-eb-4.7.2-2021a.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/eessi-2023.06-eb-4.7.2-2021a.yml b/eessi-2023.06-eb-4.7.2-2021a.yml index de0572ed77..5db011b245 100644 --- a/eessi-2023.06-eb-4.7.2-2021a.yml +++ b/eessi-2023.06-eb-4.7.2-2021a.yml @@ -11,4 +11,3 @@ easyconfigs: - Qt5-5.15.2-GCCcore-10.3.0.eb: options: from-pr: 18087 - ignore-test-failure From c62d164321a45dae9f88129800966b9363260454 Mon Sep 17 00:00:00 2001 From: lara Date: Mon, 3 Jul 2023 12:51:27 +0200 Subject: [PATCH 069/698] {2023.06}[2021b] gompi --- eessi-2023.06-eb-4.7.2-2021b.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/eessi-2023.06-eb-4.7.2-2021b.yml b/eessi-2023.06-eb-4.7.2-2021b.yml index c379896d25..6ff917f109 100644 --- a/eessi-2023.06-eb-4.7.2-2021b.yml +++ b/eessi-2023.06-eb-4.7.2-2021b.yml @@ -8,3 +8,4 @@ easyconfigs: include-easyblocks-from-pr: 2248 - zlib-1.2.11-GCCcore-11.2.0 - OpenMPI-4.1.1-GCC-11.2.0 + - gompi-2021b From 0e6dc4d7c1ab6ebda30c3c1d6f04b43e52f375c3 Mon Sep 17 00:00:00 2001 From: Satish Kamath Date: Mon, 3 Jul 2023 13:37:17 +0200 Subject: [PATCH 070/698] Adding ReFrame for ingestion via the bot. Created a new yml file via which ReFrame should be added since ReFrame depends on the system Python. --- .github/workflows/test_eessi.yml | 1 + eessi-2023.06-eb-4.7.2.yml | 2 ++ 2 files changed, 3 insertions(+) create mode 100644 eessi-2023.06-eb-4.7.2.yml diff --git a/.github/workflows/test_eessi.yml b/.github/workflows/test_eessi.yml index a0401d6844..788f9dd7e3 100644 --- a/.github/workflows/test_eessi.yml +++ b/.github/workflows/test_eessi.yml @@ -25,6 +25,7 @@ jobs: - eessi-2023.06-eb-4.7.2-2021b.yml - eessi-2023.06-eb-4.7.2-2022a.yml - eessi-2023.06-eb-4.7.2-2022b.yml + - eessi-2023.06-eb-4.7.2.yml steps: - name: Check out software-layer repository uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # v3.1.0 diff --git a/eessi-2023.06-eb-4.7.2.yml b/eessi-2023.06-eb-4.7.2.yml new file mode 100644 index 0000000000..245271cebf --- /dev/null +++ b/eessi-2023.06-eb-4.7.2.yml @@ -0,0 +1,2 @@ +easyconfigs: + - ReFrame-4.2.0 From ee60b27d0c53d1f0475dbd2cfcb24f63fe8b2fa8 Mon Sep 17 00:00:00 2001 From: Satish Kamath Date: Tue, 4 Jul 2023 11:26:23 +0200 Subject: [PATCH 071/698] Amending file name so that it gets picked up by the bot. --- .github/workflows/test_eessi.yml | 2 +- eessi-2023.06-eb-4.7.2.yml | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) delete mode 100644 eessi-2023.06-eb-4.7.2.yml diff --git a/.github/workflows/test_eessi.yml b/.github/workflows/test_eessi.yml index 788f9dd7e3..e93d437cea 100644 --- a/.github/workflows/test_eessi.yml +++ b/.github/workflows/test_eessi.yml @@ -25,7 +25,7 @@ jobs: - eessi-2023.06-eb-4.7.2-2021b.yml - eessi-2023.06-eb-4.7.2-2022a.yml - eessi-2023.06-eb-4.7.2-2022b.yml - - eessi-2023.06-eb-4.7.2.yml + - eessi-2023.06-eb-4.7.2-system.yml steps: - name: Check out software-layer repository uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # v3.1.0 diff --git a/eessi-2023.06-eb-4.7.2.yml b/eessi-2023.06-eb-4.7.2.yml deleted file mode 100644 index 245271cebf..0000000000 --- a/eessi-2023.06-eb-4.7.2.yml +++ /dev/null @@ -1,2 +0,0 @@ -easyconfigs: - - ReFrame-4.2.0 From 78a78214fbba67173b069269fb69ef0d25e0b966 Mon Sep 17 00:00:00 2001 From: Satish Kamath Date: Tue, 4 Jul 2023 11:33:05 +0200 Subject: [PATCH 072/698] Forgot to add this file. The tar balls will be empty if this file is not present. --- eessi-2023.06-eb-4.7.2-system.yml | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 eessi-2023.06-eb-4.7.2-system.yml diff --git a/eessi-2023.06-eb-4.7.2-system.yml b/eessi-2023.06-eb-4.7.2-system.yml new file mode 100644 index 0000000000..245271cebf --- /dev/null +++ b/eessi-2023.06-eb-4.7.2-system.yml @@ -0,0 +1,2 @@ +easyconfigs: + - ReFrame-4.2.0 From 2a32626f5b3a38e3b8a0beebbc65e13761830154 Mon Sep 17 00:00:00 2001 From: TopRichard Date: Tue, 4 Jul 2023 12:40:47 +0000 Subject: [PATCH 073/698] added a hook to set check_qtwebengine to False --- eb_hooks.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/eb_hooks.py b/eb_hooks.py index 787e990e75..55c1e10a5a 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -59,9 +59,16 @@ def parse_hook(ec, *args, **kwargs): # determine path to Prefix installation in compat layer via $EPREFIX eprefix = get_eessi_envvar('EPREFIX') +#Disable Qt5/5.15.2 Sanity-check + Qt5_Sanitycheck_disable(ec, eprefix) + if ec.name in PARSE_HOOKS: PARSE_HOOKS[ec.name](ec, eprefix) +def Qt5_Sanitycheck_disable(ec, eprefix): + if ec.name == 'Qt5'and ec.version == '5.15.2': + ec['check_qtwebengine'] = False + print_msg(NOTE:the value of check_qtwebengine has been set to %s , ec['check_qtwebengine']) def pre_prepare_hook(self, *args, **kwargs): """Main pre-prepare hook: trigger custom functions.""" From a86d0e6f8c84dd82a22c8f8794ed3fbc945ee3c7 Mon Sep 17 00:00:00 2001 From: TopRichard Date: Tue, 4 Jul 2023 12:44:55 +0000 Subject: [PATCH 074/698] renamed the function in the hook to Qt5_check_qtwebengine_disable --- eb_hooks.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/eb_hooks.py b/eb_hooks.py index 55c1e10a5a..a0d8090d23 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -60,12 +60,12 @@ def parse_hook(ec, *args, **kwargs): eprefix = get_eessi_envvar('EPREFIX') #Disable Qt5/5.15.2 Sanity-check - Qt5_Sanitycheck_disable(ec, eprefix) + Qt5_check_qtwebengine_disable(ec, eprefix) if ec.name in PARSE_HOOKS: PARSE_HOOKS[ec.name](ec, eprefix) -def Qt5_Sanitycheck_disable(ec, eprefix): +def Qt5_check_qtwebengine_disable(ec, eprefix): if ec.name == 'Qt5'and ec.version == '5.15.2': ec['check_qtwebengine'] = False print_msg(NOTE:the value of check_qtwebengine has been set to %s , ec['check_qtwebengine']) From c46d016dde5a4194821b25c1ed954d13663327ce Mon Sep 17 00:00:00 2001 From: TopRichard Date: Tue, 4 Jul 2023 12:51:26 +0000 Subject: [PATCH 075/698] renamed the function in the hook to Qt5_check_qtwebengine_disable 1 --- eb_hooks.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eb_hooks.py b/eb_hooks.py index a0d8090d23..6592427801 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -59,7 +59,7 @@ def parse_hook(ec, *args, **kwargs): # determine path to Prefix installation in compat layer via $EPREFIX eprefix = get_eessi_envvar('EPREFIX') -#Disable Qt5/5.15.2 Sanity-check +#Disable Qt5/5.15.2 qtwebengine in Sanity-check Qt5_check_qtwebengine_disable(ec, eprefix) if ec.name in PARSE_HOOKS: From 9262538f1420c51df74ae94542a23f130d0343bd Mon Sep 17 00:00:00 2001 From: TopRichard Date: Tue, 4 Jul 2023 15:48:05 +0000 Subject: [PATCH 076/698] editted the hook --- eb_hooks.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eb_hooks.py b/eb_hooks.py index 6592427801..8efd38b05d 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -68,7 +68,7 @@ def parse_hook(ec, *args, **kwargs): def Qt5_check_qtwebengine_disable(ec, eprefix): if ec.name == 'Qt5'and ec.version == '5.15.2': ec['check_qtwebengine'] = False - print_msg(NOTE:the value of check_qtwebengine has been set to %s , ec['check_qtwebengine']) + print_msg(The value of check_qtwebengine has been set to %s , ec['check_qtwebengine']) def pre_prepare_hook(self, *args, **kwargs): """Main pre-prepare hook: trigger custom functions.""" From c1c8e8e0ae4030747ab8752f6d94e40670f62f24 Mon Sep 17 00:00:00 2001 From: TopRichard Date: Tue, 4 Jul 2023 15:51:54 +0000 Subject: [PATCH 077/698] editted the hook --- eb_hooks.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eb_hooks.py b/eb_hooks.py index 8efd38b05d..aa1b64dc4b 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -68,7 +68,7 @@ def parse_hook(ec, *args, **kwargs): def Qt5_check_qtwebengine_disable(ec, eprefix): if ec.name == 'Qt5'and ec.version == '5.15.2': ec['check_qtwebengine'] = False - print_msg(The value of check_qtwebengine has been set to %s , ec['check_qtwebengine']) + print_msg("The value of check_qtwebengine has been set to %s", ec['check_qtwebengine']) def pre_prepare_hook(self, *args, **kwargs): """Main pre-prepare hook: trigger custom functions.""" From 22245d4b0aec2b21b87c1ea9fc37d2da31fa0af8 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 5 Jul 2023 08:44:45 +0200 Subject: [PATCH 078/698] refactor parse hook for Qt5 to disable check_qtwebengine --- eb_hooks.py | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/eb_hooks.py b/eb_hooks.py index aa1b64dc4b..03ad339fa9 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -59,16 +59,9 @@ def parse_hook(ec, *args, **kwargs): # determine path to Prefix installation in compat layer via $EPREFIX eprefix = get_eessi_envvar('EPREFIX') -#Disable Qt5/5.15.2 qtwebengine in Sanity-check - Qt5_check_qtwebengine_disable(ec, eprefix) - if ec.name in PARSE_HOOKS: PARSE_HOOKS[ec.name](ec, eprefix) -def Qt5_check_qtwebengine_disable(ec, eprefix): - if ec.name == 'Qt5'and ec.version == '5.15.2': - ec['check_qtwebengine'] = False - print_msg("The value of check_qtwebengine has been set to %s", ec['check_qtwebengine']) def pre_prepare_hook(self, *args, **kwargs): """Main pre-prepare hook: trigger custom functions.""" @@ -166,6 +159,17 @@ def parse_hook_fontconfig_add_fonts(ec, eprefix): raise EasyBuildError("fontconfig-specific hook triggered for non-fontconfig easyconfig?!") +def parse_hook_Qt5_check_qtwebengine_disable(ec, eprefix): + """ + Disable check for QtWebEngine in Qt5 as workaround for problem with determining glibc version. + """ + if ec.name == 'Qt5': + # workaround for glibc version being reported as "UNKNOWN" in Gentoo Prefix environment by EasyBuild v4.7.2, + # see also https://github.com/easybuilders/easybuild-framework/pull/4290 + ec['check_qtwebengine'] = False + print_msg("Checking for QtWebEgine in Qt5 installation has been disabled") + + def parse_hook_ucx_eprefix(ec, eprefix): """Make UCX aware of compatibility layer via additional configuration options.""" if ec.name == 'UCX': @@ -239,6 +243,7 @@ def pre_configure_hook_wrf_aarch64(self, *args, **kwargs): PARSE_HOOKS = { 'CGAL': parse_hook_cgal_toolchainopts_precise, 'fontconfig': parse_hook_fontconfig_add_fonts, + 'Qt5': parse_hook_Qt5_check_qtwebengine_disable, 'UCX': parse_hook_ucx_eprefix, } From 913ff5330188f002f2d00746dd6441a2838dd8bf Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 5 Jul 2023 09:03:37 +0200 Subject: [PATCH 079/698] raise error if Qt5-specific hook is triggered for something else than Qt5 --- eb_hooks.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/eb_hooks.py b/eb_hooks.py index 03ad339fa9..ec8e2a2c55 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -168,6 +168,8 @@ def parse_hook_Qt5_check_qtwebengine_disable(ec, eprefix): # see also https://github.com/easybuilders/easybuild-framework/pull/4290 ec['check_qtwebengine'] = False print_msg("Checking for QtWebEgine in Qt5 installation has been disabled") + else: + raise EasyBuildError("Qt5-specific hook triggered for non-Qt5 easyconfig?!") def parse_hook_ucx_eprefix(ec, eprefix): From a2fda19a6bca18fdf204245fc3984777744a3b16 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 5 Jul 2023 09:10:34 +0200 Subject: [PATCH 080/698] add hook to relax max_failing_lapack_tests_num_errors for OpenBLAS to 300 on aarch64 --- eb_hooks.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/eb_hooks.py b/eb_hooks.py index 787e990e75..25cc7bc02a 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -159,6 +159,23 @@ def parse_hook_fontconfig_add_fonts(ec, eprefix): raise EasyBuildError("fontconfig-specific hook triggered for non-fontconfig easyconfig?!") +def parse_hook_openblas_relax_lapack_tests_num_errors(ec, eprefix): + """Relax number of failing numerical LAPACK tests on Arm 64-bit systems.""" + if ec.name == 'OpenBLAS': + # relax maximum number of failed numerical LAPACK tests on Arm 64-bit systems, + # since the default setting of 150 that works well on x86_64 is a bit too strict + cfg_option = 'max_failing_lapack_tests_num_errors' + if get_cpu_architecture() == AARCH64: + orig_value = ec[cfg_option] + ec[cfg_option] = 300 + print_msg("Maximum number of failing LAPACK tests with numerical errors for %s relaxed to %s (was %s)", + ec.name, ec[cfg_option], orig_value) + else: + print_msg("Not changing option %s for %s on non-AARCH64", cfg_option, ec.name) + else: + raise EasyBuildError("OpenBLAS-specific hook triggered for non-OpenBLAS easyconfig?!") + + def parse_hook_ucx_eprefix(ec, eprefix): """Make UCX aware of compatibility layer via additional configuration options.""" if ec.name == 'UCX': @@ -232,6 +249,7 @@ def pre_configure_hook_wrf_aarch64(self, *args, **kwargs): PARSE_HOOKS = { 'CGAL': parse_hook_cgal_toolchainopts_precise, 'fontconfig': parse_hook_fontconfig_add_fonts, + 'OpenBLAS': parse_hook_openblas_relax_lapack_tests_num_errors, 'UCX': parse_hook_ucx_eprefix, } From ca888ade6e62bb9faed66ae53db92b4630b3c296 Mon Sep 17 00:00:00 2001 From: TopRichard Date: Wed, 5 Jul 2023 07:48:42 +0000 Subject: [PATCH 081/698] added some explanation in the eessi-2021a yml file --- eessi-2023.06-eb-4.7.2-2021a.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/eessi-2023.06-eb-4.7.2-2021a.yml b/eessi-2023.06-eb-4.7.2-2021a.yml index 5db011b245..1c16b1ce72 100644 --- a/eessi-2023.06-eb-4.7.2-2021a.yml +++ b/eessi-2023.06-eb-4.7.2-2021a.yml @@ -9,5 +9,7 @@ easyconfigs: - QuantumESPRESSO-6.7-foss-2021a.eb - GROMACS-2021.3-foss-2021a.eb - Qt5-5.15.2-GCCcore-10.3.0.eb: +# add missing patch files for Qt5 5.15.2 to fix build problems with glibc 2.34, +# see https://github.com/easybuilders/easybuild-easyconfigs/pull/18087 options: from-pr: 18087 From a624cef2055f9f6ff17c0a19bcc24c775bf16f7c Mon Sep 17 00:00:00 2001 From: TopRichard Date: Wed, 5 Jul 2023 08:29:42 +0000 Subject: [PATCH 082/698] matching indent --- eessi-2023.06-eb-4.7.2-2021a.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/eessi-2023.06-eb-4.7.2-2021a.yml b/eessi-2023.06-eb-4.7.2-2021a.yml index 1c16b1ce72..c0fa353475 100644 --- a/eessi-2023.06-eb-4.7.2-2021a.yml +++ b/eessi-2023.06-eb-4.7.2-2021a.yml @@ -9,7 +9,7 @@ easyconfigs: - QuantumESPRESSO-6.7-foss-2021a.eb - GROMACS-2021.3-foss-2021a.eb - Qt5-5.15.2-GCCcore-10.3.0.eb: -# add missing patch files for Qt5 5.15.2 to fix build problems with glibc 2.34, -# see https://github.com/easybuilders/easybuild-easyconfigs/pull/18087 + # add missing patch files for Qt5 5.15.2 to fix build problems with glibc 2.34, + # see https://github.com/easybuilders/easybuild-easyconfigs/pull/18087 options: from-pr: 18087 From ca7e3681d163bb3123c5eae0cea003fecf76fd1c Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 5 Jul 2023 15:22:31 +0200 Subject: [PATCH 083/698] retain alphabetical order in parse hooks --- eb_hooks.py | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/eb_hooks.py b/eb_hooks.py index ad46dc166a..191e24678b 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -159,19 +159,6 @@ def parse_hook_fontconfig_add_fonts(ec, eprefix): raise EasyBuildError("fontconfig-specific hook triggered for non-fontconfig easyconfig?!") -def parse_hook_Qt5_check_qtwebengine_disable(ec, eprefix): - """ - Disable check for QtWebEngine in Qt5 as workaround for problem with determining glibc version. - """ - if ec.name == 'Qt5': - # workaround for glibc version being reported as "UNKNOWN" in Gentoo Prefix environment by EasyBuild v4.7.2, - # see also https://github.com/easybuilders/easybuild-framework/pull/4290 - ec['check_qtwebengine'] = False - print_msg("Checking for QtWebEgine in Qt5 installation has been disabled") - else: - raise EasyBuildError("Qt5-specific hook triggered for non-Qt5 easyconfig?!") - - def parse_hook_openblas_relax_lapack_tests_num_errors(ec, eprefix): """Relax number of failing numerical LAPACK tests on Arm 64-bit systems.""" if ec.name == 'OpenBLAS': @@ -189,6 +176,19 @@ def parse_hook_openblas_relax_lapack_tests_num_errors(ec, eprefix): raise EasyBuildError("OpenBLAS-specific hook triggered for non-OpenBLAS easyconfig?!") +def parse_hook_qt5_check_qtwebengine_disable(ec, eprefix): + """ + Disable check for QtWebEngine in Qt5 as workaround for problem with determining glibc version. + """ + if ec.name == 'Qt5': + # workaround for glibc version being reported as "UNKNOWN" in Gentoo Prefix environment by EasyBuild v4.7.2, + # see also https://github.com/easybuilders/easybuild-framework/pull/4290 + ec['check_qtwebengine'] = False + print_msg("Checking for QtWebEgine in Qt5 installation has been disabled") + else: + raise EasyBuildError("Qt5-specific hook triggered for non-Qt5 easyconfig?!") + + def parse_hook_ucx_eprefix(ec, eprefix): """Make UCX aware of compatibility layer via additional configuration options.""" if ec.name == 'UCX': @@ -263,7 +263,7 @@ def pre_configure_hook_wrf_aarch64(self, *args, **kwargs): 'CGAL': parse_hook_cgal_toolchainopts_precise, 'fontconfig': parse_hook_fontconfig_add_fonts, 'OpenBLAS': parse_hook_openblas_relax_lapack_tests_num_errors, - 'Qt5': parse_hook_Qt5_check_qtwebengine_disable, + 'Qt5': parse_hook_qt5_check_qtwebengine_disable, 'UCX': parse_hook_ucx_eprefix, } From ab7e4d48e4745f7322654899b8d9e1348dbe514c Mon Sep 17 00:00:00 2001 From: TopRichard <121792457+TopRichard@users.noreply.github.com> Date: Fri, 7 Jul 2023 09:17:53 +0200 Subject: [PATCH 084/698] Update eessi-2023.06-eb-4.7.2-2021b.yml Co-authored-by: Kenneth Hoste --- eessi-2023.06-eb-4.7.2-2021b.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/eessi-2023.06-eb-4.7.2-2021b.yml b/eessi-2023.06-eb-4.7.2-2021b.yml index 97adcc3a71..6a467e9064 100644 --- a/eessi-2023.06-eb-4.7.2-2021b.yml +++ b/eessi-2023.06-eb-4.7.2-2021b.yml @@ -10,4 +10,5 @@ easyconfigs: - OpenMPI-4.1.1-GCC-11.2.0 - gompi-2021b - FlexiBLAS-3.0.4-GCC-11.2.0.eb + - foss-2021b.eb - QuantumESPRESSO-6.8-foss-2021b.eb From 145cbe9c47b1cb89ad40d92d2a36d6a2402c525f Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Sat, 8 Jul 2023 14:17:32 +0200 Subject: [PATCH 085/698] copy build log to build logs dir if build failed --- EESSI-pilot-install-software.sh | 45 +++++++++++++++++++++++++++++++++ bot/build.sh | 20 ++++++++++++--- run_in_compat_layer_env.sh | 3 +++ 3 files changed, 64 insertions(+), 4 deletions(-) diff --git a/EESSI-pilot-install-software.sh b/EESSI-pilot-install-software.sh index 12878b7e6c..bc22410b36 100755 --- a/EESSI-pilot-install-software.sh +++ b/EESSI-pilot-install-software.sh @@ -14,6 +14,36 @@ display_help() { echo " -y | --https-proxy URL - provides URL for the environment variable https_proxy" } +function copy_build_log() { + # copy specified build log to specified directory, with some context added + build_log=${1} + build_logs_dir=${2} + + # also copy to build logs directory, if specified + if [ ! -z "${build_logs_dir}" ]; then + log_filename="$(basename ${build_log})" + if [ ! -z "${SLURM_JOB_ID}" ]; then + # use subdirectory for build log in context of a Slurm job + build_log_path="${build_logs_dir}/jobs/${SLURM_JOB_ID}/${log_filename}" + else + build_log_path="${build_logs_dir}/non-jobs/${log_filename}" + fi + mkdir -p $(dirname ${build_log_path}) + cp -a ${build_log} ${build_log_path} + + # add context to end of copied log file + echo >> ${build_log_path} + echo "Context from which build log was copied:" >> ${build_log_path} + echo "- original path of build log: ${build_log}" >> ${build_log_path} + echo "- working directory: ${PWD}" >> ${build_log_path} + echo "- Slurm job ID: ${SLURM_OUT}" >> ${build_log_path} + echo "- EasyBuild version: ${eb_version}" >> ${build_log_path} + echo "- easystack file: ${es}" >> ${build_log_path} + + echo "EasyBuild log file ${build_log} copied to ${build_log_path} (with context appended)" + fi +} + POSITIONAL_ARGS=() while [[ $# -gt 0 ]]; do @@ -35,6 +65,10 @@ while [[ $# -gt 0 ]]; do export https_proxy="$2" shift 2 ;; + --build-logs-dir) + export build_logs_dir="${2}" + shift 2 + ;; -*|--*) echo "Error: Unknown option: $1" >&2 exit 1 @@ -150,6 +184,17 @@ for eb_version in '4.7.2'; do echo_green "Feeding easystack file ${es} to EasyBuild..." ${EB} --easystack ${TOPDIR}/${es} --robot + ec=$? + + # copy EasyBuild log file if EasyBuild exited with an error + if [ ${ec} -ne 0 ]; then + eb_last_log=$(unset EB_VERBOSE; eb --last-log) + # copy to current working directory + cp -a ${eb_last_log} . + echo "Last EasyBuild log file copied from ${eb_last_log} to ${PWD}" + # copy to build logs dir (with context added) + copy_build_log "${eb_last_log}" "${build_logs_dir}" + fi $TOPDIR/check_missing_installations.sh ${TOPDIR}/${es} else diff --git a/bot/build.sh b/bot/build.sh index c8def2cdd3..bd7b2fa8d8 100755 --- a/bot/build.sh +++ b/bot/build.sh @@ -53,6 +53,17 @@ LOCAL_TMP=$(cfg_get_value "site_config" "local_tmp") echo "bot/build.sh: LOCAL_TMP='${LOCAL_TMP}'" # TODO should local_tmp be mandatory? --> then we check here and exit if it is not provided +# check if path to copy build logs to is specified, so we can copy build logs for failing builds there +BUILD_LOGS_DIR=$(cfg_get_value "site_config" "build_logs_dir") +echo "bot/build.sh: BUILD_LOGS_DIR='${BUILD_LOGS_DIR}'" +# if $BUILD_LOGS_DIR is set, add it to $SINGULARITY_BIND so the path is available in the build container +mkdir -p ${BUILD_LOGS_DIR} +if [[ -z ${SINGULARITY_BIND} ]]; then + export SINGULARITY_BIND="${BUILD_LOGS_DIR}" +else + export SINGULARITY_BIND="${SINGULARITY_BIND},${BUILD_LOGS_DIR}" +fi + SINGULARITY_CACHEDIR=$(cfg_get_value "site_config" "container_cachedir") echo "bot/build.sh: SINGULARITY_CACHEDIR='${SINGULARITY_CACHEDIR}'" if [[ ! -z ${SINGULARITY_CACHEDIR} ]]; then @@ -151,19 +162,20 @@ BUILD_STEP_ARGS+=("--save" "${TARBALL_TMP_BUILD_STEP_DIR}") BUILD_STEP_ARGS+=("--storage" "${STORAGE}") # prepare arguments to install_software_layer.sh (specific to build step) -GENERIC_OPT= +declare -a INSTALL_SCRIPT_ARGS=() if [[ ${EESSI_SOFTWARE_SUBDIR_OVERRIDE} =~ .*/generic$ ]]; then - GENERIC_OPT="--generic" + INSTALL_SCRIPT_ARGS+=("--generic") fi +[[ ! -z ${BUILD_LOGS_DIR} ]] && INSTALL_SCRIPT_ARGS+=("--build-logs-dir" "${BUILD_LOGS_DIR}") # create tmp file for output of build step build_outerr=$(mktemp build.outerr.XXXX) echo "Executing command to build software:" echo "./eessi_container.sh ${COMMON_ARGS[@]} ${BUILD_STEP_ARGS[@]}" -echo " -- ./install_software_layer.sh ${GENERIC_OPT} \"$@\" 2>&1 | tee -a ${build_outerr}" +echo " -- ./install_software_layer.sh \"${INSTALL_SCRIPT_ARGS[@]}\" \"$@\" 2>&1 | tee -a ${build_outerr}" ./eessi_container.sh "${COMMON_ARGS[@]}" "${BUILD_STEP_ARGS[@]}" \ - -- ./install_software_layer.sh ${GENERIC_OPT} "$@" 2>&1 | tee -a ${build_outerr} + -- ./install_software_layer.sh "${INSTALL_SCRIPT_ARGS[@]}" "$@" 2>&1 | tee -a ${build_outerr} # prepare directory to store tarball of tmp for tarball step TARBALL_TMP_TARBALL_STEP_DIR=${PREVIOUS_TMP_DIR}/tarball_step diff --git a/run_in_compat_layer_env.sh b/run_in_compat_layer_env.sh index c70077bf15..12688e2aed 100755 --- a/run_in_compat_layer_env.sh +++ b/run_in_compat_layer_env.sh @@ -14,6 +14,9 @@ if [ ! -d ${EESSI_COMPAT_LAYER_DIR} ]; then fi INPUT=$(echo "$@") +if [ ! -z ${SLURM_JOB_ID} ]; then + INPUT="export SLURM_JOB_ID=${SLURM_JOB_ID}; ${INPUT}" +fi if [ ! -z ${EESSI_SOFTWARE_SUBDIR_OVERRIDE} ]; then INPUT="export EESSI_SOFTWARE_SUBDIR_OVERRIDE=${EESSI_SOFTWARE_SUBDIR_OVERRIDE}; ${INPUT}" fi From 9d9cf1d3a7ee9d3a488716da8d7bdad37f311cf1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Mon, 10 Jul 2023 10:20:39 +0200 Subject: [PATCH 086/698] add build_logs_dir setting --- bot/bot-eessi-aws-citc.cfg | 3 +++ 1 file changed, 3 insertions(+) diff --git a/bot/bot-eessi-aws-citc.cfg b/bot/bot-eessi-aws-citc.cfg index 5b3ad34612..3d5f2c77bf 100644 --- a/bot/bot-eessi-aws-citc.cfg +++ b/bot/bot-eessi-aws-citc.cfg @@ -28,6 +28,9 @@ private_key = /mnt/shared/home/bot/eessi-bot-software-layer/eessi-bot-citc-aws-p # name of the job script used for building an EESSI stack build_job_script = /mnt/shared/home/bot/eessi-bot-software-layer/scripts/bot-build.slurm +# Path (directory) to which build logs for (only) failing builds should be copied by bot/build.sh script +build_logs_dir = /mnt/shared/bot-build-logs + # The container_cachedir may be used to reuse downloaded container image files # across jobs. Thus, jobs can more quickly launch containers. container_cachedir = /mnt/shared/home/bot/eessi-bot-software-layer/containers-cache-dir From b662fc08094ff93b99e2fed1839ab56369be3cdd Mon Sep 17 00:00:00 2001 From: lara Date: Mon, 10 Jul 2023 16:34:15 +0200 Subject: [PATCH 087/698] {2023.06}[foss/2021b] GROMACS v2021.5 --- eessi-2023.06-eb-4.7.2-2021b.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/eessi-2023.06-eb-4.7.2-2021b.yml b/eessi-2023.06-eb-4.7.2-2021b.yml index 6a467e9064..614c22e6a3 100644 --- a/eessi-2023.06-eb-4.7.2-2021b.yml +++ b/eessi-2023.06-eb-4.7.2-2021b.yml @@ -12,3 +12,5 @@ easyconfigs: - FlexiBLAS-3.0.4-GCC-11.2.0.eb - foss-2021b.eb - QuantumESPRESSO-6.8-foss-2021b.eb + - GROMACS-2021.5-foss-2021b.eb + From 5a382291361d947b37ff16f5013e25a5790c0bc8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Wed, 12 Jul 2023 12:08:32 +0200 Subject: [PATCH 088/698] run chmod 0644 on copied build log --- EESSI-pilot-install-software.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/EESSI-pilot-install-software.sh b/EESSI-pilot-install-software.sh index bc22410b36..8110135cc0 100755 --- a/EESSI-pilot-install-software.sh +++ b/EESSI-pilot-install-software.sh @@ -30,6 +30,7 @@ function copy_build_log() { fi mkdir -p $(dirname ${build_log_path}) cp -a ${build_log} ${build_log_path} + chmod 0644 ${build_log_path} # add context to end of copied log file echo >> ${build_log_path} From 1adfe5ea0573d9e6a0583b3f7ff7b3f6145defd3 Mon Sep 17 00:00:00 2001 From: lara Date: Fri, 14 Jul 2023 16:12:55 +0200 Subject: [PATCH 089/698] [2023.06]{foss/2021b} SciPy-bundle neoverse_v1 --- eessi-2023.06-eb-4.7.2-2021b.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/eessi-2023.06-eb-4.7.2-2021b.yml b/eessi-2023.06-eb-4.7.2-2021b.yml index 6a467e9064..1945ce9dde 100644 --- a/eessi-2023.06-eb-4.7.2-2021b.yml +++ b/eessi-2023.06-eb-4.7.2-2021b.yml @@ -12,3 +12,4 @@ easyconfigs: - FlexiBLAS-3.0.4-GCC-11.2.0.eb - foss-2021b.eb - QuantumESPRESSO-6.8-foss-2021b.eb + - SciPy-bundle-2021.10-foss-2021b From ac9fb4d898991085285d8b1471794574c453681d Mon Sep 17 00:00:00 2001 From: casparvl Date: Tue, 18 Jul 2023 14:39:31 +0000 Subject: [PATCH 090/698] Added OpenMPI-4.1.4 with GCC 11.3.0 --- eessi-2023.06-eb-4.7.2-2022a.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/eessi-2023.06-eb-4.7.2-2022a.yml b/eessi-2023.06-eb-4.7.2-2022a.yml index b8f0cc17bc..d40ddff261 100644 --- a/eessi-2023.06-eb-4.7.2-2022a.yml +++ b/eessi-2023.06-eb-4.7.2-2022a.yml @@ -1,2 +1,3 @@ easyconfigs: - GCC-11.3.0 + - OpenMPI-4.1.4-GCC-11.3.0.eb From 7a840ea3b8ddf6cc13bb2e072eb80a17f58f0ce4 Mon Sep 17 00:00:00 2001 From: casparvl Date: Tue, 18 Jul 2023 15:23:26 +0000 Subject: [PATCH 091/698] OpenMPI for foss 2022b --- eessi-2023.06-eb-4.7.2-2022b.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/eessi-2023.06-eb-4.7.2-2022b.yml b/eessi-2023.06-eb-4.7.2-2022b.yml index 15c99b5e0b..359300b1fa 100644 --- a/eessi-2023.06-eb-4.7.2-2022b.yml +++ b/eessi-2023.06-eb-4.7.2-2022b.yml @@ -1,2 +1,3 @@ easyconfigs: - GCC-12.2.0 + - OpenMPI-4.1.4-GCC-12.2.0 From 94fa4c4bd89fcb0d168dd79c9a369ba1175bd9e5 Mon Sep 17 00:00:00 2001 From: casparvl Date: Tue, 18 Jul 2023 21:24:36 +0000 Subject: [PATCH 092/698] Added foss-2022a --- eessi-2023.06-eb-4.7.2-2022a.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/eessi-2023.06-eb-4.7.2-2022a.yml b/eessi-2023.06-eb-4.7.2-2022a.yml index b8f0cc17bc..0721a93257 100644 --- a/eessi-2023.06-eb-4.7.2-2022a.yml +++ b/eessi-2023.06-eb-4.7.2-2022a.yml @@ -1,2 +1,3 @@ easyconfigs: - GCC-11.3.0 + - foss-2022a From c2160ec99ab1196ef25f7bf9b0890823f1ccb955 Mon Sep 17 00:00:00 2001 From: casparvl Date: Tue, 18 Jul 2023 21:25:43 +0000 Subject: [PATCH 093/698] Added foss-2022b --- eessi-2023.06-eb-4.7.2-2022b.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/eessi-2023.06-eb-4.7.2-2022b.yml b/eessi-2023.06-eb-4.7.2-2022b.yml index 15c99b5e0b..125a567af2 100644 --- a/eessi-2023.06-eb-4.7.2-2022b.yml +++ b/eessi-2023.06-eb-4.7.2-2022b.yml @@ -1,2 +1,3 @@ easyconfigs: - GCC-12.2.0 + - foss-2022b From 45df4625e162830ede5e0dfe15abf40376076697 Mon Sep 17 00:00:00 2001 From: casparvl Date: Tue, 18 Jul 2023 23:33:42 +0000 Subject: [PATCH 094/698] Added cmake explicitely, since it needs an include-easyblocks-from-pr --- eessi-2023.06-eb-4.7.2-2022b.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/eessi-2023.06-eb-4.7.2-2022b.yml b/eessi-2023.06-eb-4.7.2-2022b.yml index 00027f3291..6d15ee2b90 100644 --- a/eessi-2023.06-eb-4.7.2-2022b.yml +++ b/eessi-2023.06-eb-4.7.2-2022b.yml @@ -1,4 +1,7 @@ easyconfigs: - GCC-12.2.0 - OpenMPI-4.1.4-GCC-12.2.0 - - foss-2022b \ No newline at end of file + - CMake-3.24.3-GCCcore-12.2.0.eb: + options: + include-easyblocks-from-pr: 2248 + - foss-2022b From cea6c3b63714e34edca7a39e6fd7ab45ad11e617 Mon Sep 17 00:00:00 2001 From: casparvl Date: Tue, 18 Jul 2023 23:37:33 +0000 Subject: [PATCH 095/698] Added Cmake explicitely, since we need to pass an easyblocks-from-pr --- eessi-2023.06-eb-4.7.2-2022a.yml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/eessi-2023.06-eb-4.7.2-2022a.yml b/eessi-2023.06-eb-4.7.2-2022a.yml index 6c6e0de3f1..f4a3da0143 100644 --- a/eessi-2023.06-eb-4.7.2-2022a.yml +++ b/eessi-2023.06-eb-4.7.2-2022a.yml @@ -1,4 +1,10 @@ easyconfigs: - GCC-11.3.0 - OpenMPI-4.1.4-GCC-11.3.0.eb - - foss-2022a \ No newline at end of file + - CMake-3.23.1-GCCcore-11.3.0.eb: + options: + include-easyblocks-from-pr: 2248 + - CMake-3.24.3-GCCcore-11.3.0.eb: + options: + include-easyblocks-from-pr: 2248 + - foss-2022a From b5951a522684a5130bfeaa9d837c75768fd3b2b4 Mon Sep 17 00:00:00 2001 From: Satish Kamath Date: Thu, 20 Jul 2023 17:21:48 +0200 Subject: [PATCH 096/698] This is a rebuild of the ReFrame version to include hpctestlib in the PYTHONPATH. * This pull request must not be merged. --- eessi-2023.06-eb-4.7.2-system.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eessi-2023.06-eb-4.7.2-system.yml b/eessi-2023.06-eb-4.7.2-system.yml index 245271cebf..7d785668c2 100644 --- a/eessi-2023.06-eb-4.7.2-system.yml +++ b/eessi-2023.06-eb-4.7.2-system.yml @@ -1,2 +1,2 @@ easyconfigs: - - ReFrame-4.2.0 + - ReFrame-4.2.0 --rebuild From e5da6875d024600ab6dff1c9c3fcc6a782d83a9d Mon Sep 17 00:00:00 2001 From: Satish Kamath Date: Thu, 20 Jul 2023 17:26:16 +0200 Subject: [PATCH 097/698] Should also include --from-pr. --- eessi-2023.06-eb-4.7.2-system.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eessi-2023.06-eb-4.7.2-system.yml b/eessi-2023.06-eb-4.7.2-system.yml index 7d785668c2..6693638bfa 100644 --- a/eessi-2023.06-eb-4.7.2-system.yml +++ b/eessi-2023.06-eb-4.7.2-system.yml @@ -1,2 +1,2 @@ easyconfigs: - - ReFrame-4.2.0 --rebuild + - ReFrame-4.2.0 ---from-pr=18320 -rebuild From eef33f7fb24d3feb198919e21fa12e94110a81df Mon Sep 17 00:00:00 2001 From: Satish Kamath Date: Thu, 20 Jul 2023 18:17:16 +0200 Subject: [PATCH 098/698] Stupid error in the eb options. --- eessi-2023.06-eb-4.7.2-system.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eessi-2023.06-eb-4.7.2-system.yml b/eessi-2023.06-eb-4.7.2-system.yml index 6693638bfa..da1d7c9692 100644 --- a/eessi-2023.06-eb-4.7.2-system.yml +++ b/eessi-2023.06-eb-4.7.2-system.yml @@ -1,2 +1,2 @@ easyconfigs: - - ReFrame-4.2.0 ---from-pr=18320 -rebuild + - ReFrame-4.2.0 --from-pr=18320 --rebuild From 468a9e2fc153c2acfbfe8573ad919426719f4c85 Mon Sep 17 00:00:00 2001 From: Satish Kamath Date: Fri, 21 Jul 2023 00:08:59 +0200 Subject: [PATCH 099/698] Included options in the correct yml format. --- eessi-2023.06-eb-4.7.2-system.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/eessi-2023.06-eb-4.7.2-system.yml b/eessi-2023.06-eb-4.7.2-system.yml index da1d7c9692..ec1b1982cd 100644 --- a/eessi-2023.06-eb-4.7.2-system.yml +++ b/eessi-2023.06-eb-4.7.2-system.yml @@ -1,2 +1,5 @@ easyconfigs: - - ReFrame-4.2.0 --from-pr=18320 --rebuild + - ReFrame-4.2.0 + options: + from-pr: 18320 + rebuild: From d4f5887513a17e60e41192546806a2d8a1c29536 Mon Sep 17 00:00:00 2001 From: Satish Kamath Date: Fri, 21 Jul 2023 00:31:23 +0200 Subject: [PATCH 100/698] Trying this way of specifying the rebuild option without the colon. --- eessi-2023.06-eb-4.7.2-system.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eessi-2023.06-eb-4.7.2-system.yml b/eessi-2023.06-eb-4.7.2-system.yml index ec1b1982cd..ecaa8af088 100644 --- a/eessi-2023.06-eb-4.7.2-system.yml +++ b/eessi-2023.06-eb-4.7.2-system.yml @@ -2,4 +2,4 @@ easyconfigs: - ReFrame-4.2.0 options: from-pr: 18320 - rebuild: + rebuild From 89a825b7ccdb03ca8edf4e189cd7f573705c9cd9 Mon Sep 17 00:00:00 2001 From: Satish Kamath Date: Fri, 21 Jul 2023 15:25:52 +0200 Subject: [PATCH 101/698] Trying this, if this does not work then, rebuild: 1 --- eessi-2023.06-eb-4.7.2-system.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eessi-2023.06-eb-4.7.2-system.yml b/eessi-2023.06-eb-4.7.2-system.yml index ecaa8af088..1fcda5034b 100644 --- a/eessi-2023.06-eb-4.7.2-system.yml +++ b/eessi-2023.06-eb-4.7.2-system.yml @@ -2,4 +2,4 @@ easyconfigs: - ReFrame-4.2.0 options: from-pr: 18320 - rebuild + rebuild: True From e439db5bba42c0e0cd0be0d81f27bfcb5180e5f2 Mon Sep 17 00:00:00 2001 From: Satish Kamath Date: Fri, 21 Jul 2023 15:48:01 +0200 Subject: [PATCH 102/698] Had made another error in providing a colon in front of the easyconfig file with options. --- eessi-2023.06-eb-4.7.2-system.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/eessi-2023.06-eb-4.7.2-system.yml b/eessi-2023.06-eb-4.7.2-system.yml index 1fcda5034b..82d0d19de2 100644 --- a/eessi-2023.06-eb-4.7.2-system.yml +++ b/eessi-2023.06-eb-4.7.2-system.yml @@ -1,5 +1,5 @@ easyconfigs: - - ReFrame-4.2.0 + - ReFrame-4.2.0.eb: options: - from-pr: 18320 + from-pr: 18320 rebuild: True From c23fd939811a0649812681c6e5a27b1b865b0db0 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Tue, 8 Aug 2023 12:49:54 +0200 Subject: [PATCH 103/698] Increased number of tests that are allowed to fail for OpenBLAS on ARM. See https://github.com/EESSI/software-layer/pull/309/#issuecomment-1643518730 --- eb_hooks.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eb_hooks.py b/eb_hooks.py index 191e24678b..911e2873f9 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -167,7 +167,7 @@ def parse_hook_openblas_relax_lapack_tests_num_errors(ec, eprefix): cfg_option = 'max_failing_lapack_tests_num_errors' if get_cpu_architecture() == AARCH64: orig_value = ec[cfg_option] - ec[cfg_option] = 300 + ec[cfg_option] = 400 print_msg("Maximum number of failing LAPACK tests with numerical errors for %s relaxed to %s (was %s)", ec.name, ec[cfg_option], orig_value) else: From 36f5b309d709a454920cdeff76b400f388ed43d1 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Tue, 8 Aug 2023 13:28:41 +0200 Subject: [PATCH 104/698] Added reference to ticket for increase in accepted test failures --- eb_hooks.py | 1 + 1 file changed, 1 insertion(+) diff --git a/eb_hooks.py b/eb_hooks.py index 911e2873f9..3dc6d1efa8 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -164,6 +164,7 @@ def parse_hook_openblas_relax_lapack_tests_num_errors(ec, eprefix): if ec.name == 'OpenBLAS': # relax maximum number of failed numerical LAPACK tests on Arm 64-bit systems, # since the default setting of 150 that works well on x86_64 is a bit too strict + # See https://github.com/EESSI/software-layer/issues/314 cfg_option = 'max_failing_lapack_tests_num_errors' if get_cpu_architecture() == AARCH64: orig_value = ec[cfg_option] From 05d2d2dc3a6b54d61a4af6109c6e2dd4baf42c2b Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 9 Aug 2023 17:28:59 +0200 Subject: [PATCH 105/698] use shorter 'pilot' job name in workflow to check for missing installations --- .github/workflows/test_eessi.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test_eessi.yml b/.github/workflows/test_eessi.yml index e93d437cea..65994cab2d 100644 --- a/.github/workflows/test_eessi.yml +++ b/.github/workflows/test_eessi.yml @@ -4,7 +4,7 @@ on: [push, pull_request, workflow_dispatch] permissions: contents: read # to fetch code (actions/checkout) jobs: - eessi_pilot_repo: + pilot: runs-on: ubuntu-20.04 strategy: fail-fast: false From 32ab9818248e5a9d36281c4d9229522791ad3215 Mon Sep 17 00:00:00 2001 From: TopRichard Date: Thu, 10 Aug 2023 07:10:10 +0000 Subject: [PATCH 106/698] {2023.06}[foss/2021a] Arrow V6.0.0 --- eessi-2023.06-eb-4.7.2-2021a.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/eessi-2023.06-eb-4.7.2-2021a.yml b/eessi-2023.06-eb-4.7.2-2021a.yml index c0fa353475..919e02f460 100644 --- a/eessi-2023.06-eb-4.7.2-2021a.yml +++ b/eessi-2023.06-eb-4.7.2-2021a.yml @@ -13,3 +13,4 @@ easyconfigs: # see https://github.com/easybuilders/easybuild-easyconfigs/pull/18087 options: from-pr: 18087 + - Arrow-6.0.0-foss-2021a.eb From 4f54fd67c4b9c5555c166ce27b8747146a9d37dc Mon Sep 17 00:00:00 2001 From: Lara Ramona Peeters <49882639+laraPPr@users.noreply.github.com> Date: Wed, 16 Aug 2023 13:01:48 +0200 Subject: [PATCH 107/698] Update eb_hooks.py --- eb_hooks.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/eb_hooks.py b/eb_hooks.py index 191e24678b..6ef1386db0 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -258,6 +258,10 @@ def pre_configure_hook_wrf_aarch64(self, *args, **kwargs): else: raise EasyBuildError("WRF-specific hook triggered for non-WRF easyconfig?!") +def pre_test_hook_ignore_failing_tests_SciPybundle(self, *args, **kwargs): + if self.name == 'SciPy-bundle' and '/neoverse_v1/' in self.installdir: + self.cfg['testopts'] = "|| echo ignoring failing tests" + PARSE_HOOKS = { 'CGAL': parse_hook_cgal_toolchainopts_precise, @@ -277,3 +281,7 @@ def pre_configure_hook_wrf_aarch64(self, *args, **kwargs): 'OpenBLAS': pre_configure_hook_openblas_optarch_generic, 'WRF': pre_configure_hook_wrf_aarch64, } + +PRE_TEST_HOOKS = { + 'SciPy-bundle': pre_test_hook_ignore_failing_tests_SciPybundle, +} From 05d85a9d2790e29c59f203ca4f695afeb7f07cec Mon Sep 17 00:00:00 2001 From: Thomas Roeblitz Date: Fri, 18 Aug 2023 14:41:01 +0200 Subject: [PATCH 108/698] initial version for bot/inspect.sh --- bot/inspect.sh | 240 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 240 insertions(+) create mode 100644 bot/inspect.sh diff --git a/bot/inspect.sh b/bot/inspect.sh new file mode 100644 index 0000000000..39ac7ceb99 --- /dev/null +++ b/bot/inspect.sh @@ -0,0 +1,240 @@ +#!/usr/bin/env bash +# +# Script to inspect result of a build job for the EESSI software layer. +# Intended use is that it is called with a path to a job directory. +# +# This script is part of the EESSI software layer, see +# https://github.com/EESSI/software-layer.git +# +# author: Thomas Roeblitz (@trz42) +# +# license: GPLv2 +# + +# ASSUMPTIONs: +# - Script is executed on the same architecture the job was running on. +# - Initially, we also assume that is run on the same resource with the +# same (compute) node setup (local disk space, HTTP proxies, etc.) +# - The job directory being supplied has been prepared by the bot with a +# checkout of a pull request (OR by some other means) +# - The job directory contains a directory 'cfg' where the main config +# file 'job.cfg' has been deposited. +# - The 'cfg' directory may contain any additional files referenced in +# 'job.cfg' (repos.cfg, etc.). +# - The job produced some tarballs for its state (tmp disk for overlayfs, +# CVMFS cache, etc.) under 'previous_tmp/{build,tarball}_step'. + +# stop as soon as something fails +set -e + +display_help() { + echo "usage: $0 [OPTIONS]" + echo " -h | --help - display this usage information" + echo " -j | --job-dir DIR - inspect job with the given work directory DIR" + echo " -x | --http-proxy URL - provides URL for the environment variable http_proxy" + echo " -y | --https-proxy URL - provides URL for the environment variable https_proxy" +} + +job_dir= +http_proxy= +https_proxy= + +POSITIONAL_ARGS=() + +while [[ $# -gt 0 ]]; do + case ${1} in + -h|--help) + display_help + exit 0 + ;; + -j|--job-dir) + export job_dir="${2}" + shift 2 + ;; + -x|--http-proxy) + export http_proxy="${2}" + shift 2 + ;; + -y|--https-proxy) + export https_proxy="${2}" + shift 2 + ;; + -*|--*) + echo "Error: Unknown option: ${1}" >&2 + exit 1 + ;; + *) # No more options + POSITIONAL_ARGS+=("${1}") # save positional arg + shift + ;; + esac +done + +set -- "${POSITIONAL_ARGS[@]}" + +# source utils.sh and cfg_files.sh +source scripts/utils.sh +source scripts/cfg_files.sh + +if [[ -z ${job_dir} ]]; then + echo_yellow "path to job directory missing" + display_help + exit 1 +fi + +# defaults +export JOB_CFG_FILE="${job_dir}/cfg/job.cfg}" +HOST_ARCH=$(uname -m) + +# check if ${JOB_CFG_FILE} exists +if [[ ! -r "${JOB_CFG_FILE}" ]]; then + fatal_error "job config file (JOB_CFG_FILE=${JOB_CFG_FILE}) does not exist or not readable" +fi +echo "bot/inspect.sh: showing ${JOB_CFG_FILE} from software-layer side" +cat ${JOB_CFG_FILE} + +echo "bot/inspect.sh: obtaining configuration settings from '${JOB_CFG_FILE}'" +cfg_load ${JOB_CFG_FILE} + +# if http_proxy is defined in ${JOB_CFG_FILE} use it, if not use env var $http_proxy +HTTP_PROXY=$(cfg_get_value "site_config" "http_proxy") +HTTP_PROXY=${HTTP_PROXY:-${http_proxy}} +echo "bot/inspect.sh: HTTP_PROXY='${HTTP_PROXY}'" + +# if https_proxy is defined in ${JOB_CFG_FILE} use it, if not use env var $https_proxy +HTTPS_PROXY=$(cfg_get_value "site_config" "https_proxy") +HTTPS_PROXY=${HTTPS_PROXY:-${https_proxy}} +echo "bot/build.sh: HTTPS_PROXY='${HTTPS_PROXY}'" + +LOCAL_TMP=$(cfg_get_value "site_config" "local_tmp") +echo "bot/inspect.sh: LOCAL_TMP='${LOCAL_TMP}'" +# TODO should local_tmp be mandatory? --> then we check here and exit if it is not provided + +# check if path to copy build logs to is specified, so we can copy build logs for failing builds there +BUILD_LOGS_DIR=$(cfg_get_value "site_config" "build_logs_dir") +echo "bot/inspect.sh: BUILD_LOGS_DIR='${BUILD_LOGS_DIR}'" +# if $BUILD_LOGS_DIR is set, add it to $SINGULARITY_BIND so the path is available in the build container +if [[ ! -z ${BUILD_LOGS_DIR} ]]; then + mkdir -p ${BUILD_LOGS_DIR} + if [[ -z ${SINGULARITY_BIND} ]]; then + export SINGULARITY_BIND="${BUILD_LOGS_DIR}" + else + export SINGULARITY_BIND="${SINGULARITY_BIND},${BUILD_LOGS_DIR}" + fi +fi + +SINGULARITY_CACHEDIR=$(cfg_get_value "site_config" "container_cachedir") +echo "bot/inspect.sh: SINGULARITY_CACHEDIR='${SINGULARITY_CACHEDIR}'" +if [[ ! -z ${SINGULARITY_CACHEDIR} ]]; then + # make sure that separate directories are used for different CPU families + SINGULARITY_CACHEDIR=${SINGULARITY_CACHEDIR}/${HOST_ARCH} + export SINGULARITY_CACHEDIR +fi + +echo -n "setting \$STORAGE by replacing any var in '${LOCAL_TMP}' -> " +# replace any env variable in ${LOCAL_TMP} with its +# current value (e.g., a value that is local to the job) +STORAGE=$(envsubst <<< ${LOCAL_TMP}) +echo "'${STORAGE}'" + +# make sure ${STORAGE} exists +mkdir -p ${STORAGE} + +# make sure the base tmp storage is unique +JOB_STORAGE=$(mktemp --directory --tmpdir=${STORAGE} bot_job_tmp_XXX) +echo "bot/inspect.sh: created unique base tmp storage directory at ${JOB_STORAGE}" + +# obtain list of modules to be loaded +LOAD_MODULES=$(cfg_get_value "site_config" "load_modules") +echo "bot/inspect.sh: LOAD_MODULES='${LOAD_MODULES}'" + +# singularity/apptainer settings: CONTAINER, HOME, TMPDIR, BIND +CONTAINER=$(cfg_get_value "repository" "container") +export SINGULARITY_HOME="${PWD}:/eessi_bot_job" +export SINGULARITY_TMPDIR="${PWD}/singularity_tmpdir" +mkdir -p ${SINGULARITY_TMPDIR} + +# load modules if LOAD_MODULES is not empty +if [[ ! -z ${LOAD_MODULES} ]]; then + for mod in $(echo ${LOAD_MODULES} | tr ',' '\n') + do + echo "bot/inspect.sh: loading module '${mod}'" + module load ${mod} + done +else + echo "bot/inspect.sh: no modules to be loaded" +fi + +# determine repository to be used from entry .repository in ${JOB_CFG_FILE} +REPOSITORY=$(cfg_get_value "repository" "repo_id") +EESSI_REPOS_CFG_DIR_OVERRIDE=$(cfg_get_value "repository" "repos_cfg_dir") +export EESSI_REPOS_CFG_DIR_OVERRIDE=${EESSI_REPOS_CFG_DIR_OVERRIDE:-${PWD}/cfg} +echo "bot/inspect.sh: EESSI_REPOS_CFG_DIR_OVERRIDE='${EESSI_REPOS_CFG_DIR_OVERRIDE}'" + +# determine pilot version to be used from .repository.repo_version in ${JOB_CFG_FILE} +# here, just set & export EESSI_PILOT_VERSION_OVERRIDE +# next script (eessi_container.sh) makes use of it via sourcing init scripts +# (e.g., init/eessi_defaults or init/minimal_eessi_env) +export EESSI_PILOT_VERSION_OVERRIDE=$(cfg_get_value "repository" "repo_version") +echo "bot/inspect.sh: EESSI_PILOT_VERSION_OVERRIDE='${EESSI_PILOT_VERSION_OVERRIDE}'" + +# determine CVMFS repo to be used from .repository.repo_name in ${JOB_CFG_FILE} +# here, just set EESSI_CVMFS_REPO_OVERRIDE, a bit further down +# "source init/eessi_defaults" via sourcing init/minimal_eessi_env +export EESSI_CVMFS_REPO_OVERRIDE=$(cfg_get_value "repository" "repo_name") +echo "bot/inspect.sh: EESSI_CVMFS_REPO_OVERRIDE='${EESSI_CVMFS_REPO_OVERRIDE}'" + +# determine architecture to be used from entry .architecture in ${JOB_CFG_FILE} +# fallbacks: +# - ${CPU_TARGET} handed over from bot +# - left empty to let downstream script(s) determine subdir to be used +EESSI_SOFTWARE_SUBDIR_OVERRIDE=$(cfg_get_value "architecture" "software_subdir") +EESSI_SOFTWARE_SUBDIR_OVERRIDE=${EESSI_SOFTWARE_SUBDIR_OVERRIDE:-${CPU_TARGET}} +export EESSI_SOFTWARE_SUBDIR_OVERRIDE +echo "bot/inspect.sh: EESSI_SOFTWARE_SUBDIR_OVERRIDE='${EESSI_SOFTWARE_SUBDIR_OVERRIDE}'" + +# get EESSI_OS_TYPE from .architecture.os_type in ${JOB_CFG_FILE} (default: linux) +EESSI_OS_TYPE=$(cfg_get_value "architecture" "os_type") +export EESSI_OS_TYPE=${EESSI_OS_TYPE:-linux} +echo "bot/inspect.sh: EESSI_OS_TYPE='${EESSI_OS_TYPE}'" + +# prepare arguments to eessi_container.sh common to build and tarball steps +declare -a COMMON_ARGS=() +COMMON_ARGS+=("--verbose") +COMMON_ARGS+=("--access" "rw") +COMMON_ARGS+=("--mode" "run") +[[ ! -z ${CONTAINER} ]] && COMMON_ARGS+=("--container" "${CONTAINER}") +[[ ! -z ${HTTP_PROXY} ]] && COMMON_ARGS+=("--http-proxy" "${HTTP_PROXY}") +[[ ! -z ${HTTPS_PROXY} ]] && COMMON_ARGS+=("--https-proxy" "${HTTPS_PROXY}") +[[ ! -z ${REPOSITORY} ]] && COMMON_ARGS+=("--repository" "${REPOSITORY}") + +# make sure to use the same parent dir for storing tarballs of tmp +PREVIOUS_TMP_DIR=${PWD}/previous_tmp + +# prepare directory to store tarball of tmp for build step +TARBALL_TMP_BUILD_STEP_DIR=${PREVIOUS_TMP_DIR}/build_step +mkdir -p ${TARBALL_TMP_BUILD_STEP_DIR} + +# prepare arguments to eessi_container.sh specific to build step +declare -a BUILD_STEP_ARGS=() +BUILD_STEP_ARGS+=("--save" "${TARBALL_TMP_BUILD_STEP_DIR}") +BUILD_STEP_ARGS+=("--storage" "${STORAGE}") + +# prepare arguments to install_software_layer.sh (specific to build step) +declare -a INSTALL_SCRIPT_ARGS=() +if [[ ${EESSI_SOFTWARE_SUBDIR_OVERRIDE} =~ .*/generic$ ]]; then + INSTALL_SCRIPT_ARGS+=("--generic") +fi +[[ ! -z ${BUILD_LOGS_DIR} ]] && INSTALL_SCRIPT_ARGS+=("--build-logs-dir" "${BUILD_LOGS_DIR}") + +# create tmp file for output of build step +build_outerr=$(mktemp build.outerr.XXXX) + +echo "Executing command to build software:" +echo "./eessi_container.sh ${COMMON_ARGS[@]} ${BUILD_STEP_ARGS[@]}" +echo " -- ./install_software_layer.sh \"${INSTALL_SCRIPT_ARGS[@]}\" \"$@\" 2>&1 | tee -a ${build_outerr}" +#./eessi_container.sh "${COMMON_ARGS[@]}" "${BUILD_STEP_ARGS[@]}" \ +# -- ./install_software_layer.sh "${INSTALL_SCRIPT_ARGS[@]}" "$@" 2>&1 | tee -a ${build_outerr} + + +exit 0 From 90f1018066a88aa25599c34ed861a34f32366b19 Mon Sep 17 00:00:00 2001 From: Thomas Roeblitz Date: Fri, 18 Aug 2023 14:45:44 +0200 Subject: [PATCH 109/698] change permissions --- bot/inspect.sh | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 bot/inspect.sh diff --git a/bot/inspect.sh b/bot/inspect.sh old mode 100644 new mode 100755 From 0ec406eedc6285a3b7571265892e4a455f51300a Mon Sep 17 00:00:00 2001 From: Thomas Roeblitz Date: Fri, 18 Aug 2023 14:53:56 +0200 Subject: [PATCH 110/698] fix cfg file path --- bot/inspect.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bot/inspect.sh b/bot/inspect.sh index 39ac7ceb99..591529a31f 100755 --- a/bot/inspect.sh +++ b/bot/inspect.sh @@ -83,7 +83,7 @@ if [[ -z ${job_dir} ]]; then fi # defaults -export JOB_CFG_FILE="${job_dir}/cfg/job.cfg}" +export JOB_CFG_FILE="${job_dir}/cfg/job.cfg" HOST_ARCH=$(uname -m) # check if ${JOB_CFG_FILE} exists From d3a0457b7665a41b440369eb7710f4d165c9b95f Mon Sep 17 00:00:00 2001 From: Thomas Roeblitz Date: Fri, 18 Aug 2023 14:58:14 +0200 Subject: [PATCH 111/698] report more env var settings --- bot/inspect.sh | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/bot/inspect.sh b/bot/inspect.sh index 591529a31f..f860169d95 100755 --- a/bot/inspect.sh +++ b/bot/inspect.sh @@ -104,7 +104,7 @@ echo "bot/inspect.sh: HTTP_PROXY='${HTTP_PROXY}'" # if https_proxy is defined in ${JOB_CFG_FILE} use it, if not use env var $https_proxy HTTPS_PROXY=$(cfg_get_value "site_config" "https_proxy") HTTPS_PROXY=${HTTPS_PROXY:-${https_proxy}} -echo "bot/build.sh: HTTPS_PROXY='${HTTPS_PROXY}'" +echo "bot/inspect.sh: HTTPS_PROXY='${HTTPS_PROXY}'" LOCAL_TMP=$(cfg_get_value "site_config" "local_tmp") echo "bot/inspect.sh: LOCAL_TMP='${LOCAL_TMP}'" @@ -150,8 +150,11 @@ echo "bot/inspect.sh: LOAD_MODULES='${LOAD_MODULES}'" # singularity/apptainer settings: CONTAINER, HOME, TMPDIR, BIND CONTAINER=$(cfg_get_value "repository" "container") +echo "bot/inspect.sh: CONTAINER='${CONTAINER}'" export SINGULARITY_HOME="${PWD}:/eessi_bot_job" +echo "bot/inspect.sh: SINGULARITY_HOME='${SINGULARITY_HOME}'" export SINGULARITY_TMPDIR="${PWD}/singularity_tmpdir" +echo "bot/inspect.sh: SINGULARITY_TMPDIR='${SINGULARITY_TMPDIR}'" mkdir -p ${SINGULARITY_TMPDIR} # load modules if LOAD_MODULES is not empty @@ -167,6 +170,7 @@ fi # determine repository to be used from entry .repository in ${JOB_CFG_FILE} REPOSITORY=$(cfg_get_value "repository" "repo_id") +echo "bot/inspect.sh: REPOSITORY='${REPOSITORY}'" EESSI_REPOS_CFG_DIR_OVERRIDE=$(cfg_get_value "repository" "repos_cfg_dir") export EESSI_REPOS_CFG_DIR_OVERRIDE=${EESSI_REPOS_CFG_DIR_OVERRIDE:-${PWD}/cfg} echo "bot/inspect.sh: EESSI_REPOS_CFG_DIR_OVERRIDE='${EESSI_REPOS_CFG_DIR_OVERRIDE}'" From 9fb5db25f3e7ce8e2d267a25f225b72911d08794 Mon Sep 17 00:00:00 2001 From: Thomas Roeblitz Date: Mon, 21 Aug 2023 10:49:23 +0200 Subject: [PATCH 112/698] simply run startprefix --- bot/inspect.sh | 106 +++++++++++++++++++++++++++++++++---------------- 1 file changed, 72 insertions(+), 34 deletions(-) diff --git a/bot/inspect.sh b/bot/inspect.sh index f860169d95..9138d6e9b4 100755 --- a/bot/inspect.sh +++ b/bot/inspect.sh @@ -203,42 +203,80 @@ export EESSI_OS_TYPE=${EESSI_OS_TYPE:-linux} echo "bot/inspect.sh: EESSI_OS_TYPE='${EESSI_OS_TYPE}'" # prepare arguments to eessi_container.sh common to build and tarball steps -declare -a COMMON_ARGS=() -COMMON_ARGS+=("--verbose") -COMMON_ARGS+=("--access" "rw") -COMMON_ARGS+=("--mode" "run") -[[ ! -z ${CONTAINER} ]] && COMMON_ARGS+=("--container" "${CONTAINER}") -[[ ! -z ${HTTP_PROXY} ]] && COMMON_ARGS+=("--http-proxy" "${HTTP_PROXY}") -[[ ! -z ${HTTPS_PROXY} ]] && COMMON_ARGS+=("--https-proxy" "${HTTPS_PROXY}") -[[ ! -z ${REPOSITORY} ]] && COMMON_ARGS+=("--repository" "${REPOSITORY}") - -# make sure to use the same parent dir for storing tarballs of tmp -PREVIOUS_TMP_DIR=${PWD}/previous_tmp - -# prepare directory to store tarball of tmp for build step -TARBALL_TMP_BUILD_STEP_DIR=${PREVIOUS_TMP_DIR}/build_step -mkdir -p ${TARBALL_TMP_BUILD_STEP_DIR} - -# prepare arguments to eessi_container.sh specific to build step -declare -a BUILD_STEP_ARGS=() -BUILD_STEP_ARGS+=("--save" "${TARBALL_TMP_BUILD_STEP_DIR}") -BUILD_STEP_ARGS+=("--storage" "${STORAGE}") - -# prepare arguments to install_software_layer.sh (specific to build step) -declare -a INSTALL_SCRIPT_ARGS=() -if [[ ${EESSI_SOFTWARE_SUBDIR_OVERRIDE} =~ .*/generic$ ]]; then - INSTALL_SCRIPT_ARGS+=("--generic") +declare -a CMDLINE_ARGS=() +CMDLINE_ARGS+=("--verbose") +CMDLINE_ARGS+=("--access" "rw") +CMDLINE_ARGS+=("--mode" "shell") +[[ ! -z ${CONTAINER} ]] && CMDLINE_ARGS+=("--container" "${CONTAINER}") +[[ ! -z ${HTTP_PROXY} ]] && CMDLINE_ARGS+=("--http-proxy" "${HTTP_PROXY}") +[[ ! -z ${HTTPS_PROXY} ]] && CMDLINE_ARGS+=("--https-proxy" "${HTTPS_PROXY}") +[[ ! -z ${REPOSITORY} ]] && CMDLINE_ARGS+=("--repository" "${REPOSITORY}") + +# create a directory for creating a tarball of the tmp directory +INSPECT_TMP_DIR=$(mktemp -d ${PWD}/inspect.XXX) + +# add arguments for temporary storage and storing a tarball of tmp +CMDLINE_ARGS+=("--save" "${INSPECT_TMP_DIR}") +CMDLINE_ARGS+=("--storage" "${STORAGE}") + +# # prepare arguments to install_software_layer.sh (specific to build step) +# declare -a INSTALL_SCRIPT_ARGS=() +# if [[ ${EESSI_SOFTWARE_SUBDIR_OVERRIDE} =~ .*/generic$ ]]; then +# INSTALL_SCRIPT_ARGS+=("--generic") +# fi +# [[ ! -z ${BUILD_LOGS_DIR} ]] && INSTALL_SCRIPT_ARGS+=("--build-logs-dir" "${BUILD_LOGS_DIR}") + +# make sure some environment settings are available inside the shell started via +# startprefix +base_dir=$(dirname $(realpath $0)) +source ${base_dir}/init/eessi_defaults + +if [ -z $EESSI_PILOT_VERSION ]; then + echo "ERROR: \$EESSI_PILOT_VERSION must be set!" >&2 + exit 1 +fi +EESSI_COMPAT_LAYER_DIR="${EESSI_CVMFS_REPO}/versions/${EESSI_PILOT_VERSION}/compat/linux/$(uname -m)" + +# NOTE The below requires access to the CVMFS repository. We could make a first +# test run with a container. For now we skip the test. +# if [ ! -d ${EESSI_COMPAT_LAYER_DIR} ]; then +# echo "ERROR: ${EESSI_COMPAT_LAYER_DIR} does not exist!" >&2 +# exit 1 +# fi + +# When we want to run a script with arguments, the next line is ensures to retain +# these arguments. +# INPUT=$(echo "$@") +if [ ! -z ${SLURM_JOB_ID} ]; then + INPUT="export SLURM_JOB_ID=${SLURM_JOB_ID}; ${INPUT}" +fi +if [ ! -z ${EESSI_SOFTWARE_SUBDIR_OVERRIDE} ]; then + INPUT="export EESSI_SOFTWARE_SUBDIR_OVERRIDE=${EESSI_SOFTWARE_SUBDIR_OVERRIDE}; ${INPUT}" +fi +if [ ! -z ${EESSI_CVMFS_REPO_OVERRIDE} ]; then + INPUT="export EESSI_CVMFS_REPO_OVERRIDE=${EESSI_CVMFS_REPO_OVERRIDE}; ${INPUT}" +fi +if [ ! -z ${EESSI_PILOT_VERSION_OVERRIDE} ]; then + INPUT="export EESSI_PILOT_VERSION_OVERRIDE=${EESSI_PILOT_VERSION_OVERRIDE}; ${INPUT}" +fi +if [ ! -z ${http_proxy} ]; then + INPUT="export http_proxy=${http_proxy}; ${INPUT}" +fi +if [ ! -z ${https_proxy} ]; then + INPUT="export https_proxy=${https_proxy}; ${INPUT}" fi -[[ ! -z ${BUILD_LOGS_DIR} ]] && INSTALL_SCRIPT_ARGS+=("--build-logs-dir" "${BUILD_LOGS_DIR}") - -# create tmp file for output of build step -build_outerr=$(mktemp build.outerr.XXXX) -echo "Executing command to build software:" -echo "./eessi_container.sh ${COMMON_ARGS[@]} ${BUILD_STEP_ARGS[@]}" -echo " -- ./install_software_layer.sh \"${INSTALL_SCRIPT_ARGS[@]}\" \"$@\" 2>&1 | tee -a ${build_outerr}" -#./eessi_container.sh "${COMMON_ARGS[@]}" "${BUILD_STEP_ARGS[@]}" \ -# -- ./install_software_layer.sh "${INSTALL_SCRIPT_ARGS[@]}" "$@" 2>&1 | tee -a ${build_outerr} +echo "Executing command to start interactive session to inspect build job:" +# TODO possibly add information on how to init session after the prefix is +# entered, initialization consists of +# - environment variable settings (see 'run_in_compat_layer_env.sh') +# - setup steps run in 'EESSI-pilot-install-software.sh' +# These initializations are combined into a single script that is executed when +# the shell in startprefix is started. We set the env variable BASH_ENV here. +echo "./eessi_container.sh ${CMDLINE_ARGS[@]}" +echo " -- ${EESSI_COMPAT_LAYER_DIR}/startprefix" +./eessi_container.sh "${CMDLINE_ARGS[@]}" \ + -- ${EESSI_COMPAT_LAYER_DIR}/startprefix exit 0 From e02c02475884ca87a5ebad32a7e7134e5a4f3475 Mon Sep 17 00:00:00 2001 From: Thomas Roeblitz Date: Mon, 21 Aug 2023 11:12:17 +0200 Subject: [PATCH 113/698] fix path to access eessi_defaults --- bot/inspect.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/bot/inspect.sh b/bot/inspect.sh index 9138d6e9b4..f303724d5f 100755 --- a/bot/inspect.sh +++ b/bot/inspect.sh @@ -229,7 +229,8 @@ CMDLINE_ARGS+=("--storage" "${STORAGE}") # make sure some environment settings are available inside the shell started via # startprefix base_dir=$(dirname $(realpath $0)) -source ${base_dir}/init/eessi_defaults +# base_dir of inspect.sh script is '.../bot', 'init' dir is at the same level +source ${base_dir}/../init/eessi_defaults if [ -z $EESSI_PILOT_VERSION ]; then echo "ERROR: \$EESSI_PILOT_VERSION must be set!" >&2 From 036a6dd4b387a63653381ea700b8cc4c3c6f7985 Mon Sep 17 00:00:00 2001 From: Lara Ramona Peeters <49882639+laraPPr@users.noreply.github.com> Date: Mon, 21 Aug 2023 11:29:25 +0200 Subject: [PATCH 114/698] Update eb_hooks.py --- eb_hooks.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/eb_hooks.py b/eb_hooks.py index 6ef1386db0..e27845e544 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -258,8 +258,18 @@ def pre_configure_hook_wrf_aarch64(self, *args, **kwargs): else: raise EasyBuildError("WRF-specific hook triggered for non-WRF easyconfig?!") +def pre_test_hook(self,*args, **kwargs): + """Main pre-test hook: trigger custom functions based on software name.""" + if self.name in PRE_TEST_HOOKS: + PRE_TEST_HOOKS[self.name](self, *args, **kwargs) + def pre_test_hook_ignore_failing_tests_SciPybundle(self, *args, **kwargs): - if self.name == 'SciPy-bundle' and '/neoverse_v1/' in self.installdir: + """ + Pre-test hook for SciPy-bundle: skip failing tests for SciPy-bundle 2021.10 (currently the only version that is failing). + In previous versions we were not as strict yet on the numpy/SciPy tests + """ + cpu_target = get_eessi_envvar('EESSI_SOFTWARE_SUBDIR') + if self.name == 'SciPy-bundle' and self.version == '2021.10' and cpu_target == 'aarch64/neoverse_v1': self.cfg['testopts'] = "|| echo ignoring failing tests" From 44f7ff5748e1efde0012a0f34600367253378567 Mon Sep 17 00:00:00 2001 From: Lara Ramona Peeters <49882639+laraPPr@users.noreply.github.com> Date: Tue, 22 Aug 2023 11:58:37 +0200 Subject: [PATCH 115/698] Update eb_hooks.py Fix indentation line 267 --- eb_hooks.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eb_hooks.py b/eb_hooks.py index e27845e544..c7435315ab 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -264,7 +264,7 @@ def pre_test_hook(self,*args, **kwargs): PRE_TEST_HOOKS[self.name](self, *args, **kwargs) def pre_test_hook_ignore_failing_tests_SciPybundle(self, *args, **kwargs): - """ + """ Pre-test hook for SciPy-bundle: skip failing tests for SciPy-bundle 2021.10 (currently the only version that is failing). In previous versions we were not as strict yet on the numpy/SciPy tests """ From df5fbf09c18948faefcdf7cab26e7bb35ceae688 Mon Sep 17 00:00:00 2001 From: Thomas Roeblitz Date: Tue, 22 Aug 2023 14:52:01 +0200 Subject: [PATCH 116/698] tweaks after testing to enter prefix --- bot/inspect.sh | 36 +++++++++++++++++++++++++++--------- 1 file changed, 27 insertions(+), 9 deletions(-) diff --git a/bot/inspect.sh b/bot/inspect.sh index f303724d5f..3416426d7d 100755 --- a/bot/inspect.sh +++ b/bot/inspect.sh @@ -30,12 +30,15 @@ set -e display_help() { echo "usage: $0 [OPTIONS]" echo " -h | --help - display this usage information" - echo " -j | --job-dir DIR - inspect job with the given work directory DIR" + echo " -r | --resume TGZ - inspect job saved in tarball path TGZ; note, we assume the path" + echo " to be something like JOB_DIR/previous_tmp/{build,tarball}_step/TARBALL.tgz" + echo " and thus determine JOB_DIR from the given path" + echo " [default: none]" echo " -x | --http-proxy URL - provides URL for the environment variable http_proxy" echo " -y | --https-proxy URL - provides URL for the environment variable https_proxy" } -job_dir= +resume_tgz= http_proxy= https_proxy= @@ -47,8 +50,8 @@ while [[ $# -gt 0 ]]; do display_help exit 0 ;; - -j|--job-dir) - export job_dir="${2}" + -r|--resume) + export resume_tgz="${2}" shift 2 ;; -x|--http-proxy) @@ -76,12 +79,21 @@ set -- "${POSITIONAL_ARGS[@]}" source scripts/utils.sh source scripts/cfg_files.sh -if [[ -z ${job_dir} ]]; then - echo_yellow "path to job directory missing" +if [[ -z ${resume_tgz} ]]; then + echo_red "path to tarball for resuming build job is missing" display_help exit 1 fi +job_dir=$(dirname $(dirname $(dirname ${resume_tgz}))) + +if [[ -z ${job_dir} ]]; then + # job directory could be determined + echo_red "job directory could not be determined from '${resume_tgz}'" + display_help + exit 2 +fi + # defaults export JOB_CFG_FILE="${job_dir}/cfg/job.cfg" HOST_ARCH=$(uname -m) @@ -151,7 +163,9 @@ echo "bot/inspect.sh: LOAD_MODULES='${LOAD_MODULES}'" # singularity/apptainer settings: CONTAINER, HOME, TMPDIR, BIND CONTAINER=$(cfg_get_value "repository" "container") echo "bot/inspect.sh: CONTAINER='${CONTAINER}'" -export SINGULARITY_HOME="${PWD}:/eessi_bot_job" +# instead of using ${PWD} as HOME in the container, we use the job directory +# to have access to output files of the job +export SINGULARITY_HOME="${job_dir}:/eessi_bot_job" echo "bot/inspect.sh: SINGULARITY_HOME='${SINGULARITY_HOME}'" export SINGULARITY_TMPDIR="${PWD}/singularity_tmpdir" echo "bot/inspect.sh: SINGULARITY_TMPDIR='${SINGULARITY_TMPDIR}'" @@ -171,6 +185,7 @@ fi # determine repository to be used from entry .repository in ${JOB_CFG_FILE} REPOSITORY=$(cfg_get_value "repository" "repo_id") echo "bot/inspect.sh: REPOSITORY='${REPOSITORY}'" +# TODO better to read this from tarball??? EESSI_REPOS_CFG_DIR_OVERRIDE=$(cfg_get_value "repository" "repos_cfg_dir") export EESSI_REPOS_CFG_DIR_OVERRIDE=${EESSI_REPOS_CFG_DIR_OVERRIDE:-${PWD}/cfg} echo "bot/inspect.sh: EESSI_REPOS_CFG_DIR_OVERRIDE='${EESSI_REPOS_CFG_DIR_OVERRIDE}'" @@ -185,7 +200,7 @@ echo "bot/inspect.sh: EESSI_PILOT_VERSION_OVERRIDE='${EESSI_PILOT_VERSION_OVERRI # determine CVMFS repo to be used from .repository.repo_name in ${JOB_CFG_FILE} # here, just set EESSI_CVMFS_REPO_OVERRIDE, a bit further down # "source init/eessi_defaults" via sourcing init/minimal_eessi_env -export EESSI_CVMFS_REPO_OVERRIDE=$(cfg_get_value "repository" "repo_name") +export EESSI_CVMFS_REPO_OVERRIDE="/cvmfs/$(cfg_get_value 'repository' 'repo_name')" echo "bot/inspect.sh: EESSI_CVMFS_REPO_OVERRIDE='${EESSI_CVMFS_REPO_OVERRIDE}'" # determine architecture to be used from entry .architecture in ${JOB_CFG_FILE} @@ -206,12 +221,14 @@ echo "bot/inspect.sh: EESSI_OS_TYPE='${EESSI_OS_TYPE}'" declare -a CMDLINE_ARGS=() CMDLINE_ARGS+=("--verbose") CMDLINE_ARGS+=("--access" "rw") -CMDLINE_ARGS+=("--mode" "shell") +CMDLINE_ARGS+=("--mode" "run") [[ ! -z ${CONTAINER} ]] && CMDLINE_ARGS+=("--container" "${CONTAINER}") [[ ! -z ${HTTP_PROXY} ]] && CMDLINE_ARGS+=("--http-proxy" "${HTTP_PROXY}") [[ ! -z ${HTTPS_PROXY} ]] && CMDLINE_ARGS+=("--https-proxy" "${HTTPS_PROXY}") [[ ! -z ${REPOSITORY} ]] && CMDLINE_ARGS+=("--repository" "${REPOSITORY}") +[[ ! -z ${resume_tgz} ]] && CMDLINE_ARGS+=("--resume" "${resume_tgz}") + # create a directory for creating a tarball of the tmp directory INSPECT_TMP_DIR=$(mktemp -d ${PWD}/inspect.XXX) @@ -230,6 +247,7 @@ CMDLINE_ARGS+=("--storage" "${STORAGE}") # startprefix base_dir=$(dirname $(realpath $0)) # base_dir of inspect.sh script is '.../bot', 'init' dir is at the same level +# TODO better use script from tarball??? source ${base_dir}/../init/eessi_defaults if [ -z $EESSI_PILOT_VERSION ]; then From f34854cf7bc86ac2cfd19d7f589ee684c39fe395 Mon Sep 17 00:00:00 2001 From: lara Date: Wed, 23 Aug 2023 10:35:45 +0200 Subject: [PATCH 117/698] Trigger CI/CD pipeline From 938cf06f2eebdada59a9b2115432bdab168a0bdf Mon Sep 17 00:00:00 2001 From: lara Date: Wed, 23 Aug 2023 10:47:43 +0200 Subject: [PATCH 118/698] Trigger CI/CD pipeline From 45dac8b254e2fd3d0c738f630de9a997f8f86ad5 Mon Sep 17 00:00:00 2001 From: Thomas Roeblitz Date: Thu, 24 Aug 2023 15:16:19 +0200 Subject: [PATCH 119/698] initializing bot build environment settings incl EasyBuild + information note --- bot/inspect.sh | 149 +++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 139 insertions(+), 10 deletions(-) diff --git a/bot/inspect.sh b/bot/inspect.sh index 3416426d7d..e5e4df5970 100755 --- a/bot/inspect.sh +++ b/bot/inspect.sh @@ -229,12 +229,17 @@ CMDLINE_ARGS+=("--mode" "run") [[ ! -z ${resume_tgz} ]] && CMDLINE_ARGS+=("--resume" "${resume_tgz}") -# create a directory for creating a tarball of the tmp directory -INSPECT_TMP_DIR=$(mktemp -d ${PWD}/inspect.XXX) +# create a directory for creating temporary data and scripts for the inspection +INSPECT_DIR=$(mktemp --directory --tmpdir=${PWD} inspect.XXX) +if [[ -z ${SINGULARITY_BIND} ]]; then + export SINGULARITY_BIND="${INSPECT_DIR}:/inspect_eessi_build_job" +else + export SINGULARITY_BIND="${SINGULARITY_BIND},${INSPECT_DIR}:/inspect_eessi_build_job" +fi # add arguments for temporary storage and storing a tarball of tmp -CMDLINE_ARGS+=("--save" "${INSPECT_TMP_DIR}") -CMDLINE_ARGS+=("--storage" "${STORAGE}") +CMDLINE_ARGS+=("--save" "${INSPECT_DIR}") +CMDLINE_ARGS+=("--storage" "${JOB_STORAGE}") # # prepare arguments to install_software_layer.sh (specific to build step) # declare -a INSTALL_SCRIPT_ARGS=() @@ -266,23 +271,147 @@ EESSI_COMPAT_LAYER_DIR="${EESSI_CVMFS_REPO}/versions/${EESSI_PILOT_VERSION}/comp # When we want to run a script with arguments, the next line is ensures to retain # these arguments. # INPUT=$(echo "$@") +mkdir -p ${INSPECT_DIR}/scripts +RESUME_SCRIPT=${INSPECT_DIR}/scripts/resume_env.sh +echo "bot/inspect.sh: creating script '${RESUME_SCRIPT}' to resume environment settings" + +cat << EOF > ${RESUME_SCRIPT} +#!${EESSI_COMPAT_LAYER_DIR}/bin/bash +echo "Sourcing '\$BASH_SOURCE' to init bot environment of build job" +EOF if [ ! -z ${SLURM_JOB_ID} ]; then - INPUT="export SLURM_JOB_ID=${SLURM_JOB_ID}; ${INPUT}" + # TODO do we need the value at all? if so which one: current or of the job to + # inspect? + echo "export CURRENT_SLURM_JOB_ID=${SLURM_JOB_ID}" >> ${RESUME_SCRIPT} fi if [ ! -z ${EESSI_SOFTWARE_SUBDIR_OVERRIDE} ]; then - INPUT="export EESSI_SOFTWARE_SUBDIR_OVERRIDE=${EESSI_SOFTWARE_SUBDIR_OVERRIDE}; ${INPUT}" + echo "export EESSI_SOFTWARE_SUBDIR_OVERRIDE=${EESSI_SOFTWARE_SUBDIR_OVERRIDE}" >> ${RESUME_SCRIPT} fi if [ ! -z ${EESSI_CVMFS_REPO_OVERRIDE} ]; then - INPUT="export EESSI_CVMFS_REPO_OVERRIDE=${EESSI_CVMFS_REPO_OVERRIDE}; ${INPUT}" + echo "export EESSI_CVMFS_REPO_OVERRIDE=${EESSI_CVMFS_REPO_OVERRIDE}" >> ${RESUME_SCRIPT} fi if [ ! -z ${EESSI_PILOT_VERSION_OVERRIDE} ]; then - INPUT="export EESSI_PILOT_VERSION_OVERRIDE=${EESSI_PILOT_VERSION_OVERRIDE}; ${INPUT}" + echo "export EESSI_PILOT_VERSION_OVERRIDE=${EESSI_PILOT_VERSION_OVERRIDE}" >> ${RESUME_SCRIPT} fi if [ ! -z ${http_proxy} ]; then - INPUT="export http_proxy=${http_proxy}; ${INPUT}" + echo "export http_proxy=${http_proxy}" >> ${RESUME_SCRIPT} fi if [ ! -z ${https_proxy} ]; then - INPUT="export https_proxy=${https_proxy}; ${INPUT}" + echo "export https_proxy=${https_proxy}" >> ${RESUME_SCRIPT} +fi +cat << 'EOF' >> ${RESUME_SCRIPT} +TOPDIR=$(dirname $(realpath $BASH_SOURCE)) + +source ${TOPDIR}/scripts/utils.sh + +# honor $TMPDIR if it is already defined, use /tmp otherwise +if [ -z $TMPDIR ]; then + export WORKDIR=/tmp/$USER +else + export WORKDIR=$TMPDIR/$USER +fi + +TMPDIR=$(mktemp -d) + +echo ">> Setting up environment..." + +source $TOPDIR/init/minimal_eessi_env + +if [ -d $EESSI_CVMFS_REPO ]; then + echo_green "$EESSI_CVMFS_REPO available, OK!" +else + fatal_error "$EESSI_CVMFS_REPO is not available!" +fi + +# make sure we're in Prefix environment by checking $SHELL +if [[ ${SHELL} = ${EPREFIX}/bin/bash ]]; then + echo_green ">> It looks like we're in a Gentoo Prefix environment, good!" +else + fatal_error "Not running in Gentoo Prefix environment, run '${EPREFIX}/startprefix' first!" +fi + +# avoid that pyc files for EasyBuild are stored in EasyBuild installation directory +export PYTHONPYCACHEPREFIX=$TMPDIR/pycache + +DETECTION_PARAMETERS='' +GENERIC=0 +EB='eb' +if [[ "$EASYBUILD_OPTARCH" == "GENERIC" || "$EESSI_SOFTWARE_SUBDIR_OVERRIDE" == *"/generic" ]]; then + echo_yellow ">> GENERIC build requested, taking appropriate measures!" + DETECTION_PARAMETERS="$DETECTION_PARAMETERS --generic" + GENERIC=1 + export EASYBUILD_OPTARCH=GENERIC + EB='eb --optarch=GENERIC' +fi + +echo ">> Determining software subdirectory to use for current build host..." +if [ -z $EESSI_SOFTWARE_SUBDIR_OVERRIDE ]; then + export EESSI_SOFTWARE_SUBDIR_OVERRIDE=$(python3 $TOPDIR/eessi_software_subdir.py $DETECTION_PARAMETERS) + echo ">> Determined \$EESSI_SOFTWARE_SUBDIR_OVERRIDE via 'eessi_software_subdir.py $DETECTION_PARAMETERS' script" +else + echo ">> Picking up pre-defined \$EESSI_SOFTWARE_SUBDIR_OVERRIDE: ${EESSI_SOFTWARE_SUBDIR_OVERRIDE}" +fi + +# Set all the EESSI environment variables (respecting $EESSI_SOFTWARE_SUBDIR_OVERRIDE) +# $EESSI_SILENT - don't print any messages +# $EESSI_BASIC_ENV - give a basic set of environment variables +EESSI_SILENT=1 EESSI_BASIC_ENV=1 source $TOPDIR/init/eessi_environment_variables + +if [[ -z ${EESSI_SOFTWARE_SUBDIR} ]]; then + fatal_error "Failed to determine software subdirectory?!" +elif [[ "${EESSI_SOFTWARE_SUBDIR}" != "${EESSI_SOFTWARE_SUBDIR_OVERRIDE}" ]]; then + fatal_error "Values for EESSI_SOFTWARE_SUBDIR_OVERRIDE (${EESSI_SOFTWARE_SUBDIR_OVERRIDE}) and EESSI_SOFTWARE_SUBDIR (${EESSI_SOFTWARE_SUBDIR}) differ!" +else + echo_green ">> Using ${EESSI_SOFTWARE_SUBDIR} as software subdirectory!" +fi + +echo ">> Initializing Lmod..." +source $EPREFIX/usr/share/Lmod/init/bash +ml_version_out=$TMPDIR/ml.out +ml --version &> $ml_version_out +if [[ $? -eq 0 ]]; then + echo_green ">> Found Lmod ${LMOD_VERSION}" +else + fatal_error "Failed to initialize Lmod?! (see output in ${ml_version_out}" +fi + +echo ">> Configuring EasyBuild..." +source $TOPDIR/configure_easybuild + +echo ">> Setting up \$MODULEPATH..." +# make sure no modules are loaded +module --force purge +# ignore current $MODULEPATH entirely +module unuse $MODULEPATH +module use $EASYBUILD_INSTALLPATH/modules/all +if [[ -z ${MODULEPATH} ]]; then + fatal_error "Failed to set up \$MODULEPATH?!" +else + echo_green ">> MODULEPATH set up: ${MODULEPATH}" +fi + +eb_version='4.7.2' + +# load EasyBuild module (will be installed if it's not available yet) +source ${TOPDIR}/load_easybuild_module.sh ${eb_version} + +echo_green "All set, let's start installing some software with EasyBuild v${eb_version} in ${EASYBUILD_INSTALLPATH}..." + +echo "Ready for inspection of build job:" +echo " - job directory is $HOME (\$HOME), check for slurm-*.out file" +echo " - temporary data of job available at /tmp" +echo " - Note, prefix $EESSI_PREFIX is writable" +echo " - EasyBuild v${eb_version} is available" + +EOF +chmod u+x ${RESUME_SCRIPT} + +# try to map it into the container's $HOME/.profile instead +# TODO check if script already exists, if so change its name and source it at the beginning of the RESUME_SCRIPT +if [[ -z ${SINGULARITY_BIND} ]]; then + export SINGULARITY_BIND="${RESUME_SCRIPT}:/eessi_bot_job/.profile" +else + export SINGULARITY_BIND="${SINGULARITY_BIND},${RESUME_SCRIPT}:/eessi_bot_job/.profile" fi echo "Executing command to start interactive session to inspect build job:" From b12c6860bb5224a122bb53f4fafa3c0c9f4e3331 Mon Sep 17 00:00:00 2001 From: lara Date: Mon, 28 Aug 2023 13:12:51 +0200 Subject: [PATCH 120/698] {2023.06}[SYSTEM] easybuild 4.8.0 --- eessi-2023.06-eb-4.7.2-system.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/eessi-2023.06-eb-4.7.2-system.yml b/eessi-2023.06-eb-4.7.2-system.yml index 245271cebf..fe9018b8c0 100644 --- a/eessi-2023.06-eb-4.7.2-system.yml +++ b/eessi-2023.06-eb-4.7.2-system.yml @@ -1,2 +1,5 @@ easyconfigs: - ReFrame-4.2.0 + - EasyBuild-4.8.0.eb: + options: + from-pr: 18282 From dd7b26df0950d49c7159ec08e1a2db90ec059fb7 Mon Sep 17 00:00:00 2001 From: lara Date: Mon, 4 Sep 2023 15:24:42 +0200 Subject: [PATCH 121/698] removing cURL from configure_easybuild --- configure_easybuild | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure_easybuild b/configure_easybuild index 23f3920154..7dca1ce682 100644 --- a/configure_easybuild +++ b/configure_easybuild @@ -26,7 +26,7 @@ fi # note: filtering Bison may break some installations, like Qt5 (see https://github.com/EESSI/software-layer/issues/49) # filtering pkg-config breaks R-bundle-Bioconductor installation (see also https://github.com/easybuilders/easybuild-easyconfigs/pull/11104) # problems occur when filtering pkg-config with gnuplot too (picks up Lua 5.1 from $EPREFIX rather than from Lua 5.3 dependency) -DEPS_TO_FILTER=Autoconf,Automake,Autotools,binutils,bzip2,cURL,DBus,flex,gettext,gperf,help2man,intltool,libreadline,libtool,Lua,M4,makeinfo,ncurses,util-linux,XZ,zlib +DEPS_TO_FILTER=Autoconf,Automake,Autotools,binutils,bzip2,DBus,flex,gettext,gperf,help2man,intltool,libreadline,libtool,Lua,M4,makeinfo,ncurses,util-linux,XZ,zlib # For aarch64 we need to also filter out Yasm. # See https://github.com/easybuilders/easybuild-easyconfigs/issues/11190 if [[ "$EESSI_CPU_FAMILY" == "aarch64" ]]; then From 4a8a7a3d76193dc4d031d2271069b92e431c7e92 Mon Sep 17 00:00:00 2001 From: lara Date: Tue, 5 Sep 2023 09:40:32 +0200 Subject: [PATCH 122/698] add git to stack --- eessi-2023.06-eb-4.7.2-2021a.yml | 1 + eessi-2023.06-eb-4.7.2-2021b.yml | 1 + 2 files changed, 2 insertions(+) diff --git a/eessi-2023.06-eb-4.7.2-2021a.yml b/eessi-2023.06-eb-4.7.2-2021a.yml index c0fa353475..be4f1deaa8 100644 --- a/eessi-2023.06-eb-4.7.2-2021a.yml +++ b/eessi-2023.06-eb-4.7.2-2021a.yml @@ -6,6 +6,7 @@ easyconfigs: - foss-2021a - libpng-1.6.37-GCCcore-10.3.0.eb: - libjpeg-turbo-2.0.6-GCCcore-10.3.0.eb + - git-2.32.0-GCCcore-10.3.0-nodocs.eb - QuantumESPRESSO-6.7-foss-2021a.eb - GROMACS-2021.3-foss-2021a.eb - Qt5-5.15.2-GCCcore-10.3.0.eb: diff --git a/eessi-2023.06-eb-4.7.2-2021b.yml b/eessi-2023.06-eb-4.7.2-2021b.yml index 7283caa4cc..43a0fbd4bd 100644 --- a/eessi-2023.06-eb-4.7.2-2021b.yml +++ b/eessi-2023.06-eb-4.7.2-2021b.yml @@ -11,6 +11,7 @@ easyconfigs: - gompi-2021b - FlexiBLAS-3.0.4-GCC-11.2.0.eb - foss-2021b.eb + - git-2.33.1-GCCcore-11.2.0-nodocs.eb - QuantumESPRESSO-6.8-foss-2021b.eb - SciPy-bundle-2021.10-foss-2021b - GROMACS-2021.5-foss-2021b.eb From 2c96e2b8ab87e491e0f9abc363e4fdf50af08c8e Mon Sep 17 00:00:00 2001 From: TopRichard Date: Tue, 5 Sep 2023 15:57:22 +0000 Subject: [PATCH 123/698] Added --from-pr 18348 --- eessi-2023.06-eb-4.7.2-2021a.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/eessi-2023.06-eb-4.7.2-2021a.yml b/eessi-2023.06-eb-4.7.2-2021a.yml index 919e02f460..c55f1f3976 100644 --- a/eessi-2023.06-eb-4.7.2-2021a.yml +++ b/eessi-2023.06-eb-4.7.2-2021a.yml @@ -13,4 +13,6 @@ easyconfigs: # see https://github.com/easybuilders/easybuild-easyconfigs/pull/18087 options: from-pr: 18087 - - Arrow-6.0.0-foss-2021a.eb + - Arrow-6.0.0-foss-2021a.eb: + options: + from-pr: 18348 From 978da670c998499a4378850beb67463474c1904c Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Tue, 5 Sep 2023 18:16:10 +0200 Subject: [PATCH 124/698] As agreed, ignore test failures for FFTW.MPI test suite --- eb_hooks.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/eb_hooks.py b/eb_hooks.py index 488e53d929..9560d84eff 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -274,6 +274,14 @@ def pre_test_hook_ignore_failing_tests_SciPybundle(self, *args, **kwargs): self.cfg['testopts'] = "|| echo ignoring failing tests" +def pre_test_hook_ignore_failing_tests_FFTWMPI(self, *args, **kwargs): + """ + Pre-test hook for FFTW.MPI: skip failing tests for FFTWMPI 3.3.10 + """ + cpu_target = get_eessi_envvar('EESSI_SOFTWARE_SUBDIR') + if self.name == 'FFTW.MPI' and self.version == '3.3.10' and cpu_target == 'aarch64/neoverse_v1': + self.cfg['testopts'] = "|| echo ignoring failing tests" + PARSE_HOOKS = { 'CGAL': parse_hook_cgal_toolchainopts_precise, 'fontconfig': parse_hook_fontconfig_add_fonts, @@ -295,4 +303,5 @@ def pre_test_hook_ignore_failing_tests_SciPybundle(self, *args, **kwargs): PRE_TEST_HOOKS = { 'SciPy-bundle': pre_test_hook_ignore_failing_tests_SciPybundle, + 'FFTW.MPI': pre_test_hook_ignore_failing_tests_FFTWMPI, } From d0cfab844b83e12aa84eed8b6da2f32347e90e18 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 5 Sep 2023 18:29:15 +0200 Subject: [PATCH 125/698] remove 'rebuild' option for ReFrame 4.2.0 to avoid that ReFrame is re-installed every time --- eessi-2023.06-eb-4.7.2-system.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/eessi-2023.06-eb-4.7.2-system.yml b/eessi-2023.06-eb-4.7.2-system.yml index 7364c57e18..220fd82e87 100644 --- a/eessi-2023.06-eb-4.7.2-system.yml +++ b/eessi-2023.06-eb-4.7.2-system.yml @@ -2,7 +2,6 @@ easyconfigs: - ReFrame-4.2.0.eb: options: from-pr: 18320 - rebuild: True - EasyBuild-4.8.0.eb: options: from-pr: 18282 From 02169fc2c104263bbc346ce2bb85a5086f90febb Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 6 Sep 2023 10:15:11 +0200 Subject: [PATCH 126/698] use RapidJSON easyconfig from PR to avoid hardcoded -march=native being used, which is important for generic builds --- eessi-2023.06-eb-4.7.2-2021a.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/eessi-2023.06-eb-4.7.2-2021a.yml b/eessi-2023.06-eb-4.7.2-2021a.yml index c55f1f3976..288c59d0c7 100644 --- a/eessi-2023.06-eb-4.7.2-2021a.yml +++ b/eessi-2023.06-eb-4.7.2-2021a.yml @@ -13,6 +13,13 @@ easyconfigs: # see https://github.com/easybuilders/easybuild-easyconfigs/pull/18087 options: from-pr: 18087 + - RapidJSON-1.1.0-GCCcore-10.3.0.eb: + # strip out hardcoded -march=native, + # see https://github.com/easybuilders/easybuild-easyconfigs/pull/18725 + options: + from-pr: 18725 - Arrow-6.0.0-foss-2021a.eb: + # fix installation of pyarrow Python bindings + # see https://github.com/easybuilders/easybuild-easyconfigs/pull/18348 options: from-pr: 18348 From 69d4c019558f8748b5a56f3b0ace7a5a94109eef Mon Sep 17 00:00:00 2001 From: lara Date: Wed, 6 Sep 2023 11:13:57 +0200 Subject: [PATCH 127/698] {2023.06}[SYSTEM] Java v11.0.18 --- .github/workflows/test_eessi.yml | 1 + EESSI-pilot-install-software.sh | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test_eessi.yml b/.github/workflows/test_eessi.yml index 65994cab2d..c51d313490 100644 --- a/.github/workflows/test_eessi.yml +++ b/.github/workflows/test_eessi.yml @@ -26,6 +26,7 @@ jobs: - eessi-2023.06-eb-4.7.2-2022a.yml - eessi-2023.06-eb-4.7.2-2022b.yml - eessi-2023.06-eb-4.7.2-system.yml + - eessi-2023.06-eb-4.8.0-2021b.yml steps: - name: Check out software-layer repository uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # v3.1.0 diff --git a/EESSI-pilot-install-software.sh b/EESSI-pilot-install-software.sh index 8110135cc0..29fbb7aa62 100755 --- a/EESSI-pilot-install-software.sh +++ b/EESSI-pilot-install-software.sh @@ -172,7 +172,7 @@ else echo_green ">> MODULEPATH set up: ${MODULEPATH}" fi -for eb_version in '4.7.2'; do +for eb_version in '4.7.2' '4.8.0'; do # load EasyBuild module (will be installed if it's not available yet) source ${TOPDIR}/load_easybuild_module.sh ${eb_version} From 41ed8d8485ca018b1657605677e148713efe15a8 Mon Sep 17 00:00:00 2001 From: lara Date: Wed, 6 Sep 2023 11:16:30 +0200 Subject: [PATCH 128/698] add Java --- eessi-2023.06-eb-4.8.0-system.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 eessi-2023.06-eb-4.8.0-system.yml diff --git a/eessi-2023.06-eb-4.8.0-system.yml b/eessi-2023.06-eb-4.8.0-system.yml new file mode 100644 index 0000000000..ebd7435eea --- /dev/null +++ b/eessi-2023.06-eb-4.8.0-system.yml @@ -0,0 +1,6 @@ +easyconfigs: + - Java-11.0.18.eb: + # see https://github.com/easybuilders/easybuild-easyblocks/pull/2557 + options: + include-easyblocks-from-pr: 2557 +~ From c0a3f109d03a2a15bc75bf1143ec77dc63dbd5ba Mon Sep 17 00:00:00 2001 From: lara Date: Wed, 6 Sep 2023 11:18:17 +0200 Subject: [PATCH 129/698] update eessi-2023.06-eb-4.8.0-system.yml --- eessi-2023.06-eb-4.8.0-system.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/eessi-2023.06-eb-4.8.0-system.yml b/eessi-2023.06-eb-4.8.0-system.yml index ebd7435eea..2cce43b80b 100644 --- a/eessi-2023.06-eb-4.8.0-system.yml +++ b/eessi-2023.06-eb-4.8.0-system.yml @@ -3,4 +3,3 @@ easyconfigs: # see https://github.com/easybuilders/easybuild-easyblocks/pull/2557 options: include-easyblocks-from-pr: 2557 -~ From c3ce1cb2633f24b8c0d21787d5e8a927ca5dc9e7 Mon Sep 17 00:00:00 2001 From: lara Date: Wed, 6 Sep 2023 11:28:30 +0200 Subject: [PATCH 130/698] add right easystack-file --- .github/workflows/test_eessi.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test_eessi.yml b/.github/workflows/test_eessi.yml index c51d313490..7667d02c26 100644 --- a/.github/workflows/test_eessi.yml +++ b/.github/workflows/test_eessi.yml @@ -26,7 +26,7 @@ jobs: - eessi-2023.06-eb-4.7.2-2022a.yml - eessi-2023.06-eb-4.7.2-2022b.yml - eessi-2023.06-eb-4.7.2-system.yml - - eessi-2023.06-eb-4.8.0-2021b.yml + - eessi-2023.06-eb-4.8.0-system.yml steps: - name: Check out software-layer repository uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # v3.1.0 From 95370cdfcea6246438e0bace7a2d267707114500 Mon Sep 17 00:00:00 2001 From: lara Date: Wed, 6 Sep 2023 13:01:57 +0200 Subject: [PATCH 131/698] change Java --- eessi-2023.06-eb-4.8.0-system.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eessi-2023.06-eb-4.8.0-system.yml b/eessi-2023.06-eb-4.8.0-system.yml index 2cce43b80b..6da9c66483 100644 --- a/eessi-2023.06-eb-4.8.0-system.yml +++ b/eessi-2023.06-eb-4.8.0-system.yml @@ -1,5 +1,5 @@ easyconfigs: - - Java-11.0.18.eb: + - Java-11.eb: # see https://github.com/easybuilders/easybuild-easyblocks/pull/2557 options: include-easyblocks-from-pr: 2557 From 0a1ff49d22fa612aa34b4e6e98dce5efe5a89b36 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen <33718780+casparvl@users.noreply.github.com> Date: Wed, 6 Sep 2023 14:06:04 +0200 Subject: [PATCH 132/698] Update eb_hooks.py Co-authored-by: Kenneth Hoste --- eb_hooks.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/eb_hooks.py b/eb_hooks.py index 9560d84eff..83bdca4cb5 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -276,7 +276,8 @@ def pre_test_hook_ignore_failing_tests_SciPybundle(self, *args, **kwargs): def pre_test_hook_ignore_failing_tests_FFTWMPI(self, *args, **kwargs): """ - Pre-test hook for FFTW.MPI: skip failing tests for FFTWMPI 3.3.10 + Pre-test hook for FFTW.MPI: skip failing tests for FFTW.MPI 3.3.10 on neoverse_v1 + cfr. https://github.com/EESSI/software-layer/issues/325 """ cpu_target = get_eessi_envvar('EESSI_SOFTWARE_SUBDIR') if self.name == 'FFTW.MPI' and self.version == '3.3.10' and cpu_target == 'aarch64/neoverse_v1': From 190cb999eb7c166f32b9411fe37ab13b53117721 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 6 Sep 2023 17:40:50 +0200 Subject: [PATCH 133/698] use more recent easyblock PR to fix Java/11 installation --- eessi-2023.06-eb-4.8.0-system.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/eessi-2023.06-eb-4.8.0-system.yml b/eessi-2023.06-eb-4.8.0-system.yml index 6da9c66483..744a52bde6 100644 --- a/eessi-2023.06-eb-4.8.0-system.yml +++ b/eessi-2023.06-eb-4.8.0-system.yml @@ -1,5 +1,7 @@ easyconfigs: - Java-11.eb: + # patch Java binaries/libraries when using alternate sysroot to ensure correct glibc & co are picked up # see https://github.com/easybuilders/easybuild-easyblocks/pull/2557 + # + https://github.com/easybuilders/easybuild-easyblocks/pull/2995 options: - include-easyblocks-from-pr: 2557 + include-easyblocks-from-pr: 2995 From 25f21696dc4b2cab3ba865bc57bec0b1b24f6bb9 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 6 Sep 2023 21:29:44 +0200 Subject: [PATCH 134/698] filter out .modulerc.lua (for Java) in create_tarball.sh since there's no corresponding directory under software/ --- create_tarball.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/create_tarball.sh b/create_tarball.sh index b6c72b341d..65f6efc2dc 100755 --- a/create_tarball.sh +++ b/create_tarball.sh @@ -52,7 +52,7 @@ if [ -d ${pilot_version}/software/${os}/${cpu_arch_subdir}/modules ]; then find ${pilot_version}/software/${os}/${cpu_arch_subdir}/modules -type l | grep -v '/\.wh\.' >> ${files_list} # module files and symlinks find ${pilot_version}/software/${os}/${cpu_arch_subdir}/modules/all -type f -o -type l \ - | grep -v '/\.wh\.' | sed -e 's/.lua$//' | sed -e 's@.*/modules/all/@@g' | sort -u \ + | grep -v '/\.wh\.' | grep -v '/\.modulerc\.lua' | sed -e 's/.lua$//' | sed -e 's@.*/modules/all/@@g' | sort -u \ >> ${module_files_list} fi if [ -d ${pilot_version}/software/${os}/${cpu_arch_subdir}/software -a -r ${module_files_list} ]; then From 401a35faba7b43ea5a67d752bede3f5b2067709a Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 7 Sep 2023 13:34:25 +0200 Subject: [PATCH 135/698] {2023.06}[foss/2021a] R v4.1.0 --- eessi-2023.06-eb-4.7.2-2021a.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/eessi-2023.06-eb-4.7.2-2021a.yml b/eessi-2023.06-eb-4.7.2-2021a.yml index 42a42f2236..8824c6414f 100644 --- a/eessi-2023.06-eb-4.7.2-2021a.yml +++ b/eessi-2023.06-eb-4.7.2-2021a.yml @@ -24,3 +24,4 @@ easyconfigs: # see https://github.com/easybuilders/easybuild-easyconfigs/pull/18348 options: from-pr: 18348 + - R-4.1.0-foss-2021a.eb From 77920b267a69299af92359f6da2637188c20a357 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 7 Sep 2023 18:20:08 +0200 Subject: [PATCH 136/698] {2023.06}[foss/2021a] GDAL v3.3.0 --- .github/workflows/test_eessi.yml | 1 + eessi-2023.06-eb-4.8.0-2021a.yml | 2 ++ 2 files changed, 3 insertions(+) create mode 100644 eessi-2023.06-eb-4.8.0-2021a.yml diff --git a/.github/workflows/test_eessi.yml b/.github/workflows/test_eessi.yml index 7667d02c26..48c41c7ce0 100644 --- a/.github/workflows/test_eessi.yml +++ b/.github/workflows/test_eessi.yml @@ -26,6 +26,7 @@ jobs: - eessi-2023.06-eb-4.7.2-2022a.yml - eessi-2023.06-eb-4.7.2-2022b.yml - eessi-2023.06-eb-4.7.2-system.yml + - eessi-2023.06-eb-4.8.0-2021a.yml - eessi-2023.06-eb-4.8.0-system.yml steps: - name: Check out software-layer repository diff --git a/eessi-2023.06-eb-4.8.0-2021a.yml b/eessi-2023.06-eb-4.8.0-2021a.yml new file mode 100644 index 0000000000..1adf0572d3 --- /dev/null +++ b/eessi-2023.06-eb-4.8.0-2021a.yml @@ -0,0 +1,2 @@ +easyconfigs: + - GDAL-3.3.0-foss-2021a.eb From a9caba346620846eba20fa31e8944a63ffa5a55b Mon Sep 17 00:00:00 2001 From: lara Date: Fri, 8 Sep 2023 10:19:51 +0200 Subject: [PATCH 137/698] {2023.06}[foss/2021b] OpenFoam v2112 --- eessi-2023.06-eb-4.8.0-2021b.yml | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 eessi-2023.06-eb-4.8.0-2021b.yml diff --git a/eessi-2023.06-eb-4.8.0-2021b.yml b/eessi-2023.06-eb-4.8.0-2021b.yml new file mode 100644 index 0000000000..b2202b5e7d --- /dev/null +++ b/eessi-2023.06-eb-4.8.0-2021b.yml @@ -0,0 +1,2 @@ +easyconfigs: + - OpenFOAM-v2112-foss-2021b.eb From 1df48dcd78e3c166835c4b47bf70a4ee46ec2f5f Mon Sep 17 00:00:00 2001 From: lara Date: Fri, 8 Sep 2023 10:24:45 +0200 Subject: [PATCH 138/698] add new easystack file --- .github/workflows/test_eessi.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/test_eessi.yml b/.github/workflows/test_eessi.yml index 7667d02c26..dba7403901 100644 --- a/.github/workflows/test_eessi.yml +++ b/.github/workflows/test_eessi.yml @@ -27,6 +27,7 @@ jobs: - eessi-2023.06-eb-4.7.2-2022b.yml - eessi-2023.06-eb-4.7.2-system.yml - eessi-2023.06-eb-4.8.0-system.yml + - eessi-2023.06-eb-4.8.0-2021b.yml steps: - name: Check out software-layer repository uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # v3.1.0 From 8c057bc7376d4ce201849262e0fa2a1da65104df Mon Sep 17 00:00:00 2001 From: lara Date: Fri, 8 Sep 2023 12:48:58 +0200 Subject: [PATCH 139/698] include patch for tsprintf.c --- eessi-2023.06-eb-4.8.0-2021b.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/eessi-2023.06-eb-4.8.0-2021b.yml b/eessi-2023.06-eb-4.8.0-2021b.yml index b2202b5e7d..ea32b3acbb 100644 --- a/eessi-2023.06-eb-4.8.0-2021b.yml +++ b/eessi-2023.06-eb-4.8.0-2021b.yml @@ -1,2 +1,6 @@ easyconfigs: - - OpenFOAM-v2112-foss-2021b.eb + - OpenFOAM-v2112-foss-2021b.eb: + #fix for different output of tsprintf.c test from GNU C library <2.36 + #see https://github.com/easybuilders/easybuild-easyconfigs/pull/18746 + options: + from-pr: 18746 From 39eda7ba930570afef702cc834632b99422cd403 Mon Sep 17 00:00:00 2001 From: lara Date: Fri, 8 Sep 2023 13:12:32 +0200 Subject: [PATCH 140/698] include patch for tsprintf.c --- eessi-2023.06-eb-4.8.0-2021b.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/eessi-2023.06-eb-4.8.0-2021b.yml b/eessi-2023.06-eb-4.8.0-2021b.yml index ea32b3acbb..ff15917797 100644 --- a/eessi-2023.06-eb-4.8.0-2021b.yml +++ b/eessi-2023.06-eb-4.8.0-2021b.yml @@ -1,6 +1,7 @@ easyconfigs: - - OpenFOAM-v2112-foss-2021b.eb: + - MPFR-4.1.0-GCCcore-11.2.0.eb: #fix for different output of tsprintf.c test from GNU C library <2.36 #see https://github.com/easybuilders/easybuild-easyconfigs/pull/18746 options: from-pr: 18746 + - OpenFOAM-v2112-foss-2021b.eb From e0fe6b5c26cd9eb0442ffa5a0496d9d422f04090 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Sat, 9 Sep 2023 12:29:40 +0200 Subject: [PATCH 141/698] improve comment for use of --from-pr for MPFR 4.1.0 --- eessi-2023.06-eb-4.8.0-2021b.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/eessi-2023.06-eb-4.8.0-2021b.yml b/eessi-2023.06-eb-4.8.0-2021b.yml index ff15917797..477ba6320c 100644 --- a/eessi-2023.06-eb-4.8.0-2021b.yml +++ b/eessi-2023.06-eb-4.8.0-2021b.yml @@ -1,7 +1,7 @@ easyconfigs: - MPFR-4.1.0-GCCcore-11.2.0.eb: - #fix for different output of tsprintf.c test from GNU C library <2.36 - #see https://github.com/easybuilders/easybuild-easyconfigs/pull/18746 + # use patch for MPFR 4.1.0 to fix failing tsprintf test with glibc >= 2.37, + # see https://github.com/easybuilders/easybuild-easyconfigs/pull/18746 options: from-pr: 18746 - OpenFOAM-v2112-foss-2021b.eb From 515c0ad8896ca68d87d7eb84c796c33cd3003281 Mon Sep 17 00:00:00 2001 From: Maxim Masterov Date: Mon, 11 Sep 2023 14:13:09 +0200 Subject: [PATCH 142/698] Add espresso with GCC/11.3.0 and without CUDA to EESSI pilot 2023.06 --- eessi-2023.06-eb-4.7.2-2022a.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/eessi-2023.06-eb-4.7.2-2022a.yml b/eessi-2023.06-eb-4.7.2-2022a.yml index d40ddff261..f690d49192 100644 --- a/eessi-2023.06-eb-4.7.2-2022a.yml +++ b/eessi-2023.06-eb-4.7.2-2022a.yml @@ -1,3 +1,6 @@ easyconfigs: - GCC-11.3.0 - OpenMPI-4.1.4-GCC-11.3.0.eb + - ESPResSo-4.2.1-foss-2022a.eb: + options: + from-pr: 18486 From 6317155e0afa3a85b678571ea7c8e2187e85ff5b Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 12 Sep 2023 14:44:28 +0200 Subject: [PATCH 143/698] {2023.06} EasyBuild v4.8.1 --- eessi-2023.06-eb-4.8.0-system.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/eessi-2023.06-eb-4.8.0-system.yml b/eessi-2023.06-eb-4.8.0-system.yml index 744a52bde6..2928f110b0 100644 --- a/eessi-2023.06-eb-4.8.0-system.yml +++ b/eessi-2023.06-eb-4.8.0-system.yml @@ -5,3 +5,6 @@ easyconfigs: # + https://github.com/easybuilders/easybuild-easyblocks/pull/2995 options: include-easyblocks-from-pr: 2995 + - EasyBuild-4.8.1.eb: + options: + from-pr: 18761 From 26f6c02d6075e1079e49afe73947c0ed2e2cd5fa Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 13 Sep 2023 11:05:47 +0200 Subject: [PATCH 144/698] trigger rebuild of Java/11 with EasyBuild v4.8.1 --- .github/workflows/test_eessi.yml | 1 + EESSI-pilot-install-software.sh | 2 +- eessi-2023.06-eb-4.8.1-system.yml | 4 ++++ 3 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 eessi-2023.06-eb-4.8.1-system.yml diff --git a/.github/workflows/test_eessi.yml b/.github/workflows/test_eessi.yml index da1379043a..2db4809b21 100644 --- a/.github/workflows/test_eessi.yml +++ b/.github/workflows/test_eessi.yml @@ -29,6 +29,7 @@ jobs: - eessi-2023.06-eb-4.8.0-2021a.yml - eessi-2023.06-eb-4.8.0-system.yml - eessi-2023.06-eb-4.8.0-2021b.yml + - eessi-2023.06-eb-4.8.1-system.yml steps: - name: Check out software-layer repository uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # v3.1.0 diff --git a/EESSI-pilot-install-software.sh b/EESSI-pilot-install-software.sh index 29fbb7aa62..4605b77873 100755 --- a/EESSI-pilot-install-software.sh +++ b/EESSI-pilot-install-software.sh @@ -172,7 +172,7 @@ else echo_green ">> MODULEPATH set up: ${MODULEPATH}" fi -for eb_version in '4.7.2' '4.8.0'; do +for eb_version in '4.7.2' '4.8.0' '4.8.1'; do # load EasyBuild module (will be installed if it's not available yet) source ${TOPDIR}/load_easybuild_module.sh ${eb_version} diff --git a/eessi-2023.06-eb-4.8.1-system.yml b/eessi-2023.06-eb-4.8.1-system.yml new file mode 100644 index 0000000000..bab3755330 --- /dev/null +++ b/eessi-2023.06-eb-4.8.1-system.yml @@ -0,0 +1,4 @@ +easyconfigs: + - Java-11.eb: + options: + rebuild: True From ea318e635ff1e6f9b8c6dc4f26003ab3bd5f720e Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 13 Sep 2023 14:38:44 +0200 Subject: [PATCH 145/698] remove 'rebuild' option for Java/11 with EasyBuild v4.8.1 --- eessi-2023.06-eb-4.8.1-system.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/eessi-2023.06-eb-4.8.1-system.yml b/eessi-2023.06-eb-4.8.1-system.yml index bab3755330..8966fbfb7a 100644 --- a/eessi-2023.06-eb-4.8.1-system.yml +++ b/eessi-2023.06-eb-4.8.1-system.yml @@ -1,4 +1,3 @@ easyconfigs: - - Java-11.eb: - options: - rebuild: True + # rebuilt with EasyBuild v4.8.1 (now wraps around Java/11.0.20) + - Java-11.eb From 3a99d54bad7a1a7b7d6e8154d4b08c81d4fa0ebe Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 13 Sep 2023 18:20:22 +0200 Subject: [PATCH 146/698] {2023.03} foss/2023a --- .github/workflows/test_eessi.yml | 1 + EESSI-pilot-install-software.sh | 2 +- eessi-2023.06-eb-4.8.1-2023a.yml | 3 +++ 3 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 eessi-2023.06-eb-4.8.1-2023a.yml diff --git a/.github/workflows/test_eessi.yml b/.github/workflows/test_eessi.yml index da1379043a..8c1aede4c9 100644 --- a/.github/workflows/test_eessi.yml +++ b/.github/workflows/test_eessi.yml @@ -29,6 +29,7 @@ jobs: - eessi-2023.06-eb-4.8.0-2021a.yml - eessi-2023.06-eb-4.8.0-system.yml - eessi-2023.06-eb-4.8.0-2021b.yml + - eessi-2023.06-eb-4.8.1-2023a.yml steps: - name: Check out software-layer repository uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # v3.1.0 diff --git a/EESSI-pilot-install-software.sh b/EESSI-pilot-install-software.sh index 29fbb7aa62..4605b77873 100755 --- a/EESSI-pilot-install-software.sh +++ b/EESSI-pilot-install-software.sh @@ -172,7 +172,7 @@ else echo_green ">> MODULEPATH set up: ${MODULEPATH}" fi -for eb_version in '4.7.2' '4.8.0'; do +for eb_version in '4.7.2' '4.8.0' '4.8.1'; do # load EasyBuild module (will be installed if it's not available yet) source ${TOPDIR}/load_easybuild_module.sh ${eb_version} diff --git a/eessi-2023.06-eb-4.8.1-2023a.yml b/eessi-2023.06-eb-4.8.1-2023a.yml new file mode 100644 index 0000000000..20aafb11fe --- /dev/null +++ b/eessi-2023.06-eb-4.8.1-2023a.yml @@ -0,0 +1,3 @@ +easyconfigs: + - GCC-12.3.0 + - foss-2023a From 76d7e9f6a02b3df29c59f89cf07c4a8de5df74c2 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 15 Sep 2023 08:58:12 +0200 Subject: [PATCH 147/698] install OpenBLAS for foss/2023a via easyconfig PR that adds patch to fix hang in OpenBLAS test suite --- eessi-2023.06-eb-4.8.1-2023a.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/eessi-2023.06-eb-4.8.1-2023a.yml b/eessi-2023.06-eb-4.8.1-2023a.yml index 20aafb11fe..8c2313b8a4 100644 --- a/eessi-2023.06-eb-4.8.1-2023a.yml +++ b/eessi-2023.06-eb-4.8.1-2023a.yml @@ -1,3 +1,8 @@ easyconfigs: - GCC-12.3.0 + - OpenBLAS-0.3.23-GCC-12.3.0: + # add patch to avoid hang when running OpenBLAS test suite, + # see https://github.com/easybuilders/easybuild-easyconfigs/pull/18790 + options: + from-pr: 18790 - foss-2023a From 1a28493b4fb379198e2c113edaac07a8a869d079 Mon Sep 17 00:00:00 2001 From: lara Date: Mon, 18 Sep 2023 15:59:45 +0200 Subject: [PATCH 148/698] {2023.06}[foss/2021b] R 4.2.0 --- eessi-2023.06-eb-4.8.1-2021b.yml | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 eessi-2023.06-eb-4.8.1-2021b.yml diff --git a/eessi-2023.06-eb-4.8.1-2021b.yml b/eessi-2023.06-eb-4.8.1-2021b.yml new file mode 100644 index 0000000000..a0ef0fa303 --- /dev/null +++ b/eessi-2023.06-eb-4.8.1-2021b.yml @@ -0,0 +1,2 @@ +easyconfigs: + - R-4.2.0-foss-2021b.eb From 57be9d9ce95a12c3a98a689d6dfcf32e324264eb Mon Sep 17 00:00:00 2001 From: lara Date: Mon, 18 Sep 2023 16:34:38 +0200 Subject: [PATCH 149/698] update .github/workflows/test_eessi.yml --- .github/workflows/test_eessi.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/test_eessi.yml b/.github/workflows/test_eessi.yml index 2db4809b21..1a67ad29ea 100644 --- a/.github/workflows/test_eessi.yml +++ b/.github/workflows/test_eessi.yml @@ -30,6 +30,7 @@ jobs: - eessi-2023.06-eb-4.8.0-system.yml - eessi-2023.06-eb-4.8.0-2021b.yml - eessi-2023.06-eb-4.8.1-system.yml + - eessi-2023.06-eb-4.8.1-2021b.yml steps: - name: Check out software-layer repository uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # v3.1.0 From 65305199a81a5be603f37c39465e9250d045d183 Mon Sep 17 00:00:00 2001 From: lara Date: Tue, 19 Sep 2023 15:23:50 +0200 Subject: [PATCH 150/698] add fix permission issues when copying xvfb-run script in Xvfb easyconfigs --- eessi-2023.06-eb-4.8.1-2021b.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/eessi-2023.06-eb-4.8.1-2021b.yml b/eessi-2023.06-eb-4.8.1-2021b.yml index a0ef0fa303..c2c50ba27b 100644 --- a/eessi-2023.06-eb-4.8.1-2021b.yml +++ b/eessi-2023.06-eb-4.8.1-2021b.yml @@ -1,2 +1,7 @@ easyconfigs: + - Xvfb-1.20.13-GCCcore-11.2.0.eb: + # enable exec permissions for xvfb-run after copying; + # need to also enable user write permissions on xvfb-run to ensure that copying with preserved permissions works + options: + from-pr: 18834 - R-4.2.0-foss-2021b.eb From 2bc2d2fcb023141ebfc1f71879158c21eda66860 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 19 Sep 2023 15:34:21 +0200 Subject: [PATCH 151/698] use PR to fix xvfb-run permission issue for Xvfb 1.20.11 --- eessi-2023.06-eb-4.7.2-2021a.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/eessi-2023.06-eb-4.7.2-2021a.yml b/eessi-2023.06-eb-4.7.2-2021a.yml index 8824c6414f..aaa23207d1 100644 --- a/eessi-2023.06-eb-4.7.2-2021a.yml +++ b/eessi-2023.06-eb-4.7.2-2021a.yml @@ -24,4 +24,9 @@ easyconfigs: # see https://github.com/easybuilders/easybuild-easyconfigs/pull/18348 options: from-pr: 18348 + - Xvfb-1.20.11-GCCcore-10.3.0.eb: + # fix permission issues for xvfb-run script, + # see https://github.com/easybuilders/easybuild-easyconfigs/pull/18834 + options: + from-pr: 18834 - R-4.1.0-foss-2021a.eb From b8b8c2b6e31cfaff3dbe7160148822cbb90c2878 Mon Sep 17 00:00:00 2001 From: lara Date: Tue, 19 Sep 2023 15:59:05 +0200 Subject: [PATCH 152/698] resolve parsing error of easystack --- eessi-2023.06-eb-4.8.1-2021b.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/eessi-2023.06-eb-4.8.1-2021b.yml b/eessi-2023.06-eb-4.8.1-2021b.yml index c2c50ba27b..62f529563a 100644 --- a/eessi-2023.06-eb-4.8.1-2021b.yml +++ b/eessi-2023.06-eb-4.8.1-2021b.yml @@ -2,6 +2,6 @@ easyconfigs: - Xvfb-1.20.13-GCCcore-11.2.0.eb: # enable exec permissions for xvfb-run after copying; # need to also enable user write permissions on xvfb-run to ensure that copying with preserved permissions works - options: - from-pr: 18834 + options: + from-pr: 18834 - R-4.2.0-foss-2021b.eb From 3a123b3d1c94179daf81297e8b6965fa0bbbc675 Mon Sep 17 00:00:00 2001 From: TopRichard Date: Thu, 21 Sep 2023 06:05:42 +0000 Subject: [PATCH 153/698] {2023.06}[foss/2022b] WRF-dmpar V4.4.1 --- eessi-2023.06-eb-4.7.2-2022b.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/eessi-2023.06-eb-4.7.2-2022b.yml b/eessi-2023.06-eb-4.7.2-2022b.yml index 6d15ee2b90..bbf1c54335 100644 --- a/eessi-2023.06-eb-4.7.2-2022b.yml +++ b/eessi-2023.06-eb-4.7.2-2022b.yml @@ -5,3 +5,4 @@ easyconfigs: options: include-easyblocks-from-pr: 2248 - foss-2022b + - WRF-4.4.1-foss-2022b-dmpar.eb From 08231fa4ad4ca994cb119774e809f45815a70734 Mon Sep 17 00:00:00 2001 From: TopRichard Date: Thu, 21 Sep 2023 06:11:26 +0000 Subject: [PATCH 154/698] modified the WRF-hook using LooseVersion --- eb_hooks.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/eb_hooks.py b/eb_hooks.py index 488e53d929..0cc93312c5 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -254,8 +254,13 @@ def pre_configure_hook_wrf_aarch64(self, *args, **kwargs): if get_cpu_architecture() == AARCH64: pattern = "Linux x86_64 ppc64le, gfortran" repl = "Linux x86_64 aarch64 ppc64le, gfortran" - self.cfg.update('preconfigopts', "sed -i 's/%s/%s/g' arch/configure_new.defaults && " % (pattern, repl)) - print_msg("Using custom preconfigopts for %s: %s", self.name, self.cfg['preconfigopts']) + if LooseVersion(self.version) <= LooseVersion('3.9.0'): + self.cfg.update('preconfigopts', "sed -i 's/%s/%s/g' arch/configure_new.defaults && " % (pattern, repl)) + print_msg("Using custom preconfigopts for %s: %s", self.name, self.cfg['preconfigopts']) + + if LooseVersion('4.0.0') <= LooseVersion(self.version) <= LooseVersion('4.2.1'): + self.cfg.update('preconfigopts', "sed -i 's/%s/%s/g' arch/configure.defaults && " % (pattern, repl)) + print_msg("Using custom preconfigopts for %s: %s", self.name, self.cfg['preconfigopts']) else: raise EasyBuildError("WRF-specific hook triggered for non-WRF easyconfig?!") From 3c7821d9fd4584aac7da791b5db9d4f9b7a3e233 Mon Sep 17 00:00:00 2001 From: TopRichard Date: Thu, 21 Sep 2023 09:06:22 +0000 Subject: [PATCH 155/698] modified the WRF-hook --- eb_hooks.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/eb_hooks.py b/eb_hooks.py index 0cc93312c5..7689da24bf 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -244,7 +244,6 @@ def pre_configure_hook_metabat_filtered_zlib_dep(self, *args, **kwargs): else: raise EasyBuildError("MetaBAT-specific hook triggered for non-MetaBAT easyconfig?!") - def pre_configure_hook_wrf_aarch64(self, *args, **kwargs): """ Pre-configure hook for WRF: @@ -257,7 +256,7 @@ def pre_configure_hook_wrf_aarch64(self, *args, **kwargs): if LooseVersion(self.version) <= LooseVersion('3.9.0'): self.cfg.update('preconfigopts', "sed -i 's/%s/%s/g' arch/configure_new.defaults && " % (pattern, repl)) print_msg("Using custom preconfigopts for %s: %s", self.name, self.cfg['preconfigopts']) - + if LooseVersion('4.0.0') <= LooseVersion(self.version) <= LooseVersion('4.2.1'): self.cfg.update('preconfigopts', "sed -i 's/%s/%s/g' arch/configure.defaults && " % (pattern, repl)) print_msg("Using custom preconfigopts for %s: %s", self.name, self.cfg['preconfigopts']) From f3a1f35b5acf46d241ed3f3262e86ae6ed054771 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 20 Sep 2023 17:34:32 +0200 Subject: [PATCH 156/698] fix failing build for testthat R extension on top of recent glibc via pre_single_extension hook that replaces SIGSTKSZ with constant value --- eb_hooks.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/eb_hooks.py b/eb_hooks.py index 488e53d929..95092fbdc2 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -274,6 +274,22 @@ def pre_test_hook_ignore_failing_tests_SciPybundle(self, *args, **kwargs): self.cfg['testopts'] = "|| echo ignoring failing tests" +def pre_single_extension_hook(ext, *args, **kwargs): + """Main pre-configure hook: trigger custom functions based on software name.""" + if ext.name in PRE_SINGLE_EXTENSION_HOOKS: + PRE_SINGLE_EXTENSION_HOOKS[ext.name](ext, *args, **kwargs) + + +def pre_single_extension_testthat(ext, *args, **kwargs): + """ + Pre-extension hook for testthat, to fix build on top of recent glibc. + """ + if ext.name == 'testthat' and LooseVersion(ext.version) < LooseVersion('3.1.0'): + # use constant value instead of SIGSTKSZ for stack size, + # cfr. https://github.com/r-lib/testthat/issues/1373 + https://github.com/r-lib/testthat/pull/1403 + ext.cfg['preinstallopts'] = "sed -i 's/SIGSTKSZ/32768/g' inst/include/testthat/vendor/catch.h && " + + PARSE_HOOKS = { 'CGAL': parse_hook_cgal_toolchainopts_precise, 'fontconfig': parse_hook_fontconfig_add_fonts, @@ -296,3 +312,7 @@ def pre_test_hook_ignore_failing_tests_SciPybundle(self, *args, **kwargs): PRE_TEST_HOOKS = { 'SciPy-bundle': pre_test_hook_ignore_failing_tests_SciPybundle, } + +PRE_SINGLE_EXTENSION_HOOKS = { + 'testthat': pre_single_extension_testthat, +} From 74f74ae32465fd2410cde9c448cc6ccf86d01db2 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 21 Sep 2023 18:36:27 +0200 Subject: [PATCH 157/698] use easybuild/source subdirectory in shared filesystem path as EasyBuild source path, if specified via shared_fs_path in provided configuration --- EESSI-pilot-install-software.sh | 14 ++++++++++++++ bot/build.sh | 13 +++++++++++++ 2 files changed, 27 insertions(+) diff --git a/EESSI-pilot-install-software.sh b/EESSI-pilot-install-software.sh index 4605b77873..ed5319a6db 100755 --- a/EESSI-pilot-install-software.sh +++ b/EESSI-pilot-install-software.sh @@ -8,10 +8,12 @@ display_help() { echo "usage: $0 [OPTIONS]" + echo " --build-logs-dir - location to copy EasyBuild logs to for failed builds" echo " -g | --generic - instructs script to build for generic architecture target" echo " -h | --help - display this usage information" echo " -x | --http-proxy URL - provides URL for the environment variable http_proxy" echo " -y | --https-proxy URL - provides URL for the environment variable https_proxy" + echo " --shared-fs-path - path to directory on shared filesystem that can be used" } function copy_build_log() { @@ -70,6 +72,10 @@ while [[ $# -gt 0 ]]; do export build_logs_dir="${2}" shift 2 ;; + --shared-fs-path) + export shared_fs_path="${2}" + shift 2 + ;; -*|--*) echo "Error: Unknown option: $1" >&2 exit 1 @@ -160,6 +166,14 @@ fi echo ">> Configuring EasyBuild..." source $TOPDIR/configure_easybuild +if [ ! -z "${shared_fs_path}" ]; then + shared_eb_sourcepath=${shared_fs_path}/easybuild/sources + echo ">> Using ${shared_eb_sourcepath} as shared EasyBuild source path" + export EASYBUILD_SOURCEPATH=${shared_eb_sourcepath}:${EASYBUILD_SOURCEPATH} +fi + +${EB} --show-config + echo ">> Setting up \$MODULEPATH..." # make sure no modules are loaded module --force purge diff --git a/bot/build.sh b/bot/build.sh index bd7b2fa8d8..1e7aac49c1 100755 --- a/bot/build.sh +++ b/bot/build.sh @@ -64,6 +64,18 @@ else export SINGULARITY_BIND="${SINGULARITY_BIND},${BUILD_LOGS_DIR}" fi +# check if path to directory on shared filesystem is specified, +# and use it as location for source tarballs used by EasyBuild if so +SHARED_FS_PATH=$(cfg_get_value "site_config" "shared_fs_path") +echo "bot/build.sh: SHARED_FS_PATH='${SHARED_FS_PATH}'" +# if $SHARED_FS_PATH is set, add it to $SINGULARITY_BIND so the path is available in the build container +mkdir -p ${SHARED_FS_PATH} +if [[ -z ${SINGULARITY_BIND} ]]; then + export SINGULARITY_BIND="${SHARED_FS_PATH}" +else + export SINGULARITY_BIND="${SINGULARITY_BIND},${SHARED_FS_PATH}" +fi + SINGULARITY_CACHEDIR=$(cfg_get_value "site_config" "container_cachedir") echo "bot/build.sh: SINGULARITY_CACHEDIR='${SINGULARITY_CACHEDIR}'" if [[ ! -z ${SINGULARITY_CACHEDIR} ]]; then @@ -167,6 +179,7 @@ if [[ ${EESSI_SOFTWARE_SUBDIR_OVERRIDE} =~ .*/generic$ ]]; then INSTALL_SCRIPT_ARGS+=("--generic") fi [[ ! -z ${BUILD_LOGS_DIR} ]] && INSTALL_SCRIPT_ARGS+=("--build-logs-dir" "${BUILD_LOGS_DIR}") +[[ ! -z ${SHARED_FS_PATH} ]] && INSTALL_SCRIPT_ARGS+=("--shared-fs-path" "${SHARED_FS_PATH}") # create tmp file for output of build step build_outerr=$(mktemp build.outerr.XXXX) From 24146ee35424ee5f9e3c621611a1df13118d1315 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 21 Sep 2023 20:18:36 +0200 Subject: [PATCH 158/698] {2023.06}[system] ReFrame 4.3.3 --- eessi-2023.06-eb-4.8.1-system.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/eessi-2023.06-eb-4.8.1-system.yml b/eessi-2023.06-eb-4.8.1-system.yml index 8966fbfb7a..1e9664e10f 100644 --- a/eessi-2023.06-eb-4.8.1-system.yml +++ b/eessi-2023.06-eb-4.8.1-system.yml @@ -1,3 +1,6 @@ easyconfigs: # rebuilt with EasyBuild v4.8.1 (now wraps around Java/11.0.20) - Java-11.eb + - ReFrame-4.3.3.eb: + options: + from-pr: 18851 From 8da226c5eec4aa204e3d522cc322f228b85f4aa5 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 22 Sep 2023 10:12:32 +0200 Subject: [PATCH 159/698] also fix SIGSTKSZ for isoband R package via pre-extension hook --- eb_hooks.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/eb_hooks.py b/eb_hooks.py index 95092fbdc2..ce84ba655e 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -282,7 +282,7 @@ def pre_single_extension_hook(ext, *args, **kwargs): def pre_single_extension_testthat(ext, *args, **kwargs): """ - Pre-extension hook for testthat, to fix build on top of recent glibc. + Pre-extension hook for testthat R package, to fix build on top of recent glibc. """ if ext.name == 'testthat' and LooseVersion(ext.version) < LooseVersion('3.1.0'): # use constant value instead of SIGSTKSZ for stack size, @@ -290,6 +290,16 @@ def pre_single_extension_testthat(ext, *args, **kwargs): ext.cfg['preinstallopts'] = "sed -i 's/SIGSTKSZ/32768/g' inst/include/testthat/vendor/catch.h && " +def pre_single_extension_isoband(ext, *args, **kwargs): + """ + Pre-extension hook for isoband R package, to fix build on top of recent glibc. + """ + if ext.name == 'isoband' and LooseVersion(ext.version) < LooseVersion('0.2.5'): + # use constant value instead of SIGSTKSZ for stack size in vendored testthat included in isoband sources, + # cfr. https://github.com/r-lib/isoband/commit/6984e6ce8d977f06e0b5ff73f5d88e5c9a44c027 + ext.cfg['preinstallopts'] = "sed -i 's/SIGSTKSZ/32768/g' src/testthat/vendor/catch.h && " + + PARSE_HOOKS = { 'CGAL': parse_hook_cgal_toolchainopts_precise, 'fontconfig': parse_hook_fontconfig_add_fonts, @@ -314,5 +324,6 @@ def pre_single_extension_testthat(ext, *args, **kwargs): } PRE_SINGLE_EXTENSION_HOOKS = { + 'isoband': pre_single_extension_isoband, 'testthat': pre_single_extension_testthat, } From 18c36d51f4857466c123ac8f6a63ec98c843a078 Mon Sep 17 00:00:00 2001 From: lara Date: Mon, 25 Sep 2023 11:58:24 +0200 Subject: [PATCH 160/698] {2023.06}[foss/2021b] matplotlib v3.4.3 --- eessi-2023.06-eb-4.8.1-2021b.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/eessi-2023.06-eb-4.8.1-2021b.yml b/eessi-2023.06-eb-4.8.1-2021b.yml index 62f529563a..a1b9927e97 100644 --- a/eessi-2023.06-eb-4.8.1-2021b.yml +++ b/eessi-2023.06-eb-4.8.1-2021b.yml @@ -5,3 +5,4 @@ easyconfigs: options: from-pr: 18834 - R-4.2.0-foss-2021b.eb + - matplotlib-3.4.3-foss-2021b.eb From 39ecb81b31568f82863c9c66709aaf7f8eaf13a8 Mon Sep 17 00:00:00 2001 From: lara Date: Mon, 25 Sep 2023 12:48:26 +0200 Subject: [PATCH 161/698] add yml for known issues --- eessi-2023.06-missing.yml | 44 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 eessi-2023.06-missing.yml diff --git a/eessi-2023.06-missing.yml b/eessi-2023.06-missing.yml new file mode 100644 index 0000000000..cd7967043d --- /dev/null +++ b/eessi-2023.06-missing.yml @@ -0,0 +1,44 @@ + - aarch64/generic: + - foss/2022b: + - OpenBlas: + - issue: 314 + - foss/2021a: + - OpenBlas: + - issue: 314 + - foss/2021b: + - OpenBlas: + - issue: 314 + - foss/2022a: + - OpenBlas: + - issue: 314 + - aarch64/neoverse_n1: + - foss/2022b: + - OpenBlas: + - issue: 314 + - foss/2021a: + - OpenBlas: + - issue: 314 + - foss/2021b: + - OpenBlas: + - issue: 314 + - foss/2022a: + - OpenBlas: + - issue: 314 + - aarch64/neoverse_v1: + - foss/2022a: + - OpenBlas: + - issue: 314 + - foss/2022b: + - OpenBlas: + - issue: 314 + - foss/2021a: + - OpenBlas: + - issue: 314 + - foss/2021b: + - OpenBlas: + - issue: 314 + - SciPy-bundle: + - issue: 318 + - foss/2022a: + - OpenBlas: + - issue: 314 From b3e6b8acddd5c4afcb453d31b00115a7a007338e Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Tue, 26 Sep 2023 10:03:15 +0200 Subject: [PATCH 162/698] Add the option to pass a command to the inspect script, which will get executed in the container. Useful if you want to e.g. run this in a job, but just submit that job manually (not by the bot). --- bot/inspect.sh | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/bot/inspect.sh b/bot/inspect.sh index e5e4df5970..a97a29b614 100755 --- a/bot/inspect.sh +++ b/bot/inspect.sh @@ -34,6 +34,7 @@ display_help() { echo " to be something like JOB_DIR/previous_tmp/{build,tarball}_step/TARBALL.tgz" echo " and thus determine JOB_DIR from the given path" echo " [default: none]" + echo " -c | --command COMMAND - command to execute inside the container, in the prefix environment" echo " -x | --http-proxy URL - provides URL for the environment variable http_proxy" echo " -y | --https-proxy URL - provides URL for the environment variable https_proxy" } @@ -62,6 +63,10 @@ while [[ $# -gt 0 ]]; do export https_proxy="${2}" shift 2 ;; + -c|--command) + export run_in_prefix="${2}" + shift 2 + ;; -*|--*) echo "Error: Unknown option: ${1}" >&2 exit 1 @@ -421,10 +426,16 @@ echo "Executing command to start interactive session to inspect build job:" # - setup steps run in 'EESSI-pilot-install-software.sh' # These initializations are combined into a single script that is executed when # the shell in startprefix is started. We set the env variable BASH_ENV here. -echo "./eessi_container.sh ${CMDLINE_ARGS[@]}" -echo " -- ${EESSI_COMPAT_LAYER_DIR}/startprefix" -./eessi_container.sh "${CMDLINE_ARGS[@]}" \ +if [[ -z ${run_in_prefix} ]]; then + echo "./eessi_container.sh ${CMDLINE_ARGS[@]}" + echo " -- ${EESSI_COMPAT_LAYER_DIR}/startprefix" + ./eessi_container.sh "${CMDLINE_ARGS[@]}" \ -- ${EESSI_COMPAT_LAYER_DIR}/startprefix - +else + echo "./eessi_container.sh ${CMDLINE_ARGS[@]}" + echo " -- ${EESSI_COMPAT_LAYER_DIR}/startprefix <<< ${run_in_prefix}" + ./eessi_container.sh "${CMDLINE_ARGS[@]}" \ + -- ${EESSI_COMPAT_LAYER_DIR}/startprefix <<< ${run_in_prefix} +fi exit 0 From 9d96b667e458b6b0bd12808281379527aa570121 Mon Sep 17 00:00:00 2001 From: lara Date: Tue, 26 Sep 2023 10:30:49 +0200 Subject: [PATCH 163/698] update known issue to make more compact --- eessi-2023.06-known_issues.yml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 eessi-2023.06-known_issues.yml diff --git a/eessi-2023.06-known_issues.yml b/eessi-2023.06-known_issues.yml new file mode 100644 index 0000000000..b4a48684a5 --- /dev/null +++ b/eessi-2023.06-known_issues.yml @@ -0,0 +1,16 @@ +- aarch64/generic: + OpenBLAS/0.3.21-GCC-12.2.0: https://github.com/EESSI/software-layer/issues/314 + +- aarch64/generic: + - OpenBLAS/0.3.21-GCC-12.2.0: https://github.com/EESSI/software-layer/issues/314 + - OpenBLAS/0.3.18-GCC-11.2.0: https://github.com/EESSI/software-layer/issues/314 + - OpenBLAS/0.3.15-GCC-10.3.0: https://github.com/EESSI/software-layer/issues/314 +- aarch64/neoverse_n1: + - OpenBLAS/0.3.21-GCC-12.2.0: https://github.com/EESSI/software-layer/issues/314 + - OpenBLAS/0.3.18-GCC-11.2.0: https://github.com/EESSI/software-layer/issues/314 + - OpenBLAS/0.3.15-GCC-10.3.0: https://github.com/EESSI/software-layer/issues/314 +- aarch64/neoverse_v1: + - OpenBLAS/0.3.21-GCC-12.2.0: https://github.com/EESSI/software-layer/issues/314 + - OpenBLAS/0.3.18-GCC-11.2.0: https://github.com/EESSI/software-layer/issues/314 + - OpenBLAS/0.3.15-GCC-10.3.0: https://github.com/EESSI/software-layer/issues/314 +- SciPy-bundle/2021.10-foss-2021b: https://github.com/EESSI/software-layer/issues/318 From ab7759fbd61e6c708ef8bcd696041312ae458599 Mon Sep 17 00:00:00 2001 From: lara Date: Tue, 26 Sep 2023 10:34:14 +0200 Subject: [PATCH 164/698] remove missing yml --- eessi-2023.06-missing.yml | 44 --------------------------------------- 1 file changed, 44 deletions(-) delete mode 100644 eessi-2023.06-missing.yml diff --git a/eessi-2023.06-missing.yml b/eessi-2023.06-missing.yml deleted file mode 100644 index cd7967043d..0000000000 --- a/eessi-2023.06-missing.yml +++ /dev/null @@ -1,44 +0,0 @@ - - aarch64/generic: - - foss/2022b: - - OpenBlas: - - issue: 314 - - foss/2021a: - - OpenBlas: - - issue: 314 - - foss/2021b: - - OpenBlas: - - issue: 314 - - foss/2022a: - - OpenBlas: - - issue: 314 - - aarch64/neoverse_n1: - - foss/2022b: - - OpenBlas: - - issue: 314 - - foss/2021a: - - OpenBlas: - - issue: 314 - - foss/2021b: - - OpenBlas: - - issue: 314 - - foss/2022a: - - OpenBlas: - - issue: 314 - - aarch64/neoverse_v1: - - foss/2022a: - - OpenBlas: - - issue: 314 - - foss/2022b: - - OpenBlas: - - issue: 314 - - foss/2021a: - - OpenBlas: - - issue: 314 - - foss/2021b: - - OpenBlas: - - issue: 314 - - SciPy-bundle: - - issue: 318 - - foss/2022a: - - OpenBlas: - - issue: 314 From e8ddf5ed20de44548e462e09cc3c02e2c672cb36 Mon Sep 17 00:00:00 2001 From: lara Date: Tue, 26 Sep 2023 10:35:31 +0200 Subject: [PATCH 165/698] update known issue yml --- eessi-2023.06-known_issues.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/eessi-2023.06-known_issues.yml b/eessi-2023.06-known_issues.yml index b4a48684a5..523ca0d712 100644 --- a/eessi-2023.06-known_issues.yml +++ b/eessi-2023.06-known_issues.yml @@ -1,6 +1,3 @@ -- aarch64/generic: - OpenBLAS/0.3.21-GCC-12.2.0: https://github.com/EESSI/software-layer/issues/314 - - aarch64/generic: - OpenBLAS/0.3.21-GCC-12.2.0: https://github.com/EESSI/software-layer/issues/314 - OpenBLAS/0.3.18-GCC-11.2.0: https://github.com/EESSI/software-layer/issues/314 From 63352534ae3a1e1cd437e41ecf371436f2cc569d Mon Sep 17 00:00:00 2001 From: Lara Ramona Peeters <49882639+laraPPr@users.noreply.github.com> Date: Tue, 26 Sep 2023 10:49:37 +0200 Subject: [PATCH 166/698] Update eessi-2023.06-known_issues.yml --- eessi-2023.06-known_issues.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eessi-2023.06-known_issues.yml b/eessi-2023.06-known_issues.yml index 523ca0d712..de01f1ff89 100644 --- a/eessi-2023.06-known_issues.yml +++ b/eessi-2023.06-known_issues.yml @@ -10,4 +10,4 @@ - OpenBLAS/0.3.21-GCC-12.2.0: https://github.com/EESSI/software-layer/issues/314 - OpenBLAS/0.3.18-GCC-11.2.0: https://github.com/EESSI/software-layer/issues/314 - OpenBLAS/0.3.15-GCC-10.3.0: https://github.com/EESSI/software-layer/issues/314 -- SciPy-bundle/2021.10-foss-2021b: https://github.com/EESSI/software-layer/issues/318 + - SciPy-bundle/2021.10-foss-2021b: https://github.com/EESSI/software-layer/issues/318 From 8e4c6b230e285f43e4d4a40b6a28f8ce16691396 Mon Sep 17 00:00:00 2001 From: Thomas Roeblitz Date: Tue, 26 Sep 2023 13:16:00 +0200 Subject: [PATCH 167/698] do not load EasyBuild module, rather provide instructions to load it --- bot/inspect.sh | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/bot/inspect.sh b/bot/inspect.sh index a97a29b614..b6d633744f 100755 --- a/bot/inspect.sh +++ b/bot/inspect.sh @@ -395,18 +395,22 @@ else echo_green ">> MODULEPATH set up: ${MODULEPATH}" fi -eb_version='4.7.2' - -# load EasyBuild module (will be installed if it's not available yet) -source ${TOPDIR}/load_easybuild_module.sh ${eb_version} - -echo_green "All set, let's start installing some software with EasyBuild v${eb_version} in ${EASYBUILD_INSTALLPATH}..." - -echo "Ready for inspection of build job:" +echo_green "Build environment set up with install path ${EASYBUILD_INSTALLPATH}." +echo +echo "The build job can be inspected with the following resources:" echo " - job directory is $HOME (\$HOME), check for slurm-*.out file" -echo " - temporary data of job available at /tmp" -echo " - Note, prefix $EESSI_PREFIX is writable" -echo " - EasyBuild v${eb_version} is available" +echo " - temporary data of the job is available at /tmp" +echo " - note, the prefix $EESSI_PREFIX is writable" +echo +echo "You may want to load an EasyBuild module. The inspect.sh script does not load" +echo "that automatically, because multiple versions might have been used by the job." +echo "Choose an EasyBuild version (see installed versions with 'module avail')" +echo "and run" +echo +echo "source ${TOPDIR}/load_easybuild_module.sh EasyBuild_version" +echo +echo "Note, if you choose a version that is not installed yet, it will be" +echo "installed first." EOF chmod u+x ${RESUME_SCRIPT} From eb29516eabaf54cb867eb6e331bab94516264061 Mon Sep 17 00:00:00 2001 From: Thomas Roeblitz Date: Tue, 26 Sep 2023 13:56:15 +0200 Subject: [PATCH 168/698] tweaking of instructions for setting up EasyBuild --- bot/inspect.sh | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/bot/inspect.sh b/bot/inspect.sh index b6d633744f..d35f11cf35 100755 --- a/bot/inspect.sh +++ b/bot/inspect.sh @@ -404,13 +404,20 @@ echo " - note, the prefix $EESSI_PREFIX is writable" echo echo "You may want to load an EasyBuild module. The inspect.sh script does not load" echo "that automatically, because multiple versions might have been used by the job." -echo "Choose an EasyBuild version (see installed versions with 'module avail')" +echo "Choose an EasyBuild version (see installed versions with 'module avail EasyBuild')" echo "and run" echo -echo "source ${TOPDIR}/load_easybuild_module.sh EasyBuild_version" +echo "source ${TOPDIR}/load_easybuild_module.sh _EasyBuild_version_" +echo +echo "Replace _EasyBuild_version_ with the version you want to use." echo echo "Note, if you choose a version that is not installed yet, it will be" echo "installed first." +echo +echo "If the version you need is already listed with 'module avail', you can" +echo "simply run" +echo +echo "module load EasyBuild/VERSION_YOU_NEED" EOF chmod u+x ${RESUME_SCRIPT} From eb113c2dae51cada092fd32d849e4b709f43cb26 Mon Sep 17 00:00:00 2001 From: Thomas Roeblitz Date: Tue, 26 Sep 2023 14:03:45 +0200 Subject: [PATCH 169/698] minor tweaking --- bot/inspect.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/bot/inspect.sh b/bot/inspect.sh index d35f11cf35..5b89705019 100755 --- a/bot/inspect.sh +++ b/bot/inspect.sh @@ -395,6 +395,7 @@ else echo_green ">> MODULEPATH set up: ${MODULEPATH}" fi +echo echo_green "Build environment set up with install path ${EASYBUILD_INSTALLPATH}." echo echo "The build job can be inspected with the following resources:" From acf6b94cd301619311a4245c7c38b524baf7e52f Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 26 Sep 2023 20:27:30 +0200 Subject: [PATCH 170/698] install OpenBLAS for foss/2022a via easyconfig PR that adds patch to fix detection of Neoverse V1 CPUs + use EasyBuild v4.8.1 for installing foss/2022a --- .github/workflows/test_eessi.yml | 1 + eessi-2023.06-eb-4.7.2-2022a.yml | 7 ------- eessi-2023.06-eb-4.8.1-2022a.yml | 7 +++++++ 3 files changed, 8 insertions(+), 7 deletions(-) create mode 100644 eessi-2023.06-eb-4.8.1-2022a.yml diff --git a/.github/workflows/test_eessi.yml b/.github/workflows/test_eessi.yml index 1a67ad29ea..abade73d27 100644 --- a/.github/workflows/test_eessi.yml +++ b/.github/workflows/test_eessi.yml @@ -31,6 +31,7 @@ jobs: - eessi-2023.06-eb-4.8.0-2021b.yml - eessi-2023.06-eb-4.8.1-system.yml - eessi-2023.06-eb-4.8.1-2021b.yml + - eessi-2023.06-eb-4.8.1-2022a.yml steps: - name: Check out software-layer repository uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # v3.1.0 diff --git a/eessi-2023.06-eb-4.7.2-2022a.yml b/eessi-2023.06-eb-4.7.2-2022a.yml index f4a3da0143..d40ddff261 100644 --- a/eessi-2023.06-eb-4.7.2-2022a.yml +++ b/eessi-2023.06-eb-4.7.2-2022a.yml @@ -1,10 +1,3 @@ easyconfigs: - GCC-11.3.0 - OpenMPI-4.1.4-GCC-11.3.0.eb - - CMake-3.23.1-GCCcore-11.3.0.eb: - options: - include-easyblocks-from-pr: 2248 - - CMake-3.24.3-GCCcore-11.3.0.eb: - options: - include-easyblocks-from-pr: 2248 - - foss-2022a diff --git a/eessi-2023.06-eb-4.8.1-2022a.yml b/eessi-2023.06-eb-4.8.1-2022a.yml new file mode 100644 index 0000000000..8de4c6169d --- /dev/null +++ b/eessi-2023.06-eb-4.8.1-2022a.yml @@ -0,0 +1,7 @@ +easyconfigs: + - OpenBLAS-0.3.20-GCC-11.3.0: + # use easyconfig that includes patch to fix detection of Neoverse V1 CPUs, + # see https://github.com/easybuilders/easybuild-easyconfigs/pull/18870 + options: + from-pr: 18870 + - foss-2022a From c2b6abae4cc882087c4f78972bfa20426c4a11fc Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 26 Sep 2023 20:42:34 +0200 Subject: [PATCH 171/698] set shared_fs_path for bot on AWS CitC Slurm cluster --- bot/bot-eessi-aws-citc.cfg | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/bot/bot-eessi-aws-citc.cfg b/bot/bot-eessi-aws-citc.cfg index 0a91b12de2..a5e53d82c1 100644 --- a/bot/bot-eessi-aws-citc.cfg +++ b/bot/bot-eessi-aws-citc.cfg @@ -44,6 +44,10 @@ command_response_fmt = # name of the job script used for building an EESSI stack build_job_script = /mnt/shared/home/bot/eessi-bot-software-layer/scripts/bot-build.slurm +# path to directory on shared filesystem that can be used for sharing data across build jobs +# (for example source tarballs used by EasyBuild) +shared_fs_path = /mnt/shared/home/bot/shared + # Path (directory) to which build logs for (only) failing builds should be copied by bot/build.sh script build_logs_dir = /mnt/shared/bot-build-logs From e092e6be82177ab6b2c89cbf2405494c7d3ef28b Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 26 Sep 2023 20:50:43 +0200 Subject: [PATCH 172/698] only create & bind build_logs_dir and shared_fs_path if they are specified --- bot/build.sh | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/bot/build.sh b/bot/build.sh index 1e7aac49c1..cf9d69b65f 100755 --- a/bot/build.sh +++ b/bot/build.sh @@ -57,11 +57,13 @@ echo "bot/build.sh: LOCAL_TMP='${LOCAL_TMP}'" BUILD_LOGS_DIR=$(cfg_get_value "site_config" "build_logs_dir") echo "bot/build.sh: BUILD_LOGS_DIR='${BUILD_LOGS_DIR}'" # if $BUILD_LOGS_DIR is set, add it to $SINGULARITY_BIND so the path is available in the build container -mkdir -p ${BUILD_LOGS_DIR} -if [[ -z ${SINGULARITY_BIND} ]]; then - export SINGULARITY_BIND="${BUILD_LOGS_DIR}" -else - export SINGULARITY_BIND="${SINGULARITY_BIND},${BUILD_LOGS_DIR}" +if [[ ! -z ${BUILD_LOGS_DIR} ]]; then + mkdir -p ${BUILD_LOGS_DIR} + if [[ -z ${SINGULARITY_BIND} ]]; then + export SINGULARITY_BIND="${BUILD_LOGS_DIR}" + else + export SINGULARITY_BIND="${SINGULARITY_BIND},${BUILD_LOGS_DIR}" + fi fi # check if path to directory on shared filesystem is specified, @@ -69,11 +71,13 @@ fi SHARED_FS_PATH=$(cfg_get_value "site_config" "shared_fs_path") echo "bot/build.sh: SHARED_FS_PATH='${SHARED_FS_PATH}'" # if $SHARED_FS_PATH is set, add it to $SINGULARITY_BIND so the path is available in the build container -mkdir -p ${SHARED_FS_PATH} -if [[ -z ${SINGULARITY_BIND} ]]; then - export SINGULARITY_BIND="${SHARED_FS_PATH}" -else - export SINGULARITY_BIND="${SINGULARITY_BIND},${SHARED_FS_PATH}" +if [[ ! -z ${SHARED_FS_PATH} ]]; then + mkdir -p ${SHARED_FS_PATH} + if [[ -z ${SINGULARITY_BIND} ]]; then + export SINGULARITY_BIND="${SHARED_FS_PATH}" + else + export SINGULARITY_BIND="${SINGULARITY_BIND},${SHARED_FS_PATH}" + fi fi SINGULARITY_CACHEDIR=$(cfg_get_value "site_config" "container_cachedir") From 4252a16d86ce45ec76078b414e5f919a8e5297d1 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 26 Sep 2023 21:21:38 +0200 Subject: [PATCH 173/698] use EasyBuild v4.8.1 to install R 4.1.0 with foss/2021a --- .github/workflows/test_eessi.yml | 1 + eessi-2023.06-eb-4.7.2-2021a.yml | 6 ------ eessi-2023.06-eb-4.8.1-2021a.yml | 7 +++++++ 3 files changed, 8 insertions(+), 6 deletions(-) create mode 100644 eessi-2023.06-eb-4.8.1-2021a.yml diff --git a/.github/workflows/test_eessi.yml b/.github/workflows/test_eessi.yml index 1a67ad29ea..387c773885 100644 --- a/.github/workflows/test_eessi.yml +++ b/.github/workflows/test_eessi.yml @@ -30,6 +30,7 @@ jobs: - eessi-2023.06-eb-4.8.0-system.yml - eessi-2023.06-eb-4.8.0-2021b.yml - eessi-2023.06-eb-4.8.1-system.yml + - eessi-2023.06-eb-4.8.1-2021a.yml - eessi-2023.06-eb-4.8.1-2021b.yml steps: - name: Check out software-layer repository diff --git a/eessi-2023.06-eb-4.7.2-2021a.yml b/eessi-2023.06-eb-4.7.2-2021a.yml index aaa23207d1..42a42f2236 100644 --- a/eessi-2023.06-eb-4.7.2-2021a.yml +++ b/eessi-2023.06-eb-4.7.2-2021a.yml @@ -24,9 +24,3 @@ easyconfigs: # see https://github.com/easybuilders/easybuild-easyconfigs/pull/18348 options: from-pr: 18348 - - Xvfb-1.20.11-GCCcore-10.3.0.eb: - # fix permission issues for xvfb-run script, - # see https://github.com/easybuilders/easybuild-easyconfigs/pull/18834 - options: - from-pr: 18834 - - R-4.1.0-foss-2021a.eb diff --git a/eessi-2023.06-eb-4.8.1-2021a.yml b/eessi-2023.06-eb-4.8.1-2021a.yml new file mode 100644 index 0000000000..999eb09925 --- /dev/null +++ b/eessi-2023.06-eb-4.8.1-2021a.yml @@ -0,0 +1,7 @@ +easyconfigs: + - Xvfb-1.20.11-GCCcore-10.3.0.eb: + # fix permission issues for xvfb-run script, + # see https://github.com/easybuilders/easybuild-easyconfigs/pull/18834 + options: + from-pr: 18834 + - R-4.1.0-foss-2021a.eb From 2333240285bdd82c95a69bf2f0126b43958aa2c8 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 28 Sep 2023 13:57:40 +0200 Subject: [PATCH 174/698] install ESPResSo-4.2.1-foss-2022a with EasyBuild v4.8.1 --- eessi-2023.06-eb-4.7.2-2022a.yml | 3 --- eessi-2023.06-eb-4.8.1-2022a.yml | 1 + 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/eessi-2023.06-eb-4.7.2-2022a.yml b/eessi-2023.06-eb-4.7.2-2022a.yml index f690d49192..d40ddff261 100644 --- a/eessi-2023.06-eb-4.7.2-2022a.yml +++ b/eessi-2023.06-eb-4.7.2-2022a.yml @@ -1,6 +1,3 @@ easyconfigs: - GCC-11.3.0 - OpenMPI-4.1.4-GCC-11.3.0.eb - - ESPResSo-4.2.1-foss-2022a.eb: - options: - from-pr: 18486 diff --git a/eessi-2023.06-eb-4.8.1-2022a.yml b/eessi-2023.06-eb-4.8.1-2022a.yml index 8de4c6169d..c05316bcf7 100644 --- a/eessi-2023.06-eb-4.8.1-2022a.yml +++ b/eessi-2023.06-eb-4.8.1-2022a.yml @@ -5,3 +5,4 @@ easyconfigs: options: from-pr: 18870 - foss-2022a + - ESPResSo-4.2.1-foss-2022a From 96704bcb314098a602291af5b56988ca08e4586d Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 28 Sep 2023 20:39:51 +0200 Subject: [PATCH 175/698] add more info to known issues list, and remove entries for aarch64/generic and aarch64/neoverse_n1, since there we don't actually have problems with OpenBLAS test suite at all --- eessi-2023.06-known-issues.yml | 16 ++++++++++++++++ eessi-2023.06-known_issues.yml | 13 ------------- 2 files changed, 16 insertions(+), 13 deletions(-) create mode 100644 eessi-2023.06-known-issues.yml delete mode 100644 eessi-2023.06-known_issues.yml diff --git a/eessi-2023.06-known-issues.yml b/eessi-2023.06-known-issues.yml new file mode 100644 index 0000000000..604cc57555 --- /dev/null +++ b/eessi-2023.06-known-issues.yml @@ -0,0 +1,16 @@ +- aarch64/neoverse_v1: + - OpenBLAS/0.3.18-GCC-11.2.0: + - issue: https://github.com/EESSI/software-layer/issues/314 + - info: "Increased number of non-numerical failures in OpenBLAS test suite compared (238 vs max. 150 on x86_64/*)" + - OpenBLAS/0.3.20-GCC-11.3.0: + - issue: https://github.com/EESSI/software-layer/issues/314 + - info: "Increased number of non-numerical failures in OpenBLAS test suite compared (238 vs max. 150 on x86_64/*)" + - OpenBLAS/0.3.21-GCC-12.2.0: + - issue: https://github.com/EESSI/software-layer/issues/314 + - info: "Increased number of non-numerical failures in OpenBLAS test suite compared (344 vs max. 150 on x86_64/*)" + - SciPy-bundle/2021.05-foss-2021a: + - issue: https://github.com/EESSI/software-layer/issues/318 + - info: "2 failing tests (vs 30554 passed) in scipy test suite" + - SciPy-bundle/2021.10-foss-2021b: + - issue: https://github.com/EESSI/software-layer/issues/318 + - info: "20 failing tests (vs 14429 passed) in numpy test suite + 55 failing tests (vs 32438 passed) in scipy test suite" diff --git a/eessi-2023.06-known_issues.yml b/eessi-2023.06-known_issues.yml deleted file mode 100644 index de01f1ff89..0000000000 --- a/eessi-2023.06-known_issues.yml +++ /dev/null @@ -1,13 +0,0 @@ -- aarch64/generic: - - OpenBLAS/0.3.21-GCC-12.2.0: https://github.com/EESSI/software-layer/issues/314 - - OpenBLAS/0.3.18-GCC-11.2.0: https://github.com/EESSI/software-layer/issues/314 - - OpenBLAS/0.3.15-GCC-10.3.0: https://github.com/EESSI/software-layer/issues/314 -- aarch64/neoverse_n1: - - OpenBLAS/0.3.21-GCC-12.2.0: https://github.com/EESSI/software-layer/issues/314 - - OpenBLAS/0.3.18-GCC-11.2.0: https://github.com/EESSI/software-layer/issues/314 - - OpenBLAS/0.3.15-GCC-10.3.0: https://github.com/EESSI/software-layer/issues/314 -- aarch64/neoverse_v1: - - OpenBLAS/0.3.21-GCC-12.2.0: https://github.com/EESSI/software-layer/issues/314 - - OpenBLAS/0.3.18-GCC-11.2.0: https://github.com/EESSI/software-layer/issues/314 - - OpenBLAS/0.3.15-GCC-10.3.0: https://github.com/EESSI/software-layer/issues/314 - - SciPy-bundle/2021.10-foss-2021b: https://github.com/EESSI/software-layer/issues/318 From 4c8745b4b29069f7f6273e9aaaed2df1dbc7d9ce Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 28 Sep 2023 20:44:18 +0200 Subject: [PATCH 176/698] only increase limit for numerical test failures for OpenBLAS for aarch64/neoverse_v1 --- eb_hooks.py | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/eb_hooks.py b/eb_hooks.py index 83bdca4cb5..004746124e 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -18,6 +18,8 @@ from distutils.version import LooseVersion +CPU_TARGET_NEOVERSE_V1 = 'aarch64/neoverse_v1' + EESSI_RPATH_OVERRIDE_ATTR = 'orig_rpath_override_dirs' @@ -160,13 +162,14 @@ def parse_hook_fontconfig_add_fonts(ec, eprefix): def parse_hook_openblas_relax_lapack_tests_num_errors(ec, eprefix): - """Relax number of failing numerical LAPACK tests on Arm 64-bit systems.""" + """Relax number of failing numerical LAPACK tests on for aarch64/neoverse_v1 CPU target.""" + cpu_target = get_eessi_envvar('EESSI_SOFTWARE_SUBDIR') if ec.name == 'OpenBLAS': - # relax maximum number of failed numerical LAPACK tests on Arm 64-bit systems, - # since the default setting of 150 that works well on x86_64 is a bit too strict + # relax maximum number of failed numerical LAPACK tests for aarch64/neoverse_v1 CPU target + # since the default setting of 150 that works well on other aarch64 target and x86_64 is a bit too strict # See https://github.com/EESSI/software-layer/issues/314 cfg_option = 'max_failing_lapack_tests_num_errors' - if get_cpu_architecture() == AARCH64: + if cpu_target == CPU_TARGET_NEOVERSE_V1: orig_value = ec[cfg_option] ec[cfg_option] = 400 print_msg("Maximum number of failing LAPACK tests with numerical errors for %s relaxed to %s (was %s)", @@ -270,7 +273,7 @@ def pre_test_hook_ignore_failing_tests_SciPybundle(self, *args, **kwargs): In previous versions we were not as strict yet on the numpy/SciPy tests """ cpu_target = get_eessi_envvar('EESSI_SOFTWARE_SUBDIR') - if self.name == 'SciPy-bundle' and self.version == '2021.10' and cpu_target == 'aarch64/neoverse_v1': + if self.name == 'SciPy-bundle' and self.version == '2021.10' and cpu_target == CPU_TARGET_NEOVERSE_V1: self.cfg['testopts'] = "|| echo ignoring failing tests" @@ -280,7 +283,7 @@ def pre_test_hook_ignore_failing_tests_FFTWMPI(self, *args, **kwargs): cfr. https://github.com/EESSI/software-layer/issues/325 """ cpu_target = get_eessi_envvar('EESSI_SOFTWARE_SUBDIR') - if self.name == 'FFTW.MPI' and self.version == '3.3.10' and cpu_target == 'aarch64/neoverse_v1': + if self.name == 'FFTW.MPI' and self.version == '3.3.10' and cpu_target == CPU_TARGET_NEOVERSE_V1: self.cfg['testopts'] = "|| echo ignoring failing tests" PARSE_HOOKS = { From 4a026c4e249edd877bb5e4416e3ef47456e6baca Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 28 Sep 2023 20:53:25 +0200 Subject: [PATCH 177/698] also mention known issue with flaky FFTW test on aarch64/neoverse_v1 --- eessi-2023.06-known-issues.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/eessi-2023.06-known-issues.yml b/eessi-2023.06-known-issues.yml index 604cc57555..421c43f1cb 100644 --- a/eessi-2023.06-known-issues.yml +++ b/eessi-2023.06-known-issues.yml @@ -1,4 +1,10 @@ - aarch64/neoverse_v1: + - FFTW/3.3.10-3.3.10-GCC-11.3.0: + - issue: https://github.com/EESSI/software-layer/issues/325 + - info: "Flaky FFTW tests, random failures" + - FFTW/3.3.10-3.3.10-gompi-2021b: + - issue: https://github.com/EESSI/software-layer/issues/325 + - info: "Flaky FFTW tests, random failures" - OpenBLAS/0.3.18-GCC-11.2.0: - issue: https://github.com/EESSI/software-layer/issues/314 - info: "Increased number of non-numerical failures in OpenBLAS test suite compared (238 vs max. 150 on x86_64/*)" From 941e0d06bd32f1c7f9fc4c65dcc8ae23323f10ee Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 29 Sep 2023 08:31:45 +0200 Subject: [PATCH 178/698] install OpenBLAS for foss/2023a via easyconfigs PR #18887 --- eessi-2023.06-eb-4.8.1-2023a.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/eessi-2023.06-eb-4.8.1-2023a.yml b/eessi-2023.06-eb-4.8.1-2023a.yml index 8c2313b8a4..b015676757 100644 --- a/eessi-2023.06-eb-4.8.1-2023a.yml +++ b/eessi-2023.06-eb-4.8.1-2023a.yml @@ -1,8 +1,10 @@ easyconfigs: - GCC-12.3.0 - OpenBLAS-0.3.23-GCC-12.3.0: - # add patch to avoid hang when running OpenBLAS test suite, + # add patch to disable flaky DDRGES3 LAPACK test, + # see https://github.com/easybuilders/easybuild-easyconfigs/pull/18887; + # also pulls in patch to avoid hang when running OpenBLAS test suite, # see https://github.com/easybuilders/easybuild-easyconfigs/pull/18790 options: - from-pr: 18790 + from-pr: 18887 - foss-2023a From 1fdbb42dfe74b12db717f8165c11bb0fd6c19352 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Fri, 29 Sep 2023 09:23:45 +0200 Subject: [PATCH 179/698] fix typo --- eb_hooks.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eb_hooks.py b/eb_hooks.py index 004746124e..95abb36e7b 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -162,7 +162,7 @@ def parse_hook_fontconfig_add_fonts(ec, eprefix): def parse_hook_openblas_relax_lapack_tests_num_errors(ec, eprefix): - """Relax number of failing numerical LAPACK tests on for aarch64/neoverse_v1 CPU target.""" + """Relax number of failing numerical LAPACK tests for aarch64/neoverse_v1 CPU target.""" cpu_target = get_eessi_envvar('EESSI_SOFTWARE_SUBDIR') if ec.name == 'OpenBLAS': # relax maximum number of failed numerical LAPACK tests for aarch64/neoverse_v1 CPU target From 40e56c005cd76caafe83be63fc7b3accd1b743f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Fri, 29 Sep 2023 09:23:54 +0200 Subject: [PATCH 180/698] fix typo --- eb_hooks.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eb_hooks.py b/eb_hooks.py index 95abb36e7b..e5999efcb7 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -166,7 +166,7 @@ def parse_hook_openblas_relax_lapack_tests_num_errors(ec, eprefix): cpu_target = get_eessi_envvar('EESSI_SOFTWARE_SUBDIR') if ec.name == 'OpenBLAS': # relax maximum number of failed numerical LAPACK tests for aarch64/neoverse_v1 CPU target - # since the default setting of 150 that works well on other aarch64 target and x86_64 is a bit too strict + # since the default setting of 150 that works well on other aarch64 targets and x86_64 is a bit too strict # See https://github.com/EESSI/software-layer/issues/314 cfg_option = 'max_failing_lapack_tests_num_errors' if cpu_target == CPU_TARGET_NEOVERSE_V1: From 15985f950c602b24270b63a98de842e53dd5c01a Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 29 Sep 2023 15:08:17 +0200 Subject: [PATCH 181/698] fix typo --- eessi-2023.06-known-issues.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/eessi-2023.06-known-issues.yml b/eessi-2023.06-known-issues.yml index 421c43f1cb..7d20c99da4 100644 --- a/eessi-2023.06-known-issues.yml +++ b/eessi-2023.06-known-issues.yml @@ -7,13 +7,13 @@ - info: "Flaky FFTW tests, random failures" - OpenBLAS/0.3.18-GCC-11.2.0: - issue: https://github.com/EESSI/software-layer/issues/314 - - info: "Increased number of non-numerical failures in OpenBLAS test suite compared (238 vs max. 150 on x86_64/*)" + - info: "Increased number of non-numerical failures in OpenBLAS test suite (238 vs max. 150 on x86_64/*)" - OpenBLAS/0.3.20-GCC-11.3.0: - issue: https://github.com/EESSI/software-layer/issues/314 - - info: "Increased number of non-numerical failures in OpenBLAS test suite compared (238 vs max. 150 on x86_64/*)" + - info: "Increased number of non-numerical failures in OpenBLAS test suite (238 vs max. 150 on x86_64/*)" - OpenBLAS/0.3.21-GCC-12.2.0: - issue: https://github.com/EESSI/software-layer/issues/314 - - info: "Increased number of non-numerical failures in OpenBLAS test suite compared (344 vs max. 150 on x86_64/*)" + - info: "Increased number of non-numerical failures in OpenBLAS test suite (344 vs max. 150 on x86_64/*)" - SciPy-bundle/2021.05-foss-2021a: - issue: https://github.com/EESSI/software-layer/issues/318 - info: "2 failing tests (vs 30554 passed) in scipy test suite" From dd6c4c0f126fc2572378dc1eb6d34a03decbf47d Mon Sep 17 00:00:00 2001 From: Thomas Roeblitz Date: Fri, 29 Sep 2023 19:50:48 +0200 Subject: [PATCH 182/698] change the instructions to simply use module load for getting access to EasyBuild --- bot/inspect.sh | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/bot/inspect.sh b/bot/inspect.sh index 5b89705019..637eaea97f 100755 --- a/bot/inspect.sh +++ b/bot/inspect.sh @@ -406,19 +406,16 @@ echo echo "You may want to load an EasyBuild module. The inspect.sh script does not load" echo "that automatically, because multiple versions might have been used by the job." echo "Choose an EasyBuild version (see installed versions with 'module avail EasyBuild')" -echo "and run" +echo "and simply run" echo -echo "source ${TOPDIR}/load_easybuild_module.sh _EasyBuild_version_" +echo "module load EasyBuild/_VERSION_" echo -echo "Replace _EasyBuild_version_ with the version you want to use." +echo "Replace _VERSION_ with the version you want to use." echo -echo "Note, if you choose a version that is not installed yet, it will be" -echo "installed first." +echo "Note, you can try to install a newer version with 'eb'. The script" +echo "load_easybuild_module.sh cannot be used currently, because it exits at" +echo "the end which also leaves the container." echo -echo "If the version you need is already listed with 'module avail', you can" -echo "simply run" -echo -echo "module load EasyBuild/VERSION_YOU_NEED" EOF chmod u+x ${RESUME_SCRIPT} From 470a22109d96762e9603739f7fda8152a1ad5dcf Mon Sep 17 00:00:00 2001 From: Thomas Roeblitz Date: Fri, 29 Sep 2023 21:17:31 +0200 Subject: [PATCH 183/698] remove note about installing a new EasyBuild --- bot/inspect.sh | 4 ---- 1 file changed, 4 deletions(-) diff --git a/bot/inspect.sh b/bot/inspect.sh index 637eaea97f..a3b88e5017 100755 --- a/bot/inspect.sh +++ b/bot/inspect.sh @@ -412,10 +412,6 @@ echo "module load EasyBuild/_VERSION_" echo echo "Replace _VERSION_ with the version you want to use." echo -echo "Note, you can try to install a newer version with 'eb'. The script" -echo "load_easybuild_module.sh cannot be used currently, because it exits at" -echo "the end which also leaves the container." -echo EOF chmod u+x ${RESUME_SCRIPT} From 0f7ee215e3bf43e5ce31b1d34b83c19197f08b27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Mon, 2 Oct 2023 11:51:28 +0200 Subject: [PATCH 184/698] additional build/command permissions --- bot/bot-eessi-aws-citc.cfg | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bot/bot-eessi-aws-citc.cfg b/bot/bot-eessi-aws-citc.cfg index a5e53d82c1..8a911182ca 100644 --- a/bot/bot-eessi-aws-citc.cfg +++ b/bot/bot-eessi-aws-citc.cfg @@ -28,7 +28,7 @@ private_key = /mnt/shared/home/bot/eessi-bot-software-layer/eessi-bot-citc-aws.2 # which GH accounts have the permission to send commands to the bot # if value is left/empty everyone can send commands # value can be a space delimited list of GH accounts -command_permission = boegel trz42 bedroge laraPPr ocaisa casparvl satishskamath maxim-masterov TopRichard xinan1911 +command_permission = boegel trz42 bedroge laraPPr ocaisa casparvl satishskamath maxim-masterov TopRichard xinan1911 Neves-P # format of the response when processing bot commands command_response_fmt = @@ -100,7 +100,7 @@ submit_command = /usr/bin/sbatch # the label 'bot:build' (apparently this cannot be restricted on GitHub) # if value is left/empty everyone can trigger the build # value can be a space delimited list of GH accounts -build_permission = boegel trz42 bedroge laraPPr ocaisa casparvl satishskamath maxim-masterov TopRichard xinan1911 +build_permission = boegel trz42 bedroge laraPPr ocaisa casparvl satishskamath maxim-masterov TopRichard xinan1911 Neves-P # template for comment when user who set a label has no permission to trigger build jobs no_build_permission_comment = Label `bot:build` has been set by user `{build_labeler}`, but only users `{build_permission_users}` have permission to trigger the action From 73f7e42a10481b3a6279ccde227afa030726ae13 Mon Sep 17 00:00:00 2001 From: lara Date: Tue, 3 Oct 2023 11:00:43 +0200 Subject: [PATCH 185/698] add Pillow to easystack --- eessi-2023.06-eb-4.8.1-2021b.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/eessi-2023.06-eb-4.8.1-2021b.yml b/eessi-2023.06-eb-4.8.1-2021b.yml index a1b9927e97..ec019ea879 100644 --- a/eessi-2023.06-eb-4.8.1-2021b.yml +++ b/eessi-2023.06-eb-4.8.1-2021b.yml @@ -5,4 +5,8 @@ easyconfigs: options: from-pr: 18834 - R-4.2.0-foss-2021b.eb + - Pillow-8.3.2-GCCcore-11.2.0.eb: + # avoid that hardcoded paths like /usr/include are used in build commands + options: + from-pr: 18881 - matplotlib-3.4.3-foss-2021b.eb From 2bed6ad9b55239122067ec93bffd86c20a8e34f1 Mon Sep 17 00:00:00 2001 From: Neves-P Date: Tue, 3 Oct 2023 17:16:02 +0200 Subject: [PATCH 186/698] {2023.06}[foss/2022a] BAMM v2.5.0 --- eessi-2023.06-eb-4.8.1-2022a.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/eessi-2023.06-eb-4.8.1-2022a.yml b/eessi-2023.06-eb-4.8.1-2022a.yml index 8de4c6169d..d26ae75411 100644 --- a/eessi-2023.06-eb-4.8.1-2022a.yml +++ b/eessi-2023.06-eb-4.8.1-2022a.yml @@ -5,3 +5,4 @@ easyconfigs: options: from-pr: 18870 - foss-2022a + - BAMM-2.5.0-foss-2022a.eb From 776e3cd8359ff0dd638b029a5a818cc902e00d18 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 3 Oct 2023 19:57:22 +0200 Subject: [PATCH 187/698] determine easystack files to process via PR patch file --- EESSI-pilot-install-software.sh | 50 ++++++++++++++++++--------------- 1 file changed, 28 insertions(+), 22 deletions(-) diff --git a/EESSI-pilot-install-software.sh b/EESSI-pilot-install-software.sh index ed5319a6db..c6c51e7abc 100755 --- a/EESSI-pilot-install-software.sh +++ b/EESSI-pilot-install-software.sh @@ -41,7 +41,7 @@ function copy_build_log() { echo "- working directory: ${PWD}" >> ${build_log_path} echo "- Slurm job ID: ${SLURM_OUT}" >> ${build_log_path} echo "- EasyBuild version: ${eb_version}" >> ${build_log_path} - echo "- easystack file: ${es}" >> ${build_log_path} + echo "- easystack file: ${easystack_file}" >> ${build_log_path} echo "EasyBuild log file ${build_log} copied to ${build_log_path} (with context appended)" fi @@ -186,36 +186,42 @@ else echo_green ">> MODULEPATH set up: ${MODULEPATH}" fi -for eb_version in '4.7.2' '4.8.0' '4.8.1'; do +# assume there's only one diff file that corresponds to the PR patch file +pr_diff=$(ls [0-9]*.diff | head -1) + +# use PR patch file to determine in which easystack files stuff was added +for easystack_file in $(cat ${pr_diff} | grep '^+++' | cut -f2 -d' ' | sed 's@^[a-z]/@@g' | grep '^eessi.*yml$'); do + + echo -e "Processing easystack file ${easystack_file}...\n\n" + + # determine version of EasyBuild module to load based on EasyBuild version included in name of easystack file + eb_version=$(echo ${easystack_file} | sed 's/.*eb-\([0-9.]*\).*/\1/g') # load EasyBuild module (will be installed if it's not available yet) source ${TOPDIR}/load_easybuild_module.sh ${eb_version} echo_green "All set, let's start installing some software with EasyBuild v${eb_version} in ${EASYBUILD_INSTALLPATH}..." - for es in $(ls eessi-${EESSI_PILOT_VERSION}-eb-${eb_version}-*.yml); do - - if [ -f ${es} ]; then - echo_green "Feeding easystack file ${es} to EasyBuild..." + if [ -f ${easystack_file} ]; then + echo_green "Feeding easystack file ${easystack_file} to EasyBuild..." - ${EB} --easystack ${TOPDIR}/${es} --robot - ec=$? + ${EB} --easystack ${TOPDIR}/${easystack_file} --robot + ec=$? - # copy EasyBuild log file if EasyBuild exited with an error - if [ ${ec} -ne 0 ]; then - eb_last_log=$(unset EB_VERBOSE; eb --last-log) - # copy to current working directory - cp -a ${eb_last_log} . - echo "Last EasyBuild log file copied from ${eb_last_log} to ${PWD}" - # copy to build logs dir (with context added) - copy_build_log "${eb_last_log}" "${build_logs_dir}" - fi - - $TOPDIR/check_missing_installations.sh ${TOPDIR}/${es} - else - fatal_error "Easystack file ${es} not found!" + # copy EasyBuild log file if EasyBuild exited with an error + if [ ${ec} -ne 0 ]; then + eb_last_log=$(unset EB_VERBOSE; eb --last-log) + # copy to current working directory + cp -a ${eb_last_log} . + echo "Last EasyBuild log file copied from ${eb_last_log} to ${PWD}" + # copy to build logs dir (with context added) + copy_build_log "${eb_last_log}" "${build_logs_dir}" fi - done + + $TOPDIR/check_missing_installations.sh ${TOPDIR}/${easystack_file} + else + fatal_error "Easystack file ${easystack_file} not found!" + fi done From 46573849c7030c9ec9c2d6b9baa7cc92ec48b7ab Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 4 Oct 2023 08:01:26 +0200 Subject: [PATCH 188/698] use 'git diff' to determine which easystack files were changed --- EESSI-pilot-install-software.sh | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/EESSI-pilot-install-software.sh b/EESSI-pilot-install-software.sh index c6c51e7abc..4f473eb82f 100755 --- a/EESSI-pilot-install-software.sh +++ b/EESSI-pilot-install-software.sh @@ -186,11 +186,8 @@ else echo_green ">> MODULEPATH set up: ${MODULEPATH}" fi -# assume there's only one diff file that corresponds to the PR patch file -pr_diff=$(ls [0-9]*.diff | head -1) - -# use PR patch file to determine in which easystack files stuff was added -for easystack_file in $(cat ${pr_diff} | grep '^+++' | cut -f2 -d' ' | sed 's@^[a-z]/@@g' | grep '^eessi.*yml$'); do +# use 'git diff' to determine which easystack files were changed +for easystack_file in $(git diff --name-only | grep '^eessi.*yml$'); do echo -e "Processing easystack file ${easystack_file}...\n\n" From 74563775e89363f2c3490ba6a27cc465a4a381d0 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 4 Oct 2023 08:40:38 +0200 Subject: [PATCH 189/698] {2023.06}[foss/2022a] SciPy-bundle 2022.05 --- eessi-2023.06-eb-4.8.1-2022a.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/eessi-2023.06-eb-4.8.1-2022a.yml b/eessi-2023.06-eb-4.8.1-2022a.yml index 8de4c6169d..7286e2f3ee 100644 --- a/eessi-2023.06-eb-4.8.1-2022a.yml +++ b/eessi-2023.06-eb-4.8.1-2022a.yml @@ -5,3 +5,4 @@ easyconfigs: options: from-pr: 18870 - foss-2022a + - SciPy-bundle-2022.05-foss-2022a From e588608054a35ed1dcef99bc8700119932007a0f Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 4 Oct 2023 08:55:10 +0200 Subject: [PATCH 190/698] fix typo in FFTW version in known issues YAML file --- eessi-2023.06-known-issues.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/eessi-2023.06-known-issues.yml b/eessi-2023.06-known-issues.yml index 7d20c99da4..f2f96aee34 100644 --- a/eessi-2023.06-known-issues.yml +++ b/eessi-2023.06-known-issues.yml @@ -1,8 +1,8 @@ - aarch64/neoverse_v1: - - FFTW/3.3.10-3.3.10-GCC-11.3.0: + - FFTW/3.3.10-GCC-11.3.0: - issue: https://github.com/EESSI/software-layer/issues/325 - info: "Flaky FFTW tests, random failures" - - FFTW/3.3.10-3.3.10-gompi-2021b: + - FFTW/3.3.10-gompi-2021b: - issue: https://github.com/EESSI/software-layer/issues/325 - info: "Flaky FFTW tests, random failures" - OpenBLAS/0.3.18-GCC-11.2.0: From 19dc39cea7f7236c586d588d73bb0b63e27b3c8d Mon Sep 17 00:00:00 2001 From: Thomas Roeblitz Date: Wed, 4 Oct 2023 23:28:50 +0200 Subject: [PATCH 191/698] get changed/new files from PR.diff file --- EESSI-pilot-install-software.sh | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/EESSI-pilot-install-software.sh b/EESSI-pilot-install-software.sh index 4f473eb82f..c6c51e7abc 100755 --- a/EESSI-pilot-install-software.sh +++ b/EESSI-pilot-install-software.sh @@ -186,8 +186,11 @@ else echo_green ">> MODULEPATH set up: ${MODULEPATH}" fi -# use 'git diff' to determine which easystack files were changed -for easystack_file in $(git diff --name-only | grep '^eessi.*yml$'); do +# assume there's only one diff file that corresponds to the PR patch file +pr_diff=$(ls [0-9]*.diff | head -1) + +# use PR patch file to determine in which easystack files stuff was added +for easystack_file in $(cat ${pr_diff} | grep '^+++' | cut -f2 -d' ' | sed 's@^[a-z]/@@g' | grep '^eessi.*yml$'); do echo -e "Processing easystack file ${easystack_file}...\n\n" From 08420f1407fad943b6612e6c5b339fe4ee10e8c5 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 5 Oct 2023 10:57:59 +0200 Subject: [PATCH 192/698] remove bot configuration (2023.06) --- bot/bot-eessi-aws-citc.cfg | 238 ------------------------------------- 1 file changed, 238 deletions(-) delete mode 100644 bot/bot-eessi-aws-citc.cfg diff --git a/bot/bot-eessi-aws-citc.cfg b/bot/bot-eessi-aws-citc.cfg deleted file mode 100644 index 8a911182ca..0000000000 --- a/bot/bot-eessi-aws-citc.cfg +++ /dev/null @@ -1,238 +0,0 @@ -# Also see documentation at https://github.com/EESSI/eessi-bot-software-layer/blob/main/README.md#step5.5 - -[github] -# replace '123456' with the ID of your GitHub App -app_id = 281041 - -# a short (!) name for your app instance that can be used for example -# when adding/updating a comment to a PR -# (!) a short yet descriptive name is preferred because it appears in -# comments to the PR -# for example, the name could include the name of the cluster the bot -# runs on and the username which runs the bot -# NOTE avoid putting an actual username here as it will be visible on -# potentially publicly accessible GitHub pages. -app_name = eessi-bot-citc-aws - -# replace '12345678' with the ID of the installation of your GitHub App -# (can be derived by creating an event and then checking for the list -# of sent events and its payload either via the Smee channel's web page -# or via the Advanced section of your GitHub App on github.com) -installation_id = 33078935 - -# path to the private key that was generated when the GitHub App was registered -private_key = /mnt/shared/home/bot/eessi-bot-software-layer/eessi-bot-citc-aws.2023-01-12.private-key.pem - - -[bot_control] -# which GH accounts have the permission to send commands to the bot -# if value is left/empty everyone can send commands -# value can be a space delimited list of GH accounts -command_permission = boegel trz42 bedroge laraPPr ocaisa casparvl satishskamath maxim-masterov TopRichard xinan1911 Neves-P - -# format of the response when processing bot commands -command_response_fmt = -
    Updates by the bot instance {app_name} - (click for details) - - {comment_response} - {comment_result} -
    - - -[buildenv] -# name of the job script used for building an EESSI stack -build_job_script = /mnt/shared/home/bot/eessi-bot-software-layer/scripts/bot-build.slurm - -# path to directory on shared filesystem that can be used for sharing data across build jobs -# (for example source tarballs used by EasyBuild) -shared_fs_path = /mnt/shared/home/bot/shared - -# Path (directory) to which build logs for (only) failing builds should be copied by bot/build.sh script -build_logs_dir = /mnt/shared/bot-build-logs - -# The container_cachedir may be used to reuse downloaded container image files -# across jobs. Thus, jobs can more quickly launch containers. -container_cachedir = /mnt/shared/home/bot/eessi-bot-software-layer/containers-cache-dir - -# it may happen that we need to customize some CVMFS configuration -# the value of cvmfs_customizations is a dictionary which maps a file -# name to an entry that needs to be added to that file -# cvmfs_customizations = {} - -# if compute nodes have no internet connection, we need to set http(s)_proxy -# or commands such as pip3 cannot download software from package repositories -# for example, the temporary EasyBuild is installed via pip3 first -# http_proxy = http://PROXY_DNS:3128/ -# https_proxy = http://PROXY_DNS:3128/ - -# directory under which the bot prepares directories per job -# structure created is as follows: YYYY.MM/pr_PR_NUMBER/event_EVENT_ID/run_RUN_NUMBER/OS+SUBDIR -jobs_base_dir = /mnt/shared/home/bot/eessi-bot-software-layer/jobs - -# configure environment -# list of comma-separated modules to be loaded by build_job_script -# useful/needed if some tool is not provided as system-wide package -# (read by bot and handed over to build_job_script via parameter -# --load-modules) -# load_modules = - -# PATH to temporary directory on build node ... ends up being used for -# for example, EESSI_TMPDIR --> /tmp/$USER/EESSI -# escaping variables with '\' delays expansion to the start of the -# build_job_script; this can be used for referencing environment -# variables that are only set inside a Slurm job -local_tmp = /tmp/$USER/EESSI - -# parameters to be added to all job submissions -# NOTE do not quote parameter string. Quotes are retained when reading in config and -# then the whole 'string' is recognised as a single parameter. -# NOTE 2 '--get-user-env' may be needed on systems where the job's environment needs -# to be initialised as if it is for a login shell. -# note: hardcoded 24h time limit until https://github.com/EESSI/eessi-bot-software-layer/issues/146 is fixed -# note: 16 cores which corresponds to *.4xlarge node types, see also arch_target_map -slurm_params = --hold --time=24:0:0 --nodes=1 --ntasks-per-node=16 - -# full path to the job submission command -submit_command = /usr/bin/sbatch - -# which GH account has the permission to trigger the build (by setting -# the label 'bot:build' (apparently this cannot be restricted on GitHub) -# if value is left/empty everyone can trigger the build -# value can be a space delimited list of GH accounts -build_permission = boegel trz42 bedroge laraPPr ocaisa casparvl satishskamath maxim-masterov TopRichard xinan1911 Neves-P - -# template for comment when user who set a label has no permission to trigger build jobs -no_build_permission_comment = Label `bot:build` has been set by user `{build_labeler}`, but only users `{build_permission_users}` have permission to trigger the action - - -[deploycfg] -# script for uploading built software packages -tarball_upload_script = /mnt/shared/home/bot/eessi-bot-software-layer/scripts/eessi-upload-to-staging - -# URL to S3/minio bucket -# if attribute is set, bucket_base will be constructed as follows -# bucket_base=${endpoint_url}/${bucket_name} -# otherwise, bucket_base will be constructed as follows -# bucket_base=https://${bucket_name}.s3.amazonaws.com -# - The former variant is used for non AWS S3 services, eg, minio, or when -# the bucket name is not provided in the hostname (see latter case). -# - The latter variant is used for AWS S3 services. -# endpoint_url = URL_TO_S3_SERVER - -# bucket name -bucket_name = eessi-staging-2023.06 - -# upload policy: defines what policy is used for uploading built artefacts -# to an S3 bucket -# 'all' ..: upload all artefacts (mulitple uploads of the same artefact possible) -# 'latest': for each build target (eessi-VERSION-{software,init,compat}-OS-ARCH) -# only upload the latest built artefact -# 'once' : only once upload any built artefact for the build target -# 'none' : do not upload any built artefacts -upload_policy = latest - -# which GH account has the permission to trigger the deployment (by setting -# the label 'bot:deploy' (apparently this cannot be restricted on GitHub) -# if value is left/empty everyone can trigger the deployment -# value can be a space delimited list of GH accounts -deploy_permission = boegel trz42 bedroge ocaisa casparvl - -# template for comment when user who set a label has no permission to trigger deploying tarballs -no_deploy_permission_comment = Label `bot:deploy` has been set by user `{deploy_labeler}`, but only users `{deploy_permission_users}` have permission to trigger the action - - -[architecturetargets] -# defines both for which architectures the bot will build -# and what submission parameters shall be used -# 5 c4.2xlarge haswell 8 vCPU, 15 GiB RAM (1 + generic) -# 2 c4.4xlarge haswell 16 vCPU, 30 GiB RAM -# 5 c5.2xlarge skylake_avx512 8 vCPU, 16 GiB RAM (1) -# 1 c5.4xlarge skylake_avx512 16 vCPU, 32 GiB RAM -# 5 c5a.2xlarge zen2 8 vCPU, 16 GiB RAM (1) -# 1 c5a.4xlarge zen2 16 vCPU, 32 GiB RAM -# 5 c5d.2xlarge skylake_avx512 8 vCPU, 16 GiB RAM + 200 GB NVMe -# 5 c6a.2xlarge zen3 8 vCPU, 16 GiB RAM (1) -# 1 c6a.4xlarge zen3 16 vCPU, 32 GiB RAM -# 5 c6g.2xlarge neoverse_n1 8 vCPU, 16 GiB RAM (1 + generic) -# 2 c6g.4xlarge neoverse_n1 16 vCPU, 32 GiB RAM -# 1 c6g.8xlarge neoverse_n1 32 vCPU, 64 GiB RAM -# 1 c6i.2xlarge cascadelake 8 vCPU, 16 GiB RAM (1) -# 5 c7g.2xlarge neoverse_v1 8 vCPU, 16 GiB RAM (1) -# 1 c7g.4xlarge neoverse_v1 16 vCPU, 32 GiB RAM -# larger instances (*.4xlarge => 16 cores, 32GB RAM) -arch_target_map = { - "linux/x86_64/generic" : "--constraint shape=c4.4xlarge", - "linux/x86_64/intel/haswell" : "--constraint shape=c4.4xlarge", - "linux/x86_64/intel/skylake_avx512" : "--constraint shape=c5.4xlarge", - "linux/x86_64/amd/zen2": "--constraint shape=c5a.4xlarge", - "linux/x86_64/amd/zen3" : "--constraint shape=c6a.4xlarge", - "linux/aarch64/generic" : "--constraint shape=c6g.4xlarge", - "linux/aarch64/neoverse_n1" : "--constraint shape=c6g.4xlarge", - "linux/aarch64/neoverse_v1" : "--constraint shape=c7g.4xlarge" } - -[repo_targets] -# defines for which repository a arch_target should be build for -# -# only building for repository EESSI-pilot -repo_target_map = { - "linux/x86_64/generic" : ["eessi-2021.12","eessi-2023.06-compat","eessi-2023.06-software"], - "linux/x86_64/intel/haswell" : ["eessi-2021.12","eessi-2023.06-compat","eessi-2023.06-software"], - "linux/x86_64/intel/skylake_avx512" : ["eessi-2021.12","eessi-2023.06-compat","eessi-2023.06-software"], - "linux/x86_64/amd/zen2" : ["eessi-2021.12","eessi-2023.06-compat","eessi-2023.06-software"], - "linux/x86_64/amd/zen3" : ["eessi-2021.12","eessi-2023.06-compat","eessi-2023.06-software"], - "linux/aarch64/generic" : ["eessi-2021.12","eessi-2023.06-compat","eessi-2023.06-software"], - "linux/aarch64/neoverse_n1" : ["eessi-2021.12","eessi-2023.06-compat","eessi-2023.06-software"], - "linux/aarch64/neoverse_v1" : ["eessi-2021.12","eessi-2023.06-compat","eessi-2023.06-software"] } - -# points to definition of repositories (default EESSI-pilot defined by build container) -repos_cfg_dir = /mnt/shared/home/bot/eessi-bot-software-layer/repos - -# configuration for event handler which receives events from a GitHub repository. -[event_handler] -# path to the log file to log messages for event handler -log_path = /mnt/shared/home/bot/eessi-bot-software-layer/eessi_bot_event_handler.log - - -[job_manager] -# path to the log file to log messages for job manager -log_path = /mnt/shared/home/bot/eessi-bot-software-layer/eessi_bot_job_manager.log - -# directory where job manager stores information about jobs to be tracked -# e.g. as symbolic link JOBID -> directory to job -job_ids_dir = /mnt/shared/home/bot/eessi-bot-software-layer/jobs - -# full path to the job status checking command -poll_command = /usr/bin/squeue - -# polling interval in seconds -poll_interval = 60 - -# full path to the command for manipulating existing jobs -scontrol_command = /usr/bin/scontrol - - -# variable 'comment' under 'submitted_job_comments' should not be changed as there are regular expression patterns matching it -[submitted_job_comments] -initial_comment = New job on instance `{app_name}` for architecture `{arch_name}` for repository `{repo_id}` in job dir `{symlink}` -awaits_release = job id `{job_id}` awaits release by job manager - - -[new_job_comments] -awaits_launch = job awaits launch by Slurm scheduler - - -[running_job_comments] -running_job = job `{job_id}` is running - - -[finished_job_comments] -success = :grin: SUCCESS tarball `{tarball_name}` ({tarball_size} GiB) in job dir -failure = :cry: FAILURE -no_slurm_out = No slurm output `{slurm_out}` in job dir -slurm_out = Found slurm output `{slurm_out}` in job dir -missing_modules = Slurm output lacks message "No missing modules!". -no_tarball_message = Slurm output lacks message about created tarball. -no_matching_tarball = No tarball matching `{tarball_pattern}` found in job dir. -multiple_tarballs = Found {num_tarballs} tarballs in job dir - only 1 matching `{tarball_pattern}` expected. -job_result_unknown_fmt =
    :shrug: UNKNOWN _(click triangle for detailed information)_
    • Job results file `{filename}` does not exist in job directory or reading it failed.
    • No artefacts were found/reported.
    From 2f05bc9c2ff7605663fe7ecf99f5dcd75514b3ee Mon Sep 17 00:00:00 2001 From: TopRichard Date: Thu, 5 Oct 2023 09:26:25 +0000 Subject: [PATCH 193/698] added reference to easyblock 3012 --- eessi-2023.06-eb-4.7.2-2022b.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/eessi-2023.06-eb-4.7.2-2022b.yml b/eessi-2023.06-eb-4.7.2-2022b.yml index bbf1c54335..2998266677 100644 --- a/eessi-2023.06-eb-4.7.2-2022b.yml +++ b/eessi-2023.06-eb-4.7.2-2022b.yml @@ -5,4 +5,6 @@ easyconfigs: options: include-easyblocks-from-pr: 2248 - foss-2022b - - WRF-4.4.1-foss-2022b-dmpar.eb + - WRF-4.4.1-foss-2022b-dmpar.eb: + options: + include-easyblocks-from-pr: 3012 From 38e6af4b0f1009ec1997823ccaf1fa6c72587128 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 5 Oct 2023 15:49:11 +0200 Subject: [PATCH 194/698] show active EasyBuild configuration when checking for missing installations --- check_missing_installations.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/check_missing_installations.sh b/check_missing_installations.sh index 3627d1d0b5..e927f14701 100755 --- a/check_missing_installations.sh +++ b/check_missing_installations.sh @@ -22,6 +22,9 @@ source $TOPDIR/scripts/utils.sh source $TOPDIR/configure_easybuild +echo ">> Active EasyBuild configuration when checking for missing installations:" +${EB:-eb} --show-config + echo ">> Checking for missing installations in ${EASYBUILD_INSTALLPATH}..." eb_missing_out=$LOCAL_TMPDIR/eb_missing.out ${EB:-eb} --easystack ${easystack} --missing 2>&1 | tee ${eb_missing_out} From c0677ada268ee3c635b7e0dc3748c97609bae5fd Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 6 Oct 2023 08:55:35 +0200 Subject: [PATCH 195/698] clarify why easyblocks PR #3012 is needed, only use it for netCDF --- eessi-2023.06-eb-4.7.2-2022b.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/eessi-2023.06-eb-4.7.2-2022b.yml b/eessi-2023.06-eb-4.7.2-2022b.yml index 2998266677..b97be34dcf 100644 --- a/eessi-2023.06-eb-4.7.2-2022b.yml +++ b/eessi-2023.06-eb-4.7.2-2022b.yml @@ -5,6 +5,9 @@ easyconfigs: options: include-easyblocks-from-pr: 2248 - foss-2022b - - WRF-4.4.1-foss-2022b-dmpar.eb: + - netCDF-4.9.0-gompi-2022b.eb: + # use updated CMakeMake easyblock to avoid that -DCMAKE_SKIP_RPATH=ON is used, which breaks the netCDF test step + # see https://github.com/easybuilders/easybuild-easyblocks/pull/3012 options: include-easyblocks-from-pr: 3012 + - WRF-4.4.1-foss-2022b-dmpar.eb From c244bdc92dc6b941ea661c600eb40496946d1501 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 6 Oct 2023 09:20:14 +0200 Subject: [PATCH 196/698] simplify CI workflow to check for missing installations, just loop over easystack files per CPU target --- .github/workflows/test_eessi.yml | 32 +++++++++++++------------------- 1 file changed, 13 insertions(+), 19 deletions(-) diff --git a/.github/workflows/test_eessi.yml b/.github/workflows/test_eessi.yml index 69e988ed02..6dfd78e428 100644 --- a/.github/workflows/test_eessi.yml +++ b/.github/workflows/test_eessi.yml @@ -20,20 +20,6 @@ jobs: - x86_64/intel/haswell - x86_64/intel/skylake_avx512 - x86_64/generic - EASYSTACK_FILE: - - eessi-2023.06-eb-4.7.2-2021a.yml - - eessi-2023.06-eb-4.7.2-2021b.yml - - eessi-2023.06-eb-4.7.2-2022a.yml - - eessi-2023.06-eb-4.7.2-2022b.yml - - eessi-2023.06-eb-4.7.2-system.yml - - eessi-2023.06-eb-4.8.0-2021a.yml - - eessi-2023.06-eb-4.8.0-system.yml - - eessi-2023.06-eb-4.8.0-2021b.yml - - eessi-2023.06-eb-4.8.1-system.yml - - eessi-2023.06-eb-4.8.1-2021a.yml - - eessi-2023.06-eb-4.8.1-2021b.yml - - eessi-2023.06-eb-4.8.1-2022a.yml - - eessi-2023.06-eb-4.8.1-2023a.yml steps: - name: Check out software-layer repository uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # v3.1.0 @@ -55,7 +41,12 @@ jobs: export EESSI_SOFTWARE_SUBDIR=${{matrix.EESSI_SOFTWARE_SUBDIR}} env | grep ^EESSI | sort echo "just run check_missing_installations.sh (should use eessi-${{matrix.EESSI_VERSION}}.yml)" - ./check_missing_installations.sh ${{matrix.EASYSTACK_FILE}} + for easystack_file in $(ls eessi-${{matrix.EESSI_VERSION}}-eb-*.yml); do + echo "check missing installations for ${easystack_file}..." + ./check_missing_installations.sh ${easystack_file} + ec=$? + if [[ ${ec} -ne 0 ]]; then echo "missing installations found for ${easystack_file}!" >&2; exit ${ec}; fi + done - name: Test check_missing_installations.sh with missing package (GCC/8.3.0) run: | @@ -66,15 +57,18 @@ jobs: export EESSI_OS_TYPE=linux export EESSI_SOFTWARE_SUBDIR=${{matrix.EESSI_SOFTWARE_SUBDIR}} env | grep ^EESSI | sort - echo "modify easystack file by adding a missing package (GCC/8.3.0)" - echo " - GCC-8.3.0:" >> ${{matrix.EASYSTACK_FILE}} - tail -n 5 ${{matrix.EASYSTACK_FILE}} + # create dummy easystack file with a single entry (something that is not installed in EESSI) + easystack_file="test.yml" + echo "easyconfigs:" > ${easystack_file} + echo " - GCC-8.3.0:" >> ${easystack_file} + echo "created easystack file '${easystack_file}' with a missing installation (GCC/8.3.0):" + cat ${easystack_file} # note, check_missing_installations.sh exits 1 if a package was # missing, which is intepreted as false (exit code based, not # boolean logic), hence when the script exits 0 if no package was # missing it is interpreted as true, thus the test did not capture # the missing package - if ./check_missing_installations.sh ${{matrix.EASYSTACK_FILE}}; then + if ./check_missing_installations.sh ${easystack_file}; then echo "did NOT capture missing package; test FAILED" exit 1 else From 093c01d04c9279f2c0e65d130f5fce2e668c33ee Mon Sep 17 00:00:00 2001 From: lara Date: Tue, 10 Oct 2023 08:27:03 +0200 Subject: [PATCH 197/698] {2023.06}[foss/2021b] LAMMPS 23Jun2022 --- eessi-2023.06-eb-4.8.1-2021b.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/eessi-2023.06-eb-4.8.1-2021b.yml b/eessi-2023.06-eb-4.8.1-2021b.yml index 62f529563a..90a62ba2d6 100644 --- a/eessi-2023.06-eb-4.8.1-2021b.yml +++ b/eessi-2023.06-eb-4.8.1-2021b.yml @@ -5,3 +5,4 @@ easyconfigs: options: from-pr: 18834 - R-4.2.0-foss-2021b.eb + - LAMMPS-23Jun2022-foss-2021b-kokkos.eb From afcd92dff998e039ad8a2d7e5682604f6b1f7ad2 Mon Sep 17 00:00:00 2001 From: Maxim Date: Tue, 10 Oct 2023 11:40:26 +0200 Subject: [PATCH 198/698] Update eessi-2023.06-eb-4.8.1-2022a.yml --- eessi-2023.06-eb-4.8.1-2022a.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/eessi-2023.06-eb-4.8.1-2022a.yml b/eessi-2023.06-eb-4.8.1-2022a.yml index c05316bcf7..646f28533d 100644 --- a/eessi-2023.06-eb-4.8.1-2022a.yml +++ b/eessi-2023.06-eb-4.8.1-2022a.yml @@ -6,3 +6,5 @@ easyconfigs: from-pr: 18870 - foss-2022a - ESPResSo-4.2.1-foss-2022a + options: + from-pr: 18963 From d877d7076790e2bd671604df36f2016ac86cbe09 Mon Sep 17 00:00:00 2001 From: maxim-masterov Date: Tue, 10 Oct 2023 11:53:12 +0200 Subject: [PATCH 199/698] Add missing colon --- eessi-2023.06-eb-4.8.1-2022a.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eessi-2023.06-eb-4.8.1-2022a.yml b/eessi-2023.06-eb-4.8.1-2022a.yml index 3c27495cd1..c9a249872b 100644 --- a/eessi-2023.06-eb-4.8.1-2022a.yml +++ b/eessi-2023.06-eb-4.8.1-2022a.yml @@ -5,7 +5,7 @@ easyconfigs: options: from-pr: 18870 - foss-2022a - - ESPResSo-4.2.1-foss-2022a + - ESPResSo-4.2.1-foss-2022a: options: from-pr: 18963 - SciPy-bundle-2022.05-foss-2022a From f8b4f42baa9451a2f5fa50d28fdc009e875d414b Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 10 Oct 2023 16:47:56 +0200 Subject: [PATCH 200/698] add ESPResSo to end of easystack file to preserve installation order --- eessi-2023.06-eb-4.8.1-2022a.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/eessi-2023.06-eb-4.8.1-2022a.yml b/eessi-2023.06-eb-4.8.1-2022a.yml index c9a249872b..8317a40b7a 100644 --- a/eessi-2023.06-eb-4.8.1-2022a.yml +++ b/eessi-2023.06-eb-4.8.1-2022a.yml @@ -5,8 +5,8 @@ easyconfigs: options: from-pr: 18870 - foss-2022a + - SciPy-bundle-2022.05-foss-2022a + - BAMM-2.5.0-foss-2022a.eb - ESPResSo-4.2.1-foss-2022a: options: from-pr: 18963 - - SciPy-bundle-2022.05-foss-2022a - - BAMM-2.5.0-foss-2022a.eb From 89cc228e5fc0a629a422134e67693b1a60f2fe25 Mon Sep 17 00:00:00 2001 From: TopRichard Date: Wed, 11 Oct 2023 06:42:48 +0000 Subject: [PATCH 201/698] {2023.06}[foss/2022a] matplotlib v3.5.2 --- eb_hooks.py | 14 +++++++++++++- eessi-2023.06-eb-4.8.1-2022a.yml | 8 +++++++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/eb_hooks.py b/eb_hooks.py index dbb8415541..2bdead4b73 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -54,13 +54,25 @@ def get_rpath_override_dirs(software_name): return rpath_injection_dirs +def set_Pillow_envvars(ec): + """Get an EESSI_CPATH environment variable from the environment""" + EESSI_CPATH = os.getenv('EESSI_EPREFIX') + '/usr/include' + EESSI_LIB_PATH = os.getenv('EESSI_EPREFIX') + '/usr/lib64' + if ec.name == 'Pillow': + os.environ['CPATH'] = os.pathsep + EESSI_CPATH + os.environ['LIBRARY_PATH'] = os.pathsep + EESSI_LIB_PATH + print_msg("NOTE: For Pillow which has Szip as a dependancy, CPATH has been set to %s", os.getenv('CPATH')) + print_msg("NOTE: For Pillow which has Szip as a dependancy, LIBRARY_PATH has been set to %s", os.getenv('LIBRARY_PATH')) + ec.log.info("NOTE: For Pillow which has Szip as a dependancy, CPATH has been set to %s", os.getenv('CPATH')) + ec.log.info("NOTE: For Pillow which has Szip as a dependancy, LIBRARY_PATH has been set to %s", os.getenv('LIBRARY_PATH')) + def parse_hook(ec, *args, **kwargs): """Main parse hook: trigger custom functions based on software name.""" # determine path to Prefix installation in compat layer via $EPREFIX eprefix = get_eessi_envvar('EPREFIX') - + set_Pillow_envvars(ec) if ec.name in PARSE_HOOKS: PARSE_HOOKS[ec.name](ec, eprefix) diff --git a/eessi-2023.06-eb-4.8.1-2022a.yml b/eessi-2023.06-eb-4.8.1-2022a.yml index 97704ebe30..87ca700d96 100644 --- a/eessi-2023.06-eb-4.8.1-2022a.yml +++ b/eessi-2023.06-eb-4.8.1-2022a.yml @@ -6,4 +6,10 @@ easyconfigs: from-pr: 18870 - foss-2022a - SciPy-bundle-2022.05-foss-2022a - - BAMM-2.5.0-foss-2022a.eb \ No newline at end of file + - BAMM-2.5.0-foss-2022a.eb + - Pillow-9.1.1-GCCcore-11.3.0.eb: + # avoid that hardcoded paths like /usr/include are used in build commands + # Uses a hook to modify the hardcoded LIBRARY and Header paths. + options: + from-pr: 18881 + - matplotlib-3.5.2-foss-2022a.eb From eae083ff82f540f056c4e7a3a732133d8813314c Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 11 Oct 2023 08:58:40 +0200 Subject: [PATCH 202/698] add hook to ignore failing tests in ESPResSo v4.2.1 + add corresponding tracker issue to list of known issues --- eb_hooks.py | 35 +++++++++++++++++++++++----------- eessi-2023.06-known-issues.yml | 24 +++++++++++++++-------- 2 files changed, 40 insertions(+), 19 deletions(-) diff --git a/eb_hooks.py b/eb_hooks.py index dbb8415541..31f2b9588d 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -247,6 +247,7 @@ def pre_configure_hook_metabat_filtered_zlib_dep(self, *args, **kwargs): else: raise EasyBuildError("MetaBAT-specific hook triggered for non-MetaBAT easyconfig?!") + def pre_configure_hook_wrf_aarch64(self, *args, **kwargs): """ Pre-configure hook for WRF: @@ -266,11 +267,32 @@ def pre_configure_hook_wrf_aarch64(self, *args, **kwargs): else: raise EasyBuildError("WRF-specific hook triggered for non-WRF easyconfig?!") + def pre_test_hook(self,*args, **kwargs): """Main pre-test hook: trigger custom functions based on software name.""" if self.name in PRE_TEST_HOOKS: PRE_TEST_HOOKS[self.name](self, *args, **kwargs) + +def pre_test_hook_ignore_failing_tests_ESPResSo(self, *args, **kwargs): + """ + Pre-test hook for ESPResSo: skip failing tests, tests frequently timeout due to known bugs in ESPResSo v4.2.1 + cfr. https://github.com/EESSI/software-layer/issues/363 + """ + if self.name == 'ESPResSo' and self.version == '4.2.1': + self.cfg['testopts'] = "|| echo 'ignoring failing tests (probably due to timeouts)'" + + +def pre_test_hook_ignore_failing_tests_FFTWMPI(self, *args, **kwargs): + """ + Pre-test hook for FFTW.MPI: skip failing tests for FFTW.MPI 3.3.10 on neoverse_v1 + cfr. https://github.com/EESSI/software-layer/issues/325 + """ + cpu_target = get_eessi_envvar('EESSI_SOFTWARE_SUBDIR') + if self.name == 'FFTW.MPI' and self.version == '3.3.10' and cpu_target == CPU_TARGET_NEOVERSE_V1: + self.cfg['testopts'] = "|| echo ignoring failing tests" + + def pre_test_hook_ignore_failing_tests_SciPybundle(self, *args, **kwargs): """ Pre-test hook for SciPy-bundle: skip failing tests for SciPy-bundle 2021.10 (currently the only version that is failing). @@ -307,16 +329,6 @@ def pre_single_extension_isoband(ext, *args, **kwargs): ext.cfg['preinstallopts'] = "sed -i 's/SIGSTKSZ/32768/g' src/testthat/vendor/catch.h && " -def pre_test_hook_ignore_failing_tests_FFTWMPI(self, *args, **kwargs): - """ - Pre-test hook for FFTW.MPI: skip failing tests for FFTW.MPI 3.3.10 on neoverse_v1 - cfr. https://github.com/EESSI/software-layer/issues/325 - """ - cpu_target = get_eessi_envvar('EESSI_SOFTWARE_SUBDIR') - if self.name == 'FFTW.MPI' and self.version == '3.3.10' and cpu_target == CPU_TARGET_NEOVERSE_V1: - self.cfg['testopts'] = "|| echo ignoring failing tests" - - PARSE_HOOKS = { 'CGAL': parse_hook_cgal_toolchainopts_precise, 'fontconfig': parse_hook_fontconfig_add_fonts, @@ -337,8 +349,9 @@ def pre_test_hook_ignore_failing_tests_FFTWMPI(self, *args, **kwargs): } PRE_TEST_HOOKS = { - 'SciPy-bundle': pre_test_hook_ignore_failing_tests_SciPybundle, + 'ESPResSo': pre_test_hook_ignore_failing_tests_ESPResSo, 'FFTW.MPI': pre_test_hook_ignore_failing_tests_FFTWMPI, + 'SciPy-bundle': pre_test_hook_ignore_failing_tests_SciPybundle, } PRE_SINGLE_EXTENSION_HOOKS = { diff --git a/eessi-2023.06-known-issues.yml b/eessi-2023.06-known-issues.yml index f2f96aee34..846e862983 100644 --- a/eessi-2023.06-known-issues.yml +++ b/eessi-2023.06-known-issues.yml @@ -1,22 +1,30 @@ +- x86_64/*: + - ESPResSo-4.2.1-foss-2022a: + - issue: https://github.com/EESSI/software-layer/issues/363 + - info: "Failing tests in ESPResSo v4.2.1 due to timeouts" +- aarch64/*: + - ESPResSo-4.2.1-foss-2022a: + - issue: https://github.com/EESSI/software-layer/issues/363 + - info: "Failing tests in ESPResSo v4.2.1 due to timeouts" - aarch64/neoverse_v1: - - FFTW/3.3.10-GCC-11.3.0: + - FFTW-3.3.10-GCC-11.3.0: - issue: https://github.com/EESSI/software-layer/issues/325 - info: "Flaky FFTW tests, random failures" - - FFTW/3.3.10-gompi-2021b: + - FFTW-3.3.10-gompi-2021b: - issue: https://github.com/EESSI/software-layer/issues/325 - info: "Flaky FFTW tests, random failures" - - OpenBLAS/0.3.18-GCC-11.2.0: + - OpenBLAS-0.3.18-GCC-11.2.0: - issue: https://github.com/EESSI/software-layer/issues/314 - info: "Increased number of non-numerical failures in OpenBLAS test suite (238 vs max. 150 on x86_64/*)" - - OpenBLAS/0.3.20-GCC-11.3.0: + - OpenBLAS-0.3.20-GCC-11.3.0: - issue: https://github.com/EESSI/software-layer/issues/314 - info: "Increased number of non-numerical failures in OpenBLAS test suite (238 vs max. 150 on x86_64/*)" - - OpenBLAS/0.3.21-GCC-12.2.0: + - OpenBLAS-0.3.21-GCC-12.2.0: - issue: https://github.com/EESSI/software-layer/issues/314 - info: "Increased number of non-numerical failures in OpenBLAS test suite (344 vs max. 150 on x86_64/*)" - - SciPy-bundle/2021.05-foss-2021a: + - SciPy-bundle-2021.05-foss-2021a: - issue: https://github.com/EESSI/software-layer/issues/318 - info: "2 failing tests (vs 30554 passed) in scipy test suite" - - SciPy-bundle/2021.10-foss-2021b: + - SciPy-bundle-2021.10-foss-2021b: - issue: https://github.com/EESSI/software-layer/issues/318 - - info: "20 failing tests (vs 14429 passed) in numpy test suite + 55 failing tests (vs 32438 passed) in scipy test suite" + - info: "20 ailing tests (vs 14429 passed) in numpy test suite + 55 failing tests (vs 32438 passed) in scipy test suite" From 8779e8b350bf2379a36b7671d150fce5f2f8a262 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 11 Oct 2023 12:44:30 +0200 Subject: [PATCH 203/698] filter out YAML files that are used to keep track of known issues and missing installations --- EESSI-pilot-install-software.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/EESSI-pilot-install-software.sh b/EESSI-pilot-install-software.sh index c6c51e7abc..9586abde1d 100755 --- a/EESSI-pilot-install-software.sh +++ b/EESSI-pilot-install-software.sh @@ -190,7 +190,7 @@ fi pr_diff=$(ls [0-9]*.diff | head -1) # use PR patch file to determine in which easystack files stuff was added -for easystack_file in $(cat ${pr_diff} | grep '^+++' | cut -f2 -d' ' | sed 's@^[a-z]/@@g' | grep '^eessi.*yml$'); do +for easystack_file in $(cat ${pr_diff} | grep '^+++' | cut -f2 -d' ' | sed 's@^[a-z]/@@g' | grep '^eessi.*yml$' | egrep -v 'known-issues|missing'); do echo -e "Processing easystack file ${easystack_file}...\n\n" From cd5cea918c26e67174f278df80a43ef9a2cff045 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 11 Oct 2023 16:30:53 +0200 Subject: [PATCH 204/698] fix missing latter in info message in list of known issues --- eessi-2023.06-known-issues.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eessi-2023.06-known-issues.yml b/eessi-2023.06-known-issues.yml index 846e862983..6cb464cd20 100644 --- a/eessi-2023.06-known-issues.yml +++ b/eessi-2023.06-known-issues.yml @@ -27,4 +27,4 @@ - info: "2 failing tests (vs 30554 passed) in scipy test suite" - SciPy-bundle-2021.10-foss-2021b: - issue: https://github.com/EESSI/software-layer/issues/318 - - info: "20 ailing tests (vs 14429 passed) in numpy test suite + 55 failing tests (vs 32438 passed) in scipy test suite" + - info: "20 failing tests (vs 14429 passed) in numpy test suite + 55 failing tests (vs 32438 passed) in scipy test suite" From ea75facab305f527b81aebff51b593255b54adb3 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 11 Oct 2023 21:45:35 +0200 Subject: [PATCH 205/698] {2023.06}[2023a] X11 20230603 --- eessi-2023.06-eb-4.8.1-2023a.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/eessi-2023.06-eb-4.8.1-2023a.yml b/eessi-2023.06-eb-4.8.1-2023a.yml index b015676757..c766815934 100644 --- a/eessi-2023.06-eb-4.8.1-2023a.yml +++ b/eessi-2023.06-eb-4.8.1-2023a.yml @@ -8,3 +8,4 @@ easyconfigs: options: from-pr: 18887 - foss-2023a + - X11-20230603-GCCcore-12.3.0 From 6b0bcb9c00c4768614f5b9087e7f3ce2777e44d3 Mon Sep 17 00:00:00 2001 From: lara Date: Fri, 13 Oct 2023 13:59:44 +0200 Subject: [PATCH 206/698] add TBB solution for Aarch64 --- eessi-2023.06-eb-4.8.1-2021b.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/eessi-2023.06-eb-4.8.1-2021b.yml b/eessi-2023.06-eb-4.8.1-2021b.yml index 90a62ba2d6..1414df5e44 100644 --- a/eessi-2023.06-eb-4.8.1-2021b.yml +++ b/eessi-2023.06-eb-4.8.1-2021b.yml @@ -5,4 +5,7 @@ easyconfigs: options: from-pr: 18834 - R-4.2.0-foss-2021b.eb - - LAMMPS-23Jun2022-foss-2021b-kokkos.eb + - LAMMPS-23Jun2022-foss-2021b-kokkos.eb: + # TBB is an optional dependency when building on Intel arch + options: + from-pr: 19000 From e5b33b5111447bb663e2cec2ad136c79eaa09b9c Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 13 Oct 2023 22:40:31 +0200 Subject: [PATCH 207/698] fix info on known issue for OpenBLAS on aarch64/neoverse_v1: increased number of *numerical* errors --- eessi-2023.06-known-issues.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/eessi-2023.06-known-issues.yml b/eessi-2023.06-known-issues.yml index 6cb464cd20..ade1c069df 100644 --- a/eessi-2023.06-known-issues.yml +++ b/eessi-2023.06-known-issues.yml @@ -15,13 +15,13 @@ - info: "Flaky FFTW tests, random failures" - OpenBLAS-0.3.18-GCC-11.2.0: - issue: https://github.com/EESSI/software-layer/issues/314 - - info: "Increased number of non-numerical failures in OpenBLAS test suite (238 vs max. 150 on x86_64/*)" + - info: "Increased number of numerical errors in OpenBLAS test suite (238 vs max. 150 on x86_64/*)" - OpenBLAS-0.3.20-GCC-11.3.0: - issue: https://github.com/EESSI/software-layer/issues/314 - - info: "Increased number of non-numerical failures in OpenBLAS test suite (238 vs max. 150 on x86_64/*)" + - info: "Increased number of numerical errors in OpenBLAS test suite (238 vs max. 150 on x86_64/*)" - OpenBLAS-0.3.21-GCC-12.2.0: - issue: https://github.com/EESSI/software-layer/issues/314 - - info: "Increased number of non-numerical failures in OpenBLAS test suite (344 vs max. 150 on x86_64/*)" + - info: "Increased number of numerical errors in OpenBLAS test suite (344 vs max. 150 on x86_64/*)" - SciPy-bundle-2021.05-foss-2021a: - issue: https://github.com/EESSI/software-layer/issues/318 - info: "2 failing tests (vs 30554 passed) in scipy test suite" From 6cc2e3ed53708bc07da7932adc0326faac9c670f Mon Sep 17 00:00:00 2001 From: Thomas Roeblitz Date: Sat, 14 Oct 2023 21:09:25 +0200 Subject: [PATCH 208/698] first version of bot/test.sh script --- bot/test.sh | 224 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 224 insertions(+) create mode 100755 bot/test.sh diff --git a/bot/test.sh b/bot/test.sh new file mode 100755 index 0000000000..6d217caf92 --- /dev/null +++ b/bot/test.sh @@ -0,0 +1,224 @@ +#!/usr/bin/env bash +# +# script to run tests or the test suite for the whole EESSI software layer or +# just what has been built in a job. Intended use is that it is called +# at the end of a (batch) job running on a compute node. +# +# This script is part of the EESSI software layer, see +# https://github.com/EESSI/software-layer.git +# +# author: Thomas Roeblitz (@trz42) +# +# license: GPLv2 +# + +# ASSUMPTIONs: +# + assumption for the build step (as run through bot/build.sh which is provided +# in this repository too) +# - working directory has been prepared by the bot with a checkout of a +# pull request (OR by some other means) +# - the working directory contains a directory 'cfg' where the main config +# file 'job.cfg' has been deposited +# - the directory may contain any additional files referenced in job.cfg +# + assumptions for the test step +# - temporary storage is still available +# example +# Using /localscratch/9640860/NESSI/eessi.x765Dd8mFh as tmp directory (to resume session add '--resume /localscratch/9640860/NESSI/eessi.x765Dd8mFh'). +# - run test-suite.sh inside build container using tmp storage from build step +# plus possibly additional settings (repo, etc.) +# - needed setup steps may be similar to bot/inspect.sh (PR#317) + +# stop as soon as something fails +set -e + +# source utils.sh and cfg_files.sh +source scripts/utils.sh +source scripts/cfg_files.sh + +# defaults +export JOB_CFG_FILE="${JOB_CFG_FILE_OVERRIDE:=./cfg/job.cfg}" +HOST_ARCH=$(uname -m) + +# check if ${JOB_CFG_FILE} exists +if [[ ! -r "${JOB_CFG_FILE}" ]]; then + fatal_error "job config file (JOB_CFG_FILE=${JOB_CFG_FILE}) does not exist or not readable" +fi +echo "bot/test.sh: showing ${JOB_CFG_FILE} from software-layer side" +cat ${JOB_CFG_FILE} + +echo "bot/test.sh: obtaining configuration settings from '${JOB_CFG_FILE}'" +cfg_load ${JOB_CFG_FILE} + +# if http_proxy is defined in ${JOB_CFG_FILE} use it, if not use env var $http_proxy +HTTP_PROXY=$(cfg_get_value "site_config" "http_proxy") +HTTP_PROXY=${HTTP_PROXY:-${http_proxy}} +echo "bot/test.sh: HTTP_PROXY='${HTTP_PROXY}'" + +# if https_proxy is defined in ${JOB_CFG_FILE} use it, if not use env var $https_proxy +HTTPS_PROXY=$(cfg_get_value "site_config" "https_proxy") +HTTPS_PROXY=${HTTPS_PROXY:-${https_proxy}} +echo "bot/test.sh: HTTPS_PROXY='${HTTPS_PROXY}'" + +LOCAL_TMP=$(cfg_get_value "site_config" "local_tmp") +echo "bot/test.sh: LOCAL_TMP='${LOCAL_TMP}'" +# TODO should local_tmp be mandatory? --> then we check here and exit if it is not provided + +# check if path to copy build logs to is specified, so we can copy build logs for failing builds there +BUILD_LOGS_DIR=$(cfg_get_value "site_config" "build_logs_dir") +echo "bot/test.sh: BUILD_LOGS_DIR='${BUILD_LOGS_DIR}'" +# if $BUILD_LOGS_DIR is set, add it to $SINGULARITY_BIND so the path is available in the build container +if [[ ! -z ${BUILD_LOGS_DIR} ]]; then + mkdir -p ${BUILD_LOGS_DIR} + if [[ -z ${SINGULARITY_BIND} ]]; then + export SINGULARITY_BIND="${BUILD_LOGS_DIR}" + else + export SINGULARITY_BIND="${SINGULARITY_BIND},${BUILD_LOGS_DIR}" + fi +fi + +# check if path to directory on shared filesystem is specified, +# and use it as location for source tarballs used by EasyBuild if so +SHARED_FS_PATH=$(cfg_get_value "site_config" "shared_fs_path") +echo "bot/test.sh: SHARED_FS_PATH='${SHARED_FS_PATH}'" +# if $SHARED_FS_PATH is set, add it to $SINGULARITY_BIND so the path is available in the build container +if [[ ! -z ${SHARED_FS_PATH} ]]; then + mkdir -p ${SHARED_FS_PATH} + if [[ -z ${SINGULARITY_BIND} ]]; then + export SINGULARITY_BIND="${SHARED_FS_PATH}" + else + export SINGULARITY_BIND="${SINGULARITY_BIND},${SHARED_FS_PATH}" + fi +fi + +SINGULARITY_CACHEDIR=$(cfg_get_value "site_config" "container_cachedir") +echo "bot/test.sh: SINGULARITY_CACHEDIR='${SINGULARITY_CACHEDIR}'" +if [[ ! -z ${SINGULARITY_CACHEDIR} ]]; then + # make sure that separate directories are used for different CPU families + SINGULARITY_CACHEDIR=${SINGULARITY_CACHEDIR}/${HOST_ARCH} + export SINGULARITY_CACHEDIR +fi + +# try to determine tmp directory from build job +RESUME_DIR=$(grep 'Using .* as tmp directory' slurm-${SLURM_JOBID}.out | head -1 | awk '{print $2}') + +if [[ -z ${RESUME_DIR} ]]; then + echo -n "setting \$STORAGE by replacing any var in '${LOCAL_TMP}' -> " + # replace any env variable in ${LOCAL_TMP} with its + # current value (e.g., a value that is local to the job) + STORAGE=$(envsubst <<< ${LOCAL_TMP}) + echo "'${STORAGE}'" + + # make sure ${STORAGE} exists + mkdir -p ${STORAGE} + + # make sure the base tmp storage is unique + JOB_STORAGE=$(mktemp --directory --tmpdir=${STORAGE} bot_job_tmp_XXX) + echo "bot/test.sh: created unique base tmp storage directory at ${JOB_STORAGE}" + + RESUME_TGZ=${PWD}/previous_tmp/build_step/$(ls previous_tmp/build_step) + if [[ -z ${RESUME_TGZ} ]]; then + echo "bot/test.sh: no information about tmp directory and tarball of build step; --> giving up" + exit 2 + fi +fi + +# obtain list of modules to be loaded +LOAD_MODULES=$(cfg_get_value "site_config" "load_modules") +echo "bot/test.sh: LOAD_MODULES='${LOAD_MODULES}'" + +# singularity/apptainer settings: CONTAINER, HOME, TMPDIR, BIND +CONTAINER=$(cfg_get_value "repository" "container") +export SINGULARITY_HOME="${PWD}:/eessi_bot_job" +export SINGULARITY_TMPDIR="${PWD}/singularity_tmpdir" +mkdir -p ${SINGULARITY_TMPDIR} + +# load modules if LOAD_MODULES is not empty +if [[ ! -z ${LOAD_MODULES} ]]; then + for mod in $(echo ${LOAD_MODULES} | tr ',' '\n') + do + echo "bot/test.sh: loading module '${mod}'" + module load ${mod} + done +else + echo "bot/test.sh: no modules to be loaded" +fi + +# determine repository to be used from entry .repository in ${JOB_CFG_FILE} +REPOSITORY=$(cfg_get_value "repository" "repo_id") +EESSI_REPOS_CFG_DIR_OVERRIDE=$(cfg_get_value "repository" "repos_cfg_dir") +export EESSI_REPOS_CFG_DIR_OVERRIDE=${EESSI_REPOS_CFG_DIR_OVERRIDE:-${PWD}/cfg} +echo "bot/test.sh: EESSI_REPOS_CFG_DIR_OVERRIDE='${EESSI_REPOS_CFG_DIR_OVERRIDE}'" + +# determine pilot version to be used from .repository.repo_version in ${JOB_CFG_FILE} +# here, just set & export EESSI_PILOT_VERSION_OVERRIDE +# next script (eessi_container.sh) makes use of it via sourcing init scripts +# (e.g., init/eessi_defaults or init/minimal_eessi_env) +export EESSI_PILOT_VERSION_OVERRIDE=$(cfg_get_value "repository" "repo_version") +echo "bot/test.sh: EESSI_PILOT_VERSION_OVERRIDE='${EESSI_PILOT_VERSION_OVERRIDE}'" + +# determine CVMFS repo to be used from .repository.repo_name in ${JOB_CFG_FILE} +# here, just set EESSI_CVMFS_REPO_OVERRIDE, a bit further down +# "source init/eessi_defaults" via sourcing init/minimal_eessi_env +export EESSI_CVMFS_REPO_OVERRIDE=$(cfg_get_value "repository" "repo_name") +echo "bot/test.sh: EESSI_CVMFS_REPO_OVERRIDE='${EESSI_CVMFS_REPO_OVERRIDE}'" + +# determine architecture to be used from entry .architecture in ${JOB_CFG_FILE} +# fallbacks: +# - ${CPU_TARGET} handed over from bot +# - left empty to let downstream script(s) determine subdir to be used +EESSI_SOFTWARE_SUBDIR_OVERRIDE=$(cfg_get_value "architecture" "software_subdir") +EESSI_SOFTWARE_SUBDIR_OVERRIDE=${EESSI_SOFTWARE_SUBDIR_OVERRIDE:-${CPU_TARGET}} +export EESSI_SOFTWARE_SUBDIR_OVERRIDE +echo "bot/test.sh: EESSI_SOFTWARE_SUBDIR_OVERRIDE='${EESSI_SOFTWARE_SUBDIR_OVERRIDE}'" + +# get EESSI_OS_TYPE from .architecture.os_type in ${JOB_CFG_FILE} (default: linux) +EESSI_OS_TYPE=$(cfg_get_value "architecture" "os_type") +export EESSI_OS_TYPE=${EESSI_OS_TYPE:-linux} +echo "bot/test.sh: EESSI_OS_TYPE='${EESSI_OS_TYPE}'" + +# prepare arguments to eessi_container.sh common to build and tarball steps +declare -a COMMON_ARGS=() +COMMON_ARGS+=("--verbose") +COMMON_ARGS+=("--access" "rw") +COMMON_ARGS+=("--mode" "run") +[[ ! -z ${CONTAINER} ]] && COMMON_ARGS+=("--container" "${CONTAINER}") +[[ ! -z ${HTTP_PROXY} ]] && COMMON_ARGS+=("--http-proxy" "${HTTP_PROXY}") +[[ ! -z ${HTTPS_PROXY} ]] && COMMON_ARGS+=("--https-proxy" "${HTTPS_PROXY}") +[[ ! -z ${REPOSITORY} ]] && COMMON_ARGS+=("--repository" "${REPOSITORY}") + +# make sure to use the same parent dir for storing tarballs of tmp +PREVIOUS_TMP_DIR=${PWD}/previous_tmp + +# prepare directory to store tarball of tmp for build step +TARBALL_TMP_TEST_STEP_DIR=${PREVIOUS_TMP_DIR}/test_step +mkdir -p ${TARBALL_TMP_TEST_STEP_DIR} + +# prepare arguments to eessi_container.sh specific to test step +declare -a TEST_STEP_ARGS=() +TEST_STEP_ARGS+=("--save" "${TARBALL_TMP_TEST_STEP_DIR}") + +if [[ -z ${RESUME_DIR} ]]; then + TEST_STEP_ARGS+=("--storage" "${STORAGE}") + TEST_STEP_ARGS+=("--resume" "${RESUME_TGZ}") +else + TEST_STEP_ARGS+=("--resume" "${RESUME_DIR}") +fi + +# prepare arguments to test_suite.sh (specific to test step) +declare -a TEST_SUITE_ARGS=() +# if [[ ${EESSI_SOFTWARE_SUBDIR_OVERRIDE} =~ .*/generic$ ]]; then +# TEST_SUITE_ARGS+=("--generic") +# fi +# [[ ! -z ${BUILD_LOGS_DIR} ]] && TEST_SUITE_ARGS+=("--build-logs-dir" "${BUILD_LOGS_DIR}") +# [[ ! -z ${SHARED_FS_PATH} ]] && TEST_SUITE_ARGS+=("--shared-fs-path" "${SHARED_FS_PATH}") + +# create tmp file for output of build step +test_outerr=$(mktemp test.outerr.XXXX) + +echo "Executing command to build software:" +echo "./eessi_container.sh ${COMMON_ARGS[@]} ${TEST_STEP_ARGS[@]}" +echo " -- ./test_suite.sh \"${TEST_SUITE_ARGS[@]}\" \"$@\" 2>&1 | tee -a ${test_outerr}" +./eessi_container.sh "${COMMON_ARGS[@]}" "${TEST_STEP_ARGS[@]}" \ + -- ./test_suite.sh "${TEST_SUITE_ARGS[@]}" "$@" 2>&1 | tee -a ${test_outerr} + +exit 0 From 9a32dc629b34e4bbc91fda349198611a6a96a082 Mon Sep 17 00:00:00 2001 From: Thomas Roeblitz Date: Sun, 15 Oct 2023 20:29:14 +0200 Subject: [PATCH 209/698] scripts to run tests after a build job has finished --- run_tests.sh | 4 ++ test_suite.sh | 184 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 188 insertions(+) create mode 100644 run_tests.sh create mode 100644 test_suite.sh diff --git a/run_tests.sh b/run_tests.sh new file mode 100644 index 0000000000..ccbc751f22 --- /dev/null +++ b/run_tests.sh @@ -0,0 +1,4 @@ +#!/bin/bash +base_dir=$(dirname $(realpath $0)) +source ${base_dir}/init/eessi_defaults +./run_in_compat_layer_env.sh ./test_suite.sh "$@" diff --git a/test_suite.sh b/test_suite.sh new file mode 100644 index 0000000000..fcaaa339d2 --- /dev/null +++ b/test_suite.sh @@ -0,0 +1,184 @@ +#!/bin/bash +# +# Run sanity check for all requested modules (and built dependencies)? +# get ec from diff +# set up EasyBuild +# run `eb --sanity-only ec` + +display_help() { + echo "usage: $0 [OPTIONS]" + echo " -g | --generic - instructs script to test for generic architecture target" + echo " -h | --help - display this usage information" + echo " -x | --http-proxy URL - provides URL for the environment variable http_proxy" + echo " -y | --https-proxy URL - provides URL for the environment variable https_proxy" +} + +POSITIONAL_ARGS=() + +while [[ $# -gt 0 ]]; do + case $1 in + -g|--generic) + EASYBUILD_OPTARCH="GENERIC" + shift + ;; + -h|--help) + display_help # Call your function + # no shifting needed here, we're done. + exit 0 + ;; + -x|--http-proxy) + export http_proxy="$2" + shift 2 + ;; + -y|--https-proxy) + export https_proxy="$2" + shift 2 + ;; + --build-logs-dir) + export build_logs_dir="${2}" + shift 2 + ;; + --shared-fs-path) + export shared_fs_path="${2}" + shift 2 + ;; + -*|--*) + echo "Error: Unknown option: $1" >&2 + exit 1 + ;; + *) # No more options + POSITIONAL_ARGS+=("$1") # save positional arg + shift + ;; + esac +done + +set -- "${POSITIONAL_ARGS[@]}" + +TOPDIR=$(dirname $(realpath $0)) + +source $TOPDIR/scripts/utils.sh + +# honor $TMPDIR if it is already defined, use /tmp otherwise +if [ -z $TMPDIR ]; then + export WORKDIR=/tmp/$USER +else + export WORKDIR=$TMPDIR/$USER +fi + +TMPDIR=$(mktemp -d) + +echo ">> Setting up environment..." + +source $TOPDIR/init/minimal_eessi_env + +if [ -d $EESSI_CVMFS_REPO ]; then + echo_green "$EESSI_CVMFS_REPO available, OK!" +else + fatal_error "$EESSI_CVMFS_REPO is not available!" +fi + +# make sure we're in Prefix environment by checking $SHELL +if [[ ${SHELL} = ${EPREFIX}/bin/bash ]]; then + echo_green ">> It looks like we're in a Gentoo Prefix environment, good!" +else + fatal_error "Not running in Gentoo Prefix environment, run '${EPREFIX}/startprefix' first!" +fi + +# avoid that pyc files for EasyBuild are stored in EasyBuild installation directory +export PYTHONPYCACHEPREFIX=$TMPDIR/pycache + +DETECTION_PARAMETERS='' +GENERIC=0 +EB='eb' +if [[ "$EASYBUILD_OPTARCH" == "GENERIC" ]]; then + echo_yellow ">> GENERIC build/test requested, taking appropriate measures!" + DETECTION_PARAMETERS="$DETECTION_PARAMETERS --generic" + GENERIC=1 + EB='eb --optarch=GENERIC' +fi + +echo ">> Determining software subdirectory to use for current build/test host..." +if [ -z $EESSI_SOFTWARE_SUBDIR_OVERRIDE ]; then + export EESSI_SOFTWARE_SUBDIR_OVERRIDE=$(python3 $TOPDIR/eessi_software_subdir.py $DETECTION_PARAMETERS) + echo ">> Determined \$EESSI_SOFTWARE_SUBDIR_OVERRIDE via 'eessi_software_subdir.py $DETECTION_PARAMETERS' script" +else + echo ">> Picking up pre-defined \$EESSI_SOFTWARE_SUBDIR_OVERRIDE: ${EESSI_SOFTWARE_SUBDIR_OVERRIDE}" +fi + +# Set all the EESSI environment variables (respecting $EESSI_SOFTWARE_SUBDIR_OVERRIDE) +# $EESSI_SILENT - don't print any messages +# $EESSI_BASIC_ENV - give a basic set of environment variables +EESSI_SILENT=1 EESSI_BASIC_ENV=1 source $TOPDIR/init/eessi_environment_variables + +if [[ -z ${EESSI_SOFTWARE_SUBDIR} ]]; then + fatal_error "Failed to determine software subdirectory?!" +elif [[ "${EESSI_SOFTWARE_SUBDIR}" != "${EESSI_SOFTWARE_SUBDIR_OVERRIDE}" ]]; then + fatal_error "Values for EESSI_SOFTWARE_SUBDIR_OVERRIDE (${EESSI_SOFTWARE_SUBDIR_OVERRIDE}) and EESSI_SOFTWARE_SUBDIR (${EESSI_SOFTWARE_SUBDIR}) differ!" +else + echo_green ">> Using ${EESSI_SOFTWARE_SUBDIR} as software subdirectory!" +fi + +echo ">> Initializing Lmod..." +source $EPREFIX/usr/share/Lmod/init/bash +ml_version_out=$TMPDIR/ml.out +ml --version &> $ml_version_out +if [[ $? -eq 0 ]]; then + echo_green ">> Found Lmod ${LMOD_VERSION}" +else + fatal_error "Failed to initialize Lmod?! (see output in ${ml_version_out}" +fi + +echo ">> Configuring EasyBuild..." +source $TOPDIR/configure_easybuild + +echo ">> Setting up \$MODULEPATH..." +# make sure no modules are loaded +module --force purge +# ignore current $MODULEPATH entirely +module unuse $MODULEPATH +module use $EASYBUILD_INSTALLPATH/modules/all +if [[ -z ${MODULEPATH} ]]; then + fatal_error "Failed to set up \$MODULEPATH?!" +else + echo_green ">> MODULEPATH set up: ${MODULEPATH}" +fi + +# assume there's only one diff file that corresponds to the PR patch file +pr_diff=$(ls [0-9]*.diff | head -1) + +# "split" the file by prefixing each line belonging to the same file with the +# same number +split_file=$(awk '/^\+\+\+/{n++}{print n, " ", $0 }' ${pr_diff}) + +# determine which easystack files may have changed +changed_es_files=$(echo "${split_file}" | grep '^[0-9 ]*+++ ./eessi.*.yml$' | egrep -v 'known-issues|missing') + +# process all changed easystackfiles +for es_file_num in $(echo "${changed_es_files}" | cut -f1 -d' ') +do + # determine added lines that do not contain a yaml comment only + added_lines=$(echo "${split_file}" | grep "${es_file_num} + " | sed -e "s/^"${es_file_num}" + //" | grep -v "^[ ]*#") + # determine easyconfigs + easyconfigs=$(echo "${added_lines}" | cut -f3 -d' ') + # get easystack file name + easystack_file=$(echo "${changed_es_files}" | grep "^${es_file_num}" | sed -e "s/^"${es_file_num}" ... .\///") + echo -e "Processing easystack file ${easystack_file}...\n\n" + + # determine version of EasyBuild module to load based on EasyBuild version included in name of easystack file + eb_version=$(echo ${easystack_file} | sed 's/.*eb-\([0-9.]*\).*/\1/g') + + # load EasyBuild module + module load EasyBuild/${eb_version} + + echo_green "All set, let's run sanity checks for installed packages..." + + for easyconfig in ${easyconfigs}; + do + echo "Running sanity check for '${easyconfig}'..." + eb --sanity-check-only ${easyconfig} + done +done + +echo ">> Cleaning up ${TMPDIR}..." +rm -r ${TMPDIR} From 17cfd02779833bd5f2df96655f3dc19bb5f880e8 Mon Sep 17 00:00:00 2001 From: Thomas Roeblitz Date: Sun, 15 Oct 2023 20:30:44 +0200 Subject: [PATCH 210/698] small adjustments to test script --- bot/test.sh | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/bot/test.sh b/bot/test.sh index 6d217caf92..89c1a6a8bf 100755 --- a/bot/test.sh +++ b/bot/test.sh @@ -206,9 +206,9 @@ fi # prepare arguments to test_suite.sh (specific to test step) declare -a TEST_SUITE_ARGS=() -# if [[ ${EESSI_SOFTWARE_SUBDIR_OVERRIDE} =~ .*/generic$ ]]; then -# TEST_SUITE_ARGS+=("--generic") -# fi +if [[ ${EESSI_SOFTWARE_SUBDIR_OVERRIDE} =~ .*/generic$ ]]; then + TEST_SUITE_ARGS+=("--generic") +fi # [[ ! -z ${BUILD_LOGS_DIR} ]] && TEST_SUITE_ARGS+=("--build-logs-dir" "${BUILD_LOGS_DIR}") # [[ ! -z ${SHARED_FS_PATH} ]] && TEST_SUITE_ARGS+=("--shared-fs-path" "${SHARED_FS_PATH}") @@ -217,8 +217,8 @@ test_outerr=$(mktemp test.outerr.XXXX) echo "Executing command to build software:" echo "./eessi_container.sh ${COMMON_ARGS[@]} ${TEST_STEP_ARGS[@]}" -echo " -- ./test_suite.sh \"${TEST_SUITE_ARGS[@]}\" \"$@\" 2>&1 | tee -a ${test_outerr}" +echo " -- ./run_tests.sh \"${TEST_SUITE_ARGS[@]}\" \"$@\" 2>&1 | tee -a ${test_outerr}" ./eessi_container.sh "${COMMON_ARGS[@]}" "${TEST_STEP_ARGS[@]}" \ - -- ./test_suite.sh "${TEST_SUITE_ARGS[@]}" "$@" 2>&1 | tee -a ${test_outerr} + -- ./run_tests.sh "${TEST_SUITE_ARGS[@]}" "$@" 2>&1 | tee -a ${test_outerr} exit 0 From 3be4823474774211581bc2dd85b5fd98e7eec746 Mon Sep 17 00:00:00 2001 From: Tim Kok Date: Thu, 19 Oct 2023 18:42:41 +0200 Subject: [PATCH 211/698] Add DP3-6.0-foss-2022a and WSClean-3.4-foss-2022a --- eessi-2023.06-eb-4.8.1-2022a.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/eessi-2023.06-eb-4.8.1-2022a.yml b/eessi-2023.06-eb-4.8.1-2022a.yml index 8317a40b7a..28b469ee24 100644 --- a/eessi-2023.06-eb-4.8.1-2022a.yml +++ b/eessi-2023.06-eb-4.8.1-2022a.yml @@ -10,3 +10,9 @@ easyconfigs: - ESPResSo-4.2.1-foss-2022a: options: from-pr: 18963 + - DP3-6.0-foss-2022a: + options: + from-pr: 19010 + - WSClean-3.4-foss-2022a: + options: + from-pr: 19010 From b26dc50b9f3a282a185466e1004071074b1ac345 Mon Sep 17 00:00:00 2001 From: lara Date: Mon, 23 Oct 2023 17:40:05 +0200 Subject: [PATCH 212/698] add PLUMED hook --- eb_hooks.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/eb_hooks.py b/eb_hooks.py index 31f2b9588d..3147fc9bf5 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -268,6 +268,22 @@ def pre_configure_hook_wrf_aarch64(self, *args, **kwargs): raise EasyBuildError("WRF-specific hook triggered for non-WRF easyconfig?!") +def pre_configure_hook_PLUMED_aarch64(self, *args, **kwargs): + """ + pre-configure hook for PLUMED: + - remove unsupported --enable-asmjit option on aarch64 + """ + + if self.name == 'PLUMED': + if get_cpu_architecture() == AARCH64: + configopts = self.cfg['configopts'] + regex = re.compile(r'--enable-asmjit') + if re.search(regex, configopts): + self.cfg['configopts'] = regex.sub('', configopts) + else: + raise EasyBuildError("PLUMED-specific hook triggered for non-PLUMED easyconfig?!") + + def pre_test_hook(self,*args, **kwargs): """Main pre-test hook: trigger custom functions based on software name.""" if self.name in PRE_TEST_HOOKS: @@ -346,6 +362,7 @@ def pre_single_extension_isoband(ext, *args, **kwargs): 'MetaBAT': pre_configure_hook_metabat_filtered_zlib_dep, 'OpenBLAS': pre_configure_hook_openblas_optarch_generic, 'WRF': pre_configure_hook_wrf_aarch64, + 'PLUMED': pre_configure_hook_PLUMED_aarch64, } PRE_TEST_HOOKS = { From 207fb71f0991101edf13ebc1e51387af77087178 Mon Sep 17 00:00:00 2001 From: Tim Kok Date: Mon, 30 Oct 2023 10:56:24 +0100 Subject: [PATCH 213/698] Add EasyBuild v4.8.2 --- eessi-2023.06-eb-4.8.0-system.yml | 3 +++ eessi-2023.06-eb-4.8.1-2022a.yml | 6 ------ 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/eessi-2023.06-eb-4.8.0-system.yml b/eessi-2023.06-eb-4.8.0-system.yml index 2928f110b0..8db29e3c61 100644 --- a/eessi-2023.06-eb-4.8.0-system.yml +++ b/eessi-2023.06-eb-4.8.0-system.yml @@ -8,3 +8,6 @@ easyconfigs: - EasyBuild-4.8.1.eb: options: from-pr: 18761 + - EasyBuild-4.8.2.eb: + options: + from-pr: 19101 diff --git a/eessi-2023.06-eb-4.8.1-2022a.yml b/eessi-2023.06-eb-4.8.1-2022a.yml index 28b469ee24..8317a40b7a 100644 --- a/eessi-2023.06-eb-4.8.1-2022a.yml +++ b/eessi-2023.06-eb-4.8.1-2022a.yml @@ -10,9 +10,3 @@ easyconfigs: - ESPResSo-4.2.1-foss-2022a: options: from-pr: 18963 - - DP3-6.0-foss-2022a: - options: - from-pr: 19010 - - WSClean-3.4-foss-2022a: - options: - from-pr: 19010 From 10830788bdff71a15cc4a51488763b805ef2582f Mon Sep 17 00:00:00 2001 From: Tim Kok Date: Mon, 30 Oct 2023 10:57:32 +0100 Subject: [PATCH 214/698] Add EasyBuild v4.8.2 --- eessi-2023.06-eb-4.8.2-2022a.yml | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 eessi-2023.06-eb-4.8.2-2022a.yml diff --git a/eessi-2023.06-eb-4.8.2-2022a.yml b/eessi-2023.06-eb-4.8.2-2022a.yml new file mode 100644 index 0000000000..5e812716f2 --- /dev/null +++ b/eessi-2023.06-eb-4.8.2-2022a.yml @@ -0,0 +1,3 @@ +easyconfigs: + - DP3-6.0-foss-2022a: + - WSClean-3.4-foss-2022a: From e2644fa581b67b52acddab01285880b993e17fe0 Mon Sep 17 00:00:00 2001 From: Tim Kok Date: Mon, 30 Oct 2023 11:23:31 +0100 Subject: [PATCH 215/698] Add EasyBuild 4.8.2 to 4.8.1 system file --- eessi-2023.06-eb-4.8.1-system.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/eessi-2023.06-eb-4.8.1-system.yml b/eessi-2023.06-eb-4.8.1-system.yml index 1e9664e10f..3d0e1c3c32 100644 --- a/eessi-2023.06-eb-4.8.1-system.yml +++ b/eessi-2023.06-eb-4.8.1-system.yml @@ -4,3 +4,6 @@ easyconfigs: - ReFrame-4.3.3.eb: options: from-pr: 18851 + - EasyBuild-4.8.2.eb: + options: + from-pr: 19101 From eb503d9d73904de99ff7d2a3c7d118298ac1461f Mon Sep 17 00:00:00 2001 From: Tim Kok Date: Mon, 30 Oct 2023 11:24:59 +0100 Subject: [PATCH 216/698] Remove EasyBuild 4.8.2 from 4.8.0 system file --- eessi-2023.06-eb-4.8.0-system.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/eessi-2023.06-eb-4.8.0-system.yml b/eessi-2023.06-eb-4.8.0-system.yml index 8db29e3c61..2928f110b0 100644 --- a/eessi-2023.06-eb-4.8.0-system.yml +++ b/eessi-2023.06-eb-4.8.0-system.yml @@ -8,6 +8,3 @@ easyconfigs: - EasyBuild-4.8.1.eb: options: from-pr: 18761 - - EasyBuild-4.8.2.eb: - options: - from-pr: 19101 From 23b23f1a86a038f5ef616799af118cb43c1a972c Mon Sep 17 00:00:00 2001 From: Tim Kok Date: Mon, 30 Oct 2023 13:20:47 +0100 Subject: [PATCH 217/698] Try loading module without cache before exiting --- load_easybuild_module.sh | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/load_easybuild_module.sh b/load_easybuild_module.sh index 4ff2a3c37c..c027a4b4b1 100755 --- a/load_easybuild_module.sh +++ b/load_easybuild_module.sh @@ -23,14 +23,14 @@ fi EB_VERSION=${1} # make sure that environment variables that we expect to be set are indeed set -if [ -z "${TMPDIR}" ]; then +if [ -z "${TMPDIR}" ]; then echo "\$TMPDIR is not set" >&2 exit 2 fi # ${EB} is used to specify which 'eb' command should be used; # can potentially be more than just 'eb', for example when using 'eb --optarch=GENERIC' -if [ -z "${EB}" ]; then +if [ -z "${EB}" ]; then echo "\$EB is not set" >&2 exit 2 fi @@ -75,17 +75,22 @@ else if [[ $? -eq 0 ]]; then echo_green ">> Module for EasyBuild v${EB_VERSION} found!" else - eb_ec=EasyBuild-${EB_VERSION}.eb - echo_yellow ">> Still no module for EasyBuild v${EB_VERSION}, trying with easyconfig ${eb_ec}..." - ${EB} --search ${eb_ec} | grep ${eb_ec} > /dev/null + module avail --ignore_cache 2>&1 | grep -i easybuild/${EB_VERSION} &> ${ml_av_easybuild_out} if [[ $? -eq 0 ]]; then - echo "Easyconfig ${eb_ec} found for EasyBuild v${EB_VERSION}, so installing it..." - ok_msg="EasyBuild v${EB_VERSION} installed, alright!" - fail_msg="Installing EasyBuild v${EB_VERSION}, yikes! (output: ${eb_install_out})" - ${EB} EasyBuild-${EB_VERSION}.eb 2>&1 | tee -a ${eb_install_out} - check_exit_code $? "${ok_msg}" "${fail_msg}" + echo_green ">> Module for EasyBuild v${EB_VERSION} found!" else - fatal_error "No easyconfig found for EasyBuild v${EB_VERSION}" + eb_ec=EasyBuild-${EB_VERSION}.eb + echo_yellow ">> Still no module for EasyBuild v${EB_VERSION}, trying with easyconfig ${eb_ec}..." + ${EB} --search ${eb_ec} | grep ${eb_ec} > /dev/null + if [[ $? -eq 0 ]]; then + echo "Easyconfig ${eb_ec} found for EasyBuild v${EB_VERSION}, so installing it..." + ok_msg="EasyBuild v${EB_VERSION} installed, alright!" + fail_msg="Installing EasyBuild v${EB_VERSION}, yikes! (output: ${eb_install_out})" + ${EB} EasyBuild-${EB_VERSION}.eb 2>&1 | tee -a ${eb_install_out} + check_exit_code $? "${ok_msg}" "${fail_msg}" + else + fatal_error "No easyconfig found for EasyBuild v${EB_VERSION}" + fi fi fi From 48735b571c31fcf443596c16fea87ad1e634a138 Mon Sep 17 00:00:00 2001 From: Tim Kok Date: Mon, 30 Oct 2023 13:55:18 +0100 Subject: [PATCH 218/698] Fix position ignore_cache flag --- load_easybuild_module.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/load_easybuild_module.sh b/load_easybuild_module.sh index c027a4b4b1..9f7716543a 100755 --- a/load_easybuild_module.sh +++ b/load_easybuild_module.sh @@ -75,7 +75,7 @@ else if [[ $? -eq 0 ]]; then echo_green ">> Module for EasyBuild v${EB_VERSION} found!" else - module avail --ignore_cache 2>&1 | grep -i easybuild/${EB_VERSION} &> ${ml_av_easybuild_out} + module --ignore_cache avail 2>&1 | grep -i easybuild/${EB_VERSION} &> ${ml_av_easybuild_out} if [[ $? -eq 0 ]]; then echo_green ">> Module for EasyBuild v${EB_VERSION} found!" else From d97d23bacf7671d9c8dbc0381d917ddb26a539cd Mon Sep 17 00:00:00 2001 From: Tim Kok Date: Mon, 30 Oct 2023 14:56:07 +0100 Subject: [PATCH 219/698] Also ignore cache when loading EB module --- load_easybuild_module.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/load_easybuild_module.sh b/load_easybuild_module.sh index 9f7716543a..11c780dcdd 100755 --- a/load_easybuild_module.sh +++ b/load_easybuild_module.sh @@ -71,10 +71,12 @@ else check_exit_code $? "${ok_msg}" "${fail_msg}" # maybe the module obtained with --install-latest-eb-release is exactly the EasyBuild version we wanted? + IGNORE_CACHE='' module avail 2>&1 | grep -i easybuild/${EB_VERSION} &> ${ml_av_easybuild_out} if [[ $? -eq 0 ]]; then echo_green ">> Module for EasyBuild v${EB_VERSION} found!" else + IGNORE_CACHE='--ignore_cache' module --ignore_cache avail 2>&1 | grep -i easybuild/${EB_VERSION} &> ${ml_av_easybuild_out} if [[ $? -eq 0 ]]; then echo_green ">> Module for EasyBuild v${EB_VERSION} found!" @@ -108,7 +110,7 @@ else fi echo ">> Loading EasyBuild v${EB_VERSION} module..." -module load EasyBuild/${EB_VERSION} +module ${IGNORE_CACHE} load EasyBuild/${EB_VERSION} eb_show_system_info_out=${TMPDIR}/eb_show_system_info.out ${EB} --show-system-info > ${eb_show_system_info_out} if [[ $? -eq 0 ]]; then From a8fdd91817d0bb9a884fb2bf42520f1919a1e51c Mon Sep 17 00:00:00 2001 From: Tim Kok Date: Mon, 30 Oct 2023 15:59:53 +0100 Subject: [PATCH 220/698] Move IGNORE_CACHE variable down --- load_easybuild_module.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/load_easybuild_module.sh b/load_easybuild_module.sh index 11c780dcdd..d1bfd18bb5 100755 --- a/load_easybuild_module.sh +++ b/load_easybuild_module.sh @@ -76,10 +76,10 @@ else if [[ $? -eq 0 ]]; then echo_green ">> Module for EasyBuild v${EB_VERSION} found!" else - IGNORE_CACHE='--ignore_cache' module --ignore_cache avail 2>&1 | grep -i easybuild/${EB_VERSION} &> ${ml_av_easybuild_out} if [[ $? -eq 0 ]]; then echo_green ">> Module for EasyBuild v${EB_VERSION} found!" + IGNORE_CACHE='--ignore_cache' else eb_ec=EasyBuild-${EB_VERSION}.eb echo_yellow ">> Still no module for EasyBuild v${EB_VERSION}, trying with easyconfig ${eb_ec}..." From 9d13aa874e1961029f0d73634351db07f5a19eb4 Mon Sep 17 00:00:00 2001 From: lara Date: Mon, 30 Oct 2023 16:12:31 +0100 Subject: [PATCH 221/698] replace plumed hook with updated easyconfig and add LAMMPS hook [context](https://gitlab.com/eessi/support/-/issues/10#note_1625972083) --- eb_hooks.py | 14 ++++++-------- eessi-2023.06-eb-4.8.1-2021b.yml | 4 ++++ 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/eb_hooks.py b/eb_hooks.py index 3147fc9bf5..28ee7907a4 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -268,18 +268,16 @@ def pre_configure_hook_wrf_aarch64(self, *args, **kwargs): raise EasyBuildError("WRF-specific hook triggered for non-WRF easyconfig?!") -def pre_configure_hook_PLUMED_aarch64(self, *args, **kwargs): +def pre_configure_hook_LAMMPS_aarch64(self, *args, **kwargs): """ pre-configure hook for PLUMED: - remove unsupported --enable-asmjit option on aarch64 """ - if self.name == 'PLUMED': - if get_cpu_architecture() == AARCH64: - configopts = self.cfg['configopts'] - regex = re.compile(r'--enable-asmjit') - if re.search(regex, configopts): - self.cfg['configopts'] = regex.sub('', configopts) + if self.name == 'LAMMPS': + if self.version == '23Jun2022': + if get_cpu_architecture() == AARCH64: + self.cfg['kokkos_arch'] = 'A64FX' else: raise EasyBuildError("PLUMED-specific hook triggered for non-PLUMED easyconfig?!") @@ -362,7 +360,7 @@ def pre_single_extension_isoband(ext, *args, **kwargs): 'MetaBAT': pre_configure_hook_metabat_filtered_zlib_dep, 'OpenBLAS': pre_configure_hook_openblas_optarch_generic, 'WRF': pre_configure_hook_wrf_aarch64, - 'PLUMED': pre_configure_hook_PLUMED_aarch64, + 'PLUMED': pre_configure_hook_LAMMPS_aarch64, } PRE_TEST_HOOKS = { diff --git a/eessi-2023.06-eb-4.8.1-2021b.yml b/eessi-2023.06-eb-4.8.1-2021b.yml index 1414df5e44..30035fa837 100644 --- a/eessi-2023.06-eb-4.8.1-2021b.yml +++ b/eessi-2023.06-eb-4.8.1-2021b.yml @@ -5,6 +5,10 @@ easyconfigs: options: from-pr: 18834 - R-4.2.0-foss-2021b.eb + - PLUMED-2.7.3-foss-2021b.eb: + # the --enable-asmjit is not supported on Aarch64 + options: + from-pr: 19110 - LAMMPS-23Jun2022-foss-2021b-kokkos.eb: # TBB is an optional dependency when building on Intel arch options: From 7537a7f17099c04ebd1520bc6ae093d5585e54b1 Mon Sep 17 00:00:00 2001 From: lara Date: Mon, 30 Oct 2023 16:17:13 +0100 Subject: [PATCH 222/698] small fix --- eb_hooks.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eb_hooks.py b/eb_hooks.py index 28ee7907a4..546194111d 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -279,7 +279,7 @@ def pre_configure_hook_LAMMPS_aarch64(self, *args, **kwargs): if get_cpu_architecture() == AARCH64: self.cfg['kokkos_arch'] = 'A64FX' else: - raise EasyBuildError("PLUMED-specific hook triggered for non-PLUMED easyconfig?!") + raise EasyBuildError("LAMMPS-specific hook triggered for non-LAMMPS easyconfig?!") def pre_test_hook(self,*args, **kwargs): From d56e0dd90132f3585f4da2eed1803f0a9191f2c6 Mon Sep 17 00:00:00 2001 From: lara Date: Mon, 30 Oct 2023 16:28:36 +0100 Subject: [PATCH 223/698] fix PRE_CONFIGURE_HOOKS --- eb_hooks.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eb_hooks.py b/eb_hooks.py index 546194111d..ea9c3bfd48 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -360,7 +360,7 @@ def pre_single_extension_isoband(ext, *args, **kwargs): 'MetaBAT': pre_configure_hook_metabat_filtered_zlib_dep, 'OpenBLAS': pre_configure_hook_openblas_optarch_generic, 'WRF': pre_configure_hook_wrf_aarch64, - 'PLUMED': pre_configure_hook_LAMMPS_aarch64, + 'LAMMPS': pre_configure_hook_LAMMPS_aarch64, } PRE_TEST_HOOKS = { From 5c9316dd86a1ceb2d2b2e5d04c8627d0da31abe1 Mon Sep 17 00:00:00 2001 From: lara Date: Mon, 30 Oct 2023 16:36:53 +0100 Subject: [PATCH 224/698] fix in description --- eb_hooks.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/eb_hooks.py b/eb_hooks.py index ea9c3bfd48..a2890da75e 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -270,8 +270,8 @@ def pre_configure_hook_wrf_aarch64(self, *args, **kwargs): def pre_configure_hook_LAMMPS_aarch64(self, *args, **kwargs): """ - pre-configure hook for PLUMED: - - remove unsupported --enable-asmjit option on aarch64 + pre-configure hook for LAMMPS: + - set kokkos_arch on Aarch64 """ if self.name == 'LAMMPS': From cc4e2c03421f52a8be699adeed35dccac04266db Mon Sep 17 00:00:00 2001 From: Tim Kok Date: Mon, 30 Oct 2023 17:46:40 +0100 Subject: [PATCH 225/698] {2023.06} EasyBuild v4.8.2 + attempt module loads without cache --- eessi-2023.06-eb-4.8.1-system.yml | 3 +++ load_easybuild_module.sh | 31 +++++++++++++++++++------------ 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/eessi-2023.06-eb-4.8.1-system.yml b/eessi-2023.06-eb-4.8.1-system.yml index 1e9664e10f..3d0e1c3c32 100644 --- a/eessi-2023.06-eb-4.8.1-system.yml +++ b/eessi-2023.06-eb-4.8.1-system.yml @@ -4,3 +4,6 @@ easyconfigs: - ReFrame-4.3.3.eb: options: from-pr: 18851 + - EasyBuild-4.8.2.eb: + options: + from-pr: 19101 diff --git a/load_easybuild_module.sh b/load_easybuild_module.sh index 4ff2a3c37c..d1bfd18bb5 100755 --- a/load_easybuild_module.sh +++ b/load_easybuild_module.sh @@ -23,14 +23,14 @@ fi EB_VERSION=${1} # make sure that environment variables that we expect to be set are indeed set -if [ -z "${TMPDIR}" ]; then +if [ -z "${TMPDIR}" ]; then echo "\$TMPDIR is not set" >&2 exit 2 fi # ${EB} is used to specify which 'eb' command should be used; # can potentially be more than just 'eb', for example when using 'eb --optarch=GENERIC' -if [ -z "${EB}" ]; then +if [ -z "${EB}" ]; then echo "\$EB is not set" >&2 exit 2 fi @@ -71,21 +71,28 @@ else check_exit_code $? "${ok_msg}" "${fail_msg}" # maybe the module obtained with --install-latest-eb-release is exactly the EasyBuild version we wanted? + IGNORE_CACHE='' module avail 2>&1 | grep -i easybuild/${EB_VERSION} &> ${ml_av_easybuild_out} if [[ $? -eq 0 ]]; then echo_green ">> Module for EasyBuild v${EB_VERSION} found!" else - eb_ec=EasyBuild-${EB_VERSION}.eb - echo_yellow ">> Still no module for EasyBuild v${EB_VERSION}, trying with easyconfig ${eb_ec}..." - ${EB} --search ${eb_ec} | grep ${eb_ec} > /dev/null + module --ignore_cache avail 2>&1 | grep -i easybuild/${EB_VERSION} &> ${ml_av_easybuild_out} if [[ $? -eq 0 ]]; then - echo "Easyconfig ${eb_ec} found for EasyBuild v${EB_VERSION}, so installing it..." - ok_msg="EasyBuild v${EB_VERSION} installed, alright!" - fail_msg="Installing EasyBuild v${EB_VERSION}, yikes! (output: ${eb_install_out})" - ${EB} EasyBuild-${EB_VERSION}.eb 2>&1 | tee -a ${eb_install_out} - check_exit_code $? "${ok_msg}" "${fail_msg}" + echo_green ">> Module for EasyBuild v${EB_VERSION} found!" + IGNORE_CACHE='--ignore_cache' else - fatal_error "No easyconfig found for EasyBuild v${EB_VERSION}" + eb_ec=EasyBuild-${EB_VERSION}.eb + echo_yellow ">> Still no module for EasyBuild v${EB_VERSION}, trying with easyconfig ${eb_ec}..." + ${EB} --search ${eb_ec} | grep ${eb_ec} > /dev/null + if [[ $? -eq 0 ]]; then + echo "Easyconfig ${eb_ec} found for EasyBuild v${EB_VERSION}, so installing it..." + ok_msg="EasyBuild v${EB_VERSION} installed, alright!" + fail_msg="Installing EasyBuild v${EB_VERSION}, yikes! (output: ${eb_install_out})" + ${EB} EasyBuild-${EB_VERSION}.eb 2>&1 | tee -a ${eb_install_out} + check_exit_code $? "${ok_msg}" "${fail_msg}" + else + fatal_error "No easyconfig found for EasyBuild v${EB_VERSION}" + fi fi fi @@ -103,7 +110,7 @@ else fi echo ">> Loading EasyBuild v${EB_VERSION} module..." -module load EasyBuild/${EB_VERSION} +module ${IGNORE_CACHE} load EasyBuild/${EB_VERSION} eb_show_system_info_out=${TMPDIR}/eb_show_system_info.out ${EB} --show-system-info > ${eb_show_system_info_out} if [[ $? -eq 0 ]]; then From c1b29b3d3384c0a3a570252703d274537437e75c Mon Sep 17 00:00:00 2001 From: Tim Kok Date: Mon, 30 Oct 2023 18:09:34 +0100 Subject: [PATCH 226/698] Use correct 4.8.2 PR --- eessi-2023.06-eb-4.8.1-system.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eessi-2023.06-eb-4.8.1-system.yml b/eessi-2023.06-eb-4.8.1-system.yml index 3d0e1c3c32..b0731d2534 100644 --- a/eessi-2023.06-eb-4.8.1-system.yml +++ b/eessi-2023.06-eb-4.8.1-system.yml @@ -6,4 +6,4 @@ easyconfigs: from-pr: 18851 - EasyBuild-4.8.2.eb: options: - from-pr: 19101 + from-pr: 19105 From 0f803f491d6dfbbeab55cc08d7d70d6e7d3b8e40 Mon Sep 17 00:00:00 2001 From: Tim Kok Date: Mon, 30 Oct 2023 18:12:41 +0100 Subject: [PATCH 227/698] Use correct 4.8.2 PR --- eessi-2023.06-eb-4.8.1-system.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eessi-2023.06-eb-4.8.1-system.yml b/eessi-2023.06-eb-4.8.1-system.yml index 3d0e1c3c32..b0731d2534 100644 --- a/eessi-2023.06-eb-4.8.1-system.yml +++ b/eessi-2023.06-eb-4.8.1-system.yml @@ -6,4 +6,4 @@ easyconfigs: from-pr: 18851 - EasyBuild-4.8.2.eb: options: - from-pr: 19101 + from-pr: 19105 From 8b457d4dfebeb78f9b1915cb66683ec174f2d638 Mon Sep 17 00:00:00 2001 From: lara Date: Tue, 31 Oct 2023 10:50:24 +0100 Subject: [PATCH 228/698] use framework fix and Pillow fix in easybuild v4.8.2 --- eessi-2023.06-eb-4.8.1-2021b.yml | 5 ----- eessi-2023.06-eb-4.8.2-2021b.yml | 2 ++ 2 files changed, 2 insertions(+), 5 deletions(-) create mode 100644 eessi-2023.06-eb-4.8.2-2021b.yml diff --git a/eessi-2023.06-eb-4.8.1-2021b.yml b/eessi-2023.06-eb-4.8.1-2021b.yml index ec019ea879..62f529563a 100644 --- a/eessi-2023.06-eb-4.8.1-2021b.yml +++ b/eessi-2023.06-eb-4.8.1-2021b.yml @@ -5,8 +5,3 @@ easyconfigs: options: from-pr: 18834 - R-4.2.0-foss-2021b.eb - - Pillow-8.3.2-GCCcore-11.2.0.eb: - # avoid that hardcoded paths like /usr/include are used in build commands - options: - from-pr: 18881 - - matplotlib-3.4.3-foss-2021b.eb diff --git a/eessi-2023.06-eb-4.8.2-2021b.yml b/eessi-2023.06-eb-4.8.2-2021b.yml new file mode 100644 index 0000000000..746f8df05f --- /dev/null +++ b/eessi-2023.06-eb-4.8.2-2021b.yml @@ -0,0 +1,2 @@ +easyconfigs: + - matplotlib-3.4.3-foss-2021b.eb From 2aee11e3dac9a9b748e1456aba10d68aca22fce6 Mon Sep 17 00:00:00 2001 From: Tim Kok Date: Tue, 31 Oct 2023 14:15:20 +0100 Subject: [PATCH 229/698] Test excluding filter-deps for AOFlagger and casacore --- eessi-2023.06-eb-4.8.2-2022a.yml | 52 ++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/eessi-2023.06-eb-4.8.2-2022a.yml b/eessi-2023.06-eb-4.8.2-2022a.yml index 5e812716f2..8dbfe5c223 100644 --- a/eessi-2023.06-eb-4.8.2-2022a.yml +++ b/eessi-2023.06-eb-4.8.2-2022a.yml @@ -1,3 +1,55 @@ easyconfigs: + - casacore-3.5.0-foss-2022a: + options: + from-pr: 19119 + # Exclude ncurses + filter-deps: + - Autoconf + - Automake + - Autotools + - binutils + - bzip2 + - DBus + - flex + - gettext + - gperf + - help2man + - intltool + - libreadline + - libtool + - Lua + - M4 + - makeinfo + - util-linux + - XZ + - zlib + - AOFlagger-3.4.0-foss-2022a: + options: + from-pr: 19119 + # Exclude Lua + filter-deps: + - Autoconf + - Automake + - Autotools + - binutils + - bzip2 + - DBus + - flex + - gettext + - gperf + - help2man + - intltool + - libreadline + - libtool + - ncurses + - M4 + - makeinfo + - util-linux + - XZ + - zlib - DP3-6.0-foss-2022a: + options: + from-pr: 19119 - WSClean-3.4-foss-2022a: + options: + from-pr: 19119 From 7259183a4965ff0c83b75a7bc2f04fb47d1c4381 Mon Sep 17 00:00:00 2001 From: Tim Kok Date: Tue, 31 Oct 2023 14:53:53 +0100 Subject: [PATCH 230/698] Remove casacore (ncurses is picked up from compat layer) --- eessi-2023.06-eb-4.8.2-2022a.yml | 24 ------------------------ 1 file changed, 24 deletions(-) diff --git a/eessi-2023.06-eb-4.8.2-2022a.yml b/eessi-2023.06-eb-4.8.2-2022a.yml index 8dbfe5c223..6b0dbc0387 100644 --- a/eessi-2023.06-eb-4.8.2-2022a.yml +++ b/eessi-2023.06-eb-4.8.2-2022a.yml @@ -1,28 +1,4 @@ easyconfigs: - - casacore-3.5.0-foss-2022a: - options: - from-pr: 19119 - # Exclude ncurses - filter-deps: - - Autoconf - - Automake - - Autotools - - binutils - - bzip2 - - DBus - - flex - - gettext - - gperf - - help2man - - intltool - - libreadline - - libtool - - Lua - - M4 - - makeinfo - - util-linux - - XZ - - zlib - AOFlagger-3.4.0-foss-2022a: options: from-pr: 19119 From a7294c51c28d5be8a1871e4e165f708ec3ce0a16 Mon Sep 17 00:00:00 2001 From: t1mk1k <96469032+t1mk1k@users.noreply.github.com> Date: Tue, 31 Oct 2023 15:02:37 +0100 Subject: [PATCH 231/698] Explain why Lua is excluded from filter-deps Co-authored-by: ocaisa --- eessi-2023.06-eb-4.8.2-2022a.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eessi-2023.06-eb-4.8.2-2022a.yml b/eessi-2023.06-eb-4.8.2-2022a.yml index 6b0dbc0387..b0e1992efe 100644 --- a/eessi-2023.06-eb-4.8.2-2022a.yml +++ b/eessi-2023.06-eb-4.8.2-2022a.yml @@ -2,7 +2,7 @@ easyconfigs: - AOFlagger-3.4.0-foss-2022a: options: from-pr: 19119 - # Exclude Lua + # Exclude Lua from `filter-deps` as the compat layer version is too old for the software filter-deps: - Autoconf - Automake From 31894ec295344e55338be9b225efabff20f9ae9a Mon Sep 17 00:00:00 2001 From: Tim Kok Date: Tue, 31 Oct 2023 17:01:17 +0100 Subject: [PATCH 232/698] Include casacore and EveryBeam from PR 19119 --- eessi-2023.06-eb-4.8.2-2022a.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/eessi-2023.06-eb-4.8.2-2022a.yml b/eessi-2023.06-eb-4.8.2-2022a.yml index b0e1992efe..bab796db2b 100644 --- a/eessi-2023.06-eb-4.8.2-2022a.yml +++ b/eessi-2023.06-eb-4.8.2-2022a.yml @@ -1,4 +1,7 @@ easyconfigs: + - casacore-3.5.0-foss-2022a: + options: + from-pr: 19119 - AOFlagger-3.4.0-foss-2022a: options: from-pr: 19119 @@ -23,6 +26,9 @@ easyconfigs: - util-linux - XZ - zlib + - EveryBeam-0.5.2-foss-2022a: + options: + from-pr: 19119 - DP3-6.0-foss-2022a: options: from-pr: 19119 From a2ab66466d882b9724eb998bf92c136fe514150b Mon Sep 17 00:00:00 2001 From: lara Date: Tue, 7 Nov 2023 11:59:04 +0100 Subject: [PATCH 233/698] update easystack --- eessi-2023.06-eb-4.8.1-2021b.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/eessi-2023.06-eb-4.8.1-2021b.yml b/eessi-2023.06-eb-4.8.1-2021b.yml index 30035fa837..478899f672 100644 --- a/eessi-2023.06-eb-4.8.1-2021b.yml +++ b/eessi-2023.06-eb-4.8.1-2021b.yml @@ -9,7 +9,11 @@ easyconfigs: # the --enable-asmjit is not supported on Aarch64 options: from-pr: 19110 + - ScaFaCoS-1.0.4-foss-2021b.eb: + # Newer version of ScaFaCoS for LAMMPS + options: + from-pr: 19163 - LAMMPS-23Jun2022-foss-2021b-kokkos.eb: # TBB is an optional dependency when building on Intel arch options: - from-pr: 19000 + from-pr: 19164 From 3f5ef9acbef5d3a8f11d15dd27d5b36fc6ff26aa Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 9 Nov 2023 15:48:54 +0100 Subject: [PATCH 234/698] don't filter Lua dependency --- configure_easybuild | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/configure_easybuild b/configure_easybuild index 7dca1ce682..c67b879cf3 100644 --- a/configure_easybuild +++ b/configure_easybuild @@ -25,8 +25,7 @@ fi # note: filtering Bison may break some installations, like Qt5 (see https://github.com/EESSI/software-layer/issues/49) # filtering pkg-config breaks R-bundle-Bioconductor installation (see also https://github.com/easybuilders/easybuild-easyconfigs/pull/11104) -# problems occur when filtering pkg-config with gnuplot too (picks up Lua 5.1 from $EPREFIX rather than from Lua 5.3 dependency) -DEPS_TO_FILTER=Autoconf,Automake,Autotools,binutils,bzip2,DBus,flex,gettext,gperf,help2man,intltool,libreadline,libtool,Lua,M4,makeinfo,ncurses,util-linux,XZ,zlib +DEPS_TO_FILTER=Autoconf,Automake,Autotools,binutils,bzip2,DBus,flex,gettext,gperf,help2man,intltool,libreadline,libtool,M4,makeinfo,ncurses,util-linux,XZ,zlib # For aarch64 we need to also filter out Yasm. # See https://github.com/easybuilders/easybuild-easyconfigs/issues/11190 if [[ "$EESSI_CPU_FAMILY" == "aarch64" ]]; then From fd6ac5aa5cb7ad0e5538ebf70335c1c35741e090 Mon Sep 17 00:00:00 2001 From: lara Date: Fri, 10 Nov 2023 14:52:14 +0100 Subject: [PATCH 235/698] update easystack --- eessi-2023.06-eb-4.8.1-2021b.yml | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/eessi-2023.06-eb-4.8.1-2021b.yml b/eessi-2023.06-eb-4.8.1-2021b.yml index 478899f672..d8a7caff2e 100644 --- a/eessi-2023.06-eb-4.8.1-2021b.yml +++ b/eessi-2023.06-eb-4.8.1-2021b.yml @@ -9,11 +9,7 @@ easyconfigs: # the --enable-asmjit is not supported on Aarch64 options: from-pr: 19110 - - ScaFaCoS-1.0.4-foss-2021b.eb: - # Newer version of ScaFaCoS for LAMMPS - options: - from-pr: 19163 - LAMMPS-23Jun2022-foss-2021b-kokkos.eb: - # TBB is an optional dependency when building on Intel arch + # TBB and ScaFaCos are optional dependencies when building on Intel arch options: from-pr: 19164 From b03340ac61e2e1d168efe0b56ece7122c06c16a6 Mon Sep 17 00:00:00 2001 From: TopRichard Date: Mon, 13 Nov 2023 16:57:32 +0000 Subject: [PATCH 236/698] removed Pillow hook --- eb_hooks.py | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/eb_hooks.py b/eb_hooks.py index ede8401760..c592fcd6ec 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -54,25 +54,12 @@ def get_rpath_override_dirs(software_name): return rpath_injection_dirs -def set_Pillow_envvars(ec): - """Get an EESSI_CPATH environment variable from the environment""" - EESSI_CPATH = os.getenv('EESSI_EPREFIX') + '/usr/include' - EESSI_LIB_PATH = os.getenv('EESSI_EPREFIX') + '/usr/lib64' - if ec.name == 'Pillow': - os.environ['CPATH'] = os.pathsep + EESSI_CPATH - os.environ['LIBRARY_PATH'] = os.pathsep + EESSI_LIB_PATH - print_msg("NOTE: For Pillow which has Szip as a dependancy, CPATH has been set to %s", os.getenv('CPATH')) - print_msg("NOTE: For Pillow which has Szip as a dependancy, LIBRARY_PATH has been set to %s", os.getenv('LIBRARY_PATH')) - ec.log.info("NOTE: For Pillow which has Szip as a dependancy, CPATH has been set to %s", os.getenv('CPATH')) - ec.log.info("NOTE: For Pillow which has Szip as a dependancy, LIBRARY_PATH has been set to %s", os.getenv('LIBRARY_PATH')) - def parse_hook(ec, *args, **kwargs): """Main parse hook: trigger custom functions based on software name.""" # determine path to Prefix installation in compat layer via $EPREFIX eprefix = get_eessi_envvar('EPREFIX') - set_Pillow_envvars(ec) if ec.name in PARSE_HOOKS: PARSE_HOOKS[ec.name](ec, eprefix) From 09c97bd2b96f1628461f1784d2aaa813d22d9145 Mon Sep 17 00:00:00 2001 From: TopRichard Date: Mon, 13 Nov 2023 16:59:11 +0000 Subject: [PATCH 237/698] removed the hook comment --- eessi-2023.06-eb-4.8.1-2022a.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/eessi-2023.06-eb-4.8.1-2022a.yml b/eessi-2023.06-eb-4.8.1-2022a.yml index 0aaa66a4ab..b6504915ca 100644 --- a/eessi-2023.06-eb-4.8.1-2022a.yml +++ b/eessi-2023.06-eb-4.8.1-2022a.yml @@ -12,7 +12,6 @@ easyconfigs: from-pr: 18963 - Pillow-9.1.1-GCCcore-11.3.0.eb: # avoid that hardcoded paths like /usr/include are used in build commands - # Uses a hook to modify the hardcoded LIBRARY and Header paths. options: from-pr: 19266 - matplotlib-3.5.2-foss-2022a.eb From 9b150a73de58592050383adfc7c73b90c2797c69 Mon Sep 17 00:00:00 2001 From: TopRichard Date: Mon, 13 Nov 2023 18:28:17 +0000 Subject: [PATCH 238/698] added the eb file in 4.8.2 yml file --- eessi-2023.06-eb-4.8.1-2022a.yml | 5 ----- eessi-2023.06-eb-4.8.2-2022a.yml | 5 +++++ 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/eessi-2023.06-eb-4.8.1-2022a.yml b/eessi-2023.06-eb-4.8.1-2022a.yml index b6504915ca..8317a40b7a 100644 --- a/eessi-2023.06-eb-4.8.1-2022a.yml +++ b/eessi-2023.06-eb-4.8.1-2022a.yml @@ -10,8 +10,3 @@ easyconfigs: - ESPResSo-4.2.1-foss-2022a: options: from-pr: 18963 - - Pillow-9.1.1-GCCcore-11.3.0.eb: - # avoid that hardcoded paths like /usr/include are used in build commands - options: - from-pr: 19266 - - matplotlib-3.5.2-foss-2022a.eb diff --git a/eessi-2023.06-eb-4.8.2-2022a.yml b/eessi-2023.06-eb-4.8.2-2022a.yml index bab796db2b..81fa757cd7 100644 --- a/eessi-2023.06-eb-4.8.2-2022a.yml +++ b/eessi-2023.06-eb-4.8.2-2022a.yml @@ -35,3 +35,8 @@ easyconfigs: - WSClean-3.4-foss-2022a: options: from-pr: 19119 + - Pillow-9.1.1-GCCcore-11.3.0.eb: + # avoid that hardcoded paths like /usr/include are used in build commands + options: + from-pr: 19266 + - matplotlib-3.5.2-foss-2022a.eb From b396a56257d42a4a365a97f9e3bcc680404c3fec Mon Sep 17 00:00:00 2001 From: TopRichard Date: Tue, 14 Nov 2023 09:06:56 +0000 Subject: [PATCH 239/698] reference to PR#19226 instead --- eessi-2023.06-eb-4.8.2-2022a.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eessi-2023.06-eb-4.8.2-2022a.yml b/eessi-2023.06-eb-4.8.2-2022a.yml index 81fa757cd7..6406064513 100644 --- a/eessi-2023.06-eb-4.8.2-2022a.yml +++ b/eessi-2023.06-eb-4.8.2-2022a.yml @@ -38,5 +38,5 @@ easyconfigs: - Pillow-9.1.1-GCCcore-11.3.0.eb: # avoid that hardcoded paths like /usr/include are used in build commands options: - from-pr: 19266 + from-pr: 19226 - matplotlib-3.5.2-foss-2022a.eb From c2e26c159230aa7e06851cd9099368785e189075 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Wed, 15 Nov 2023 09:33:11 +0100 Subject: [PATCH 240/698] restore blank line --- eb_hooks.py | 1 + 1 file changed, 1 insertion(+) diff --git a/eb_hooks.py b/eb_hooks.py index c592fcd6ec..31f2b9588d 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -60,6 +60,7 @@ def parse_hook(ec, *args, **kwargs): # determine path to Prefix installation in compat layer via $EPREFIX eprefix = get_eessi_envvar('EPREFIX') + if ec.name in PARSE_HOOKS: PARSE_HOOKS[ec.name](ec, eprefix) From da82af74a0f5fd700842cda0f847038ed9469c5e Mon Sep 17 00:00:00 2001 From: lara Date: Wed, 15 Nov 2023 09:49:29 +0100 Subject: [PATCH 241/698] change kokkos mapping for Aarch64" --- eb_hooks.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/eb_hooks.py b/eb_hooks.py index a2890da75e..dfd91ab18b 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -19,6 +19,7 @@ CPU_TARGET_NEOVERSE_V1 = 'aarch64/neoverse_v1' +CPU_TARGET_AARCH64_GENERIC = 'aarch64/generic' EESSI_RPATH_OVERRIDE_ATTR = 'orig_rpath_override_dirs' @@ -277,7 +278,10 @@ def pre_configure_hook_LAMMPS_aarch64(self, *args, **kwargs): if self.name == 'LAMMPS': if self.version == '23Jun2022': if get_cpu_architecture() == AARCH64: - self.cfg['kokkos_arch'] = 'A64FX' + if cpu_target == CPU_TARGET_AARCH64_GENERIC: + self.cfg['kokkos_arch'] = 'ARM81' + else: + self.cfg['kokkos_arch'] = 'ARM80' else: raise EasyBuildError("LAMMPS-specific hook triggered for non-LAMMPS easyconfig?!") From 151c4924068fe3dd841e3d1380cd2379a50b5d8b Mon Sep 17 00:00:00 2001 From: lara Date: Wed, 15 Nov 2023 09:52:48 +0100 Subject: [PATCH 242/698] update kokkos mapping --- eb_hooks.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/eb_hooks.py b/eb_hooks.py index dfd91ab18b..1d01372912 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -279,9 +279,9 @@ def pre_configure_hook_LAMMPS_aarch64(self, *args, **kwargs): if self.version == '23Jun2022': if get_cpu_architecture() == AARCH64: if cpu_target == CPU_TARGET_AARCH64_GENERIC: - self.cfg['kokkos_arch'] = 'ARM81' - else: self.cfg['kokkos_arch'] = 'ARM80' + else: + self.cfg['kokkos_arch'] = 'ARM81' else: raise EasyBuildError("LAMMPS-specific hook triggered for non-LAMMPS easyconfig?!") From ed22feaf78ae50d98dc675f17a3597a8622fc1d1 Mon Sep 17 00:00:00 2001 From: lara Date: Wed, 15 Nov 2023 11:25:57 +0100 Subject: [PATCH 243/698] update hook --- eb_hooks.py | 1 + 1 file changed, 1 insertion(+) diff --git a/eb_hooks.py b/eb_hooks.py index 1d01372912..8d05523c2b 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -275,6 +275,7 @@ def pre_configure_hook_LAMMPS_aarch64(self, *args, **kwargs): - set kokkos_arch on Aarch64 """ + cpu_target = get_eessi_envvar('EESSI_SOFTWARE_SUBDIR') if self.name == 'LAMMPS': if self.version == '23Jun2022': if get_cpu_architecture() == AARCH64: From 6d138dd2390a8fc9efd843f96c3210640e1535b4 Mon Sep 17 00:00:00 2001 From: lara Date: Thu, 16 Nov 2023 17:14:10 +0100 Subject: [PATCH 244/698] add fix for sanity check --- eessi-2023.06-eb-4.8.1-2021b.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eessi-2023.06-eb-4.8.1-2021b.yml b/eessi-2023.06-eb-4.8.1-2021b.yml index d8a7caff2e..6ee44926ba 100644 --- a/eessi-2023.06-eb-4.8.1-2021b.yml +++ b/eessi-2023.06-eb-4.8.1-2021b.yml @@ -12,4 +12,4 @@ easyconfigs: - LAMMPS-23Jun2022-foss-2021b-kokkos.eb: # TBB and ScaFaCos are optional dependencies when building on Intel arch options: - from-pr: 19164 + from-pr: 19246 From c558a45966cec53d86e4f5a7f5331451c2a19e04 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Sat, 18 Nov 2023 10:23:21 +0100 Subject: [PATCH 245/698] add gnuplot explicitly (dep for OpenFOAM), to trigger re-install after removing Lua from filtered dependencies in EasyBuild configuration --- eessi-2023.06-eb-4.8.0-2021b.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/eessi-2023.06-eb-4.8.0-2021b.yml b/eessi-2023.06-eb-4.8.0-2021b.yml index 477ba6320c..9524dd01df 100644 --- a/eessi-2023.06-eb-4.8.0-2021b.yml +++ b/eessi-2023.06-eb-4.8.0-2021b.yml @@ -4,4 +4,5 @@ easyconfigs: # see https://github.com/easybuilders/easybuild-easyconfigs/pull/18746 options: from-pr: 18746 + - gnuplot-5.4.2-GCCcore-11.2.0.eb - OpenFOAM-v2112-foss-2021b.eb From 73097a32ea0956644adc209ba2097a69340f82e2 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Sat, 18 Nov 2023 11:25:21 +0100 Subject: [PATCH 246/698] remove filter-deps for AOFlagger, since Lua is no longer filtered in general EasyBuild configuration --- eessi-2023.06-eb-4.8.2-2022a.yml | 21 --------------------- 1 file changed, 21 deletions(-) diff --git a/eessi-2023.06-eb-4.8.2-2022a.yml b/eessi-2023.06-eb-4.8.2-2022a.yml index bab796db2b..9921bad045 100644 --- a/eessi-2023.06-eb-4.8.2-2022a.yml +++ b/eessi-2023.06-eb-4.8.2-2022a.yml @@ -5,27 +5,6 @@ easyconfigs: - AOFlagger-3.4.0-foss-2022a: options: from-pr: 19119 - # Exclude Lua from `filter-deps` as the compat layer version is too old for the software - filter-deps: - - Autoconf - - Automake - - Autotools - - binutils - - bzip2 - - DBus - - flex - - gettext - - gperf - - help2man - - intltool - - libreadline - - libtool - - ncurses - - M4 - - makeinfo - - util-linux - - XZ - - zlib - EveryBeam-0.5.2-foss-2022a: options: from-pr: 19119 From f1ab7f23fbc3bbfa0178c961d8b70248f60db3b3 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Sat, 18 Nov 2023 12:19:18 +0100 Subject: [PATCH 247/698] install gnuplot via easyconfig PR that fixing linking error to Lua dependency --- eessi-2023.06-eb-4.8.0-2021b.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/eessi-2023.06-eb-4.8.0-2021b.yml b/eessi-2023.06-eb-4.8.0-2021b.yml index 9524dd01df..a2562a4ed1 100644 --- a/eessi-2023.06-eb-4.8.0-2021b.yml +++ b/eessi-2023.06-eb-4.8.0-2021b.yml @@ -4,5 +4,9 @@ easyconfigs: # see https://github.com/easybuilders/easybuild-easyconfigs/pull/18746 options: from-pr: 18746 - - gnuplot-5.4.2-GCCcore-11.2.0.eb + - gnuplot-5.4.2-GCCcore-11.2.0.eb: + # make sure that Lua dependency is correctly picked up, + # see https://github.com/easybuilders/easybuild-easyconfigs/pull/19261 + options: + from-pr: 19261 - OpenFOAM-v2112-foss-2021b.eb From 7c679a03000d5542afde8cf1b34fa6db6335f1ec Mon Sep 17 00:00:00 2001 From: lara Date: Mon, 20 Nov 2023 11:22:24 +0100 Subject: [PATCH 248/698] Make Pillow sysroot aware --- eessi-2023.06-eb-4.8.2-2021b.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/eessi-2023.06-eb-4.8.2-2021b.yml b/eessi-2023.06-eb-4.8.2-2021b.yml index 746f8df05f..00c02adf91 100644 --- a/eessi-2023.06-eb-4.8.2-2021b.yml +++ b/eessi-2023.06-eb-4.8.2-2021b.yml @@ -1,2 +1,6 @@ easyconfigs: + - Pillow-8.3.2-GCCcore-11.2.0.eb: + # avoid that hardcoded paths like /usr/include are used in build commands + options: + from-pr: 19226 - matplotlib-3.4.3-foss-2021b.eb From d451d0622711f7d1900ece73e03596b99e2ffa5e Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 24 Nov 2023 22:19:11 +0100 Subject: [PATCH 249/698] update init scripts for software.eessi.io (+ drop 'pilot' terminology) --- init/Magic_Castle/bash | 4 ++-- .../{eessi_pilot_python3 => eessi_python3} | 8 ++++---- init/bash | 6 +++--- init/eessi_defaults | 7 +++++-- init/eessi_environment_variables | 10 ++++++---- init/minimal_eessi_env | 4 ++-- 6 files changed, 22 insertions(+), 17 deletions(-) rename init/Magic_Castle/{eessi_pilot_python3 => eessi_python3} (73%) diff --git a/init/Magic_Castle/bash b/init/Magic_Castle/bash index 85e4d54241..dbe1772d3a 100644 --- a/init/Magic_Castle/bash +++ b/init/Magic_Castle/bash @@ -6,7 +6,7 @@ EESSI_SILENT=1 source $(dirname "$BASH_SOURCE")/../eessi_environment_variables # Don't change the default prompt -# export PS1="[EESSI pilot $EESSI_PILOT_VERSION] $ " +# export PS1="[EESSI $EESSI_VERSION] $ " # Provide a clean MODULEPATH export MODULEPATH_ROOT=$EESSI_MODULEPATH @@ -36,4 +36,4 @@ else module reload fi -echo "Environment set up to use EESSI pilot software stack (${EESSI_PILOT_VERSION}), have fun!" +echo "Environment set up to use EESSI (${EESSI_VERSION}), have fun!" diff --git a/init/Magic_Castle/eessi_pilot_python3 b/init/Magic_Castle/eessi_python3 similarity index 73% rename from init/Magic_Castle/eessi_pilot_python3 rename to init/Magic_Castle/eessi_python3 index a762ac7b84..b2f7fd4d66 100755 --- a/init/Magic_Castle/eessi_pilot_python3 +++ b/init/Magic_Castle/eessi_python3 @@ -12,10 +12,10 @@ export EESSI_SILENT=1 # for MacOS due to the use of `readlink`) source $(dirname "$(readlink -f "$BASH_SOURCE")")/../eessi_environment_variables -eessi_pilot_python=$(ls ${EESSI_SOFTWARE_PATH}/software/Python/3*GCCcore*/bin/python | sed 1q) -if [ -f "$eessi_pilot_python" ]; then - $eessi_pilot_python "$@" +eessi_python=$(ls ${EESSI_SOFTWARE_PATH}/software/Python/3*GCCcore*/bin/python | sed 1q) +if [ -f "$eessi_python" ]; then + $eessi_python "$@" else - echo "ERROR: No EESSI pilot python 3 available." + echo "ERROR: No EESSI Python 3 available." false fi diff --git a/init/bash b/init/bash index ea605db0b5..84fe783bce 100644 --- a/init/bash +++ b/init/bash @@ -13,7 +13,7 @@ source $(dirname "$BASH_SOURCE")/eessi_environment_variables # only continue if setting EESSI environment variables worked fine if [ $? -eq 0 ]; then - export PS1="[EESSI pilot $EESSI_PILOT_VERSION] $ " + export PS1="[EESSI $EESSI_VERSION] $ " # add location of commands provided by compat layer to $PATH; # see https://github.com/EESSI/software-layer/issues/52 @@ -28,12 +28,12 @@ if [ $? -eq 0 ]; then module use $EESSI_MODULEPATH #echo >> $output - #echo "*** Known problems in the ${EESSI_PILOT_VERSION} pilot software stack ***" >> $output + #echo "*** Known problems in the ${EESSI_VERSION} software stack ***" >> $output #echo >> $output #echo "1) ..." >> $output #echo >> $output #echo >> $output - echo "Environment set up to use EESSI pilot software stack, have fun!" >> $output + echo "Environment set up to use EESSI (${EESSI_VERSION}), have fun!" fi diff --git a/init/eessi_defaults b/init/eessi_defaults index 0143dc38ab..d1779a36ae 100644 --- a/init/eessi_defaults +++ b/init/eessi_defaults @@ -8,5 +8,8 @@ # license: GPLv2 # -export EESSI_CVMFS_REPO="${EESSI_CVMFS_REPO_OVERRIDE:=/cvmfs/pilot.eessi-hpc.org}" -export EESSI_PILOT_VERSION="${EESSI_PILOT_VERSION_OVERRIDE:=2023.06}" +export EESSI_CVMFS_REPO="${EESSI_CVMFS_REPO_OVERRIDE:=/cvmfs/software.eessi.io}" +export EESSI_VERSION="${EESSI_VERSION_OVERRIDE:=2023.06}" +# use archdetect by default, unless otherwise specified +export EESSI_USE_ARCHDETECT="${EESSI_USE_ARCHDETECT:=1}" +export EESSI_USE_ARCHSPEC="${EESSI_USE_ARCHSPEC:=0}" diff --git a/init/eessi_environment_variables b/init/eessi_environment_variables index 10ac1926f4..42f4b6b76a 100644 --- a/init/eessi_environment_variables +++ b/init/eessi_environment_variables @@ -15,11 +15,11 @@ function error() { false } -# set up minimal environment: $EESSI_PREFIX, $EESSI_PILOT_VERSION, $EESSI_OS_TYPE, $EESSI_CPU_FAMILY, $EPREFIX +# set up minimal environment: $EESSI_PREFIX, $EESSI_VERSION, $EESSI_OS_TYPE, $EESSI_CPU_FAMILY, $EPREFIX source $EESSI_INIT_DIR_PATH/minimal_eessi_env if [ -d $EESSI_PREFIX ]; then - echo "Found EESSI pilot repo @ $EESSI_PREFIX!" >> $output + echo "Found EESSI repo @ $EESSI_PREFIX!" >> $output export EESSI_EPREFIX=$EPREFIX if [ -d $EESSI_EPREFIX ]; then @@ -29,11 +29,13 @@ if [ -d $EESSI_PREFIX ]; then # if archdetect is enabled, use internal code export EESSI_SOFTWARE_SUBDIR=$(${EESSI_INIT_DIR_PATH}/eessi_archdetect.sh cpupath) echo "archdetect says ${EESSI_SOFTWARE_SUBDIR}" >> $output - else + elif [ "$EESSI_USE_ARCHSPEC" == "1" ]; then # note: eessi_software_subdir_for_host.py will pick up value from $EESSI_SOFTWARE_SUBDIR_OVERRIDE if it's defined! export EESSI_EPREFIX_PYTHON=$EESSI_EPREFIX/usr/bin/python3 export EESSI_SOFTWARE_SUBDIR=$($EESSI_EPREFIX_PYTHON ${EESSI_INIT_DIR_PATH}/eessi_software_subdir_for_host.py $EESSI_PREFIX) echo "archspec says ${EESSI_SOFTWARE_SUBDIR}" >> $output + else + error "Don't know how to detect host CPU, giving up!" fi if [ ! -z $EESSI_SOFTWARE_SUBDIR ]; then @@ -82,5 +84,5 @@ if [ -d $EESSI_PREFIX ]; then error "Compatibility layer directory $EESSI_EPREFIX not found!" fi else - error "EESSI pilot repository at $EESSI_PREFIX not found!" + error "EESSI repository at $EESSI_PREFIX not found!" fi diff --git a/init/minimal_eessi_env b/init/minimal_eessi_env index b7cb7c5e9e..5b3562068d 100644 --- a/init/minimal_eessi_env +++ b/init/minimal_eessi_env @@ -4,11 +4,11 @@ # $BASH_SOURCE points to correct path, see also http://mywiki.wooledge.org/BashFAQ/028 EESSI_INIT_DIR_PATH=$(dirname $(realpath $BASH_SOURCE)) -# set up defaults: EESSI_CVMFS_REPO, EESSI_PILOT_VERSION +# set up defaults: EESSI_CVMFS_REPO, EESSI_VERSION # script takes *_OVERRIDEs into account source ${EESSI_INIT_DIR_PATH}/eessi_defaults -export EESSI_PREFIX=$EESSI_CVMFS_REPO/versions/$EESSI_PILOT_VERSION +export EESSI_PREFIX=$EESSI_CVMFS_REPO/versions/$EESSI_VERSION if [[ $(uname -s) == 'Linux' ]]; then export EESSI_OS_TYPE='linux' From cf6459fe6c978c885417ec489c485dcfe14eb3ab Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 24 Nov 2023 22:23:55 +0100 Subject: [PATCH 250/698] also update README for software.eessi.io --- README.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index e24de45b0e..ab73ad7579 100644 --- a/README.md +++ b/README.md @@ -1,22 +1,22 @@ # Software layer -The software layer of the EESSI project uses [EasyBuild](https://easybuild.readthedocs.io), [Lmod](https://lmod.readthedocs.io) and [archspec](https://archspec.readthedocs.io). +The software layer of the EESSI project uses [EasyBuild](https://docs.easybuild.io), [Lmod](https://lmod.readthedocs.io) and [archspec](https://archspec.readthedocs.io). -See also https://eessi.github.io/docs/software_layer. +See also https://www.eessi.io/docs/software_layer . ## Pilot software stack You can set up your environment by sourcing the init script: ``` -$ source /cvmfs/pilot.eessi-hpc.org/versions/2023.06/init/bash -Found EESSI pilot repo @ /cvmfs/pilot.eessi-hpc.org/versions/2023.06! +$ source /cvmfs/software.eessi.io/versions/2023.06/init/bash +Found EESSI repo @ /cvmfs/software.eessi.io/versions/2023.06! Derived subdirectory for software layer: x86_64/intel/haswell -Using x86_64/intel/haswell subdirectory for software layer (HARDCODED) +Using x86_64/intel/haswell subdirectory for software layer Initializing Lmod... -Prepending /cvmfs/pilot.eessi-hpc.org/versions/2023.06/software/x86_64/intel/haswell/modules/all to $MODULEPATH... -Environment set up to use EESSI pilot software stack, have fun! -[EESSI pilot 2023.06] $ +Prepending /cvmfs/software.eessi.io/versions/2023.06/software/x86_64/intel/haswell/modules/all to $MODULEPATH... +Environment set up to use EESSI (2023.06), have fun! +[EESSI 2023.06] $ ``` ### Accessing EESSI via a container From 1abade7c24f2bb9077062f4c861619a32f6d2c39 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 24 Nov 2023 22:55:08 +0100 Subject: [PATCH 251/698] update install script to only consider easystack files in easystacks/*, which helps to pass tests in CI --- EESSI-pilot-install-software.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/EESSI-pilot-install-software.sh b/EESSI-pilot-install-software.sh index 9586abde1d..2dc9d2b325 100755 --- a/EESSI-pilot-install-software.sh +++ b/EESSI-pilot-install-software.sh @@ -190,7 +190,7 @@ fi pr_diff=$(ls [0-9]*.diff | head -1) # use PR patch file to determine in which easystack files stuff was added -for easystack_file in $(cat ${pr_diff} | grep '^+++' | cut -f2 -d' ' | sed 's@^[a-z]/@@g' | grep '^eessi.*yml$' | egrep -v 'known-issues|missing'); do +for easystack_file in $(cat ${pr_diff} | grep '^+++' | cut -f2 -d' ' | sed 's@^[a-z]/@@g' | grep '^easystacks/.*yml$' | egrep -v 'known-issues|missing'); do echo -e "Processing easystack file ${easystack_file}...\n\n" From ca7db1551d0c933ba241622b8c141a2ab42eda20 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 24 Nov 2023 23:09:01 +0100 Subject: [PATCH 252/698] fix CI for README --- .github/workflows/tests_readme.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/tests_readme.yml b/.github/workflows/tests_readme.yml index ac906125ab..d229879f67 100644 --- a/.github/workflows/tests_readme.yml +++ b/.github/workflows/tests_readme.yml @@ -19,10 +19,10 @@ jobs: - name: Check out software-layer repository uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # v3.1.0 - - name: verify if README.md is consistent with EESSI_PILOT_VERSION from init/eessi_defaults + - name: verify if README.md is consistent with EESSI_VERSION from init/eessi_defaults run: | source init/eessi_defaults - grep "${EESSI_PILOT_VERSION}" README.md + grep "${EESSI_VERSION}" README.md - name: verify if README.md is consistent with EESSI_CVMFS_REPO from init/eessi_defaults run: | From ad0a5d9c2d26b08484a9ceeb3e27e7fb487b8141 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Sat, 25 Nov 2023 09:59:27 +0100 Subject: [PATCH 253/698] update script to create init tarball for software.eessi.io --- create_directory_tarballs.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/create_directory_tarballs.sh b/create_directory_tarballs.sh index 4465465082..0270719a73 100755 --- a/create_directory_tarballs.sh +++ b/create_directory_tarballs.sh @@ -1,7 +1,5 @@ #!/bin/bash -SOFTWARE_LAYER_TARBALL_URL=https://github.com/EESSI/software-layer/tarball/2023.06 - set -eo pipefail if [ $# -ne 1 ]; then @@ -11,6 +9,8 @@ fi version=$1 +SOFTWARE_LAYER_TARBALL_URL="https://github.com/EESSI/software-layer/tarball/${version}-software.eessi.io" + TOPDIR=$(dirname $(realpath $0)) source $TOPDIR/scripts/utils.sh @@ -28,9 +28,9 @@ mkdir "${tartmp}/${version}" tarname="eessi-${version}-init-$(date +%s).tar.gz" curl -Ls ${SOFTWARE_LAYER_TARBALL_URL} | tar xzf - -C "${tartmp}/${version}" --strip-components=1 --no-wildcards-match-slash --wildcards '*/init/' source "${tartmp}/${version}/init/minimal_eessi_env" -if [ "${EESSI_PILOT_VERSION}" != "${version}" ] +if [ "${EESSI_VERSION}" != "${version}" ] then - fatal_error "Specified version ${version} does not match version ${EESSI_PILOT_VERSION} in the init files!" + fatal_error "Specified version ${version} does not match version ${EESSI_VERSION} in the init files!" fi tar czf "${tarname}" -C "${tartmp}" "${version}" rm -rf "${tartmp}" From 753296feba5c477a1e90dad84679c0f1775bda27 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Sat, 25 Nov 2023 14:27:06 +0100 Subject: [PATCH 254/698] update CI workflow for checking for missing installations in /cvmfs/software.eessi.io/versions/2023.06 --- ...st_eessi.yml => test-software.eessi.io.yml} | 18 +++++++++--------- check_missing_installations.sh | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) rename .github/workflows/{test_eessi.yml => test-software.eessi.io.yml} (80%) diff --git a/.github/workflows/test_eessi.yml b/.github/workflows/test-software.eessi.io.yml similarity index 80% rename from .github/workflows/test_eessi.yml rename to .github/workflows/test-software.eessi.io.yml index 6dfd78e428..86ccbdb663 100644 --- a/.github/workflows/test_eessi.yml +++ b/.github/workflows/test-software.eessi.io.yml @@ -1,11 +1,11 @@ # documentation: https://help.github.com/en/articles/workflow-syntax-for-github-actions -name: Tests relying on having EESSI pilot repo mounted +name: Check for missing software installations in software.eessi.io on: [push, pull_request, workflow_dispatch] permissions: contents: read # to fetch code (actions/checkout) jobs: pilot: - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 strategy: fail-fast: false matrix: @@ -29,19 +29,19 @@ jobs: with: cvmfs_config_package: https://github.com/EESSI/filesystem-layer/releases/download/latest/cvmfs-config-eessi_latest_all.deb cvmfs_http_proxy: DIRECT - cvmfs_repositories: pilot.eessi-hpc.org + cvmfs_repositories: software.eessi.io - name: Test check_missing_installations.sh script run: | - source /cvmfs/pilot.eessi-hpc.org/versions/${{matrix.EESSI_VERSION}}/init/bash + source /cvmfs/software.eessi.io/versions/${{matrix.EESSI_VERSION}}/init/bash module load EasyBuild eb --version - export EESSI_PREFIX=/cvmfs/pilot.eessi-hpc.org/versions/${{matrix.EESSI_VERSION}} + export EESSI_PREFIX=/cvmfs/software.eessi.io/versions/${{matrix.EESSI_VERSION}} export EESSI_OS_TYPE=linux export EESSI_SOFTWARE_SUBDIR=${{matrix.EESSI_SOFTWARE_SUBDIR}} env | grep ^EESSI | sort - echo "just run check_missing_installations.sh (should use eessi-${{matrix.EESSI_VERSION}}.yml)" - for easystack_file in $(ls eessi-${{matrix.EESSI_VERSION}}-eb-*.yml); do + echo "just run check_missing_installations.sh (should use easystacks/software.eessi.io/${{matrix.EESSI_VERSION}}/eessi-${{matrix.EESSI_VERSION}}-*.yml)" + for easystack_file in $(ls easystacks/software.eessi.io/${{matrix.EESSI_VERSION}}/eessi-${{matrix.EESSI_VERSION}}-eb-*.yml); do echo "check missing installations for ${easystack_file}..." ./check_missing_installations.sh ${easystack_file} ec=$? @@ -50,10 +50,10 @@ jobs: - name: Test check_missing_installations.sh with missing package (GCC/8.3.0) run: | - source /cvmfs/pilot.eessi-hpc.org/versions/${{matrix.EESSI_VERSION}}/init/bash + source /cvmfs/software.eessi.io/versions/${{matrix.EESSI_VERSION}}/init/bash module load EasyBuild eb --version - export EESSI_PREFIX=/cvmfs/pilot.eessi-hpc.org/versions/${{matrix.EESSI_VERSION}} + export EESSI_PREFIX=/cvmfs/software.eessi.io/versions/${{matrix.EESSI_VERSION}} export EESSI_OS_TYPE=linux export EESSI_SOFTWARE_SUBDIR=${{matrix.EESSI_SOFTWARE_SUBDIR}} env | grep ^EESSI | sort diff --git a/check_missing_installations.sh b/check_missing_installations.sh index e927f14701..5ea7c5a4f5 100755 --- a/check_missing_installations.sh +++ b/check_missing_installations.sh @@ -1,6 +1,6 @@ #!/bin/bash # -# Script to check for missing installations in EESSI pilot software stack (version 2023.06) +# Script to check for missing installations in EESSI software stack # # author: Kenneth Hoste (@boegel) # author: Thomas Roeblitz (@trz42) From a095a9d02418b42f882d5c468f2eb6fda8cf3e5e Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Sat, 25 Nov 2023 14:36:59 +0100 Subject: [PATCH 255/698] get rid of 'pilot' terminology in scripts --- .github/workflows/tests_scripts.yml | 8 ++++---- ...l-software.sh => EESSI-install-software.sh | 6 +++--- bot/build.sh | 16 +++++++-------- bot/inspect.sh | 20 +++++++++---------- install_software_layer.sh | 2 +- run_in_compat_layer_env.sh | 12 +++++------ 6 files changed, 32 insertions(+), 32 deletions(-) rename EESSI-pilot-install-software.sh => EESSI-install-software.sh (98%) diff --git a/.github/workflows/tests_scripts.yml b/.github/workflows/tests_scripts.yml index 74e2ebcffe..589c1458e9 100644 --- a/.github/workflows/tests_scripts.yml +++ b/.github/workflows/tests_scripts.yml @@ -5,7 +5,7 @@ on: paths: - build_container.sh - create_directory_tarballs.sh - - EESSI-pilot-install-software.sh + - EESSI-install-software.sh - install_software_layer.sh - load_easybuild_module.sh - run_in_compat_layer_env.sh @@ -16,7 +16,7 @@ on: paths: - build_container.sh - create_directory_tarballs.sh - - EESSI-pilot-install-software.sh + - EESSI-install-software.sh - install_software_layer.sh - load_easybuild_module.sh - run_in_compat_layer_env.sh @@ -40,7 +40,7 @@ jobs: # bind current directory into container as /software-layer export SINGULARITY_BIND="${PWD}:/software-layer" - # can't test with EasyBuild versions older than v4.5.2 when using EESSI pilot 2023.06, + # can't test with EasyBuild versions older than v4.5.2 when using EESSI 2023.06, # since Python in compat layer is Python 3.11.x; # testing with a single EasyBuild version takes a while in GitHub Actions, so stick to a single sensible version for EB_VERSION in '4.6.0'; do @@ -84,7 +84,7 @@ jobs: cp -a * /tmp/ cd /tmp # force using x86_64/generic, to avoid triggering an installation from scratch - sed -i "s@./EESSI-pilot-install-software.sh@\"export EESSI_SOFTWARE_SUBDIR_OVERRIDE='x86_64/generic'; ./EESSI-pilot-install-software.sh\"@g" install_software_layer.sh + sed -i "s@./EESSI-install-software.sh@\"export EESSI_SOFTWARE_SUBDIR_OVERRIDE='x86_64/generic'; ./EESSI-install-software.sh\"@g" install_software_layer.sh ./build_container.sh run /tmp/$USER/EESSI /tmp/install_software_layer.sh - name: test create_directory_tarballs.sh script diff --git a/EESSI-pilot-install-software.sh b/EESSI-install-software.sh similarity index 98% rename from EESSI-pilot-install-software.sh rename to EESSI-install-software.sh index 2dc9d2b325..f6087b3cfe 100755 --- a/EESSI-pilot-install-software.sh +++ b/EESSI-install-software.sh @@ -1,6 +1,6 @@ #!/bin/bash # -# Script to install EESSI pilot software stack (version set through init/eessi_defaults) +# Script to install EESSI software stack (version set through init/eessi_defaults) # see example parsing of command line arguments at # https://wiki.bash-hackers.org/scripting/posparams#using_a_while_loop @@ -172,8 +172,6 @@ if [ ! -z "${shared_fs_path}" ]; then export EASYBUILD_SOURCEPATH=${shared_eb_sourcepath}:${EASYBUILD_SOURCEPATH} fi -${EB} --show-config - echo ">> Setting up \$MODULEPATH..." # make sure no modules are loaded module --force purge @@ -200,6 +198,8 @@ for easystack_file in $(cat ${pr_diff} | grep '^+++' | cut -f2 -d' ' | sed 's@^[ # load EasyBuild module (will be installed if it's not available yet) source ${TOPDIR}/load_easybuild_module.sh ${eb_version} + ${EB} --show-config + echo_green "All set, let's start installing some software with EasyBuild v${eb_version} in ${EASYBUILD_INSTALLPATH}..." if [ -f ${easystack_file} ]; then diff --git a/bot/build.sh b/bot/build.sh index cf9d69b65f..4af217628e 100755 --- a/bot/build.sh +++ b/bot/build.sh @@ -128,12 +128,12 @@ EESSI_REPOS_CFG_DIR_OVERRIDE=$(cfg_get_value "repository" "repos_cfg_dir") export EESSI_REPOS_CFG_DIR_OVERRIDE=${EESSI_REPOS_CFG_DIR_OVERRIDE:-${PWD}/cfg} echo "bot/build.sh: EESSI_REPOS_CFG_DIR_OVERRIDE='${EESSI_REPOS_CFG_DIR_OVERRIDE}'" -# determine pilot version to be used from .repository.repo_version in ${JOB_CFG_FILE} -# here, just set & export EESSI_PILOT_VERSION_OVERRIDE +# determine EESSI version to be used from .repository.repo_version in ${JOB_CFG_FILE} +# here, just set & export EESSI_VERSION_OVERRIDE # next script (eessi_container.sh) makes use of it via sourcing init scripts # (e.g., init/eessi_defaults or init/minimal_eessi_env) -export EESSI_PILOT_VERSION_OVERRIDE=$(cfg_get_value "repository" "repo_version") -echo "bot/build.sh: EESSI_PILOT_VERSION_OVERRIDE='${EESSI_PILOT_VERSION_OVERRIDE}'" +export EESSI_VERSION_OVERRIDE=$(cfg_get_value "repository" "repo_version") +echo "bot/build.sh: EESSI_VERSION_OVERRIDE='${EESSI_VERSION_OVERRIDE}'" # determine CVMFS repo to be used from .repository.repo_name in ${JOB_CFG_FILE} # here, just set EESSI_CVMFS_REPO_OVERRIDE, a bit further down @@ -210,9 +210,9 @@ BUILD_TMPDIR=$(grep ' as tmp directory ' ${build_outerr} | cut -d ' ' -f 2) TARBALL_STEP_ARGS+=("--resume" "${BUILD_TMPDIR}") timestamp=$(date +%s) -# to set EESSI_PILOT_VERSION we need to source init/eessi_defaults now +# to set EESSI_VERSION we need to source init/eessi_defaults now source init/eessi_defaults -export TGZ=$(printf "eessi-%s-software-%s-%s-%d.tar.gz" ${EESSI_PILOT_VERSION} ${EESSI_OS_TYPE} ${EESSI_SOFTWARE_SUBDIR_OVERRIDE//\//-} ${timestamp}) +export TGZ=$(printf "eessi-%s-software-%s-%s-%d.tar.gz" ${EESSI_VERSION} ${EESSI_OS_TYPE} ${EESSI_SOFTWARE_SUBDIR_OVERRIDE//\//-} ${timestamp}) # value of first parameter to create_tarball.sh - TMP_IN_CONTAINER - needs to be # synchronised with setting of TMP_IN_CONTAINER in eessi_container.sh @@ -221,8 +221,8 @@ export TGZ=$(printf "eessi-%s-software-%s-%s-%d.tar.gz" ${EESSI_PILOT_VERSION} $ TMP_IN_CONTAINER=/tmp echo "Executing command to create tarball:" echo "./eessi_container.sh ${COMMON_ARGS[@]} ${TARBALL_STEP_ARGS[@]}" -echo " -- ./create_tarball.sh ${TMP_IN_CONTAINER} ${EESSI_PILOT_VERSION} ${EESSI_SOFTWARE_SUBDIR_OVERRIDE} /eessi_bot_job/${TGZ} 2>&1 | tee -a ${tar_outerr}" +echo " -- ./create_tarball.sh ${TMP_IN_CONTAINER} ${EESSI_VERSION} ${EESSI_SOFTWARE_SUBDIR_OVERRIDE} /eessi_bot_job/${TGZ} 2>&1 | tee -a ${tar_outerr}" ./eessi_container.sh "${COMMON_ARGS[@]}" "${TARBALL_STEP_ARGS[@]}" \ - -- ./create_tarball.sh ${TMP_IN_CONTAINER} ${EESSI_PILOT_VERSION} ${EESSI_SOFTWARE_SUBDIR_OVERRIDE} /eessi_bot_job/${TGZ} 2>&1 | tee -a ${tar_outerr} + -- ./create_tarball.sh ${TMP_IN_CONTAINER} ${EESSI_VERSION} ${EESSI_SOFTWARE_SUBDIR_OVERRIDE} /eessi_bot_job/${TGZ} 2>&1 | tee -a ${tar_outerr} exit 0 diff --git a/bot/inspect.sh b/bot/inspect.sh index a3b88e5017..9d1fa87e1f 100755 --- a/bot/inspect.sh +++ b/bot/inspect.sh @@ -195,12 +195,12 @@ EESSI_REPOS_CFG_DIR_OVERRIDE=$(cfg_get_value "repository" "repos_cfg_dir") export EESSI_REPOS_CFG_DIR_OVERRIDE=${EESSI_REPOS_CFG_DIR_OVERRIDE:-${PWD}/cfg} echo "bot/inspect.sh: EESSI_REPOS_CFG_DIR_OVERRIDE='${EESSI_REPOS_CFG_DIR_OVERRIDE}'" -# determine pilot version to be used from .repository.repo_version in ${JOB_CFG_FILE} -# here, just set & export EESSI_PILOT_VERSION_OVERRIDE +# determine EESSI version to be used from .repository.repo_version in ${JOB_CFG_FILE} +# here, just set & export EESSI_VERSION_OVERRIDE # next script (eessi_container.sh) makes use of it via sourcing init scripts # (e.g., init/eessi_defaults or init/minimal_eessi_env) -export EESSI_PILOT_VERSION_OVERRIDE=$(cfg_get_value "repository" "repo_version") -echo "bot/inspect.sh: EESSI_PILOT_VERSION_OVERRIDE='${EESSI_PILOT_VERSION_OVERRIDE}'" +export EESSI_VERSION_OVERRIDE=$(cfg_get_value "repository" "repo_version") +echo "bot/inspect.sh: EESSI_VERSION_OVERRIDE='${EESSI_VERSION_OVERRIDE}'" # determine CVMFS repo to be used from .repository.repo_name in ${JOB_CFG_FILE} # here, just set EESSI_CVMFS_REPO_OVERRIDE, a bit further down @@ -260,11 +260,11 @@ base_dir=$(dirname $(realpath $0)) # TODO better use script from tarball??? source ${base_dir}/../init/eessi_defaults -if [ -z $EESSI_PILOT_VERSION ]; then - echo "ERROR: \$EESSI_PILOT_VERSION must be set!" >&2 +if [ -z $EESSI_VERSION ]; then + echo "ERROR: \$EESSI_VERSION must be set!" >&2 exit 1 fi -EESSI_COMPAT_LAYER_DIR="${EESSI_CVMFS_REPO}/versions/${EESSI_PILOT_VERSION}/compat/linux/$(uname -m)" +EESSI_COMPAT_LAYER_DIR="${EESSI_CVMFS_REPO}/versions/${EESSI_VERSION}/compat/linux/$(uname -m)" # NOTE The below requires access to the CVMFS repository. We could make a first # test run with a container. For now we skip the test. @@ -295,8 +295,8 @@ fi if [ ! -z ${EESSI_CVMFS_REPO_OVERRIDE} ]; then echo "export EESSI_CVMFS_REPO_OVERRIDE=${EESSI_CVMFS_REPO_OVERRIDE}" >> ${RESUME_SCRIPT} fi -if [ ! -z ${EESSI_PILOT_VERSION_OVERRIDE} ]; then - echo "export EESSI_PILOT_VERSION_OVERRIDE=${EESSI_PILOT_VERSION_OVERRIDE}" >> ${RESUME_SCRIPT} +if [ ! -z ${EESSI_VERSION_OVERRIDE} ]; then + echo "export EESSI_VERSION_OVERRIDE=${EESSI_VERSION_OVERRIDE}" >> ${RESUME_SCRIPT} fi if [ ! -z ${http_proxy} ]; then echo "export http_proxy=${http_proxy}" >> ${RESUME_SCRIPT} @@ -428,7 +428,7 @@ echo "Executing command to start interactive session to inspect build job:" # TODO possibly add information on how to init session after the prefix is # entered, initialization consists of # - environment variable settings (see 'run_in_compat_layer_env.sh') -# - setup steps run in 'EESSI-pilot-install-software.sh' +# - setup steps run in 'EESSI-install-software.sh' # These initializations are combined into a single script that is executed when # the shell in startprefix is started. We set the env variable BASH_ENV here. if [[ -z ${run_in_prefix} ]]; then diff --git a/install_software_layer.sh b/install_software_layer.sh index bf3006a4a0..82ca70b73f 100755 --- a/install_software_layer.sh +++ b/install_software_layer.sh @@ -1,4 +1,4 @@ #!/bin/bash base_dir=$(dirname $(realpath $0)) source ${base_dir}/init/eessi_defaults -./run_in_compat_layer_env.sh ./EESSI-pilot-install-software.sh "$@" +./run_in_compat_layer_env.sh ./EESSI-install-software.sh "$@" diff --git a/run_in_compat_layer_env.sh b/run_in_compat_layer_env.sh index 12688e2aed..f57c4d0749 100755 --- a/run_in_compat_layer_env.sh +++ b/run_in_compat_layer_env.sh @@ -3,11 +3,11 @@ base_dir=$(dirname $(realpath $0)) source ${base_dir}/init/eessi_defaults -if [ -z $EESSI_PILOT_VERSION ]; then - echo "ERROR: \$EESSI_PILOT_VERSION must be set!" >&2 +if [ -z $EESSI_VERSION ]; then + echo "ERROR: \$EESSI_VERSION must be set!" >&2 exit 1 fi -EESSI_COMPAT_LAYER_DIR="${EESSI_CVMFS_REPO}/versions/${EESSI_PILOT_VERSION}/compat/linux/$(uname -m)" +EESSI_COMPAT_LAYER_DIR="${EESSI_CVMFS_REPO}/versions/${EESSI_VERSION}/compat/linux/$(uname -m)" if [ ! -d ${EESSI_COMPAT_LAYER_DIR} ]; then echo "ERROR: ${EESSI_COMPAT_LAYER_DIR} does not exist!" >&2 exit 1 @@ -23,8 +23,8 @@ fi if [ ! -z ${EESSI_CVMFS_REPO_OVERRIDE} ]; then INPUT="export EESSI_CVMFS_REPO_OVERRIDE=${EESSI_CVMFS_REPO_OVERRIDE}; ${INPUT}" fi -if [ ! -z ${EESSI_PILOT_VERSION_OVERRIDE} ]; then - INPUT="export EESSI_PILOT_VERSION_OVERRIDE=${EESSI_PILOT_VERSION_OVERRIDE}; ${INPUT}" +if [ ! -z ${EESSI_VERSION_OVERRIDE} ]; then + INPUT="export EESSI_VERSION_OVERRIDE=${EESSI_VERSION_OVERRIDE}; ${INPUT}" fi if [ ! -z ${http_proxy} ]; then INPUT="export http_proxy=${http_proxy}; ${INPUT}" @@ -33,5 +33,5 @@ if [ ! -z ${https_proxy} ]; then INPUT="export https_proxy=${https_proxy}; ${INPUT}" fi -echo "Running '${INPUT}' in EESSI (${EESSI_CVMFS_REPO}) ${EESSI_PILOT_VERSION} compatibility layer environment..." +echo "Running '${INPUT}' in EESSI (${EESSI_CVMFS_REPO}) ${EESSI_VERSION} compatibility layer environment..." ${EESSI_COMPAT_LAYER_DIR}/startprefix <<< "${INPUT}" From 50ec01a558c16c91e185fdc96f973e7cb4e6fee4 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Sat, 25 Nov 2023 14:47:48 +0100 Subject: [PATCH 256/698] update eessi_container.sh script for software.eessi.io --- .../workflows/test_eessi_container_script.yml | 16 ++++---- create_tarball.sh | 24 +++++------ eessi_container.sh | 40 ++++++++++--------- 3 files changed, 42 insertions(+), 38 deletions(-) diff --git a/.github/workflows/test_eessi_container_script.yml b/.github/workflows/test_eessi_container_script.yml index 929fb22cec..33122e6ff4 100644 --- a/.github/workflows/test_eessi_container_script.yml +++ b/.github/workflows/test_eessi_container_script.yml @@ -45,7 +45,7 @@ jobs: elif [[ ${{matrix.SCRIPT_TEST}} == 'listrepos_default' ]]; then outfile=out_listrepos.txt ./eessi_container.sh --verbose --list-repos | tee ${outfile} - grep "EESSI-pilot" ${outfile} + grep "EESSI" ${outfile} # test use of --list-repos with custom repos.cfg elif [[ ${{matrix.SCRIPT_TEST}} == 'listrepos_custom' ]]; then @@ -57,7 +57,7 @@ jobs: echo "[EESSI/20HT.TP]" >> cfg/repos.cfg echo "repo_version = 20HT.TP" >> cfg/repos.cfg ./eessi_container.sh --verbose --list-repos | tee ${outfile} - grep "EESSI-pilot" ${outfile} + grep "EESSI" ${outfile} export EESSI_REPOS_CFG_DIR_OVERRIDE=${PWD}/cfg ./eessi_container.sh --verbose --list-repos | tee ${outfile2} @@ -90,15 +90,15 @@ jobs: elif [[ ${{matrix.SCRIPT_TEST}} == 'readwrite' ]]; then outfile=out_readwrite.txt fn="test_${RANDOM}.txt" - echo "touch /cvmfs/pilot.eessi-hpc.org/${fn}" > test_script.sh + echo "touch /cvmfs/software.eessi.io/${fn}" > test_script.sh chmod u+x test_script.sh export SINGULARITY_BIND="$PWD:/test" ./eessi_container.sh --verbose --access rw --mode run /test/test_script.sh > ${outfile} tmpdir=$(grep "\-\-resume" ${outfile} | sed "s/.*--resume \([^']*\).*/\1/g") # note: must use '--access rw' again here, since touched file is in overlay upper dir - ./eessi_container.sh --verbose --resume ${tmpdir} --access rw --mode shell <<< "ls -l /cvmfs/pilot.eessi-hpc.org/${fn}" > ${outfile} - grep "/cvmfs/pilot.eessi-hpc.org/${fn}$" $outfile + ./eessi_container.sh --verbose --resume ${tmpdir} --access rw --mode shell <<< "ls -l /cvmfs/software.eessi.io/${fn}" > ${outfile} + grep "/cvmfs/software.eessi.io/${fn}$" $outfile # test use of --resume elif [[ ${{matrix.SCRIPT_TEST}} == 'resume' ]]; then @@ -120,12 +120,12 @@ jobs: elif [[ ${{matrix.SCRIPT_TEST}} == 'save' ]]; then outfile=out_save.txt fn="test_${RANDOM}.txt" - test_cmd="touch /cvmfs/pilot.eessi-hpc.org/${fn}" + test_cmd="touch /cvmfs/software.eessi.io/${fn}" ./eessi_container.sh --verbose --mode shell --access rw --save test-save.tar <<< "${test_cmd}" 2>&1 | tee ${outfile} rm -f ${outfile} - ./eessi_container.sh --verbose --mode shell --access rw --resume test-save.tar <<< "ls -l /cvmfs/pilot.eessi-hpc.org/${fn}" > ${outfile} - grep "/cvmfs/pilot.eessi-hpc.org/${fn}$" $outfile + ./eessi_container.sh --verbose --mode shell --access rw --resume test-save.tar <<< "ls -l /cvmfs/software.eessi.io/${fn}" > ${outfile} + grep "/cvmfs/software.eessi.io/${fn}$" $outfile tar tfv test-save.tar | grep "overlay-upper/${fn}" diff --git a/create_tarball.sh b/create_tarball.sh index 65f6efc2dc..8510caebf1 100755 --- a/create_tarball.sh +++ b/create_tarball.sh @@ -5,11 +5,11 @@ set -e base_dir=$(dirname $(realpath $0)) if [ $# -ne 4 ]; then - echo "ERROR: Usage: $0 " >&2 + echo "ERROR: Usage: $0 " >&2 exit 1 fi eessi_tmpdir=$1 -pilot_version=$2 +eessi_version=$2 cpu_arch_subdir=$3 target_tgz=$4 @@ -20,7 +20,7 @@ os="linux" source ${base_dir}/init/eessi_defaults cvmfs_repo=${EESSI_CVMFS_REPO} -software_dir="${cvmfs_repo}/versions/${pilot_version}/software/${os}/${cpu_arch_subdir}" +software_dir="${cvmfs_repo}/versions/${eessi_version}/software/${os}/${cpu_arch_subdir}" if [ ! -d ${software_dir} ]; then echo "Software directory ${software_dir} does not exist?!" >&2 exit 2 @@ -28,7 +28,7 @@ fi overlay_upper_dir="${eessi_tmpdir}/overlay-upper" -software_dir_overlay="${overlay_upper_dir}/versions/${pilot_version}/software/${os}/${cpu_arch_subdir}" +software_dir_overlay="${overlay_upper_dir}/versions/${eessi_version}/software/${os}/${cpu_arch_subdir}" if [ ! -d ${software_dir_overlay} ]; then echo "Software directory overlay ${software_dir_overlay} does not exist?!" >&2 exit 3 @@ -40,22 +40,22 @@ echo ">> Collecting list of files/directories to include in tarball via ${PWD}.. files_list=${tmpdir}/files.list.txt module_files_list=${tmpdir}/module_files.list.txt -if [ -d ${pilot_version}/software/${os}/${cpu_arch_subdir}/.lmod ]; then +if [ -d ${eessi_version}/software/${os}/${cpu_arch_subdir}/.lmod ]; then # include Lmod cache and configuration file (lmodrc.lua), # skip whiteout files and backup copies of Lmod cache (spiderT.old.*) - find ${pilot_version}/software/${os}/${cpu_arch_subdir}/.lmod -type f | egrep -v '/\.wh\.|spiderT.old' > ${files_list} + find ${eessi_version}/software/${os}/${cpu_arch_subdir}/.lmod -type f | egrep -v '/\.wh\.|spiderT.old' > ${files_list} fi -if [ -d ${pilot_version}/software/${os}/${cpu_arch_subdir}/modules ]; then +if [ -d ${eessi_version}/software/${os}/${cpu_arch_subdir}/modules ]; then # module files - find ${pilot_version}/software/${os}/${cpu_arch_subdir}/modules -type f | grep -v '/\.wh\.' >> ${files_list} + find ${eessi_version}/software/${os}/${cpu_arch_subdir}/modules -type f | grep -v '/\.wh\.' >> ${files_list} # module symlinks - find ${pilot_version}/software/${os}/${cpu_arch_subdir}/modules -type l | grep -v '/\.wh\.' >> ${files_list} + find ${eessi_version}/software/${os}/${cpu_arch_subdir}/modules -type l | grep -v '/\.wh\.' >> ${files_list} # module files and symlinks - find ${pilot_version}/software/${os}/${cpu_arch_subdir}/modules/all -type f -o -type l \ + find ${eessi_version}/software/${os}/${cpu_arch_subdir}/modules/all -type f -o -type l \ | grep -v '/\.wh\.' | grep -v '/\.modulerc\.lua' | sed -e 's/.lua$//' | sed -e 's@.*/modules/all/@@g' | sort -u \ >> ${module_files_list} fi -if [ -d ${pilot_version}/software/${os}/${cpu_arch_subdir}/software -a -r ${module_files_list} ]; then +if [ -d ${eessi_version}/software/${os}/${cpu_arch_subdir}/software -a -r ${module_files_list} ]; then # installation directories but only those for which module files were created # Note, we assume that module names (as defined by 'PACKAGE_NAME/VERSION.lua' # using EasyBuild's standard module naming scheme) match the name of the @@ -64,7 +64,7 @@ if [ -d ${pilot_version}/software/${os}/${cpu_arch_subdir}/software -a -r ${modu # installation directories), the procedure will likely not work. for package_version in $(cat ${module_files_list}); do echo "handling ${package_version}" - ls -d ${pilot_version}/software/${os}/${cpu_arch_subdir}/software/${package_version} \ + ls -d ${eessi_version}/software/${os}/${cpu_arch_subdir}/software/${package_version} \ | grep -v '/\.wh\.' >> ${files_list} done fi diff --git a/eessi_container.sh b/eessi_container.sh index 48c4653ba9..bf0294c7bf 100755 --- a/eessi_container.sh +++ b/eessi_container.sh @@ -79,7 +79,7 @@ display_help() { echo " -m | --mode MODE - with MODE==shell (launch interactive shell) or" echo " MODE==run (run a script or command) [default: shell]" echo " -r | --repository CFG - configuration file or identifier defining the" - echo " repository to use [default: EESSI-pilot via" + echo " repository to use [default: EESSI via" echo " default container, see --container]" echo " -u | --resume DIR/TGZ - resume a previous run from a directory or tarball," echo " where DIR points to a previously used tmp directory" @@ -111,7 +111,7 @@ VERBOSE=0 STORAGE= LIST_REPOS=0 MODE="shell" -REPOSITORY="EESSI-pilot" +REPOSITORY="EESSI" RESUME= SAVE= HTTP_PROXY=${http_proxy:-} @@ -194,7 +194,7 @@ set -- "${POSITIONAL_ARGS[@]}" if [[ ${LIST_REPOS} -eq 1 ]]; then echo "Listing available repositories with format 'name [source]':" - echo " EESSI-pilot [default]" + echo " EESSI [default]" if [[ -r ${EESSI_REPOS_CFG_FILE} ]]; then cfg_load ${EESSI_REPOS_CFG_FILE} sections=$(cfg_sections) @@ -226,7 +226,7 @@ fi # TODO (arg -r|--repository) check if repository is known # REPOSITORY_ERROR_EXITCODE -if [[ ! -z "${REPOSITORY}" && "${REPOSITORY}" != "EESSI-pilot" && ! -r ${EESSI_REPOS_CFG_FILE} ]]; then +if [[ ! -z "${REPOSITORY}" && "${REPOSITORY}" != "EESSI" && ! -r ${EESSI_REPOS_CFG_FILE} ]]; then fatal_error "arg '--repository ${REPOSITORY}' requires a cfg file at '${EESSI_REPOS_CFG_FILE}'" "${REPOSITORY_ERROR_EXITCODE}" fi @@ -403,7 +403,7 @@ BIND_PATHS="${BIND_PATHS},${EESSI_TMPDIR}:${TMP_IN_CONTAINER}" # set up repository config (always create directory repos_cfg and populate it with info when # arg -r|--repository is used) mkdir -p ${EESSI_TMPDIR}/repos_cfg -if [[ "${REPOSITORY}" == "EESSI-pilot" ]]; then +if [[ "${REPOSITORY}" == "EESSI" ]]; then # need to source defaults as late as possible (see other sourcing below) source ${TOPDIR}/init/eessi_defaults @@ -427,7 +427,7 @@ else # map { local_filepath -> container_filepath } # # repo_name_domain is the domain part of the repo_name, e.g., - # eessi-hpc.org for pilot.eessi-hpc.org + # eessi.io for software.eessi.io # # where config bundle includes the files (-> target location in container) # - default.local -> /etc/cvmfs/default.local @@ -479,7 +479,7 @@ else target=${cfg_file_map[${src}]} BIND_PATHS="${BIND_PATHS},${EESSI_TMPDIR}/repos_cfg/${src}:${target}" done - export EESSI_PILOT_VERSION_OVERRIDE=${repo_version} + export EESSI_VERSION_OVERRIDE=${repo_version} export EESSI_CVMFS_REPO_OVERRIDE="/cvmfs/${repo_name}" # need to source defaults as late as possible (after *_OVERRIDEs) source ${TOPDIR}/init/eessi_defaults @@ -513,10 +513,14 @@ fi # 4. set up vars and dirs specific to a scenario declare -a EESSI_FUSE_MOUNTS=() + +# always mount cvmfs-config repo (to get access to software.eessi.io) +EESSI_FUSE_MOUNTS+=("--fusemount" "container:cvmfs2 cvmfs-config.cern.ch /cvmfs/cvmfs-config.cern.ch") + if [[ "${ACCESS}" == "ro" ]]; then - export EESSI_PILOT_READONLY="container:cvmfs2 ${repo_name} /cvmfs/${repo_name}" + export EESSI_READONLY="container:cvmfs2 ${repo_name} /cvmfs/${repo_name}" - EESSI_FUSE_MOUNTS+=("--fusemount" "${EESSI_PILOT_READONLY}") + EESSI_FUSE_MOUNTS+=("--fusemount" "${EESSI_READONLY}") export EESSI_FUSE_MOUNTS fi @@ -525,18 +529,18 @@ if [[ "${ACCESS}" == "rw" ]]; then mkdir -p ${EESSI_TMPDIR}/overlay-work # set environment variables for fuse mounts in Singularity container - export EESSI_PILOT_READONLY="container:cvmfs2 ${repo_name} /cvmfs_ro/${repo_name}" + export EESSI_READONLY="container:cvmfs2 ${repo_name} /cvmfs_ro/${repo_name}" - EESSI_FUSE_MOUNTS+=("--fusemount" "${EESSI_PILOT_READONLY}") + EESSI_FUSE_MOUNTS+=("--fusemount" "${EESSI_READONLY}") - EESSI_PILOT_WRITABLE_OVERLAY="container:fuse-overlayfs" - EESSI_PILOT_WRITABLE_OVERLAY+=" -o lowerdir=/cvmfs_ro/${repo_name}" - EESSI_PILOT_WRITABLE_OVERLAY+=" -o upperdir=${TMP_IN_CONTAINER}/overlay-upper" - EESSI_PILOT_WRITABLE_OVERLAY+=" -o workdir=${TMP_IN_CONTAINER}/overlay-work" - EESSI_PILOT_WRITABLE_OVERLAY+=" ${EESSI_CVMFS_REPO}" - export EESSI_PILOT_WRITABLE_OVERLAY + EESSI_WRITABLE_OVERLAY="container:fuse-overlayfs" + EESSI_WRITABLE_OVERLAY+=" -o lowerdir=/cvmfs_ro/${repo_name}" + EESSI_WRITABLE_OVERLAY+=" -o upperdir=${TMP_IN_CONTAINER}/overlay-upper" + EESSI_WRITABLE_OVERLAY+=" -o workdir=${TMP_IN_CONTAINER}/overlay-work" + EESSI_WRITABLE_OVERLAY+=" ${EESSI_CVMFS_REPO}" + export EESSI_WRITABLE_OVERLAY - EESSI_FUSE_MOUNTS+=("--fusemount" "${EESSI_PILOT_WRITABLE_OVERLAY}") + EESSI_FUSE_MOUNTS+=("--fusemount" "${EESSI_WRITABLE_OVERLAY}") export EESSI_FUSE_MOUNTS fi From ad6604fd0cf8bd6bd3ded84ec69d041e194332b5 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Sat, 25 Nov 2023 14:57:28 +0100 Subject: [PATCH 257/698] remove easystack files used for pilot.eessi-hpc.org --- eessi-2021.06.yml | 53 ------------------------ eessi-2021.12.yml | 69 ------------------------------- eessi-2023.06-eb-4.7.2-2021a.yml | 26 ------------ eessi-2023.06-eb-4.7.2-2021b.yml | 17 -------- eessi-2023.06-eb-4.7.2-2022a.yml | 3 -- eessi-2023.06-eb-4.7.2-2022b.yml | 13 ------ eessi-2023.06-eb-4.7.2-system.yml | 7 ---- eessi-2023.06-eb-4.8.0-2021a.yml | 2 - eessi-2023.06-eb-4.8.0-2021b.yml | 12 ------ eessi-2023.06-eb-4.8.0-system.yml | 10 ----- eessi-2023.06-eb-4.8.1-2021a.yml | 7 ---- eessi-2023.06-eb-4.8.1-2021b.yml | 15 ------- eessi-2023.06-eb-4.8.1-2022a.yml | 12 ------ eessi-2023.06-eb-4.8.1-2023a.yml | 11 ----- eessi-2023.06-eb-4.8.1-system.yml | 9 ---- eessi-2023.06-eb-4.8.2-2021b.yml | 6 --- eessi-2023.06-eb-4.8.2-2022a.yml | 21 ---------- eessi-2023.06-known-issues.yml | 30 -------------- 18 files changed, 323 deletions(-) delete mode 100644 eessi-2021.06.yml delete mode 100644 eessi-2021.12.yml delete mode 100644 eessi-2023.06-eb-4.7.2-2021a.yml delete mode 100644 eessi-2023.06-eb-4.7.2-2021b.yml delete mode 100644 eessi-2023.06-eb-4.7.2-2022a.yml delete mode 100644 eessi-2023.06-eb-4.7.2-2022b.yml delete mode 100644 eessi-2023.06-eb-4.7.2-system.yml delete mode 100644 eessi-2023.06-eb-4.8.0-2021a.yml delete mode 100644 eessi-2023.06-eb-4.8.0-2021b.yml delete mode 100644 eessi-2023.06-eb-4.8.0-system.yml delete mode 100644 eessi-2023.06-eb-4.8.1-2021a.yml delete mode 100644 eessi-2023.06-eb-4.8.1-2021b.yml delete mode 100644 eessi-2023.06-eb-4.8.1-2022a.yml delete mode 100644 eessi-2023.06-eb-4.8.1-2023a.yml delete mode 100644 eessi-2023.06-eb-4.8.1-system.yml delete mode 100644 eessi-2023.06-eb-4.8.2-2021b.yml delete mode 100644 eessi-2023.06-eb-4.8.2-2022a.yml delete mode 100644 eessi-2023.06-known-issues.yml diff --git a/eessi-2021.06.yml b/eessi-2021.06.yml deleted file mode 100644 index 3587827746..0000000000 --- a/eessi-2021.06.yml +++ /dev/null @@ -1,53 +0,0 @@ -software: - R-bundle-Bioconductor: - toolchains: - foss-2020a: - versions: - '3.11': - versionsuffix: -R-4.0.0 - GROMACS: - toolchains: - foss-2020a: - versions: - '2020.1': - versionsuffix: -Python-3.8.2 - '2020.4': - versionsuffix: -Python-3.8.2 - Horovod: - toolchains: - foss-2020a: - versions: - '0.21.3': - versionsuffix: -TensorFlow-2.3.1-Python-3.8.2 - OpenFOAM: - toolchains: - foss-2020a: - versions: ['8', 'v2006'] - OSU-Micro-Benchmarks: - toolchains: - gompi-2020a: - versions: ['5.6.3'] - QuantumESPRESSO: - toolchains: - foss-2020a: - versions: ['6.6'] - TensorFlow: - toolchains: - foss-2020a: - versions: - '2.3.1': - versionsuffix: -Python-3.8.2 - RStudio-Server: - toolchains: - foss-2020a: - versions: - '1.3.1093': - versionsuffix: -Java-11-R-4.0.0 - ReFrame: - toolchains: - SYSTEM: - versions: '3.6.2' - code-server: - toolchains: - SYSTEM: - versions: '3.7.3' diff --git a/eessi-2021.12.yml b/eessi-2021.12.yml deleted file mode 100644 index 210bbb2845..0000000000 --- a/eessi-2021.12.yml +++ /dev/null @@ -1,69 +0,0 @@ -software: - code-server: - toolchains: - SYSTEM: - versions: '3.7.3' - GROMACS: - toolchains: - foss-2020a: - versions: - '2020.1': - versionsuffix: -Python-3.8.2 - '2020.4': - versionsuffix: -Python-3.8.2 - Horovod: - toolchains: - foss-2020a: - versions: - '0.21.3': - versionsuffix: -TensorFlow-2.3.1-Python-3.8.2 - Nextflow: - toolchains: - SYSTEM: - versions: '22.10.1' - OpenFOAM: - toolchains: - foss-2020a: - versions: ['8', 'v2006'] - OSU-Micro-Benchmarks: - toolchains: - gompi-2020a: - versions: ['5.6.3'] - gompi-2021a: - versions: ['5.7.1'] - QuantumESPRESSO: - toolchains: - foss-2020a: - versions: ['6.6'] - R: - toolchains: - foss-2021a: - versions: '4.1.0' - R-bundle-Bioconductor: - toolchains: - foss-2020a: - versions: - '3.11': - versionsuffix: -R-4.0.0 - RStudio-Server: - toolchains: - foss-2020a: - versions: - '1.3.1093': - versionsuffix: -Java-11-R-4.0.0 - SciPy-bundle: - toolchains: - foss-2021a: - versions: ['2021.05'] - TensorFlow: - toolchains: - foss-2020a: - versions: - '2.3.1': - versionsuffix: -Python-3.8.2 - WRF: - toolchains: - foss-2020a: - versions: - '3.9.1.1': - versionsuffix: -dmpar diff --git a/eessi-2023.06-eb-4.7.2-2021a.yml b/eessi-2023.06-eb-4.7.2-2021a.yml deleted file mode 100644 index 42a42f2236..0000000000 --- a/eessi-2023.06-eb-4.7.2-2021a.yml +++ /dev/null @@ -1,26 +0,0 @@ -easyconfigs: - - GCC-10.3.0 - - CMake-3.20.1-GCCcore-10.3.0.eb: - options: - include-easyblocks-from-pr: 2248 - - foss-2021a - - libpng-1.6.37-GCCcore-10.3.0.eb: - - libjpeg-turbo-2.0.6-GCCcore-10.3.0.eb - - git-2.32.0-GCCcore-10.3.0-nodocs.eb - - QuantumESPRESSO-6.7-foss-2021a.eb - - GROMACS-2021.3-foss-2021a.eb - - Qt5-5.15.2-GCCcore-10.3.0.eb: - # add missing patch files for Qt5 5.15.2 to fix build problems with glibc 2.34, - # see https://github.com/easybuilders/easybuild-easyconfigs/pull/18087 - options: - from-pr: 18087 - - RapidJSON-1.1.0-GCCcore-10.3.0.eb: - # strip out hardcoded -march=native, - # see https://github.com/easybuilders/easybuild-easyconfigs/pull/18725 - options: - from-pr: 18725 - - Arrow-6.0.0-foss-2021a.eb: - # fix installation of pyarrow Python bindings - # see https://github.com/easybuilders/easybuild-easyconfigs/pull/18348 - options: - from-pr: 18348 diff --git a/eessi-2023.06-eb-4.7.2-2021b.yml b/eessi-2023.06-eb-4.7.2-2021b.yml deleted file mode 100644 index 43a0fbd4bd..0000000000 --- a/eessi-2023.06-eb-4.7.2-2021b.yml +++ /dev/null @@ -1,17 +0,0 @@ -easyconfigs: - - GCC-11.2.0 - - CMake-3.21.1-GCCcore-11.2.0.eb: - options: - include-easyblocks-from-pr: 2248 - - CMake-3.22.1-GCCcore-11.2.0.eb: - options: - include-easyblocks-from-pr: 2248 - - zlib-1.2.11-GCCcore-11.2.0 - - OpenMPI-4.1.1-GCC-11.2.0 - - gompi-2021b - - FlexiBLAS-3.0.4-GCC-11.2.0.eb - - foss-2021b.eb - - git-2.33.1-GCCcore-11.2.0-nodocs.eb - - QuantumESPRESSO-6.8-foss-2021b.eb - - SciPy-bundle-2021.10-foss-2021b - - GROMACS-2021.5-foss-2021b.eb diff --git a/eessi-2023.06-eb-4.7.2-2022a.yml b/eessi-2023.06-eb-4.7.2-2022a.yml deleted file mode 100644 index d40ddff261..0000000000 --- a/eessi-2023.06-eb-4.7.2-2022a.yml +++ /dev/null @@ -1,3 +0,0 @@ -easyconfigs: - - GCC-11.3.0 - - OpenMPI-4.1.4-GCC-11.3.0.eb diff --git a/eessi-2023.06-eb-4.7.2-2022b.yml b/eessi-2023.06-eb-4.7.2-2022b.yml deleted file mode 100644 index b97be34dcf..0000000000 --- a/eessi-2023.06-eb-4.7.2-2022b.yml +++ /dev/null @@ -1,13 +0,0 @@ -easyconfigs: - - GCC-12.2.0 - - OpenMPI-4.1.4-GCC-12.2.0 - - CMake-3.24.3-GCCcore-12.2.0.eb: - options: - include-easyblocks-from-pr: 2248 - - foss-2022b - - netCDF-4.9.0-gompi-2022b.eb: - # use updated CMakeMake easyblock to avoid that -DCMAKE_SKIP_RPATH=ON is used, which breaks the netCDF test step - # see https://github.com/easybuilders/easybuild-easyblocks/pull/3012 - options: - include-easyblocks-from-pr: 3012 - - WRF-4.4.1-foss-2022b-dmpar.eb diff --git a/eessi-2023.06-eb-4.7.2-system.yml b/eessi-2023.06-eb-4.7.2-system.yml deleted file mode 100644 index 220fd82e87..0000000000 --- a/eessi-2023.06-eb-4.7.2-system.yml +++ /dev/null @@ -1,7 +0,0 @@ -easyconfigs: - - ReFrame-4.2.0.eb: - options: - from-pr: 18320 - - EasyBuild-4.8.0.eb: - options: - from-pr: 18282 diff --git a/eessi-2023.06-eb-4.8.0-2021a.yml b/eessi-2023.06-eb-4.8.0-2021a.yml deleted file mode 100644 index 1adf0572d3..0000000000 --- a/eessi-2023.06-eb-4.8.0-2021a.yml +++ /dev/null @@ -1,2 +0,0 @@ -easyconfigs: - - GDAL-3.3.0-foss-2021a.eb diff --git a/eessi-2023.06-eb-4.8.0-2021b.yml b/eessi-2023.06-eb-4.8.0-2021b.yml deleted file mode 100644 index a2562a4ed1..0000000000 --- a/eessi-2023.06-eb-4.8.0-2021b.yml +++ /dev/null @@ -1,12 +0,0 @@ -easyconfigs: - - MPFR-4.1.0-GCCcore-11.2.0.eb: - # use patch for MPFR 4.1.0 to fix failing tsprintf test with glibc >= 2.37, - # see https://github.com/easybuilders/easybuild-easyconfigs/pull/18746 - options: - from-pr: 18746 - - gnuplot-5.4.2-GCCcore-11.2.0.eb: - # make sure that Lua dependency is correctly picked up, - # see https://github.com/easybuilders/easybuild-easyconfigs/pull/19261 - options: - from-pr: 19261 - - OpenFOAM-v2112-foss-2021b.eb diff --git a/eessi-2023.06-eb-4.8.0-system.yml b/eessi-2023.06-eb-4.8.0-system.yml deleted file mode 100644 index 2928f110b0..0000000000 --- a/eessi-2023.06-eb-4.8.0-system.yml +++ /dev/null @@ -1,10 +0,0 @@ -easyconfigs: - - Java-11.eb: - # patch Java binaries/libraries when using alternate sysroot to ensure correct glibc & co are picked up - # see https://github.com/easybuilders/easybuild-easyblocks/pull/2557 - # + https://github.com/easybuilders/easybuild-easyblocks/pull/2995 - options: - include-easyblocks-from-pr: 2995 - - EasyBuild-4.8.1.eb: - options: - from-pr: 18761 diff --git a/eessi-2023.06-eb-4.8.1-2021a.yml b/eessi-2023.06-eb-4.8.1-2021a.yml deleted file mode 100644 index 999eb09925..0000000000 --- a/eessi-2023.06-eb-4.8.1-2021a.yml +++ /dev/null @@ -1,7 +0,0 @@ -easyconfigs: - - Xvfb-1.20.11-GCCcore-10.3.0.eb: - # fix permission issues for xvfb-run script, - # see https://github.com/easybuilders/easybuild-easyconfigs/pull/18834 - options: - from-pr: 18834 - - R-4.1.0-foss-2021a.eb diff --git a/eessi-2023.06-eb-4.8.1-2021b.yml b/eessi-2023.06-eb-4.8.1-2021b.yml deleted file mode 100644 index 6ee44926ba..0000000000 --- a/eessi-2023.06-eb-4.8.1-2021b.yml +++ /dev/null @@ -1,15 +0,0 @@ -easyconfigs: - - Xvfb-1.20.13-GCCcore-11.2.0.eb: - # enable exec permissions for xvfb-run after copying; - # need to also enable user write permissions on xvfb-run to ensure that copying with preserved permissions works - options: - from-pr: 18834 - - R-4.2.0-foss-2021b.eb - - PLUMED-2.7.3-foss-2021b.eb: - # the --enable-asmjit is not supported on Aarch64 - options: - from-pr: 19110 - - LAMMPS-23Jun2022-foss-2021b-kokkos.eb: - # TBB and ScaFaCos are optional dependencies when building on Intel arch - options: - from-pr: 19246 diff --git a/eessi-2023.06-eb-4.8.1-2022a.yml b/eessi-2023.06-eb-4.8.1-2022a.yml deleted file mode 100644 index 8317a40b7a..0000000000 --- a/eessi-2023.06-eb-4.8.1-2022a.yml +++ /dev/null @@ -1,12 +0,0 @@ -easyconfigs: - - OpenBLAS-0.3.20-GCC-11.3.0: - # use easyconfig that includes patch to fix detection of Neoverse V1 CPUs, - # see https://github.com/easybuilders/easybuild-easyconfigs/pull/18870 - options: - from-pr: 18870 - - foss-2022a - - SciPy-bundle-2022.05-foss-2022a - - BAMM-2.5.0-foss-2022a.eb - - ESPResSo-4.2.1-foss-2022a: - options: - from-pr: 18963 diff --git a/eessi-2023.06-eb-4.8.1-2023a.yml b/eessi-2023.06-eb-4.8.1-2023a.yml deleted file mode 100644 index c766815934..0000000000 --- a/eessi-2023.06-eb-4.8.1-2023a.yml +++ /dev/null @@ -1,11 +0,0 @@ -easyconfigs: - - GCC-12.3.0 - - OpenBLAS-0.3.23-GCC-12.3.0: - # add patch to disable flaky DDRGES3 LAPACK test, - # see https://github.com/easybuilders/easybuild-easyconfigs/pull/18887; - # also pulls in patch to avoid hang when running OpenBLAS test suite, - # see https://github.com/easybuilders/easybuild-easyconfigs/pull/18790 - options: - from-pr: 18887 - - foss-2023a - - X11-20230603-GCCcore-12.3.0 diff --git a/eessi-2023.06-eb-4.8.1-system.yml b/eessi-2023.06-eb-4.8.1-system.yml deleted file mode 100644 index b0731d2534..0000000000 --- a/eessi-2023.06-eb-4.8.1-system.yml +++ /dev/null @@ -1,9 +0,0 @@ -easyconfigs: - # rebuilt with EasyBuild v4.8.1 (now wraps around Java/11.0.20) - - Java-11.eb - - ReFrame-4.3.3.eb: - options: - from-pr: 18851 - - EasyBuild-4.8.2.eb: - options: - from-pr: 19105 diff --git a/eessi-2023.06-eb-4.8.2-2021b.yml b/eessi-2023.06-eb-4.8.2-2021b.yml deleted file mode 100644 index 00c02adf91..0000000000 --- a/eessi-2023.06-eb-4.8.2-2021b.yml +++ /dev/null @@ -1,6 +0,0 @@ -easyconfigs: - - Pillow-8.3.2-GCCcore-11.2.0.eb: - # avoid that hardcoded paths like /usr/include are used in build commands - options: - from-pr: 19226 - - matplotlib-3.4.3-foss-2021b.eb diff --git a/eessi-2023.06-eb-4.8.2-2022a.yml b/eessi-2023.06-eb-4.8.2-2022a.yml deleted file mode 100644 index ccd3fcd65d..0000000000 --- a/eessi-2023.06-eb-4.8.2-2022a.yml +++ /dev/null @@ -1,21 +0,0 @@ -easyconfigs: - - casacore-3.5.0-foss-2022a: - options: - from-pr: 19119 - - AOFlagger-3.4.0-foss-2022a: - options: - from-pr: 19119 - - EveryBeam-0.5.2-foss-2022a: - options: - from-pr: 19119 - - DP3-6.0-foss-2022a: - options: - from-pr: 19119 - - WSClean-3.4-foss-2022a: - options: - from-pr: 19119 - - Pillow-9.1.1-GCCcore-11.3.0.eb: - # avoid that hardcoded paths like /usr/include are used in build commands - options: - from-pr: 19226 - - matplotlib-3.5.2-foss-2022a.eb diff --git a/eessi-2023.06-known-issues.yml b/eessi-2023.06-known-issues.yml deleted file mode 100644 index ade1c069df..0000000000 --- a/eessi-2023.06-known-issues.yml +++ /dev/null @@ -1,30 +0,0 @@ -- x86_64/*: - - ESPResSo-4.2.1-foss-2022a: - - issue: https://github.com/EESSI/software-layer/issues/363 - - info: "Failing tests in ESPResSo v4.2.1 due to timeouts" -- aarch64/*: - - ESPResSo-4.2.1-foss-2022a: - - issue: https://github.com/EESSI/software-layer/issues/363 - - info: "Failing tests in ESPResSo v4.2.1 due to timeouts" -- aarch64/neoverse_v1: - - FFTW-3.3.10-GCC-11.3.0: - - issue: https://github.com/EESSI/software-layer/issues/325 - - info: "Flaky FFTW tests, random failures" - - FFTW-3.3.10-gompi-2021b: - - issue: https://github.com/EESSI/software-layer/issues/325 - - info: "Flaky FFTW tests, random failures" - - OpenBLAS-0.3.18-GCC-11.2.0: - - issue: https://github.com/EESSI/software-layer/issues/314 - - info: "Increased number of numerical errors in OpenBLAS test suite (238 vs max. 150 on x86_64/*)" - - OpenBLAS-0.3.20-GCC-11.3.0: - - issue: https://github.com/EESSI/software-layer/issues/314 - - info: "Increased number of numerical errors in OpenBLAS test suite (238 vs max. 150 on x86_64/*)" - - OpenBLAS-0.3.21-GCC-12.2.0: - - issue: https://github.com/EESSI/software-layer/issues/314 - - info: "Increased number of numerical errors in OpenBLAS test suite (344 vs max. 150 on x86_64/*)" - - SciPy-bundle-2021.05-foss-2021a: - - issue: https://github.com/EESSI/software-layer/issues/318 - - info: "2 failing tests (vs 30554 passed) in scipy test suite" - - SciPy-bundle-2021.10-foss-2021b: - - issue: https://github.com/EESSI/software-layer/issues/318 - - info: "20 failing tests (vs 14429 passed) in numpy test suite + 55 failing tests (vs 32438 passed) in scipy test suite" From 34adbe55ca04aa4464eb726f9173bc98aea6af05 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Sat, 25 Nov 2023 16:20:36 +0100 Subject: [PATCH 258/698] comment out power9le test for archdetect, since that target is not supported currently in software.eessi.io --- .github/workflows/tests_archdetect.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/tests_archdetect.yml b/.github/workflows/tests_archdetect.yml index 37338693c5..01138daad4 100644 --- a/.github/workflows/tests_archdetect.yml +++ b/.github/workflows/tests_archdetect.yml @@ -13,10 +13,12 @@ jobs: - x86_64/intel/skylake_avx512/archspec-linux-6132 - x86_64/amd/zen2/Azure-CentOS7-7V12 - x86_64/amd/zen3/Azure-CentOS7-7V73X - - ppc64le/power9le/unknown-power9le - aarch64/neoverse_n1/Azure-Ubuntu20-Altra - aarch64/neoverse_n1/AWS-awslinux-graviton2 - aarch64/neoverse_v1/AWS-awslinux-graviton3 + # commented out since these targets are currently not supported in software.eessi.io repo + # (and some tests assume that the corresponding subdirectory in software layer is there) + # - ppc64le/power9le/unknown-power9le fail-fast: false steps: - name: checkout From 468c42440ee03678fd5b1188ebdadd4564ab2744 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Sat, 25 Nov 2023 16:36:14 +0100 Subject: [PATCH 259/698] check that archdetect honors $EESSI_SOFTWARE_SUBDIR_OVERRIDE + only check for directories in software-layer if it has been populated already --- .github/workflows/tests_archdetect.yml | 28 +++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/.github/workflows/tests_archdetect.yml b/.github/workflows/tests_archdetect.yml index 01138daad4..9cd2775108 100644 --- a/.github/workflows/tests_archdetect.yml +++ b/.github/workflows/tests_archdetect.yml @@ -30,22 +30,36 @@ jobs: export EESSI_MACHINE_TYPE=${{matrix.proc_cpuinfo}} export EESSI_MACHINE_TYPE=${EESSI_MACHINE_TYPE%%/*} export EESSI_PROC_CPUINFO=./tests/archdetect/${{matrix.proc_cpuinfo}}.cpuinfo + # check that printing of best match works correctly CPU_ARCH=$(./init/eessi_archdetect.sh cpupath) if [[ $CPU_ARCH == "$( cat ./tests/archdetect/${{matrix.proc_cpuinfo}}.output )" ]]; then - echo "Test for ${{matrix.proc_cpuinfo}} PASSED: $CPU_ARCH" >&2 + echo "Test for ${{matrix.proc_cpuinfo}} PASSED: $CPU_ARCH" else echo "Test for ${{matrix.proc_cpuinfo}} FAILED: $CPU_ARCH" >&2 exit 1 fi + # check that $EESSI_SOFTWARE_SUBDIR_OVERRIDE is honored + export EESSI_SOFTWARE_SUBDIR_OVERRIDE='dummy/cpu' + CPU_ARCH=$(./init/eessi_archdetect.sh cpupath) + if [[ $CPU_ARCH == "${EESSI_SOFTWARE_SUBDIR_OVERRIDE}" ]]; then + echo "Test for picking up on \$EESSI_SOFTWARE_SUBDIR_OVERRIDE PASSED" + else + echo "Test for picking up on \$EESSI_SOFTWARE_SUBDIR_OVERRIDE FAILED" >&2 + exit 1 + fi + unset EESSI_SOFTWARE_SUBDIR_OVERRIDE + # check that printing of all matches works correctly (-a option for cpupath action) CPU_ARCHES=$(./init/eessi_archdetect.sh -a cpupath) if [[ $CPU_ARCHES == "$( cat ./tests/archdetect/${{matrix.proc_cpuinfo}}.all.output )" ]]; then - echo "Test for ${{matrix.proc_cpuinfo}} PASSED: $CPU_ARCHES" >&2 + echo "Test for ${{matrix.proc_cpuinfo}} PASSED: $CPU_ARCHES" else echo "Test for ${{matrix.proc_cpuinfo}} FAILED: $CPU_ARCHES" >&2 exit 1 fi - # Check all those architectures actually exist - for dir in $(echo "$CPU_ARCHES" | tr ':' '\n'); do - # Search all EESSI versions as we may drop support at some point - ls -d "$EESSI_PREFIX"/../*/software/linux/"$dir" - done + # Check all those architectures actually exist (if this EESSI version has been populated already) + if [ -d ${EESSI_PREFIX}/software/linux ]; then + for dir in $(echo "$CPU_ARCHES" | tr ':' '\n'); do + # Search all EESSI versions as we may drop support at some point + ls -d ${EESSI_PREFIX}/software/linux/${dir} + done + fi From 04a71f761e52e6b83b5d879ae22ebdcf862300fb Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Sat, 25 Nov 2023 16:38:57 +0100 Subject: [PATCH 260/698] fix picking up on $EESSI_SOFTWARE_SUBDIR_OVERRIDE in archdetect --- init/eessi_archdetect.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/init/eessi_archdetect.sh b/init/eessi_archdetect.sh index 58dd99eb6b..58b79b0f2a 100755 --- a/init/eessi_archdetect.sh +++ b/init/eessi_archdetect.sh @@ -1,8 +1,8 @@ #!/usr/bin/env bash VERSION="1.1.0" -# Logging -LOG_LEVEL="INFO" +# default log level: only emit warnings or errors +LOG_LEVEL="WARN" # Default result type is a best match CPUPATH_RESULT="best" @@ -69,8 +69,8 @@ check_allinfirst(){ cpupath(){ # If EESSI_SOFTWARE_SUBDIR_OVERRIDE is set, use it - log "DEBUG" "cpupath: Override variable set as '$EESI_SOFTWARE_SUBDIR_OVERRIDE' " - [ $EESI_SOFTWARE_SUBDIR_OVERRIDE ] && echo ${EESI_SOFTWARE_SUBDIR_OVERRIDE} && exit + log "DEBUG" "cpupath: Override variable set as '$EESSI_SOFTWARE_SUBDIR_OVERRIDE' " + [ $EESSI_SOFTWARE_SUBDIR_OVERRIDE ] && echo ${EESSI_SOFTWARE_SUBDIR_OVERRIDE} && exit # Identify the best matching CPU architecture from a list of supported specifications for the host CPU # Return the path to the installation files in EESSI of the best matching architecture From d0f26f8f38de507e4d13bc5e055be4de91841764 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Sat, 25 Nov 2023 16:47:50 +0100 Subject: [PATCH 261/698] mount software.eessi.io when testing archdetect --- .github/workflows/tests_archdetect.yml | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/.github/workflows/tests_archdetect.yml b/.github/workflows/tests_archdetect.yml index 9cd2775108..1e8b830e14 100644 --- a/.github/workflows/tests_archdetect.yml +++ b/.github/workflows/tests_archdetect.yml @@ -23,8 +23,14 @@ jobs: steps: - name: checkout uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # v3.1.0 - - name: Enable EESSI - uses: eessi/github-action-eessi@58b50fd2eead2162c2b9ac258d4fb60cc9f30503 # v2.0.13 + + - name: Mount EESSI CernVM-FS pilot repository + uses: cvmfs-contrib/github-action-cvmfs@d4641d0d591c9a5c3be23835ced2fb648b44c04b # v3.1 + with: + cvmfs_config_package: https://github.com/EESSI/filesystem-layer/releases/download/latest/cvmfs-config-eessi_latest_all.deb + cvmfs_http_proxy: DIRECT + cvmfs_repositories: software.eessi.io + - name: test eessi_archdetect.sh run: | export EESSI_MACHINE_TYPE=${{matrix.proc_cpuinfo}} From 5d532ee7f7933de2c4cab11fe717c33593bf1483 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Sat, 25 Nov 2023 17:28:14 +0100 Subject: [PATCH 262/698] stop using build_container.sh script in .github/workflows/tests_scripts.yml, use eessi_container.sh script instead --- .github/workflows/tests_scripts.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/tests_scripts.yml b/.github/workflows/tests_scripts.yml index 589c1458e9..8128a6da94 100644 --- a/.github/workflows/tests_scripts.yml +++ b/.github/workflows/tests_scripts.yml @@ -85,7 +85,7 @@ jobs: cd /tmp # force using x86_64/generic, to avoid triggering an installation from scratch sed -i "s@./EESSI-install-software.sh@\"export EESSI_SOFTWARE_SUBDIR_OVERRIDE='x86_64/generic'; ./EESSI-install-software.sh\"@g" install_software_layer.sh - ./build_container.sh run /tmp/$USER/EESSI /tmp/install_software_layer.sh + ./eessi_container.sh --mode run --verbose /tmp/install_software_layer.sh - name: test create_directory_tarballs.sh script run: | @@ -93,6 +93,6 @@ jobs: # since create_directory_tarballs.sh must be accessible from within build container cp -a * /tmp/ cd /tmp - ./build_container.sh run /tmp/$USER/EESSI /tmp/create_directory_tarballs.sh 2023.06 + ./eessi_container.sh --mode run --verbose /tmp/create_directory_tarballs.sh 2023.06 # check if tarballs have been produced ls -l *.tar.gz From 51ce189da2426e1f91acb1462821ecf7550d2d90 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Sun, 26 Nov 2023 11:59:44 +0100 Subject: [PATCH 263/698] fix workflow for scripts by bind-mounting repo to /software-layer --- .github/workflows/tests_scripts.yml | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/.github/workflows/tests_scripts.yml b/.github/workflows/tests_scripts.yml index 8128a6da94..a369f4f187 100644 --- a/.github/workflows/tests_scripts.yml +++ b/.github/workflows/tests_scripts.yml @@ -79,20 +79,18 @@ jobs: - name: test install_software_layer.sh script run: | - # scripts need to be copied to /tmp, - # since install_software_layer.sh must be accessible from within build container - cp -a * /tmp/ - cd /tmp + # bind current directory into container as /software-layer + export SINGULARITY_BIND="${PWD}:/software-layer" # force using x86_64/generic, to avoid triggering an installation from scratch sed -i "s@./EESSI-install-software.sh@\"export EESSI_SOFTWARE_SUBDIR_OVERRIDE='x86_64/generic'; ./EESSI-install-software.sh\"@g" install_software_layer.sh - ./eessi_container.sh --mode run --verbose /tmp/install_software_layer.sh + ./eessi_container.sh --mode run --verbose /software-layer/install_software_layer.sh - name: test create_directory_tarballs.sh script run: | + # bind current directory into container as /software-layer + export SINGULARITY_BIND="${PWD}:/software-layer" # scripts need to be copied to /tmp, # since create_directory_tarballs.sh must be accessible from within build container - cp -a * /tmp/ - cd /tmp - ./eessi_container.sh --mode run --verbose /tmp/create_directory_tarballs.sh 2023.06 + ./eessi_container.sh --mode run --verbose /software-layer/create_directory_tarballs.sh 2023.06 # check if tarballs have been produced ls -l *.tar.gz From c9ab0de1ee746b2ef7be867a529cc239113a968a Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Sun, 26 Nov 2023 14:23:20 +0100 Subject: [PATCH 264/698] {2023.06} foss/2023a --- .../2023.06/eessi-2023.06-eb-4.8.2-2023a.yml | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml new file mode 100644 index 0000000000..75e05a146c --- /dev/null +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml @@ -0,0 +1,7 @@ +easyconfigs: + - Rust-1.70.0-GCCcore-12.3.0.eb: + # fix build of Rust 1.70.0 by disabling download of pre-built LLVM; + # see https://github.com/easybuilders/easybuild-easyconfigs/pull/19264 + options: + from-pr: 19264 + - foss-2023a.eb From ff615929d282472074531df6b559389f1a06d3d3 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Sat, 25 Nov 2023 15:01:10 +0100 Subject: [PATCH 265/698] add initial easystack file for software.eessi.io to check on EasyBuild v4.8.2 installation --- .../2023.06/eessi-2023.06-eb-4.8.2-system.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-system.yml diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-system.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-system.yml new file mode 100644 index 0000000000..5ce6a65913 --- /dev/null +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-system.yml @@ -0,0 +1,4 @@ +easyconfigs: + - EasyBuild-4.8.2.eb: + options: + from-pr: 19105 From 63a968b088ce3a680bf938687536a70542581703 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Sun, 26 Nov 2023 20:48:19 +0100 Subject: [PATCH 266/698] add JSON file + Python script to keep track of software licenses --- licenses/README.md | 3 ++ licenses/licenses.json | 10 +++++ licenses/spdx.py | 100 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 113 insertions(+) create mode 100644 licenses/README.md create mode 100644 licenses/licenses.json create mode 100644 licenses/spdx.py diff --git a/licenses/README.md b/licenses/README.md new file mode 100644 index 0000000000..36a7615b21 --- /dev/null +++ b/licenses/README.md @@ -0,0 +1,3 @@ +see https://spdx.org/licenses + +Python function to download SPDX list of licenses is available in `spdx.py` diff --git a/licenses/licenses.json b/licenses/licenses.json new file mode 100644 index 0000000000..8831ed368c --- /dev/null +++ b/licenses/licenses.json @@ -0,0 +1,10 @@ +{ + "EasyBuild": { + "spdx": "GPL-2.0-only", + "license_url": "https://easybuild.io" + }, + "GCCcore": { + "spdx": "GPL-2.0-with-GCC-exception", + "license_url": "https://github.com/gcc-mirror/gcc/blob/master/COPYING" + } +} diff --git a/licenses/spdx.py b/licenses/spdx.py new file mode 100644 index 0000000000..06c3edb4e6 --- /dev/null +++ b/licenses/spdx.py @@ -0,0 +1,100 @@ +import json +import logging +import sys +import urllib.request + +SPDX_LICENSE_LIST_URL = 'https://raw.githubusercontent.com/spdx/license-list-data/main/json/licenses.json' + +LICENSE_URL = 'license_url' +SPDX = 'spdx' + +spdx_license_list = None + +# Configure the logging module +logging.basicConfig(level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s") + + +def get_spdx_license_list(): + """ + Download JSON file with current list of SPDX licenses, parse it, and return it as a Python dictionary. + """ + global spdx_license_list + + if spdx_license_list is None: + with urllib.request.urlopen(SPDX_LICENSE_LIST_URL) as fp: + spdx_license_list = json.load(fp) + version, release_date = spdx_license_list['licenseListVersion'], spdx_license_list['releaseDate'] + logging.info(f"Downloaded version {version} of SPDX license list (release date: {release_date})") + licenses = spdx_license_list['licenses'] + logging.info(f"Found info on {len(licenses)} licenses!") + + return spdx_license_list + + +def license_info(spdx_id): + """Find license with specified SPDX identifier.""" + + spdx_license_list = get_spdx_license_list() + + licenses = spdx_license_list['licenses'] + for lic in licenses: + if lic['licenseId'] == spdx_id: + return lic + + # if no match is found, return None as result + return None + + +def read_licenses(path): + """ + Read software project to license mapping from specified path + """ + with open(path) as fp: + licenses = json.loads(fp.read()) + + return licenses + + +def check_licenses(licenses): + """ + Check mapping of software licenses: make sure SPDX identifiers are valid. + """ + faulty_licenses = {} + + for software_name in licenses: + spdx_lic_id = licenses[software_name][SPDX] + lic_info = license_info(spdx_lic_id) + if lic_info: + lic_url = licenses[software_name][LICENSE_URL] + logging.info(f"License for software '{software_name}': {lic_info['name']} (see {lic_url})") + else: + logging.warning(f"Found faulty SPDX license ID for {software_name}: {spdx_lic_id}") + faulty_licenses[software_name] = spdx_lic_id + + if faulty_licenses: + logging.warning(f"Found {len(faulty_licenses)} faulty SPDIX license IDs (out of {len(licenses)})!") + result = False + else: + logging.info(f"License check passed for {len(licenses)} licenses!") + result = True + + return result + + +def main(args): + if len(args) == 1: + licenses_path = args[0] + else: + logging.error("Usage: python spdx.py ") + sys.exit(1) + + licenses = read_licenses(licenses_path) + if check_licenses(licenses): + logging.info("All license checks PASSED!") + else: + logging.error("One or more licence checks failed!") + sys.exit(2) + + +if __name__ == '__main__': + main(sys.argv[1:]) From fd765bbd41691e49d8efcf044fb07e3632049d85 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Sun, 26 Nov 2023 21:04:47 +0100 Subject: [PATCH 267/698] add dummy bot/test.sh and bot/check-test.sh scripts --- bot/check-test.sh | 20 ++++++++++++++++++++ bot/test.sh | 13 +++++++++++++ 2 files changed, 33 insertions(+) create mode 100755 bot/check-test.sh create mode 100755 bot/test.sh diff --git a/bot/check-test.sh b/bot/check-test.sh new file mode 100755 index 0000000000..76e0df7f40 --- /dev/null +++ b/bot/check-test.sh @@ -0,0 +1,20 @@ +#!/bin/bash +# +# Dummy script that only creates test result file for the bot, without actually checking anything +# +# This script is part of the EESSI software layer, see +# https://github.com/EESSI/software-layer.git +# +# author: Kenneth Hoste (HPC-UGent) +# +# license: GPLv2 +# +job_dir=${PWD} +job_out="slurm-${SLURM_JOB_ID}.out" +job_test_result_file="_bot_job${SLURM_JOB_ID}.test" + +echo "[TEST]" > ${job_test_result_file} +echo "comment_description = (no tests yet)" >> ${job_test_result_file} +echo "status = SUCCESS" >> ${job_test_result_file} + +exit 0 diff --git a/bot/test.sh b/bot/test.sh new file mode 100755 index 0000000000..9d978cdcd0 --- /dev/null +++ b/bot/test.sh @@ -0,0 +1,13 @@ +#!/bin/bash +# +# Dummy script, no tests yet +# +# This script is part of the EESSI software layer, see +# https://github.com/EESSI/software-layer.git +# +# author: Kenneth Hoste (HPC-UGent) +# +# license: GPLv2 +# + +exit 0 From 0421bae6c78040b95c746fb15bfe3c66b7d874b3 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Sun, 26 Nov 2023 20:55:38 +0100 Subject: [PATCH 268/698] add CI workflow to check specified software licenses --- .github/workflows/test_licenses.yml | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 .github/workflows/test_licenses.yml diff --git a/.github/workflows/test_licenses.yml b/.github/workflows/test_licenses.yml new file mode 100644 index 0000000000..00a2c90f6b --- /dev/null +++ b/.github/workflows/test_licenses.yml @@ -0,0 +1,20 @@ +# documentation: https://help.github.com/en/articles/workflow-syntax-for-github-actions +name: Test software licenses +on: [push, pull_request] +permissions: + contents: read # to fetch code (actions/checkout) +jobs: + build: + runs-on: ubuntu-20.04 + steps: + - name: Check out software-layer repository + uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # v3.1.0 + + - name: set up Python + uses: actions/setup-python@13ae5bb136fac2878aff31522b9efb785519f984 # v4.3.0 + with: + python-version: '3.9' + + - name: Check software licenses + run: | + python licenses/spdx.py licenses/licenses.json From f882ff35177c8d8ec13721ee0e34325362fe3f0e Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Mon, 27 Nov 2023 14:31:02 +0100 Subject: [PATCH 269/698] make sure that CI workflow for check_missing_installation.sh script uses correct CPU target, by setting $EESSI_SOFTWARE_SUBDIR_OVERRIDE --- .github/workflows/test-software.eessi.io.yml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/.github/workflows/test-software.eessi.io.yml b/.github/workflows/test-software.eessi.io.yml index 86ccbdb663..6756bd8854 100644 --- a/.github/workflows/test-software.eessi.io.yml +++ b/.github/workflows/test-software.eessi.io.yml @@ -11,7 +11,7 @@ jobs: matrix: EESSI_VERSION: - 2023.06 - EESSI_SOFTWARE_SUBDIR: + EESSI_SOFTWARE_SUBDIR_OVERRIDE: - aarch64/generic - aarch64/neoverse_n1 - aarch64/neoverse_v1 @@ -33,12 +33,13 @@ jobs: - name: Test check_missing_installations.sh script run: | + export EESSI_SOFTWARE_SUBDIR_OVERRIDE=${{matrix.EESSI_SOFTWARE_SUBDIR_OVERRIDE}} source /cvmfs/software.eessi.io/versions/${{matrix.EESSI_VERSION}}/init/bash module load EasyBuild + which eb eb --version export EESSI_PREFIX=/cvmfs/software.eessi.io/versions/${{matrix.EESSI_VERSION}} export EESSI_OS_TYPE=linux - export EESSI_SOFTWARE_SUBDIR=${{matrix.EESSI_SOFTWARE_SUBDIR}} env | grep ^EESSI | sort echo "just run check_missing_installations.sh (should use easystacks/software.eessi.io/${{matrix.EESSI_VERSION}}/eessi-${{matrix.EESSI_VERSION}}-*.yml)" for easystack_file in $(ls easystacks/software.eessi.io/${{matrix.EESSI_VERSION}}/eessi-${{matrix.EESSI_VERSION}}-eb-*.yml); do @@ -50,12 +51,13 @@ jobs: - name: Test check_missing_installations.sh with missing package (GCC/8.3.0) run: | + export EESSI_SOFTWARE_SUBDIR_OVERRIDE=${{matrix.EESSI_SOFTWARE_SUBDIR_OVERRIDE}} source /cvmfs/software.eessi.io/versions/${{matrix.EESSI_VERSION}}/init/bash module load EasyBuild + which eb eb --version export EESSI_PREFIX=/cvmfs/software.eessi.io/versions/${{matrix.EESSI_VERSION}} export EESSI_OS_TYPE=linux - export EESSI_SOFTWARE_SUBDIR=${{matrix.EESSI_SOFTWARE_SUBDIR}} env | grep ^EESSI | sort # create dummy easystack file with a single entry (something that is not installed in EESSI) easystack_file="test.yml" From 2e085a35468dcbf605f4dfc17b5e761bf2aa3360 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Mon, 27 Nov 2023 14:50:51 +0100 Subject: [PATCH 270/698] {2023.06}[2023a] GCC v12.3.0 --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml new file mode 100644 index 0000000000..44d8ba223d --- /dev/null +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml @@ -0,0 +1,2 @@ +easyconfigs: + - GCC-12.3.0.eb From b95eee8b4008821d9af10f7c99c5ce14463fa059 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Mon, 27 Nov 2023 14:54:40 +0100 Subject: [PATCH 271/698] use merged PR for updated Rust easyblock rather than closed PR for Rust 1.70.0 easyconfig --- .../2023.06/eessi-2023.06-eb-4.8.2-2023a.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml index 75e05a146c..b2d0902051 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml @@ -1,7 +1,7 @@ easyconfigs: - Rust-1.70.0-GCCcore-12.3.0.eb: # fix build of Rust 1.70.0 by disabling download of pre-built LLVM; - # see https://github.com/easybuilders/easybuild-easyconfigs/pull/19264 + # see https://github.com/easybuilders/easybuild-easyblocks/pull/3038 options: - from-pr: 19264 + include-easyblocks-from-pr: 3038 - foss-2023a.eb From 6fbddc716de7c036f03dc8ed1a2c53a6a641e524 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 28 Nov 2023 08:53:27 +0100 Subject: [PATCH 272/698] {2023.06}[foss/2023a] SciPy-bundle v2023.07 --- .../2023.06/eessi-2023.06-eb-4.8.2-2023a.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml index a967019b80..e685785f16 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml @@ -6,3 +6,9 @@ easyconfigs: options: include-easyblocks-from-pr: 3038 - foss-2023a.eb + - pybind11-2.11.1-GCCcore-12.3.0.eb: + # avoid indirect dependency on old CMake version built with GCCcore/10.2.0 via Catch2 build dependency; + # see https://github.com/easybuilders/easybuild-easyconfigs/pull/19270 + options: + from-pr: 19270 + - SciPy-bundle-2023.07-gfbf-2023a.eb From e9756d18c350a471b5ea39cd9b61705480441523 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 28 Nov 2023 09:43:09 +0100 Subject: [PATCH 273/698] {2023.06}[foss/2023a] TensorFlow v2.13.0 --- .../2023.06/eessi-2023.06-eb-4.8.2-2023a.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml index e685785f16..277fc4ca27 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml @@ -12,3 +12,8 @@ easyconfigs: options: from-pr: 19270 - SciPy-bundle-2023.07-gfbf-2023a.eb + - TensorFlow-2.13.0-foss-2023a.eb: + # patch setup.py for grpcio extension in TensorFlow 2.13.0 easyconfigs to take into account alternate sysroot; + # see https://github.com/easybuilders/easybuild-easyconfigs/pull/19268 + options: + from-pr: 19268 From ce0d5ca7d3386f1f4b37e632017bd2bbba9b1f13 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 28 Nov 2023 11:17:35 +0100 Subject: [PATCH 274/698] update hook to also ignore failing tests on neoverse_v1 for SciPy-bundle 2023.07 --- eb_hooks.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/eb_hooks.py b/eb_hooks.py index 8d05523c2b..b0c5fafea0 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -314,11 +314,19 @@ def pre_test_hook_ignore_failing_tests_FFTWMPI(self, *args, **kwargs): def pre_test_hook_ignore_failing_tests_SciPybundle(self, *args, **kwargs): """ - Pre-test hook for SciPy-bundle: skip failing tests for SciPy-bundle 2021.10 (currently the only version that is failing). + Pre-test hook for SciPy-bundle: skip failing tests for selected SciPy-bundle vrsions + In version 2021.10, 2 failing tests in scipy 1.6.3: + FAILED optimize/tests/test_linprog.py::TestLinprogIPSparse::test_bug_6139 - A... + FAILED optimize/tests/test_linprog.py::TestLinprogIPSparsePresolve::test_bug_6139 + = 2 failed, 30554 passed, 2064 skipped, 10992 deselected, 76 xfailed, 7 xpassed, 40 warnings in 380.27s (0:06:20) = + In versions 2023.07, 2 failing tests in scipy 1.11.1: + FAILED scipy/spatial/tests/test_distance.py::TestPdist::test_pdist_correlation_iris + FAILED scipy/spatial/tests/test_distance.py::TestPdist::test_pdist_correlation_iris_float32 + = 2 failed, 54409 passed, 3016 skipped, 223 xfailed, 13 xpassed, 10917 warnings in 892.04s (0:14:52) = In previous versions we were not as strict yet on the numpy/SciPy tests """ cpu_target = get_eessi_envvar('EESSI_SOFTWARE_SUBDIR') - if self.name == 'SciPy-bundle' and self.version == '2021.10' and cpu_target == CPU_TARGET_NEOVERSE_V1: + if self.name == 'SciPy-bundle' and self.version in ['2021.10', '2023.07'] and cpu_target == CPU_TARGET_NEOVERSE_V1: self.cfg['testopts'] = "|| echo ignoring failing tests" From 37898378ca48270f29bab0dab233885e72c92d4c Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 28 Nov 2023 11:18:25 +0100 Subject: [PATCH 275/698] add parse hook to replace Catch2 build dependency using system toolchain in pybind11 --- eb_hooks.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/eb_hooks.py b/eb_hooks.py index b0c5fafea0..583cd446e0 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -4,6 +4,7 @@ import re from easybuild.easyblocks.generic.configuremake import obtain_config_guess +from easybuild.framework.easyconfig.constants import EASYCONFIG_CONSTANTS from easybuild.tools.build_log import EasyBuildError, print_msg from easybuild.tools.config import build_option, update_build_option from easybuild.tools.filetools import apply_regex_substitutions, copy_file, which @@ -23,6 +24,8 @@ EESSI_RPATH_OVERRIDE_ATTR = 'orig_rpath_override_dirs' +SYSTEM = EASYCONFIG_CONSTANTS['SYSTEM'][0] + def get_eessi_envvar(eessi_envvar): """Get an EESSI environment variable from the environment""" @@ -181,6 +184,25 @@ def parse_hook_openblas_relax_lapack_tests_num_errors(ec, eprefix): raise EasyBuildError("OpenBLAS-specific hook triggered for non-OpenBLAS easyconfig?!") +def parse_hook_pybind11_replace_catch2(ec, eprefix): + """ + Replace Catch2 build dependency in pybind11 easyconfigs with one that doesn't use system toolchain. + cfr. https://github.com/easybuilders/easybuild-easyconfigs/pull/19270 + """ + # tihs is mainly necessary to avoid that --missing keeps reporting Catch2/2.13.9 is missing, + # and to avoid that we need to use "--from-pr 19270" for every easyconfigs that (indirectly) depends on pybind11 + if ec.name == 'pybind11' and ec.version in ['2.10.3', '2.11.1']: + build_deps = ec['builddependencies'] + catch2_build_dep = None + catch2_name, catch2_version = ('Catch2', '2.13.9') + for idx, build_dep in enumerate(build_deps): + if build_dep[0] == catch2_name and build_dep[1] == catch2_version: + catch2_build_dep = build_dep + break + if catch2_build_dep and len(catch2_build_dep) == 4 and catch2_build_dep[3] == SYSTEM: + build_deps[idx] = (catch2_name, catch2_version) + + def parse_hook_qt5_check_qtwebengine_disable(ec, eprefix): """ Disable check for QtWebEngine in Qt5 as workaround for problem with determining glibc version. @@ -360,6 +382,7 @@ def pre_single_extension_isoband(ext, *args, **kwargs): 'CGAL': parse_hook_cgal_toolchainopts_precise, 'fontconfig': parse_hook_fontconfig_add_fonts, 'OpenBLAS': parse_hook_openblas_relax_lapack_tests_num_errors, + 'pybind11': parse_hook_pybind11_replace_catch2, 'Qt5': parse_hook_qt5_check_qtwebengine_disable, 'UCX': parse_hook_ucx_eprefix, } From 22444eceea9fa346460f9d448c30a0a5e548793e Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 28 Nov 2023 11:17:35 +0100 Subject: [PATCH 276/698] update hook to also ignore failing tests on neoverse_v1 for SciPy-bundle 2023.07 --- eb_hooks.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/eb_hooks.py b/eb_hooks.py index 8d05523c2b..b0c5fafea0 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -314,11 +314,19 @@ def pre_test_hook_ignore_failing_tests_FFTWMPI(self, *args, **kwargs): def pre_test_hook_ignore_failing_tests_SciPybundle(self, *args, **kwargs): """ - Pre-test hook for SciPy-bundle: skip failing tests for SciPy-bundle 2021.10 (currently the only version that is failing). + Pre-test hook for SciPy-bundle: skip failing tests for selected SciPy-bundle vrsions + In version 2021.10, 2 failing tests in scipy 1.6.3: + FAILED optimize/tests/test_linprog.py::TestLinprogIPSparse::test_bug_6139 - A... + FAILED optimize/tests/test_linprog.py::TestLinprogIPSparsePresolve::test_bug_6139 + = 2 failed, 30554 passed, 2064 skipped, 10992 deselected, 76 xfailed, 7 xpassed, 40 warnings in 380.27s (0:06:20) = + In versions 2023.07, 2 failing tests in scipy 1.11.1: + FAILED scipy/spatial/tests/test_distance.py::TestPdist::test_pdist_correlation_iris + FAILED scipy/spatial/tests/test_distance.py::TestPdist::test_pdist_correlation_iris_float32 + = 2 failed, 54409 passed, 3016 skipped, 223 xfailed, 13 xpassed, 10917 warnings in 892.04s (0:14:52) = In previous versions we were not as strict yet on the numpy/SciPy tests """ cpu_target = get_eessi_envvar('EESSI_SOFTWARE_SUBDIR') - if self.name == 'SciPy-bundle' and self.version == '2021.10' and cpu_target == CPU_TARGET_NEOVERSE_V1: + if self.name == 'SciPy-bundle' and self.version in ['2021.10', '2023.07'] and cpu_target == CPU_TARGET_NEOVERSE_V1: self.cfg['testopts'] = "|| echo ignoring failing tests" From 43748eb6518a5b4670c1ae055200db6c21b8b5ec Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 28 Nov 2023 11:18:25 +0100 Subject: [PATCH 277/698] add parse hook to replace Catch2 build dependency using system toolchain in pybind11 --- eb_hooks.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/eb_hooks.py b/eb_hooks.py index b0c5fafea0..583cd446e0 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -4,6 +4,7 @@ import re from easybuild.easyblocks.generic.configuremake import obtain_config_guess +from easybuild.framework.easyconfig.constants import EASYCONFIG_CONSTANTS from easybuild.tools.build_log import EasyBuildError, print_msg from easybuild.tools.config import build_option, update_build_option from easybuild.tools.filetools import apply_regex_substitutions, copy_file, which @@ -23,6 +24,8 @@ EESSI_RPATH_OVERRIDE_ATTR = 'orig_rpath_override_dirs' +SYSTEM = EASYCONFIG_CONSTANTS['SYSTEM'][0] + def get_eessi_envvar(eessi_envvar): """Get an EESSI environment variable from the environment""" @@ -181,6 +184,25 @@ def parse_hook_openblas_relax_lapack_tests_num_errors(ec, eprefix): raise EasyBuildError("OpenBLAS-specific hook triggered for non-OpenBLAS easyconfig?!") +def parse_hook_pybind11_replace_catch2(ec, eprefix): + """ + Replace Catch2 build dependency in pybind11 easyconfigs with one that doesn't use system toolchain. + cfr. https://github.com/easybuilders/easybuild-easyconfigs/pull/19270 + """ + # tihs is mainly necessary to avoid that --missing keeps reporting Catch2/2.13.9 is missing, + # and to avoid that we need to use "--from-pr 19270" for every easyconfigs that (indirectly) depends on pybind11 + if ec.name == 'pybind11' and ec.version in ['2.10.3', '2.11.1']: + build_deps = ec['builddependencies'] + catch2_build_dep = None + catch2_name, catch2_version = ('Catch2', '2.13.9') + for idx, build_dep in enumerate(build_deps): + if build_dep[0] == catch2_name and build_dep[1] == catch2_version: + catch2_build_dep = build_dep + break + if catch2_build_dep and len(catch2_build_dep) == 4 and catch2_build_dep[3] == SYSTEM: + build_deps[idx] = (catch2_name, catch2_version) + + def parse_hook_qt5_check_qtwebengine_disable(ec, eprefix): """ Disable check for QtWebEngine in Qt5 as workaround for problem with determining glibc version. @@ -360,6 +382,7 @@ def pre_single_extension_isoband(ext, *args, **kwargs): 'CGAL': parse_hook_cgal_toolchainopts_precise, 'fontconfig': parse_hook_fontconfig_add_fonts, 'OpenBLAS': parse_hook_openblas_relax_lapack_tests_num_errors, + 'pybind11': parse_hook_pybind11_replace_catch2, 'Qt5': parse_hook_qt5_check_qtwebengine_disable, 'UCX': parse_hook_ucx_eprefix, } From 7052a9070e34e9125ee200d140c7c9c5c0a2ae22 Mon Sep 17 00:00:00 2001 From: ocaisa Date: Tue, 28 Nov 2023 11:49:12 +0100 Subject: [PATCH 278/698] TypoUpdate eb_hooks.py --- eb_hooks.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eb_hooks.py b/eb_hooks.py index 583cd446e0..38b30ce684 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -189,7 +189,7 @@ def parse_hook_pybind11_replace_catch2(ec, eprefix): Replace Catch2 build dependency in pybind11 easyconfigs with one that doesn't use system toolchain. cfr. https://github.com/easybuilders/easybuild-easyconfigs/pull/19270 """ - # tihs is mainly necessary to avoid that --missing keeps reporting Catch2/2.13.9 is missing, + # this is mainly necessary to avoid that --missing keeps reporting Catch2/2.13.9 is missing, # and to avoid that we need to use "--from-pr 19270" for every easyconfigs that (indirectly) depends on pybind11 if ec.name == 'pybind11' and ec.version in ['2.10.3', '2.11.1']: build_deps = ec['builddependencies'] From bff19929ddf21956b2f42e7461e6fd9c7b0fe6e5 Mon Sep 17 00:00:00 2001 From: ocaisa Date: Tue, 28 Nov 2023 11:50:13 +0100 Subject: [PATCH 279/698] Typo --- eb_hooks.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eb_hooks.py b/eb_hooks.py index 38b30ce684..3d0e63f4c2 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -336,7 +336,7 @@ def pre_test_hook_ignore_failing_tests_FFTWMPI(self, *args, **kwargs): def pre_test_hook_ignore_failing_tests_SciPybundle(self, *args, **kwargs): """ - Pre-test hook for SciPy-bundle: skip failing tests for selected SciPy-bundle vrsions + Pre-test hook for SciPy-bundle: skip failing tests for selected SciPy-bundle versions In version 2021.10, 2 failing tests in scipy 1.6.3: FAILED optimize/tests/test_linprog.py::TestLinprogIPSparse::test_bug_6139 - A... FAILED optimize/tests/test_linprog.py::TestLinprogIPSparsePresolve::test_bug_6139 From 04d39a77d3fcc5b7a919139d44c739428c73fa07 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 28 Nov 2023 21:01:20 +0100 Subject: [PATCH 280/698] add post_ready_hook to limit parallellism for selected builds, incl. TensorFlow --- eb_hooks.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/eb_hooks.py b/eb_hooks.py index 3d0e63f4c2..6fe92c7f7b 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -69,6 +69,21 @@ def parse_hook(ec, *args, **kwargs): PARSE_HOOKS[ec.name](ec, eprefix) +def post_ready_hook(self, *args, **kwargs): + """ + Post-ready hook: limit parallellism for selected builds, because they require a lot of memory per used core. + """ + # 'parallel' easyconfig parameter is set via EasyBlock.set_parallel in ready step based on available cores. + # here we reduce parallellism to only use half of that for selected software, + # to avoid failing builds/tests due to out-of-memory problems + if self.name in ['TensorFlow']: + parallel = self.cfg['parallel'] + if parallel > 1: + self.cfg['parallel'] = parallel // 2 + msg = "limiting parallelism to %s (was %s) for %s to avoid out-of-memory failures during building/testing" + print_msg(msg % (self.cfg['parallel'], parallel, self.name), log=self.log) + + def pre_prepare_hook(self, *args, **kwargs): """Main pre-prepare hook: trigger custom functions.""" From ab2c260e4d9b9a1b70b7246b10977437ad0fcd15 Mon Sep 17 00:00:00 2001 From: Pedro Santos Neves <10762799+Neves-P@users.noreply.github.com> Date: Wed, 29 Nov 2023 10:38:57 +0100 Subject: [PATCH 281/698] {2023.06}[foss/2023a] OpenFOAM v10 --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml index e685785f16..b67e894825 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml @@ -12,3 +12,4 @@ easyconfigs: options: from-pr: 19270 - SciPy-bundle-2023.07-gfbf-2023a.eb + - OpenFOAM-10-foss-2023a.eb From cae2ceda19a3d95dca6a8c863f9a8a837a3f8046 Mon Sep 17 00:00:00 2001 From: Neves-P Date: Wed, 29 Nov 2023 14:28:36 +0100 Subject: [PATCH 282/698] {2023.06}[foss/2023a] Qt5 v5.15.10 --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml index 277fc4ca27..b9eb9b4d8f 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml @@ -17,3 +17,4 @@ easyconfigs: # see https://github.com/easybuilders/easybuild-easyconfigs/pull/19268 options: from-pr: 19268 + - Qt5-5.15.10-GCCcore-12.3.0.eb From 6c1e032484df88f8746d2430fd0af1c6915b7071 Mon Sep 17 00:00:00 2001 From: Neves-P Date: Wed, 29 Nov 2023 14:32:02 +0100 Subject: [PATCH 283/698] {2023.06}[2023a] X11 20230603 --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml index 277fc4ca27..1a9df25df3 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml @@ -17,3 +17,4 @@ easyconfigs: # see https://github.com/easybuilders/easybuild-easyconfigs/pull/19268 options: from-pr: 19268 + - X11-20230603-GCCcore-12.3.0.eb From cb4f7e13fa7b6e213d82f4617be4ff21eda93830 Mon Sep 17 00:00:00 2001 From: Pedro Santos Neves <10762799+Neves-P@users.noreply.github.com> Date: Thu, 30 Nov 2023 16:39:40 +0100 Subject: [PATCH 284/698] option: from-pr: 19339 --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml index c08abe3bd8..a5a1cdc727 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml @@ -19,3 +19,5 @@ easyconfigs: from-pr: 19268 - X11-20230603-GCCcore-12.3.0.eb - Qt5-5.15.10-GCCcore-12.3.0.eb + options: + from-pr: 19339 From e85281ac55519240b7dd34ce690b786c32709584 Mon Sep 17 00:00:00 2001 From: Pedro Santos Neves <10762799+Neves-P@users.noreply.github.com> Date: Thu, 30 Nov 2023 16:43:59 +0100 Subject: [PATCH 285/698] Fix typo --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml index a5a1cdc727..0d4fd65ce4 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml @@ -18,6 +18,6 @@ easyconfigs: options: from-pr: 19268 - X11-20230603-GCCcore-12.3.0.eb - - Qt5-5.15.10-GCCcore-12.3.0.eb + - Qt5-5.15.10-GCCcore-12.3.0.eb: options: from-pr: 19339 From 6afba5b84d119d3f928c53dc31aa06c8c3b77129 Mon Sep 17 00:00:00 2001 From: Pedro Santos Neves <10762799+Neves-P@users.noreply.github.com> Date: Thu, 30 Nov 2023 17:15:02 +0100 Subject: [PATCH 286/698] Add HarfBuzz-5.3.1-GCCcore-12.3.0.eb to stack with from-pr option --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml index 0d4fd65ce4..0d5345eacc 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml @@ -18,6 +18,7 @@ easyconfigs: options: from-pr: 19268 - X11-20230603-GCCcore-12.3.0.eb - - Qt5-5.15.10-GCCcore-12.3.0.eb: + - HarfBuzz-5.3.1-GCCcore-12.3.0.eb: options: from-pr: 19339 + - Qt5-5.15.10-GCCcore-12.3.0.eb From 1c8131ebbf89da06c6cc12195a7253324fed8903 Mon Sep 17 00:00:00 2001 From: Alan O'Cais Date: Fri, 1 Dec 2023 11:55:44 +0100 Subject: [PATCH 287/698] {2023.06} Nextflow/23.10.0 --- .../2023.06/eessi-2023.06-eb-4.8.2-system.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-system.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-system.yml index 5ce6a65913..f02b9f2802 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-system.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-system.yml @@ -2,3 +2,6 @@ easyconfigs: - EasyBuild-4.8.2.eb: options: from-pr: 19105 + - Nextflow-23.10.0.eb: + options: + from-pr: 19172 From 3439e8b07981dff466b9efb1af4215bedb603351 Mon Sep 17 00:00:00 2001 From: Pedro Santos Neves <10762799+Neves-P@users.noreply.github.com> Date: Fri, 1 Dec 2023 12:06:39 +0100 Subject: [PATCH 288/698] Include gnuplot fix from PR easybuilders/easyconfigs#19261 --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml index 4a302c409b..514ed0b86e 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml @@ -22,4 +22,7 @@ easyconfigs: options: from-pr: 19339 - Qt5-5.15.10-GCCcore-12.3.0.eb + - gnuplot-5.4.8-GCCcore-12.3.0.eb: + options: + from-pr: 19261 - OpenFOAM-10-foss-2023a.eb From f94430a60940ecfab5d89b789743b4c6b740b983 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Fri, 1 Dec 2023 16:43:46 +0100 Subject: [PATCH 289/698] Replicated changes that were initially targetted at 2023.06-pilot repo --- eessi_container.sh | 71 +++++- .../nvidia/install_cuda_host_injections.sh | 209 ++++++++++++++++++ .../nvidia/link_nvidia_host_libraries.sh | 136 ++++++++++++ scripts/utils.sh | 56 ++++- 4 files changed, 461 insertions(+), 11 deletions(-) create mode 100755 gpu_support/nvidia/install_cuda_host_injections.sh create mode 100755 gpu_support/nvidia/link_nvidia_host_libraries.sh diff --git a/eessi_container.sh b/eessi_container.sh index bf0294c7bf..81d7be81ad 100755 --- a/eessi_container.sh +++ b/eessi_container.sh @@ -30,8 +30,8 @@ # -. initial settings & exit codes TOPDIR=$(dirname $(realpath $0)) -source ${TOPDIR}/scripts/utils.sh -source ${TOPDIR}/scripts/cfg_files.sh +source "${TOPDIR}"/scripts/utils.sh +source "${TOPDIR}"/scripts/cfg_files.sh # exit codes: bitwise shift codes to allow for combination of exit codes # ANY_ERROR_EXITCODE is sourced from ${TOPDIR}/scripts/utils.sh @@ -46,6 +46,7 @@ SAVE_ERROR_EXITCODE=$((${ANY_ERROR_EXITCODE} << 8)) HTTP_PROXY_ERROR_EXITCODE=$((${ANY_ERROR_EXITCODE} << 9)) HTTPS_PROXY_ERROR_EXITCODE=$((${ANY_ERROR_EXITCODE} << 10)) RUN_SCRIPT_MISSING_EXITCODE=$((${ANY_ERROR_EXITCODE} << 11)) +NVIDIA_MODE_UNKNOWN_EXITCODE=$((${ANY_ERROR_EXITCODE} << 12)) # CernVM-FS settings CVMFS_VAR_LIB="var-lib-cvmfs" @@ -72,12 +73,17 @@ display_help() { echo " -a | --access {ro,rw} - ro (read-only), rw (read & write) [default: ro]" echo " -c | --container IMG - image file or URL defining the container to use" echo " [default: docker://ghcr.io/eessi/build-node:debian11]" - echo " -h | --help - display this usage information [default: false]" echo " -g | --storage DIR - directory space on host machine (used for" echo " temporary data) [default: 1. TMPDIR, 2. /tmp]" + echo " -h | --help - display this usage information [default: false]" + echo " -i | --host-injections - directory to link to for host_injections " + echo " [default: /..storage../opt-eessi]" echo " -l | --list-repos - list available repository identifiers [default: false]" echo " -m | --mode MODE - with MODE==shell (launch interactive shell) or" echo " MODE==run (run a script or command) [default: shell]" + echo " -n | --nvidia MODE - configure the container to work with NVIDIA GPUs," + echo " MODE==install for a CUDA installation, MODE==run to" + echo " attach a GPU, MODE==all for both [default: false]" echo " -r | --repository CFG - configuration file or identifier defining the" echo " repository to use [default: EESSI via" echo " default container, see --container]" @@ -111,6 +117,8 @@ VERBOSE=0 STORAGE= LIST_REPOS=0 MODE="shell" +SETUP_NVIDIA=0 +ADDITIONAL_SINGULARITY_FLAGS= REPOSITORY="EESSI" RESUME= SAVE= @@ -141,6 +149,10 @@ while [[ $# -gt 0 ]]; do display_help exit 0 ;; + -i|--host-injections) + USER_HOST_INJECTIONS="$2" + shift 2 + ;; -l|--list-repos) LIST_REPOS=1 shift 1 @@ -149,6 +161,11 @@ while [[ $# -gt 0 ]]; do MODE="$2" shift 2 ;; + -n|--nvidia) + SETUP_NVIDIA=1 + NVIDIA_MODE="$2" + shift 2 + ;; -r|--repository) REPOSITORY="$2" shift 2 @@ -224,6 +241,13 @@ if [[ "${MODE}" != "shell" && "${MODE}" != "run" ]]; then fatal_error "unknown execution mode '${MODE}'" "${MODE_UNKNOWN_EXITCODE}" fi +# Also validate the NVIDIA GPU mode (if present) +if [[ ${SETUP_NVIDIA} -eq 1 ]]; then + if [[ "${NVIDIA_MODE}" != "run" && "${NVIDIA_MODE}" != "install" && "${NVIDIA_MODE}" != "all" ]]; then + fatal_error "unknown NVIDIA mode '${NVIDIA_MODE}'" "${NVIDIA_MODE_UNKNOWN_EXITCODE}" + fi +fi + # TODO (arg -r|--repository) check if repository is known # REPOSITORY_ERROR_EXITCODE if [[ ! -z "${REPOSITORY}" && "${REPOSITORY}" != "EESSI" && ! -r ${EESSI_REPOS_CFG_FILE} ]]; then @@ -310,12 +334,25 @@ fi # |-overlay-work # |-home # |-repos_cfg +# |-opt-eessi (unless otherwise specificed for host_injections) # tmp dir for EESSI EESSI_TMPDIR=${EESSI_HOST_STORAGE} mkdir -p ${EESSI_TMPDIR} [[ ${VERBOSE} -eq 1 ]] && echo "EESSI_TMPDIR=${EESSI_TMPDIR}" +# Set host_injections directory and ensure it is a writable directory (if user provided) +if [ -z ${USER_HOST_INJECTIONS+x} ]; then + # Not set, so use our default + HOST_INJECTIONS=${EESSI_TMPDIR}/opt-eessi + mkdir -p $HOST_INJECTIONS +else + # Make sure the host_injections directory specified exists and is a folder + mkdir -p ${USER_HOST_INJECTIONS} || fatal_error "host_injections directory ${USER_HOST_INJECTIONS} is either not a directory or cannot be created" + HOST_INJECTIONS=${USER_HOST_INJECTIONS} +fi +[[ ${VERBOSE} -eq 1 ]] && echo "HOST_INJECTIONS=${HOST_INJECTIONS}" + # configure Singularity: if SINGULARITY_CACHEDIR is already defined, use that # a global SINGULARITY_CACHEDIR would ensure that we don't consume # storage space again and again for the container & also speed-up @@ -394,12 +431,34 @@ fi [[ ${VERBOSE} -eq 1 ]] && echo "SINGULARITY_HOME=${SINGULARITY_HOME}" # define paths to add to SINGULARITY_BIND (added later when all BIND mounts are defined) -BIND_PATHS="${EESSI_CVMFS_VAR_LIB}:/var/lib/cvmfs,${EESSI_CVMFS_VAR_RUN}:/var/run/cvmfs" +BIND_PATHS="${EESSI_CVMFS_VAR_LIB}:/var/lib/cvmfs,${EESSI_CVMFS_VAR_RUN}:/var/run/cvmfs,${HOST_INJECTIONS}:/opt/eessi" # provide a '/tmp' inside the container BIND_PATHS="${BIND_PATHS},${EESSI_TMPDIR}:${TMP_IN_CONTAINER}" [[ ${VERBOSE} -eq 1 ]] && echo "BIND_PATHS=${BIND_PATHS}" +# Configure anything we need for NVIDIA GPUs and CUDA installation +if [[ ${SETUP_NVIDIA} -eq 1 ]]; then + if [[ "${NVIDIA_MODE}" == "run" || "${NVIDIA_MODE}" == "all" ]]; then + # Give singularity the appropriate flag + ADDITIONAL_SINGULARITY_FLAGS="--nv ${ADDITIONAL_SINGULARITY_FLAGS}" + [[ ${VERBOSE} -eq 1 ]] && echo "ADDITIONAL_SINGULARITY_FLAGS=${ADDITIONAL_SINGULARITY_FLAGS}" + fi + if [[ "${NVIDIA_MODE}" == "install" || "${NVIDIA_MODE}" == "all" ]]; then + # Add additional bind mounts to allow CUDA to install within a container + # (Experience tells us that these are necessary, but we don't know _why_ + # as the CUDA installer is a black box. The suspicion is that the CUDA + # installer gets confused by the permissions on these directories when + # inside a container) + EESSI_VAR_LOG=${EESSI_TMPDIR}/var-log + EESSI_USR_LOCAL_CUDA=${EESSI_TMPDIR}/usr-local-cuda + mkdir -p ${EESSI_VAR_LOG} + mkdir -p ${EESSI_USR_LOCAL_CUDA} + BIND_PATHS="${BIND_PATHS},${EESSI_VAR_LOG}:/var/log,${EESSI_USR_LOCAL_CUDA}:/usr/local/cuda" + [[ ${VERBOSE} -eq 1 ]] && echo "BIND_PATHS=${BIND_PATHS}" + fi +fi + # set up repository config (always create directory repos_cfg and populate it with info when # arg -r|--repository is used) mkdir -p ${EESSI_TMPDIR}/repos_cfg @@ -562,8 +621,8 @@ if [ ! -z ${EESSI_SOFTWARE_SUBDIR_OVERRIDE} ]; then fi echo "Launching container with command (next line):" -echo "singularity ${RUN_QUIET} ${MODE} ${EESSI_FUSE_MOUNTS[@]} ${CONTAINER} $@" -singularity ${RUN_QUIET} ${MODE} "${EESSI_FUSE_MOUNTS[@]}" ${CONTAINER} "$@" +echo "singularity ${RUN_QUIET} ${MODE} ${ADDITIONAL_SINGULARITY_FLAGS} ${EESSI_FUSE_MOUNTS[@]} ${CONTAINER} $@" +singularity ${RUN_QUIET} ${MODE} ${ADDITIONAL_SINGULARITY_FLAGS} "${EESSI_FUSE_MOUNTS[@]}" ${CONTAINER} "$@" exit_code=$? # 6. save tmp if requested (arg -s|--save) diff --git a/gpu_support/nvidia/install_cuda_host_injections.sh b/gpu_support/nvidia/install_cuda_host_injections.sh new file mode 100755 index 0000000000..f02f0da02e --- /dev/null +++ b/gpu_support/nvidia/install_cuda_host_injections.sh @@ -0,0 +1,209 @@ +#!/usr/bin/env bash + +# This script can be used to install CUDA under the `.../host_injections` directory. +# This provides the parts of the CUDA installation that cannot be redistributed as +# part of EESSI due to license limitations. While GPU-based software from EESSI will +# _run_ without these, installation of additional CUDA software requires the CUDA +# installation(s) under `host_injections` to be present. +# +# The `host_injections` directory is a variant symlink that by default points to +# `/opt/eessi`, unless otherwise defined in the local CVMFS configuration (see +# https://cvmfs.readthedocs.io/en/stable/cpt-repo.html#variant-symlinks). For the +# installation to be successful, this directory needs to be writeable by the user +# executing this script. + +# Initialise our bash functions +TOPDIR=$(dirname $(realpath $BASH_SOURCE)) +source "$TOPDIR"/../../scripts/utils.sh + +# Function to display help message +show_help() { + echo "Usage: $0 [OPTIONS]" + echo "Options:" + echo " --help Display this help message" + echo " --accept-cuda-eula You _must_ accept the CUDA EULA to install" + echo " CUDA, see the EULA at" + echo " https://docs.nvidia.com/cuda/eula/index.html" + echo " -c, --cuda-version CUDA_VERSION Specify a version o CUDA to install (must" + echo " have a corresponding easyconfig in the" + echo " EasyBuild release)" + echo " -t, --temp-dir /path/to/tmpdir Specify a location to use for temporary" + echo " storage during the CUDA install" + echo " (must have >10GB available)" +} + +# Initialize variables +install_cuda_version="" +eula_accepted=0 + +# Parse command-line options +while [[ $# -gt 0 ]]; do + case "$1" in + --help) + show_help + exit 0 + ;; + -c|--cuda-version) + if [ -n "$2" ]; then + install_cuda_version="$2" + shift 2 + else + echo "Error: Argument required for $1" + show_help + exit 1 + fi + ;; + --accept-cuda-eula) + eula_accepted=1 + shift 1 + ;; + -t|--temp-dir) + if [ -n "$2" ]; then + CUDA_TEMP_DIR="$2" + shift 2 + else + echo "Error: Argument required for $1" + show_help + exit 1 + fi + ;; + *) + show_help + fatal_error "Error: Unknown option: $1" + ;; + esac +done + +# Make sure EESSI is initialised +check_eessi_initialised + +# Make sure the CUDA version supplied is a semantic version +is_semantic_version() { + local version=$1 + local regex='^[0-9]+\.[0-9]+\.[0-9]+$' + + if [[ $version =~ $regex ]]; then + return 0 # Return success (0) if it's a semantic version + else + return 1 # Return failure (1) if it's not a semantic version + fi +} +if ! is_semantic_version "$install_cuda_version"; then + show_help + error="\nYou must provide a semantic version for CUDA (e.g., 12.1.1) via the appropriate\n" + error="${error}command line option. This script is intended for use with EESSI so the 'correct'\n" + error="${error}version to provide is probably one of those available under\n" + error="${error}$EESSI_SOFTWARE_PATH/software/CUDA\n" + fatal_error "${error}" +fi + +# Make sure they have accepted the CUDA EULA +if [ "$eula_accepted" -ne 1 ]; then + show_help + error="\nYou _must_ accept the CUDA EULA via the appropriate command line option.\n" + fatal_error "${error}" +fi + +# As an installation location just use $EESSI_SOFTWARE_PATH but replacing `versions` with `host_injections` +# (CUDA is a binary installation so no need to worry too much about the EasyBuild setup) +cuda_install_parent=${EESSI_SOFTWARE_PATH/versions/host_injections} + +# Only install CUDA if specified version is not found. +# (existence of easybuild subdir implies a successful install) +if [ -d "${cuda_install_parent}"/software/CUDA/"${install_cuda_version}"/easybuild ]; then + echo_green "CUDA software found! No need to install CUDA again." +else + # We need to be able write to the installation space so let's make sure we can + if ! create_directory_structure "${cuda_install_parent}"/software/CUDA ; then + fatal_error "No write permissions to directory ${cuda_install_parent}/software/CUDA" + fi + + # we need a directory we can use for temporary storage + if [[ -z "${CUDA_TEMP_DIR}" ]]; then + tmpdir=$(mktemp -d) + else + tmpdir="${CUDA_TEMP_DIR}"/temp + if ! mkdir "$tmpdir" ; then + fatal_error "Could not create directory ${tmpdir}" + fi + fi + + required_space_in_tmpdir=50000 + # Let's see if we have sources and build locations defined if not, we use the temporary space + if [[ -z "${EASYBUILD_BUILDPATH}" ]]; then + export EASYBUILD_BUILDPATH=${tmpdir}/build + required_space_in_tmpdir=$((required_space_in_tmpdir + 5000000)) + fi + if [[ -z "${EASYBUILD_SOURCEPATH}" ]]; then + export EASYBUILD_SOURCEPATH=${tmpdir}/sources + required_space_in_tmpdir=$((required_space_in_tmpdir + 5000000)) + fi + + # The install is pretty fat, you need lots of space for download/unpack/install (~3*5GB), + # need to do a space check before we proceed + avail_space=$(df --output=avail "${cuda_install_parent}"/ | tail -n 1 | awk '{print $1}') + if (( avail_space < 5000000 )); then + fatal_error "Need at least 5GB disk space to install CUDA under ${cuda_install_parent}, exiting now..." + fi + avail_space=$(df --output=avail "${tmpdir}"/ | tail -n 1 | awk '{print $1}') + if (( avail_space < required_space_in_tmpdir )); then + error="Need at least ${required_space_in_tmpdir} disk space under ${tmpdir}.\n" + error="${error}Set the environment variable CUDA_TEMP_DIR to a location with adequate space to pass this check." + error="${error}You can alternatively set EASYBUILD_BUILDPATH and/or EASYBUILD_SOURCEPATH " + error="${error}to reduce this requirement. Exiting now..." + fatal_error "${error}" + fi + + if ! command -v "eb" &>/dev/null; then + echo_yellow "Attempting to load an EasyBuild module to do actual install" + module load EasyBuild + # There are some scenarios where this may fail + if [ $? -ne 0 ]; then + error="'eb' command not found in your environment and\n" + error="${error} module load EasyBuild\n" + error="${error}failed for some reason.\n" + error="${error}Please re-run this script with the 'eb' command available." + fatal_error "${error}" + fi + fi + + cuda_easyconfig="CUDA-${install_cuda_version}.eb" + + # Check the easyconfig file is available in the release + # (eb search always returns 0, so we need a grep to ensure a usable exit code) + eb --search ^${cuda_easyconfig}|grep CUDA > /dev/null 2>&1 + # Check the exit code + if [ $? -ne 0 ]; then + eb_version=$(eb --version) + available_cuda_easyconfigs=$(eb --search ^CUDA-*.eb|grep CUDA) + + error="The easyconfig ${cuda_easyconfig} was not found in EasyBuild version:\n" + error="${error} ${eb_version}\n" + error="${error}You either need to give a different version of CUDA to install _or_ \n" + error="${error}use a different version of EasyBuild for the installation.\n" + error="${error}\nThe versions of available with the current eb command are:\n" + error="${error}${available_cuda_easyconfigs}" + fatal_error "${error}" + fi + + # We need the --rebuild option, as the CUDA module may or may not be on the + # `MODULEPATH` yet. Even if it is, we still want to redo this installation + # since it will provide the symlinked targets for the parts of the CUDA + # installation in the `.../versions/...` prefix + # We install the module in our `tmpdir` since we do not need the modulefile, + # we only care about providing the targets for the symlinks. + extra_args="--rebuild --installpath-modules=${tmpdir}" + + # We don't want hooks used in this install, we need a vanilla CUDA installation + touch "$tmpdir"/none.py + # shellcheck disable=SC2086 # Intended splitting of extra_args + eb --prefix="$tmpdir" ${extra_args} --accept-eula-for=CUDA --hooks="$tmpdir"/none.py --installpath="${cuda_install_parent}"/ "${cuda_easyconfig}" + ret=$? + if [ $ret -ne 0 ]; then + fatal_error "CUDA installation failed, please check EasyBuild logs..." + else + echo_green "CUDA installation at ${cuda_install_parent}/software/CUDA/${install_cuda_version} succeeded!" + fi + # clean up tmpdir + rm -rf "${tmpdir}" +fi diff --git a/gpu_support/nvidia/link_nvidia_host_libraries.sh b/gpu_support/nvidia/link_nvidia_host_libraries.sh new file mode 100755 index 0000000000..26760f0b82 --- /dev/null +++ b/gpu_support/nvidia/link_nvidia_host_libraries.sh @@ -0,0 +1,136 @@ +#!/bin/bash + +# This script links host libraries related to GPU drivers to a location where +# they can be found by the EESSI linker + +# Initialise our bash functions +TOPDIR=$(dirname $(realpath $BASH_SOURCE)) +source "$TOPDIR"/../../scripts/utils.sh + +# We rely on ldconfig to give us the location of the libraries on the host +command_name="ldconfig" +# We cannot use a version of ldconfig that's being shipped under CVMFS +exclude_prefix="/cvmfs" + +found_paths=() +# Always attempt to use /sbin/ldconfig +if [ -x "/sbin/$command_name" ]; then + found_paths+=("/sbin/$command_name") +fi +IFS=':' read -ra path_dirs <<< "$PATH" +for dir in "${path_dirs[@]}"; do + if [ "$dir" = "/sbin" ]; then + continue # we've already checked for $command_name in /sbin, don't need to do it twice + fi + if [[ ! "$dir" =~ ^$exclude_prefix ]]; then + if [ -x "$dir/$command_name" ]; then + found_paths+=("$dir/$command_name") + fi + fi +done + +if [ ${#found_paths[@]} -gt 0 ]; then + echo "Found $command_name in the following locations:" + printf -- "- %s\n" "${found_paths[@]}" + echo "Using first version" + host_ldconfig=${found_paths[0]} +else + error="$command_name not found in PATH or only found in paths starting with $exclude_prefix." + fatal_error $error +fi + +# Make sure EESSI is initialised (doesn't matter what version) +check_eessi_initialised + +# Find the CUDA version of the host CUDA drivers +# (making sure that this can still work inside prefix environment inside a container) +export LD_LIBRARY_PATH=/.singularity.d/libs:$LD_LIBRARY_PATH +nvidia_smi_command="nvidia-smi --query-gpu=driver_version --format=csv,noheader" +if $nvidia_smi_command > /dev/null; then + host_driver_version=$($nvidia_smi_command | tail -n1) + # If the first worked, this should work too + host_cuda_version=$(nvidia-smi -q --display=COMPUTE | grep CUDA | awk 'NF>1{print $NF}') +else + error="Failed to successfully execute\n $nvidia_smi_command\n" + fatal_error $error +fi + +# Let's make sure the driver libraries are not already in place +link_drivers=1 + +host_injections_nvidia_dir="/cvmfs/pilot.eessi-hpc.org/host_injections/nvidia/${EESSI_CPU_FAMILY}" +host_injection_driver_dir="${host_injections_nvidia_dir}/host" +host_injection_driver_version_file="$host_injection_driver_dir/driver_version.txt" +if [ -e "$host_injection_driver_version_file" ]; then + if grep -q "$host_driver_version" "$host_injection_driver_version_file"; then + echo_green "The host CUDA driver libraries have already been linked!" + link_drivers=0 + else + # There's something there but it is out of date + echo_yellow "Cleaning out outdated symlinks" + rm $host_injection_driver_dir/* + if [ $? -ne 0 ]; then + error="Unable to remove files under '$host_injection_driver_dir'." + fatal_error $error + fi + fi +fi + +drivers_linked=0 +if [ "$link_drivers" -eq 1 ]; then + if ! create_directory_structure "${host_injection_driver_dir}" ; then + fatal_error "No write permissions to directory ${host_injection_driver_dir}" + fi + cd ${host_injection_driver_dir} + # Need a small temporary space to hold a couple of files + temp_dir=$(mktemp -d) + + # Gather libraries on the host (_must_ be host ldconfig) + $host_ldconfig -p | awk '{print $NF}' > "$temp_dir"/libs.txt + # Allow for the fact that we may be in a container so the CUDA libs might be in there + ls /.singularity.d/libs/* >> "$temp_dir"/libs.txt 2>/dev/null + + # Leverage singularity to find the full list of libraries we should be linking to + echo_yellow "Downloading latest version of nvliblist.conf from Apptainer" + curl -o "$temp_dir"/nvliblist.conf https://raw.githubusercontent.com/apptainer/apptainer/main/etc/nvliblist.conf + + # Make symlinks to all the interesting libraries + grep '.so$' "$temp_dir"/nvliblist.conf | xargs -i grep {} "$temp_dir"/libs.txt | xargs -i ln -s {} + + # Inject driver and CUDA versions into dir + echo $host_driver_version > driver_version.txt + echo $host_cuda_version > cuda_version.txt + drivers_linked=1 + + # Remove the temporary directory when done + rm -r "$temp_dir" +fi + +# Make latest symlink for NVIDIA drivers +cd $host_injections_nvidia_dir +symlink="latest" +if [ -L "$symlink" ]; then + # Unless the drivers have been installed, leave the symlink alone + if [ "$drivers_linked" -eq 1 ]; then + ln -sf host latest + fi +else + # No link exists yet + ln -s host latest +fi + +# Make sure the libraries can be found by the EESSI linker +host_injection_linker_dir=${EESSI_EPREFIX/versions/host_injections} +if [ -L "$host_injection_linker_dir/lib" ]; then + target_path=$(readlink -f "$host_injection_linker_dir/lib") + if [ "$target_path" != "$$host_injections_nvidia_dir/latest" ]; then + cd $host_injection_linker_dir + ln -sf $host_injections_nvidia_dir/latest lib + fi +else + create_directory_structure $host_injection_linker_dir + cd $host_injection_linker_dir + ln -s $host_injections_nvidia_dir/latest lib +fi + +echo_green "Host NVIDIA gpu drivers linked successfully for EESSI" diff --git a/scripts/utils.sh b/scripts/utils.sh index d0da95e87f..b2be3f6221 100644 --- a/scripts/utils.sh +++ b/scripts/utils.sh @@ -14,7 +14,7 @@ ANY_ERROR_EXITCODE=1 function fatal_error() { echo_red "ERROR: $1" >&2 if [[ $# -gt 1 ]]; then - exit $2 + exit "$2" else exit "${ANY_ERROR_EXITCODE}" fi @@ -32,11 +32,57 @@ function check_exit_code { fi } +function check_eessi_initialised() { + if [[ -z "${EESSI_SOFTWARE_PATH}" ]]; then + fatal_error "EESSI has not been initialised!" + else + return 0 + fi +} + +function check_in_prefix_shell() { + # Make sure EPREFIX is defined + if [[ -z "${EPREFIX}" ]]; then + fatal_error "This script cannot be used without having first defined EPREFIX" + fi + if [[ ! ${SHELL} = ${EPREFIX}/bin/bash ]]; then + fatal_error "Not running in Gentoo Prefix environment, run '${EPREFIX}/startprefix' first!" + fi +} + +function create_directory_structure() { + # Ensure we are given a single path argument + if [ $# -ne 1 ]; then + echo_red "Function requires a single (relative or absolute) path argument" >&2 + return $ANY_ERROR_EXITCODE + fi + dir_structure="$1" + + # Attempt to create the directory structure + error_message=$(mkdir -p "$dir_structure" 2>&1) + return_code=$? + # If it fails be explicit about the error + if [ ${return_code} -ne 0 ]; then + real_dir=$(realpath -m "$dir_structure") + echo_red "Creating ${dir_structure} (real path ${real_dir}) failed with:\n ${error_message}" >&2 + else + # If we're creating it, our use case is that we want to be able to write there + # (this is a check in case the directory already existed) + if [ ! -w "${dir_structure}" ]; then + real_dir=$(realpath -m "$dir_structure") + echo_red "You do not have (required) write permissions to ${dir_structure} (real path ${real_dir})!" + return_code=$ANY_ERROR_EXITCODE + fi + fi + + return $return_code +} + function get_path_for_tool { tool_name=$1 tool_envvar_name=$2 - which_out=$(which ${tool_name} 2>&1) + which_out=$(which "${tool_name}" 2>&1) exit_code=$? if [[ ${exit_code} -eq 0 ]]; then echo "INFO: found tool ${tool_name} in PATH (${which_out})" >&2 @@ -68,7 +114,7 @@ function get_host_from_url { url=$1 re="(http|https)://([^/:]+)" if [[ $url =~ $re ]]; then - echo ${BASH_REMATCH[2]} + echo "${BASH_REMATCH[2]}" return 0 else echo "" @@ -80,7 +126,7 @@ function get_port_from_url { url=$1 re="(http|https)://[^:]+:([0-9]+)" if [[ $url =~ $re ]]; then - echo ${BASH_REMATCH[2]} + echo "${BASH_REMATCH[2]}" return 0 else echo "" @@ -90,7 +136,7 @@ function get_port_from_url { function get_ipv4_address { hname=$1 - hipv4=$(grep ${hname} /etc/hosts | grep -v '^[[:space:]]*#' | cut -d ' ' -f 1) + hipv4=$(grep "${hname}" /etc/hosts | grep -v '^[[:space:]]*#' | cut -d ' ' -f 1) # TODO try other methods if the one above does not work --> tool that verifies # what method can be used? echo "${hipv4}" From c06a7aa392a4d0b719d9ffa86bbafa1e684e54e0 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Fri, 1 Dec 2023 16:46:19 +0100 Subject: [PATCH 290/698] Update nvidia_dir with new repo name --- gpu_support/nvidia/link_nvidia_host_libraries.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gpu_support/nvidia/link_nvidia_host_libraries.sh b/gpu_support/nvidia/link_nvidia_host_libraries.sh index 26760f0b82..a03ce609a0 100755 --- a/gpu_support/nvidia/link_nvidia_host_libraries.sh +++ b/gpu_support/nvidia/link_nvidia_host_libraries.sh @@ -58,7 +58,7 @@ fi # Let's make sure the driver libraries are not already in place link_drivers=1 -host_injections_nvidia_dir="/cvmfs/pilot.eessi-hpc.org/host_injections/nvidia/${EESSI_CPU_FAMILY}" +host_injections_nvidia_dir="/cvmfs/software.eessi.io/host_injections/nvidia/${EESSI_CPU_FAMILY}" host_injection_driver_dir="${host_injections_nvidia_dir}/host" host_injection_driver_version_file="$host_injection_driver_dir/driver_version.txt" if [ -e "$host_injection_driver_version_file" ]; then From 24a4ebca030ea2ea55bb06d9b0d362f1f95ec8fd Mon Sep 17 00:00:00 2001 From: ocaisa Date: Fri, 1 Dec 2023 16:52:40 +0100 Subject: [PATCH 291/698] Update link_nvidia_host_libraries.sh --- gpu_support/nvidia/link_nvidia_host_libraries.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gpu_support/nvidia/link_nvidia_host_libraries.sh b/gpu_support/nvidia/link_nvidia_host_libraries.sh index a03ce609a0..6458be7fae 100755 --- a/gpu_support/nvidia/link_nvidia_host_libraries.sh +++ b/gpu_support/nvidia/link_nvidia_host_libraries.sh @@ -58,7 +58,7 @@ fi # Let's make sure the driver libraries are not already in place link_drivers=1 -host_injections_nvidia_dir="/cvmfs/software.eessi.io/host_injections/nvidia/${EESSI_CPU_FAMILY}" +host_injections_nvidia_dir="${EESSI_CVMFS_REPO}/host_injections/nvidia/${EESSI_CPU_FAMILY}" host_injection_driver_dir="${host_injections_nvidia_dir}/host" host_injection_driver_version_file="$host_injection_driver_dir/driver_version.txt" if [ -e "$host_injection_driver_version_file" ]; then From 953b17d6dcf774b50acb07af0dfa84371bf68ab5 Mon Sep 17 00:00:00 2001 From: Pablo Escobar Date: Sat, 2 Dec 2023 11:51:12 +0100 Subject: [PATCH 292/698] Prepend EESSI version to PS1 instead of overriding PS1 --- init/bash | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/init/bash b/init/bash index 84fe783bce..dbd09fdee5 100644 --- a/init/bash +++ b/init/bash @@ -13,7 +13,7 @@ source $(dirname "$BASH_SOURCE")/eessi_environment_variables # only continue if setting EESSI environment variables worked fine if [ $? -eq 0 ]; then - export PS1="[EESSI $EESSI_VERSION] $ " + export PS1="[EESSI $EESSI_VERSION]$PS1" # add location of commands provided by compat layer to $PATH; # see https://github.com/EESSI/software-layer/issues/52 From bf6dd6070215ae2a0df39c4001cf204737197450 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Sat, 2 Dec 2023 16:37:41 +0100 Subject: [PATCH 293/698] {2023.06}[2023a] OSU-Micro-Benchmarks v7.1-1 --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml index 0d5345eacc..8832da8ddd 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml @@ -22,3 +22,4 @@ easyconfigs: options: from-pr: 19339 - Qt5-5.15.10-GCCcore-12.3.0.eb + - OSU-Micro-Benchmarks-7.1-1-gompi-2023a.eb From 645041c31853181b9d46329cc709950b296368b5 Mon Sep 17 00:00:00 2001 From: Pablo Escobar Date: Mon, 4 Dec 2023 09:04:10 +0100 Subject: [PATCH 294/698] Use { instead of [ when adding EESSI version to PS1 --- init/bash | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/init/bash b/init/bash index dbd09fdee5..c2fd179849 100644 --- a/init/bash +++ b/init/bash @@ -13,7 +13,7 @@ source $(dirname "$BASH_SOURCE")/eessi_environment_variables # only continue if setting EESSI environment variables worked fine if [ $? -eq 0 ]; then - export PS1="[EESSI $EESSI_VERSION]$PS1" + export PS1="{EESSI $EESSI_VERSION}$PS1" # add location of commands provided by compat layer to $PATH; # see https://github.com/EESSI/software-layer/issues/52 From 76ae987cafc858b6ed9ae3c9f4f0a4a209b31d25 Mon Sep 17 00:00:00 2001 From: Thomas Roeblitz Date: Mon, 4 Dec 2023 21:16:14 +0100 Subject: [PATCH 295/698] do not use /dev/stdout --- init/bash | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/init/bash b/init/bash index 84fe783bce..0b3bdcb869 100644 --- a/init/bash +++ b/init/bash @@ -1,10 +1,17 @@ -# Allow for a silent mode -if [[ -v EESSI_SILENT ]]; then - # EESSI_SILENT set - output=/dev/null -else - output=/dev/stdout -fi +function show_msg { + msg=$1 + if [[ ! -v EESSI_SILENT ]]; then + echo "$msg" + fi +} + +## Allow for a silent mode +#if [[ -v EESSI_SILENT ]]; then +# # EESSI_SILENT set +# output=/dev/null +#else +# output=/dev/stdout +#fi # The following method should be safe, but might break if file is a symlink # (could switch to $(dirname "$(readlink -f "$BASH_SOURCE")") in that case) @@ -20,11 +27,11 @@ if [ $? -eq 0 ]; then export PATH=$EPREFIX/usr/bin:$EPREFIX/bin:$PATH # init Lmod - echo "Initializing Lmod..." >> $output + show_msg "Initializing Lmod..." source $EESSI_EPREFIX/usr/share/Lmod/init/bash # prepend location of modules for EESSI software stack to $MODULEPATH - echo "Prepending $EESSI_MODULEPATH to \$MODULEPATH..." >> $output + show_msg "Prepending $EESSI_MODULEPATH to \$MODULEPATH..." module use $EESSI_MODULEPATH #echo >> $output From 0768ae1bc627ede6bdfe1059d49739437b783b78 Mon Sep 17 00:00:00 2001 From: Thomas Roeblitz Date: Tue, 5 Dec 2023 09:06:43 +0100 Subject: [PATCH 296/698] work around permission denied for writing to /dev/stdout --- init/bash | 21 +++++++-------------- init/eessi_environment_variables | 32 ++++++++++++++++---------------- 2 files changed, 23 insertions(+), 30 deletions(-) diff --git a/init/bash b/init/bash index 0b3bdcb869..3adfb4bc9d 100644 --- a/init/bash +++ b/init/bash @@ -1,18 +1,11 @@ function show_msg { + # only echo msg if EESSI_SILENT is unset msg=$1 if [[ ! -v EESSI_SILENT ]]; then echo "$msg" fi } -## Allow for a silent mode -#if [[ -v EESSI_SILENT ]]; then -# # EESSI_SILENT set -# output=/dev/null -#else -# output=/dev/stdout -#fi - # The following method should be safe, but might break if file is a symlink # (could switch to $(dirname "$(readlink -f "$BASH_SOURCE")") in that case) source $(dirname "$BASH_SOURCE")/eessi_environment_variables @@ -34,12 +27,12 @@ if [ $? -eq 0 ]; then show_msg "Prepending $EESSI_MODULEPATH to \$MODULEPATH..." module use $EESSI_MODULEPATH - #echo >> $output - #echo "*** Known problems in the ${EESSI_VERSION} software stack ***" >> $output - #echo >> $output - #echo "1) ..." >> $output - #echo >> $output - #echo >> $output + #show_msg "" + #show_msg "*** Known problems in the ${EESSI_VERSION} software stack ***" + #show_msg "" + #show_msg "1) ..." + #show_msg "" + #show_msg "" echo "Environment set up to use EESSI (${EESSI_VERSION}), have fun!" diff --git a/init/eessi_environment_variables b/init/eessi_environment_variables index 42f4b6b76a..3584bfaf34 100644 --- a/init/eessi_environment_variables +++ b/init/eessi_environment_variables @@ -2,24 +2,24 @@ # $BASH_SOURCE points to correct path, see also http://mywiki.wooledge.org/BashFAQ/028 EESSI_INIT_DIR_PATH=$(dirname $(realpath $BASH_SOURCE)) -# Allow for a silent mode -if [[ -v EESSI_SILENT ]]; then - # EESSI_SILENT set - output=/dev/null -else - output=/dev/stdout -fi - function error() { echo -e "\e[31mERROR: $1\e[0m" >&2 false } +function show_msg { + # only echo msg if EESSI_SILENT is unset + msg=$1 + if [[ ! -v EESSI_SILENT ]]; then + echo "$msg" + fi +} + # set up minimal environment: $EESSI_PREFIX, $EESSI_VERSION, $EESSI_OS_TYPE, $EESSI_CPU_FAMILY, $EPREFIX source $EESSI_INIT_DIR_PATH/minimal_eessi_env if [ -d $EESSI_PREFIX ]; then - echo "Found EESSI repo @ $EESSI_PREFIX!" >> $output + show_msg "Found EESSI repo @ $EESSI_PREFIX!" export EESSI_EPREFIX=$EPREFIX if [ -d $EESSI_EPREFIX ]; then @@ -28,21 +28,21 @@ if [ -d $EESSI_PREFIX ]; then if [ "$EESSI_USE_ARCHDETECT" == "1" ]; then # if archdetect is enabled, use internal code export EESSI_SOFTWARE_SUBDIR=$(${EESSI_INIT_DIR_PATH}/eessi_archdetect.sh cpupath) - echo "archdetect says ${EESSI_SOFTWARE_SUBDIR}" >> $output + show_msg "archdetect says ${EESSI_SOFTWARE_SUBDIR}" elif [ "$EESSI_USE_ARCHSPEC" == "1" ]; then # note: eessi_software_subdir_for_host.py will pick up value from $EESSI_SOFTWARE_SUBDIR_OVERRIDE if it's defined! export EESSI_EPREFIX_PYTHON=$EESSI_EPREFIX/usr/bin/python3 export EESSI_SOFTWARE_SUBDIR=$($EESSI_EPREFIX_PYTHON ${EESSI_INIT_DIR_PATH}/eessi_software_subdir_for_host.py $EESSI_PREFIX) - echo "archspec says ${EESSI_SOFTWARE_SUBDIR}" >> $output + show_msg "archspec says ${EESSI_SOFTWARE_SUBDIR}" else error "Don't know how to detect host CPU, giving up!" fi if [ ! -z $EESSI_SOFTWARE_SUBDIR ]; then - echo "Using ${EESSI_SOFTWARE_SUBDIR} as software subdirectory." >> $output + show_msg "Using ${EESSI_SOFTWARE_SUBDIR} as software subdirectory." export EESSI_SOFTWARE_PATH=$EESSI_PREFIX/software/$EESSI_OS_TYPE/$EESSI_SOFTWARE_SUBDIR if [ ! -z $EESSI_BASIC_ENV ]; then - echo "Only setting up basic environment, so we're done" >> $output + show_msg "Only setting up basic environment, so we're done" elif [ -d $EESSI_SOFTWARE_PATH ]; then # Allow for the use of a custom MNS if [ -z ${EESSI_CUSTOM_MODULEPATH+x} ]; then @@ -55,13 +55,13 @@ if [ -d $EESSI_PREFIX ]; then fi EESSI_MODULEPATH=$EESSI_SOFTWARE_PATH/$EESSI_MODULE_SUBDIR else - echo "Using defined environment variable \$EESSI_CUSTOM_MODULEPATH to set EESSI_MODULEPATH." >> $output + show_msg "Using defined environment variable \$EESSI_CUSTOM_MODULEPATH to set EESSI_MODULEPATH." EESSI_MODULEPATH=$EESSI_CUSTOM_MODULEPATH fi if [ -d $EESSI_MODULEPATH ]; then export EESSI_MODULEPATH=$EESSI_MODULEPATH - echo "Using ${EESSI_MODULEPATH} as the directory to be added to MODULEPATH." >> $output + show_msg "Using ${EESSI_MODULEPATH} as the directory to be added to MODULEPATH." else error "EESSI module path at $EESSI_MODULEPATH not found!" false @@ -69,7 +69,7 @@ if [ -d $EESSI_PREFIX ]; then export LMOD_RC="$EESSI_SOFTWARE_PATH/.lmod/lmodrc.lua" if [ -f $LMOD_RC ]; then - echo "Found Lmod configuration file at $LMOD_RC" >> $output + show_msg "Found Lmod configuration file at $LMOD_RC" else error "Lmod configuration file not found at $LMOD_RC" fi From 30f85b7a388a33d8b8a7f3371d4dfc2def796b76 Mon Sep 17 00:00:00 2001 From: Pablo Escobar Date: Tue, 5 Dec 2023 11:26:14 +0100 Subject: [PATCH 297/698] Add space between EESSI version and PS1 --- init/bash | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/init/bash b/init/bash index c2fd179849..cd977b3c8e 100644 --- a/init/bash +++ b/init/bash @@ -13,7 +13,7 @@ source $(dirname "$BASH_SOURCE")/eessi_environment_variables # only continue if setting EESSI environment variables worked fine if [ $? -eq 0 ]; then - export PS1="{EESSI $EESSI_VERSION}$PS1" + export PS1="{EESSI $EESSI_VERSION} $PS1" # add location of commands provided by compat layer to $PATH; # see https://github.com/EESSI/software-layer/issues/52 From 7f6896a908fd0b43a6923e1cc8d8cceb0f7f6f33 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Tue, 5 Dec 2023 13:47:47 +0100 Subject: [PATCH 298/698] easystack for 2022b, start with foss 2022b --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2022b.yml | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2022b.yml diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2022b.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2022b.yml new file mode 100644 index 0000000000..39bae9c781 --- /dev/null +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2022b.yml @@ -0,0 +1,2 @@ +easyconfigs: + - foss-2022b.eb From 6f451f9fc70bc04611f85155b38db4e39f5bf445 Mon Sep 17 00:00:00 2001 From: Alexander Puck Neuwirth Date: Wed, 6 Dec 2023 15:22:54 +0100 Subject: [PATCH 299/698] {2023.06}[GCC/12.3.0] LHAPDF 6.5.4 --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml index 8832da8ddd..a5b7af25c7 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml @@ -23,3 +23,6 @@ easyconfigs: from-pr: 19339 - Qt5-5.15.10-GCCcore-12.3.0.eb - OSU-Micro-Benchmarks-7.1-1-gompi-2023a.eb + - LHAPDF-6.5.4-GCC-12.3.0.eb + options: + from-pr: 19363 From 5aea0868b4474220e8b2ec6a8c005b4a4a66801b Mon Sep 17 00:00:00 2001 From: Alexander Puck Neuwirth Date: Wed, 6 Dec 2023 15:27:48 +0100 Subject: [PATCH 300/698] Update eessi-2023.06-eb-4.8.2-2023a.yml --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml index a5b7af25c7..1a1804e2fb 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml @@ -23,6 +23,6 @@ easyconfigs: from-pr: 19339 - Qt5-5.15.10-GCCcore-12.3.0.eb - OSU-Micro-Benchmarks-7.1-1-gompi-2023a.eb - - LHAPDF-6.5.4-GCC-12.3.0.eb + - LHAPDF-6.5.4-GCC-12.3.0.eb: options: from-pr: 19363 From 91f5459f2b0bb50685e4853ecf37ce863d49a0a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Fri, 8 Dec 2023 22:31:58 +0100 Subject: [PATCH 301/698] add pybind and GDAL --- .../2023.06/eessi-2023.06-eb-4.8.2-2022b.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2022b.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2022b.yml index 39bae9c781..a90a34d6ab 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2022b.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2022b.yml @@ -1,2 +1,8 @@ easyconfigs: - foss-2022b.eb + - pybind11-2.10.3-GCCcore-12.2.0.eb: + # avoid indirect dependency on old CMake version built with GCCcore/10.2.0 via Catch2 build dependency; + # see https://github.com/easybuilders/easybuild-easyconfigs/pull/19270 + options: + from-pr: 19270 + - GDAL-3.6.2-foss-2022b.eb From 65a3aace9af3483669893490c2ba614e663e5cda Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Fri, 8 Dec 2023 22:36:45 +0100 Subject: [PATCH 302/698] rename pilot to check_missing --- .github/workflows/test-software.eessi.io.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test-software.eessi.io.yml b/.github/workflows/test-software.eessi.io.yml index 6756bd8854..8c97601611 100644 --- a/.github/workflows/test-software.eessi.io.yml +++ b/.github/workflows/test-software.eessi.io.yml @@ -4,7 +4,7 @@ on: [push, pull_request, workflow_dispatch] permissions: contents: read # to fetch code (actions/checkout) jobs: - pilot: + check_missing: runs-on: ubuntu-22.04 strategy: fail-fast: false From 6602ed8b40b78407aa5856eeb4882970f7afe331 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Sat, 9 Dec 2023 22:37:42 +0100 Subject: [PATCH 303/698] add LERC with from-pr for sanity check fix --- .../2023.06/eessi-2023.06-eb-4.8.2-2022b.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2022b.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2022b.yml index a90a34d6ab..f27e928364 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2022b.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2022b.yml @@ -5,4 +5,9 @@ easyconfigs: # see https://github.com/easybuilders/easybuild-easyconfigs/pull/19270 options: from-pr: 19270 + - LERC-4.0.0-GCCcore-12.2.0.eb: + # avoid RPATH-related sanity check errors by compiling LERC's test binary in postinstallcmds; + # see https://github.com/easybuilders/easybuild-easyconfigs/pull/19386 + options: + from-pr: 19386 - GDAL-3.6.2-foss-2022b.eb From 3ba0f24de3bd5eec7fcafeea9da28c596aac91bb Mon Sep 17 00:00:00 2001 From: Richard Top Date: Tue, 12 Dec 2023 13:52:38 +0000 Subject: [PATCH 304/698] {2023.06}[foss/2022b] Qt5 v5.15.7 --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2022b.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2022b.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2022b.yml index 39bae9c781..30e89c4485 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2022b.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2022b.yml @@ -1,2 +1,3 @@ easyconfigs: - foss-2022b.eb + - Qt5-5.15.7-GCCcore-12.2.0.eb From aa572b561a95aefdec8d1d44f9842f66f812600d Mon Sep 17 00:00:00 2001 From: Richard Top Date: Tue, 12 Dec 2023 16:28:25 +0000 Subject: [PATCH 305/698] added reference to pr:19339 --- .../2023.06/eessi-2023.06-eb-4.8.2-2022b.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2022b.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2022b.yml index 30e89c4485..c618089663 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2022b.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2022b.yml @@ -1,3 +1,5 @@ easyconfigs: - foss-2022b.eb - - Qt5-5.15.7-GCCcore-12.2.0.eb + - Qt5-5.15.7-GCCcore-12.2.0.eb: + options: + from-pr: 19339 From 70bba82f1132bb45571ff3759ba97f059aa8df82 Mon Sep 17 00:00:00 2001 From: Alexander Puck Neuwirth Date: Fri, 15 Dec 2023 10:24:06 +0100 Subject: [PATCH 306/698] {2023.06}[GCC/12.3.0] LoopTools 2.15 --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml index 1a1804e2fb..fab52b4468 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml @@ -26,3 +26,6 @@ easyconfigs: - LHAPDF-6.5.4-GCC-12.3.0.eb: options: from-pr: 19363 + - LoopTools-2.15-GCC-12.3.0.eb: + options: + from-pr: 19397 From 10751d25858239fe78465a5e523fc0077ac4b487 Mon Sep 17 00:00:00 2001 From: Neves-P Date: Fri, 15 Dec 2023 15:15:14 +0100 Subject: [PATCH 307/698] Add pre test hook to skip netCDF tests --- eb_hooks.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/eb_hooks.py b/eb_hooks.py index 6fe92c7f7b..2081bfedab 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -366,6 +366,18 @@ def pre_test_hook_ignore_failing_tests_SciPybundle(self, *args, **kwargs): if self.name == 'SciPy-bundle' and self.version in ['2021.10', '2023.07'] and cpu_target == CPU_TARGET_NEOVERSE_V1: self.cfg['testopts'] = "|| echo ignoring failing tests" +def pre_test_hook_ignore_failing_tests_netCDF(self, *args, **kwargs): + """ + Pre-test hook for SciPy-bundle: skip failing tests for selected netCDF versions on neoverse_v1 + cfr. https://github.com/EESSI/software-layer/issues/325 + The following tests are problematic: + 163 - nc_test4_run_par_test (Timeout) + 190 - h5_test_run_par_tests (Timeout) + A few other tests are skipped in the easyconfig and patches for similar issues, see above issue for details. + """ + cpu_target = get_eessi_envvar('EESSI_SOFTWARE_SUBDIR') + if self.name == 'netCDF' and self.version == '4.9.2' and cpu_target == CPU_TARGET_NEOVERSE_V1: + self.cfg['testopts'] = "|| echo ignoring failing tests" def pre_single_extension_hook(ext, *args, **kwargs): """Main pre-configure hook: trigger custom functions based on software name.""" From 94206acbcc02da084ba4d5d85219d9ae92f885ac Mon Sep 17 00:00:00 2001 From: Neves-P Date: Fri, 15 Dec 2023 15:16:05 +0100 Subject: [PATCH 308/698] Add correct issue reference in hook --- eb_hooks.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eb_hooks.py b/eb_hooks.py index 2081bfedab..3074eb8ee3 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -369,7 +369,7 @@ def pre_test_hook_ignore_failing_tests_SciPybundle(self, *args, **kwargs): def pre_test_hook_ignore_failing_tests_netCDF(self, *args, **kwargs): """ Pre-test hook for SciPy-bundle: skip failing tests for selected netCDF versions on neoverse_v1 - cfr. https://github.com/EESSI/software-layer/issues/325 + cfr. https://github.com/EESSI/software-layer/issues/425 The following tests are problematic: 163 - nc_test4_run_par_test (Timeout) 190 - h5_test_run_par_tests (Timeout) From db150f4838c47d25e7a683ae239c44b25dd88a6d Mon Sep 17 00:00:00 2001 From: Neves-P Date: Fri, 15 Dec 2023 16:34:42 +0100 Subject: [PATCH 309/698] Fix hook --- eb_hooks.py | 1 + 1 file changed, 1 insertion(+) diff --git a/eb_hooks.py b/eb_hooks.py index 3074eb8ee3..bf5da0cc64 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -430,6 +430,7 @@ def pre_single_extension_isoband(ext, *args, **kwargs): 'ESPResSo': pre_test_hook_ignore_failing_tests_ESPResSo, 'FFTW.MPI': pre_test_hook_ignore_failing_tests_FFTWMPI, 'SciPy-bundle': pre_test_hook_ignore_failing_tests_SciPybundle, + 'netCDF': pre_test_hook_ignore_failing_tests_netCDF, } PRE_SINGLE_EXTENSION_HOOKS = { From cf4fc13080e82caaf18694a95875107a04687cf7 Mon Sep 17 00:00:00 2001 From: Thomas Roeblitz Date: Fri, 15 Dec 2023 21:43:02 +0100 Subject: [PATCH 310/698] {2023.06}[gfbf/2023a] R 4.3.2 --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml index fab52b4468..a9323d3df6 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml @@ -29,3 +29,6 @@ easyconfigs: - LoopTools-2.15-GCC-12.3.0.eb: options: from-pr: 19397 + - R-4.3.2-gfbf-2023a.eb: + options: + from-pr: 19185 From 8ac3f60142d392644cc2d6d3361c8ef91c43c845 Mon Sep 17 00:00:00 2001 From: Thomas Roeblitz Date: Fri, 15 Dec 2023 22:09:29 +0100 Subject: [PATCH 311/698] {2023.06}[gompi/2023a] CDO 2.2.2 --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml index fab52b4468..06e6258e85 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml @@ -29,3 +29,4 @@ easyconfigs: - LoopTools-2.15-GCC-12.3.0.eb: options: from-pr: 19397 + - CDO-2.2.2-gompi-2023a.eb From 7321ffe247dcf69975108480ea8eca9429a20bad Mon Sep 17 00:00:00 2001 From: TopRichard <121792457+TopRichard@users.noreply.github.com> Date: Sun, 17 Dec 2023 06:49:10 +0100 Subject: [PATCH 312/698] Update eessi-2023.06-eb-4.8.2-2022b.yml Trying to build HarfBuzz-5.3.1 before Qt5 --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2022b.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2022b.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2022b.yml index c618089663..69ffb750a2 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2022b.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2022b.yml @@ -1,5 +1,6 @@ easyconfigs: - foss-2022b.eb - - Qt5-5.15.7-GCCcore-12.2.0.eb: + - HarfBuzz-5.3.1-GCCcore-12.2.0.eb: options: from-pr: 19339 + - Qt5-5.15.7-GCCcore-12.2.0.eb From 363f42c9bdaa905c0c094f69479b62520ae3a1e0 Mon Sep 17 00:00:00 2001 From: Thomas Roeblitz Date: Sun, 17 Dec 2023 10:53:00 +0100 Subject: [PATCH 313/698] {2023.06}[foss/2023a] R-bundle-CRAN 2023.12 --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml index a9323d3df6..f6d01ee828 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml @@ -32,3 +32,6 @@ easyconfigs: - R-4.3.2-gfbf-2023a.eb: options: from-pr: 19185 + - R-bundle-CRAN-2023.12-foss-2023a.eb: + options: + from-pr: 19170 From 69fe0569451b708ce13ba506854d44f383b213f2 Mon Sep 17 00:00:00 2001 From: Thomas Roeblitz Date: Sun, 17 Dec 2023 18:12:04 +0100 Subject: [PATCH 314/698] fix for LERC sanity check RPATH failure --- .../2023.06/eessi-2023.06-eb-4.8.2-2023a.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml index f6d01ee828..7371ee2176 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml @@ -32,6 +32,11 @@ easyconfigs: - R-4.3.2-gfbf-2023a.eb: options: from-pr: 19185 + - LERC-4.0.0-GCCcore-12.3.0.eb: + # avoid RPATH-related sanity check errors by compiling LERC's test binary in postinstallcmds; + # see https://github.com/easybuilders/easybuild-easyconfigs/pull/19386 + options: + from-pr: 19386 - R-bundle-CRAN-2023.12-foss-2023a.eb: options: from-pr: 19170 From 34b7e850bd8ece75a0d01fae5ddc62412701f945 Mon Sep 17 00:00:00 2001 From: Thomas Roeblitz Date: Mon, 18 Dec 2023 11:36:14 +0100 Subject: [PATCH 315/698] use patch for MPFR --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml index 7371ee2176..c5fb6a0425 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml @@ -32,6 +32,9 @@ easyconfigs: - R-4.3.2-gfbf-2023a.eb: options: from-pr: 19185 + - MPFR-4.2.0-GCCcore-12.3.0.eb: + options: + from-pr: 19438 - LERC-4.0.0-GCCcore-12.3.0.eb: # avoid RPATH-related sanity check errors by compiling LERC's test binary in postinstallcmds; # see https://github.com/easybuilders/easybuild-easyconfigs/pull/19386 From c45f5cab3b0a542d4964cc293c7dac8c9b0686cb Mon Sep 17 00:00:00 2001 From: Pedro Santos Neves <10762799+Neves-P@users.noreply.github.com> Date: Tue, 19 Dec 2023 11:51:36 +0100 Subject: [PATCH 316/698] Add Boost-1.82.0-GCC-12.3.0.eb --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml index a9323d3df6..bae536ff9b 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml @@ -32,3 +32,4 @@ easyconfigs: - R-4.3.2-gfbf-2023a.eb: options: from-pr: 19185 + - Boost-1.82.0-GCC-12.3.0.eb From ec94fd6db01e2e765834d80b034be05e197b0c9f Mon Sep 17 00:00:00 2001 From: Pedro Santos Neves <10762799+Neves-P@users.noreply.github.com> Date: Tue, 19 Dec 2023 12:03:32 +0100 Subject: [PATCH 317/698] Add netCDF-4.9.2-gompi-2023a.eb --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml index a9323d3df6..299616b396 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml @@ -32,3 +32,4 @@ easyconfigs: - R-4.3.2-gfbf-2023a.eb: options: from-pr: 19185 + - netCDF-4.9.2-gompi-2023a.eb From 004351a037c62dbacfbe41cd2d5a6a0678ce76d9 Mon Sep 17 00:00:00 2001 From: Pedro Santos Neves <10762799+Neves-P@users.noreply.github.com> Date: Tue, 19 Dec 2023 12:41:07 +0100 Subject: [PATCH 318/698] Add FFmpeg-6.0-GCCcore-12.3.0.eb --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml index a9323d3df6..0f538c08d4 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml @@ -32,3 +32,4 @@ easyconfigs: - R-4.3.2-gfbf-2023a.eb: options: from-pr: 19185 + - FFmpeg-6.0-GCCcore-12.3.0.eb From c87714f0106bc13415d0d97e8749b37216757baa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Tue, 19 Dec 2023 15:48:28 +0100 Subject: [PATCH 319/698] explicitly set/override EESSI_CPU_FAMILY based on EESSI_SOFTWARE_SUBDIR_OVERRIDE --- .github/workflows/test-software.eessi.io.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/test-software.eessi.io.yml b/.github/workflows/test-software.eessi.io.yml index 8c97601611..e6c7a49ada 100644 --- a/.github/workflows/test-software.eessi.io.yml +++ b/.github/workflows/test-software.eessi.io.yml @@ -35,6 +35,9 @@ jobs: run: | export EESSI_SOFTWARE_SUBDIR_OVERRIDE=${{matrix.EESSI_SOFTWARE_SUBDIR_OVERRIDE}} source /cvmfs/software.eessi.io/versions/${{matrix.EESSI_VERSION}}/init/bash + # set $EESSI_CPU_FAMILY to the CPU architecture that corresponds to $EESSI_SOFTWARE_SUBDIR_OVERRIDE (part before the first slash), + # to prevent issues with checks in the Easybuild configuration that use this variable + export EESSI_CPU_FAMILY=${EESSI_SOFTWARE_SUBDIR_OVERRIDE%%/*} module load EasyBuild which eb eb --version From 7e71f59f6aed081367a6aee89d0b11a7f338a205 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Tue, 19 Dec 2023 15:58:32 +0100 Subject: [PATCH 320/698] add the same check for the other check missing installations task --- .github/workflows/test-software.eessi.io.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/test-software.eessi.io.yml b/.github/workflows/test-software.eessi.io.yml index e6c7a49ada..3ac341a177 100644 --- a/.github/workflows/test-software.eessi.io.yml +++ b/.github/workflows/test-software.eessi.io.yml @@ -56,6 +56,9 @@ jobs: run: | export EESSI_SOFTWARE_SUBDIR_OVERRIDE=${{matrix.EESSI_SOFTWARE_SUBDIR_OVERRIDE}} source /cvmfs/software.eessi.io/versions/${{matrix.EESSI_VERSION}}/init/bash + # set $EESSI_CPU_FAMILY to the CPU architecture that corresponds to $EESSI_SOFTWARE_SUBDIR_OVERRIDE (part before the first slash), + # to prevent issues with checks in the Easybuild configuration that use this variable + export EESSI_CPU_FAMILY=${EESSI_SOFTWARE_SUBDIR_OVERRIDE%%/*} module load EasyBuild which eb eb --version From fcc7ddbab8a57d419736d8a0857943569fdb587c Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Tue, 19 Dec 2023 18:36:31 +0100 Subject: [PATCH 321/698] Also recreated lmodrc when it was changed in a PR --- EESSI-install-software.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/EESSI-install-software.sh b/EESSI-install-software.sh index f6087b3cfe..8170897726 100755 --- a/EESSI-install-software.sh +++ b/EESSI-install-software.sh @@ -229,7 +229,8 @@ done echo ">> Creating/updating Lmod cache..." export LMOD_RC="${EASYBUILD_INSTALLPATH}/.lmod/lmodrc.lua" -if [ ! -f $LMOD_RC ]; then +lmodrc_changed=$(cat ${pr_diff} | grep '^+++' | cut -f2 -d' ' | sed 's@^[a-z]/@@g' | grep '^create_lmodrc.py$' > /dev/null; echo $?) +if [ ! -f $LMOD_RC ] || [ ${lmodrc_changed} == '0' ]; then python3 $TOPDIR/create_lmodrc.py ${EASYBUILD_INSTALLPATH} check_exit_code $? "$LMOD_RC created" "Failed to create $LMOD_RC" fi From 2b09d1c474e399cd1fa6634e18a5234a2e16ac7d Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Tue, 19 Dec 2023 18:41:43 +0100 Subject: [PATCH 322/698] Modified lmodrc to add CUDA support. It now checks if you load the CUDA module if a full CUDA SDK was also installed in host_injections (otherwise you have dead links to the non-redistributable parts of the CUDA SDK). Furthermore, for GPU enabled modules, it checks if the drivers have been linked in in the host_injections directory. It also checks if they are new enough to be used with the CUDA version that was used as a dependency for the GPU-enabled module you are trying to load. If any of these checks is not true, it prints an error message with advice on how to proceed. --- create_lmodrc.py | 76 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) diff --git a/create_lmodrc.py b/create_lmodrc.py index ae65153a20..adf221ecba 100755 --- a/create_lmodrc.py +++ b/create_lmodrc.py @@ -17,6 +17,81 @@ } """ +GPU_LMOD_RC ="""require("strict") +local hook = require("Hook") +local open = io.open + +local function read_file(path) + local file = open(path, "rb") -- r read mode and b binary mode + if not file then return nil end + local content = file:read "*a" -- *a or *all reads the whole file + file:close() + return content +end + +local function cuda_enabled_load_hook(t) + local frameStk = require("FrameStk"):singleton() + local mt = frameStk:mt() + local simpleName = string.match(t.modFullName, "(.-)/") + -- If we try to load CUDA itself, check if the full CUDA SDK was installed on the host in host_injections. + -- This is required for end users to build additional CUDA software. If the full SDK isn't present, refuse + -- to load the CUDA module and print an informative message on how to set up GPU support for EESSI + if simpleName == 'CUDA' then + -- get the full host_injections path + local hostInjections = string.gsub(os.getenv('EESSI_SOFTWARE_PATH') or "", 'versions', 'host_injections') + -- build final path where the CUDA software should be installed + local cudaEasyBuildDir = hostInjections .. "/software/" .. t.modFullName .. "/easybuild" + local cudaDirExists = isDir(cudaEasyBuildDir) + if not cudaDirExists then + local advice = "but while the module file exists, the actual software is not entirely shipped with EESSI " + advice = advice .. "due to licencing. In order to be able to use the CUDA module, please follow the " + advice = advice .. "instructions available under https://www.eessi.io/docs/gpu/ \\n" + LmodError("\\nYou requested to load ", simpleName, " ", advice) + end + end + -- when loading CUDA enabled modules check if the necessary driver libraries are accessible to the EESSI linker, + -- otherwise, refuse to load the requested module and print error message + local haveGpu = mt:haveProperty(simpleName,"arch","gpu") + if haveGpu then + local arch = os.getenv("EESSI_CPU_FAMILY") or "" + local cudaVersionFile = "/cvmfs/pilot.eessi-hpc.org/host_injections/nvidia/" .. arch .. "/latest/cuda_version.txt" + local cudaDriverFile = "/cvmfs/pilot.eessi-hpc.org/host_injections/nvidia/" .. arch .. "/latest/libcuda.so" + local cudaDriverExists = isFile(cudaDriverFile) + local singularityCudaExists = isFile("/.singularity.d/libs/libcuda.so") + if not (cudaDriverExists or singularityCudaExists) then + local advice = "which relies on the CUDA runtime environment and driver libraries. " + advice = advice .. "In order to be able to use the module, please follow the instructions " + advice = advice .. "available under https://www.eessi.io/docs/gpu/ \\n" + LmodError("\\nYou requested to load ", simpleName, " ", advice) + else + -- CUDA driver exists, now we check its version to see if an update is needed + if cudaDriverExists then + local cudaVersion = read_file(cudaVersionFile) + local cudaVersion_req = os.getenv("EESSICUDAVERSION") + -- driver CUDA versions don't give a patch version for CUDA + local major, minor = string.match(cudaVersion, "(%d+)%.(%d+)") + local major_req, minor_req, patch_req = string.match(cudaVersion_req, "(%d+)%.(%d+)%.(%d+)") + local driver_libs_need_update = false + if major < major_req then + driver_libs_need_update = true + elseif major == major_req then + if minor < minor_req then + driver_libs_need_update = true + end + end + if driver_libs_need_update == true then + local advice = "but the module you want to load requires CUDA " .. cudaVersion_req .. ". " + advice = advice .. "Please update your CUDA driver libraries and then follow the instructions " + advice = advice .. "under https://www.eessi.io/docs/gpu/ to let EESSI know about the update.\\n" + LmodError("\\nYour driver CUDA version is ", cudaVersion, " ", advice) + end + end + end + end +end + +hook.register("load", cuda_enabled_load_hook) +""" def error(msg): sys.stderr.write("ERROR: %s\n" % msg) @@ -36,6 +111,7 @@ def error(msg): 'dot_lmod': DOT_LMOD, 'prefix': prefix, } +lmodrc_txt += '\n' + GPU_LMOD_RC try: os.makedirs(os.path.dirname(lmodrc_path), exist_ok=True) with open(lmodrc_path, 'w') as fp: From 62e70ba9474638b78edeafbb3886e432b7e88e7c Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Tue, 19 Dec 2023 18:44:50 +0100 Subject: [PATCH 323/698] Adapt created_lmodrc.py for the new domain --- create_lmodrc.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/create_lmodrc.py b/create_lmodrc.py index adf221ecba..9c007c15e6 100755 --- a/create_lmodrc.py +++ b/create_lmodrc.py @@ -54,8 +54,8 @@ local haveGpu = mt:haveProperty(simpleName,"arch","gpu") if haveGpu then local arch = os.getenv("EESSI_CPU_FAMILY") or "" - local cudaVersionFile = "/cvmfs/pilot.eessi-hpc.org/host_injections/nvidia/" .. arch .. "/latest/cuda_version.txt" - local cudaDriverFile = "/cvmfs/pilot.eessi-hpc.org/host_injections/nvidia/" .. arch .. "/latest/libcuda.so" + local cudaVersionFile = "/cvmfs/software.eessi.io/host_injections/nvidia/" .. arch .. "/latest/cuda_version.txt" + local cudaDriverFile = "/cvmfs/software.eessi.io/host_injections/nvidia/" .. arch .. "/latest/libcuda.so" local cudaDriverExists = isFile(cudaDriverFile) local singularityCudaExists = isFile("/.singularity.d/libs/libcuda.so") if not (cudaDriverExists or singularityCudaExists) then From 045c099b3c4eee0a742a5859a32ba2142e21cc9c Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Tue, 19 Dec 2023 18:52:52 +0100 Subject: [PATCH 324/698] Add post_sanitycheck hook for CUDA in order to only ship the files we are allowed to redistribute. It will create symlinks to the host_injections directory for the rest of the files that we are not allowed to redistribute. Additionally, create a hook to inject the GPU lmod property when creating module files for modules that have CUDA as a dependency --- eb_hooks.py | 88 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) diff --git a/eb_hooks.py b/eb_hooks.py index 6fe92c7f7b..78580c14b9 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -68,6 +68,9 @@ def parse_hook(ec, *args, **kwargs): if ec.name in PARSE_HOOKS: PARSE_HOOKS[ec.name](ec, eprefix) + # inject the GPU property (if required) + ec = inject_gpu_property(ec) + def post_ready_hook(self, *args, **kwargs): """ @@ -247,6 +250,12 @@ def pre_configure_hook(self, *args, **kwargs): PRE_CONFIGURE_HOOKS[self.name](self, *args, **kwargs) +def post_sanitycheck_hook(self, *args, **kwargs): + """Main post-sanity-check hook: trigger custom functions based on software name.""" + if self.name in POST_SANITYCHECK_HOOKS: + POST_SANITYCHECK_HOOKS[self.name](self, *args, **kwargs) + + def pre_configure_hook_openblas_optarch_generic(self, *args, **kwargs): """ Pre-configure hook for OpenBLAS: add DYNAMIC_ARCH=1 to build/test/install options when using --optarch=GENERIC @@ -393,6 +402,81 @@ def pre_single_extension_isoband(ext, *args, **kwargs): ext.cfg['preinstallopts'] = "sed -i 's/SIGSTKSZ/32768/g' src/testthat/vendor/catch.h && " +def post_sanitycheck_cuda(self, *args, **kwargs): + """Delete CUDA files we are not allowed to ship and replace them with a symlink to a possible installation under host_injections.""" + print_msg("Replacing CUDA stuff we cannot ship with symlinks...") + # read CUDA EULA + eula_path = os.path.join(self.installdir, "EULA.txt") + tmp_buffer = [] + with open(eula_path) as infile: + copy = False + for line in infile: + if line.strip() == "2.6. Attachment A": + copy = True + continue + elif line.strip() == "2.7. Attachment B": + copy = False + continue + elif copy: + tmp_buffer.append(line) + # create whitelist without file extensions, they're not really needed and they only complicate things + whitelist = ['EULA', 'README'] + file_extensions = [".so", ".a", ".h", ".bc"] + for tmp in tmp_buffer: + for word in tmp.split(): + if any(ext in word for ext in file_extensions): + whitelist.append(word.split(".")[0]) + whitelist = list(set(whitelist)) + # Do some quick checks for things we should or shouldn't have in the list + if "nvcc" in whitelist: + raise EasyBuildError("Found 'nvcc' in whitelist: %s" % whitelist) + if "libcudart" not in whitelist: + raise EasyBuildError("Did not find 'libcudart' in whitelist: %s" % whitelist) + # iterate over all files in the CUDA path + for root, dirs, files in os.walk(self.installdir): + for filename in files: + # we only really care about real files, i.e. not symlinks + if not os.path.islink(os.path.join(root, filename)): + # check if the current file is part of the whitelist + basename = filename.split(".")[0] + if basename not in whitelist: + # if it is not in the whitelist, delete the file and create a symlink to host_injections + source = os.path.join(root, filename) + target = source.replace("versions", "host_injections") + # Make sure source and target are not the same + if source == target: + raise EasyBuildError("Source (%s) and target (%s) are the same location, are you sure you are" + "using this hook for an EESSI installation?") + os.remove(source) + # Using os.symlink requires the existence of the target directory, so we use os.system + system_command="ln -s '%s' '%s'" % (target, source) + if os.system(system_command) != 0: + raise EasyBuildError("Failed to create symbolic link: %s" % system_command) + + +def inject_gpu_property(ec): + ec_dict = ec.asdict() + # Check if CUDA is in the dependencies, if so add the GPU Lmod tag + if ("CUDA" in [dep[0] for dep in iter(ec_dict["dependencies"])]): + ec.log.info("[parse hook] Injecting gpu as Lmod arch property and envvar with CUDA version") + key = "modluafooter" + value = 'add_property("arch","gpu")' + cuda_version = 0 + for dep in iter(ec_dict["dependencies"]): + # Make CUDA a build dependency only (rpathing saves us from link errors) + if "CUDA" in dep[0]: + cuda_version = dep[1] + ec_dict["dependencies"].remove(dep) + ec_dict["builddependencies"].append(dep) if dep not in ec_dict["builddependencies"] else ec_dict["builddependencies"] + value = "\n".join([value, 'setenv("EESSICUDAVERSION","%s")' % cuda_version]) + if key in ec_dict: + if not value in ec_dict[key]: + ec[key] = "\n".join([ec_dict[key], value]) + else: + ec[key] = value + return ec + + PARSE_HOOKS = { 'CGAL': parse_hook_cgal_toolchainopts_precise, 'fontconfig': parse_hook_fontconfig_add_fonts, @@ -424,3 +508,7 @@ def pre_single_extension_isoband(ext, *args, **kwargs): 'isoband': pre_single_extension_isoband, 'testthat': pre_single_extension_testthat, } + +POST_SANITYCHECK_HOOKS = { + 'CUDA': post_sanitycheck_cuda, +} From 4a4c6e768d1b469baf4476a32f9721f789ce341a Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Tue, 19 Dec 2023 18:53:37 +0100 Subject: [PATCH 325/698] Add (the redistributable part of) CUDA to the softare stack --- .../2023.06/eessi-2023.06-eb-4.8.2-system.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-system.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-system.yml index f02b9f2802..86d6931820 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-system.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-system.yml @@ -5,3 +5,7 @@ easyconfigs: - Nextflow-23.10.0.eb: options: from-pr: 19172 + - CUDA-12.1.1.eb: + options: + include-easyblocks-from-pr: 3045 + accept-eula-for: CUDA From 0346b22291671d5f03343b11e9a919f13f3ab9c5 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Tue, 19 Dec 2023 18:55:15 +0100 Subject: [PATCH 326/698] Add CUDA-Samples to the build list --- .../2023.06/eessi-2023.06-eb-4.8.2-2023a.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml index 567db44e42..0537c448e5 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml @@ -35,3 +35,9 @@ easyconfigs: - Boost-1.82.0-GCC-12.3.0.eb - netCDF-4.9.2-gompi-2023a.eb - FFmpeg-6.0-GCCcore-12.3.0.eb + - CUDA-Samples-12.1-GCC-12.3.0-CUDA-12.1.1.eb + # use easyconfig that only install subset of CUDA samples, + # to circumvent problem with nvcc linking to glibc of host OS; + # see https://github.com/easybuilders/easybuild-easyconfigs/pull/19189 + options: + from-pr: 19189 From 2b1054f7b393adf590201b5a67ddf5622ccd1b3f Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Tue, 19 Dec 2023 19:32:44 +0100 Subject: [PATCH 327/698] install_scripts.sh should install the scripts required to do install the required GPU components in host_injections. The EESSI-install-software.sh has been modified to run install_scripts.sh early on and then run the actual installed scripts to install a full cuda SDK and drivers. This should enable building and using CUDA software anywhere down the line in this same environment --- EESSI-install-software.sh | 16 ++++++++++ install_scripts.sh | 62 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 78 insertions(+) create mode 100755 install_scripts.sh diff --git a/EESSI-install-software.sh b/EESSI-install-software.sh index f6087b3cfe..4aac3772cf 100755 --- a/EESSI-install-software.sh +++ b/EESSI-install-software.sh @@ -187,6 +187,22 @@ fi # assume there's only one diff file that corresponds to the PR patch file pr_diff=$(ls [0-9]*.diff | head -1) +# install any additional required scripts +# order is important: these are needed to install a full CUDA SDK in host_injections +install_scripts_changed=$(cat ${pr_diff} | grep '^+++' | cut -f2 -d' ' | sed 's@^[a-z]/@@g' | grep '^install_scripts.sh$' > /dev/null; echo $?) +if [ ${install_scripts_changed} == '0' ]; then + # for now, this just reinstalls all scripts. Note the most elegant, but works + ${TOPDIR}/install_scripts.sh --prefix ${EESSI_CVMFS_REPO} +fi + +# Install full CUDA SDK in host_injections +# Hardcode this for now, see if it works +# TODO: We should make a nice yaml and loop over all CUDA versions in that yaml to figure out what to install +${EESSI_CVMFS_REPO}/gpu_support/nvidia/install_cuda_host_injections.sh 12.1.1 + +# Install drivers in host_injections +${EESSI_CVMFS_REPO}/gpu_support/nvidia/link_nvidia_host_libraries.sh + # use PR patch file to determine in which easystack files stuff was added for easystack_file in $(cat ${pr_diff} | grep '^+++' | cut -f2 -d' ' | sed 's@^[a-z]/@@g' | grep '^easystacks/.*yml$' | egrep -v 'known-issues|missing'); do diff --git a/install_scripts.sh b/install_scripts.sh new file mode 100755 index 0000000000..209d953c88 --- /dev/null +++ b/install_scripts.sh @@ -0,0 +1,62 @@ +#!/bin/bash +# +# Script to install scripts from the software-layer repo into the EESSI software stack + +display_help() { + echo "usage: $0 [OPTIONS]" + echo " -p | --prefix - prefix to copy the scripts to" + echo " -h | --help - display this usage information" +} + + +POSITIONAL_ARGS=() + +while [[ $# -gt 0 ]]; do + case $1 in + -o|--prefix) + INSTALL_PREFIX="$2" + shift 2 + ;; + -h|--help) + display_help # Call your function + # no shifting needed here, we're done. + exit 0 + ;; + -*|--*) + echo "Error: Unknown option: $1" >&2 + exit 1 + ;; + *) # No more options + POSITIONAL_ARGS+=("$1") # save positional arg + shift + ;; + esac +done + +set -- "${POSITIONAL_ARGS[@]}" + +TOPDIR=$(dirname $(realpath $0)) + +# Subdirs for generic scripts +SCRIPTS_DIR_SOURCE=${TOPDIR}/scripts/ # Source dir +SCRIPTS_DIR_TARGET=${INSTALL_PREFIX}/scripts/ # Target dir + +# Create target dir +mkdir -p ${SCRIPTS_DIR_TARGET} + +# Copy scripts into this prefix +for file in utils.sh; do + cp ${SCRIPTS_DIR_SOURCE}/${file} ${SCRIPTS_DIR_TARGET}/${file} +done +# Subdirs for GPU support +NVIDIA_GPU_SUPPORT_DIR_SOURCE=${TOPDIR}/gpu_support/nvidia/ # Source dir +NVIDIA_GPU_SUPPORT_DIR_TARGET=${INSTALL_PREFIX}/gpu_support/nvidia/ # Target dir + +# Create target dir +mkdir -p ${NVIDIA_GPU_SUPPORT_DIR_TARGET} + +# Copy files from this directory into the prefix +# To be on the safe side, we dont do recursive copies, but we are explicitely copying each individual file we want to add +for file in install_cuda_host_injections.sh link_nvidia_host_injections.sh; do + cp ${NVIDIA_GPU_SUPPORT_DIR_SOURCE}/${file} ${NVIDIA_GPU_SUPPORT_DIR_TARGET}/${file} +done From 5905e727f146480d6472d2f3a1d0ca6ab53105ee Mon Sep 17 00:00:00 2001 From: Alan O'Cais Date: Wed, 20 Dec 2023 01:07:41 +0100 Subject: [PATCH 328/698] Tweak GPU support implementation --- EESSI-install-software.sh | 11 ++++------- .../2023.06/eessi-2023.06-eb-4.8.2-2023a.yml | 2 +- install_scripts.sh | 16 ++++++++-------- 3 files changed, 13 insertions(+), 16 deletions(-) diff --git a/EESSI-install-software.sh b/EESSI-install-software.sh index 5e9bd5d472..95fb03e9b7 100755 --- a/EESSI-install-software.sh +++ b/EESSI-install-software.sh @@ -189,19 +189,16 @@ pr_diff=$(ls [0-9]*.diff | head -1) # install any additional required scripts # order is important: these are needed to install a full CUDA SDK in host_injections -install_scripts_changed=$(cat ${pr_diff} | grep '^+++' | cut -f2 -d' ' | sed 's@^[a-z]/@@g' | grep '^install_scripts.sh$' > /dev/null; echo $?) -if [ ${install_scripts_changed} == '0' ]; then - # for now, this just reinstalls all scripts. Note the most elegant, but works - ${TOPDIR}/install_scripts.sh --prefix ${EESSI_CVMFS_REPO} -fi +# for now, this just reinstalls all scripts. Note the most elegant, but works +${TOPDIR}/install_scripts.sh --prefix ${EESSI_PREFIX} # Install full CUDA SDK in host_injections # Hardcode this for now, see if it works # TODO: We should make a nice yaml and loop over all CUDA versions in that yaml to figure out what to install -${EESSI_CVMFS_REPO}/gpu_support/nvidia/install_cuda_host_injections.sh 12.1.1 +${EESSI_PREFIX}/gpu_support/nvidia/install_cuda_host_injections.sh -c 12.1.1 --accept-cuda-eula # Install drivers in host_injections -${EESSI_CVMFS_REPO}/gpu_support/nvidia/link_nvidia_host_libraries.sh +${EESSI_PREFIX}/gpu_support/nvidia/link_nvidia_host_libraries.sh # use PR patch file to determine in which easystack files stuff was added for easystack_file in $(cat ${pr_diff} | grep '^+++' | cut -f2 -d' ' | sed 's@^[a-z]/@@g' | grep '^easystacks/.*yml$' | egrep -v 'known-issues|missing'); do diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml index 0537c448e5..87ccd69e99 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml @@ -35,7 +35,7 @@ easyconfigs: - Boost-1.82.0-GCC-12.3.0.eb - netCDF-4.9.2-gompi-2023a.eb - FFmpeg-6.0-GCCcore-12.3.0.eb - - CUDA-Samples-12.1-GCC-12.3.0-CUDA-12.1.1.eb + - CUDA-Samples-12.1-GCC-12.3.0-CUDA-12.1.1.eb: # use easyconfig that only install subset of CUDA samples, # to circumvent problem with nvcc linking to glibc of host OS; # see https://github.com/easybuilders/easybuild-easyconfigs/pull/19189 diff --git a/install_scripts.sh b/install_scripts.sh index 209d953c88..8fb27826c6 100755 --- a/install_scripts.sh +++ b/install_scripts.sh @@ -13,7 +13,7 @@ POSITIONAL_ARGS=() while [[ $# -gt 0 ]]; do case $1 in - -o|--prefix) + -p|--prefix) INSTALL_PREFIX="$2" shift 2 ;; @@ -38,25 +38,25 @@ set -- "${POSITIONAL_ARGS[@]}" TOPDIR=$(dirname $(realpath $0)) # Subdirs for generic scripts -SCRIPTS_DIR_SOURCE=${TOPDIR}/scripts/ # Source dir -SCRIPTS_DIR_TARGET=${INSTALL_PREFIX}/scripts/ # Target dir +SCRIPTS_DIR_SOURCE=${TOPDIR}/scripts # Source dir +SCRIPTS_DIR_TARGET=${INSTALL_PREFIX}/scripts # Target dir # Create target dir mkdir -p ${SCRIPTS_DIR_TARGET} # Copy scripts into this prefix for file in utils.sh; do - cp ${SCRIPTS_DIR_SOURCE}/${file} ${SCRIPTS_DIR_TARGET}/${file} + cp -u ${SCRIPTS_DIR_SOURCE}/${file} ${SCRIPTS_DIR_TARGET}/${file} done # Subdirs for GPU support -NVIDIA_GPU_SUPPORT_DIR_SOURCE=${TOPDIR}/gpu_support/nvidia/ # Source dir -NVIDIA_GPU_SUPPORT_DIR_TARGET=${INSTALL_PREFIX}/gpu_support/nvidia/ # Target dir +NVIDIA_GPU_SUPPORT_DIR_SOURCE=${TOPDIR}/gpu_support/nvidia # Source dir +NVIDIA_GPU_SUPPORT_DIR_TARGET=${INSTALL_PREFIX}/gpu_support/nvidia # Target dir # Create target dir mkdir -p ${NVIDIA_GPU_SUPPORT_DIR_TARGET} # Copy files from this directory into the prefix # To be on the safe side, we dont do recursive copies, but we are explicitely copying each individual file we want to add -for file in install_cuda_host_injections.sh link_nvidia_host_injections.sh; do - cp ${NVIDIA_GPU_SUPPORT_DIR_SOURCE}/${file} ${NVIDIA_GPU_SUPPORT_DIR_TARGET}/${file} +for file in install_cuda_host_injections.sh link_nvidia_host_libraries.sh; do + cp -u ${NVIDIA_GPU_SUPPORT_DIR_SOURCE}/${file} ${NVIDIA_GPU_SUPPORT_DIR_TARGET}/${file} done From 73618a00ee06889314d6efc0e362882b39f34161 Mon Sep 17 00:00:00 2001 From: Alan O'Cais Date: Wed, 20 Dec 2023 01:22:21 +0100 Subject: [PATCH 329/698] Add missing quotes on errors --- gpu_support/nvidia/link_nvidia_host_libraries.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/gpu_support/nvidia/link_nvidia_host_libraries.sh b/gpu_support/nvidia/link_nvidia_host_libraries.sh index 6458be7fae..cb7420a0e9 100755 --- a/gpu_support/nvidia/link_nvidia_host_libraries.sh +++ b/gpu_support/nvidia/link_nvidia_host_libraries.sh @@ -36,7 +36,7 @@ if [ ${#found_paths[@]} -gt 0 ]; then host_ldconfig=${found_paths[0]} else error="$command_name not found in PATH or only found in paths starting with $exclude_prefix." - fatal_error $error + fatal_error "$error" fi # Make sure EESSI is initialised (doesn't matter what version) @@ -52,7 +52,7 @@ if $nvidia_smi_command > /dev/null; then host_cuda_version=$(nvidia-smi -q --display=COMPUTE | grep CUDA | awk 'NF>1{print $NF}') else error="Failed to successfully execute\n $nvidia_smi_command\n" - fatal_error $error + fatal_error "$error" fi # Let's make sure the driver libraries are not already in place @@ -71,7 +71,7 @@ if [ -e "$host_injection_driver_version_file" ]; then rm $host_injection_driver_dir/* if [ $? -ne 0 ]; then error="Unable to remove files under '$host_injection_driver_dir'." - fatal_error $error + fatal_error "$error" fi fi fi From 32925fe17e7576847be87ef3f1786ee374a2356a Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Wed, 20 Dec 2023 11:12:27 +0100 Subject: [PATCH 330/698] Error messages now refer to the scripts that need to be run to install the CUDA SDK or link the CUDA drivers --- create_lmodrc.py | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/create_lmodrc.py b/create_lmodrc.py index 9c007c15e6..6a72d8dc62 100755 --- a/create_lmodrc.py +++ b/create_lmodrc.py @@ -43,9 +43,11 @@ local cudaEasyBuildDir = hostInjections .. "/software/" .. t.modFullName .. "/easybuild" local cudaDirExists = isDir(cudaEasyBuildDir) if not cudaDirExists then + local cvmfsRepo = os.getenv('EESSI_CVMFS_REPO') local advice = "but while the module file exists, the actual software is not entirely shipped with EESSI " - advice = advice .. "due to licencing. In order to be able to use the CUDA module, please follow the " - advice = advice .. "instructions available under https://www.eessi.io/docs/gpu/ \\n" + advice = advice .. "due to licencing. Please install a full copy of the CUDA SDK using the script " + advice = advice .. cvmfsRepo .. "/gpu_support/nvidia/install_cuda_host_injections.sh.\\n" + advice = advice .. "More information, see https://www.eessi.io/docs/gpu/.\\n" LmodError("\\nYou requested to load ", simpleName, " ", advice) end end @@ -60,8 +62,10 @@ local singularityCudaExists = isFile("/.singularity.d/libs/libcuda.so") if not (cudaDriverExists or singularityCudaExists) then local advice = "which relies on the CUDA runtime environment and driver libraries. " - advice = advice .. "In order to be able to use the module, please follow the instructions " - advice = advice .. "available under https://www.eessi.io/docs/gpu/ \\n" + advice = advice .. "In order to be able to use the module, please run the script " + advice = advice .. cvmfsRepo .. "/gpu_support/nvidia/link_nvidia_host_libraries.sh " + advice = advice .. "to make sure EESSI can find the drivers from on your host system.\\n" + advice = advice .. "More information, see https://www.eessi.io/docs/gpu/.\\n" LmodError("\\nYou requested to load ", simpleName, " ", advice) else -- CUDA driver exists, now we check its version to see if an update is needed @@ -81,8 +85,10 @@ end if driver_libs_need_update == true then local advice = "but the module you want to load requires CUDA " .. cudaVersion_req .. ". " - advice = advice .. "Please update your CUDA driver libraries and then follow the instructions " - advice = advice .. "under https://www.eessi.io/docs/gpu/ to let EESSI know about the update.\\n" + advice = advice .. "Please update your CUDA driver libraries and rerun the script" + advice = advice .. cvmfsRepo .. "/gpu_support/nvidia/install_cuda_host_injections.sh " + advice = advice .. "to let EESSI know about the update.\\n" + advice = advice .. "More information, see https://www.eessi.io/docs/gpu/.\\n" LmodError("\\nYour driver CUDA version is ", cudaVersion, " ", advice) end end From a33a0cd204a13be3321336caa18c5b3faa5b29f0 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 20 Dec 2023 13:50:46 +0100 Subject: [PATCH 331/698] make install_scripts a bit more verbose --- install_scripts.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/install_scripts.sh b/install_scripts.sh index 8fb27826c6..d53dbb6a9c 100755 --- a/install_scripts.sh +++ b/install_scripts.sh @@ -45,8 +45,9 @@ SCRIPTS_DIR_TARGET=${INSTALL_PREFIX}/scripts # Target dir mkdir -p ${SCRIPTS_DIR_TARGET} # Copy scripts into this prefix +echo "copying scripts from ${SCRIPTS_DIR_SOURCE} to ${SCRIPTS_DIR_TARGET}" for file in utils.sh; do - cp -u ${SCRIPTS_DIR_SOURCE}/${file} ${SCRIPTS_DIR_TARGET}/${file} + cp -v -u ${SCRIPTS_DIR_SOURCE}/${file} ${SCRIPTS_DIR_TARGET}/${file} done # Subdirs for GPU support NVIDIA_GPU_SUPPORT_DIR_SOURCE=${TOPDIR}/gpu_support/nvidia # Source dir @@ -57,6 +58,7 @@ mkdir -p ${NVIDIA_GPU_SUPPORT_DIR_TARGET} # Copy files from this directory into the prefix # To be on the safe side, we dont do recursive copies, but we are explicitely copying each individual file we want to add +echo "copying scripts from ${NVIDIA_GPU_SUPPORT_DIR_SOURCE} to ${NVIDIA_GPU_SUPPORT_DIR_TARGET}" for file in install_cuda_host_injections.sh link_nvidia_host_libraries.sh; do - cp -u ${NVIDIA_GPU_SUPPORT_DIR_SOURCE}/${file} ${NVIDIA_GPU_SUPPORT_DIR_TARGET}/${file} + cp -v -u ${NVIDIA_GPU_SUPPORT_DIR_SOURCE}/${file} ${NVIDIA_GPU_SUPPORT_DIR_TARGET}/${file} done From c7b380d7b3d7580c935824fb3f3c4c80200b8301 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 20 Dec 2023 14:07:29 +0100 Subject: [PATCH 332/698] use separate easystack file for CUDA + control order in which easystack are processed (where needed) --- easystacks/software.eessi.io/2023.06/README.md | 7 +++++++ ....2-system.yml => eessi-2023.06-eb-4.8.2-001-system.yml} | 4 ---- .../2023.06/eessi-2023.06-eb-4.8.2-010-CUDA.yml | 5 +++++ 3 files changed, 12 insertions(+), 4 deletions(-) create mode 100644 easystacks/software.eessi.io/2023.06/README.md rename easystacks/software.eessi.io/2023.06/{eessi-2023.06-eb-4.8.2-system.yml => eessi-2023.06-eb-4.8.2-001-system.yml} (56%) create mode 100644 easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-010-CUDA.yml diff --git a/easystacks/software.eessi.io/2023.06/README.md b/easystacks/software.eessi.io/2023.06/README.md new file mode 100644 index 0000000000..733ebf9475 --- /dev/null +++ b/easystacks/software.eessi.io/2023.06/README.md @@ -0,0 +1,7 @@ +File naming matters, since it determines the order in which easystack files are processed. + +Software installed with system toolchain should be installed first, +this includes EasyBuild itself, see `eessi-2023.06-eb-4.8.2-001-system.yml` . + +CUDA installations must be done before CUDA is required as dependency for something +built with a non-system toolchain, see `eessi-2023.06-eb-4.8.2-010-CUDA.yml` . diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-system.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-001-system.yml similarity index 56% rename from easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-system.yml rename to easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-001-system.yml index 86d6931820..f02b9f2802 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-system.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-001-system.yml @@ -5,7 +5,3 @@ easyconfigs: - Nextflow-23.10.0.eb: options: from-pr: 19172 - - CUDA-12.1.1.eb: - options: - include-easyblocks-from-pr: 3045 - accept-eula-for: CUDA diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-010-CUDA.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-010-CUDA.yml new file mode 100644 index 0000000000..dda274b8db --- /dev/null +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-010-CUDA.yml @@ -0,0 +1,5 @@ +easyconfigs: + - CUDA-12.1.1.eb: + options: + include-easyblocks-from-pr: 3045 + accept-eula-for: CUDA From f506566c982818bf0ee985c70d7dbe0d24084035 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 20 Dec 2023 14:10:12 +0100 Subject: [PATCH 333/698] copy EasyBuild log file in case CUDA installation failed in install_cuda_host_injections.sh --- gpu_support/nvidia/install_cuda_host_injections.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/gpu_support/nvidia/install_cuda_host_injections.sh b/gpu_support/nvidia/install_cuda_host_injections.sh index f02f0da02e..62996fa924 100755 --- a/gpu_support/nvidia/install_cuda_host_injections.sh +++ b/gpu_support/nvidia/install_cuda_host_injections.sh @@ -200,7 +200,9 @@ else eb --prefix="$tmpdir" ${extra_args} --accept-eula-for=CUDA --hooks="$tmpdir"/none.py --installpath="${cuda_install_parent}"/ "${cuda_easyconfig}" ret=$? if [ $ret -ne 0 ]; then - fatal_error "CUDA installation failed, please check EasyBuild logs..." + eb_last_log=$(unset EB_VERBOSE; eb --last-log) + cp -a ${eb_last_log} . + fatal_error "CUDA installation failed, please check EasyBuild logs $(basename ${eb_last_log})..." else echo_green "CUDA installation at ${cuda_install_parent}/software/CUDA/${install_cuda_version} succeeded!" fi From e3ddaccfc04cca311d40ef69eb55028ccf257dcc Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 20 Dec 2023 14:29:00 +0100 Subject: [PATCH 334/698] add additional optional options required for handling NVIDIA support to start build container --- bot/build.sh | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/bot/build.sh b/bot/build.sh index 4af217628e..66f93d523e 100755 --- a/bot/build.sh +++ b/bot/build.sh @@ -176,6 +176,11 @@ mkdir -p ${TARBALL_TMP_BUILD_STEP_DIR} declare -a BUILD_STEP_ARGS=() BUILD_STEP_ARGS+=("--save" "${TARBALL_TMP_BUILD_STEP_DIR}") BUILD_STEP_ARGS+=("--storage" "${STORAGE}") +# add options required to handle NVIDIA support +BUILD_STEP_ARGS+=("--nvidia" "all") +if [[ ! -z ${SHARED_FS_PATH} ]]; then + BUILD_STEP_ARGS+=("--host-injections ${SHARED_FS_PATH}/host-injections") +fi # prepare arguments to install_software_layer.sh (specific to build step) declare -a INSTALL_SCRIPT_ARGS=() From 16ddf7f8a0d29cfe47c9948933bb2a10b5ee17c0 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 20 Dec 2023 14:41:53 +0100 Subject: [PATCH 335/698] fix typo when passing --host-injections to container script --- bot/build.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bot/build.sh b/bot/build.sh index 66f93d523e..1622e757e2 100755 --- a/bot/build.sh +++ b/bot/build.sh @@ -179,7 +179,7 @@ BUILD_STEP_ARGS+=("--storage" "${STORAGE}") # add options required to handle NVIDIA support BUILD_STEP_ARGS+=("--nvidia" "all") if [[ ! -z ${SHARED_FS_PATH} ]]; then - BUILD_STEP_ARGS+=("--host-injections ${SHARED_FS_PATH}/host-injections") + BUILD_STEP_ARGS+=("--host-injections" "${SHARED_FS_PATH}/host-injections") fi # prepare arguments to install_software_layer.sh (specific to build step) From 35d6084a25ea76b75982e9bbac0154236d860d6a Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 20 Dec 2023 14:50:04 +0100 Subject: [PATCH 336/698] correctly pass --nv to singularity command --- eessi_container.sh | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/eessi_container.sh b/eessi_container.sh index 81d7be81ad..268f94975e 100755 --- a/eessi_container.sh +++ b/eessi_container.sh @@ -118,7 +118,6 @@ STORAGE= LIST_REPOS=0 MODE="shell" SETUP_NVIDIA=0 -ADDITIONAL_SINGULARITY_FLAGS= REPOSITORY="EESSI" RESUME= SAVE= @@ -437,12 +436,14 @@ BIND_PATHS="${BIND_PATHS},${EESSI_TMPDIR}:${TMP_IN_CONTAINER}" [[ ${VERBOSE} -eq 1 ]] && echo "BIND_PATHS=${BIND_PATHS}" +declare -a ADDITIONAL_CONTAINER_OPTIONS=() + # Configure anything we need for NVIDIA GPUs and CUDA installation if [[ ${SETUP_NVIDIA} -eq 1 ]]; then if [[ "${NVIDIA_MODE}" == "run" || "${NVIDIA_MODE}" == "all" ]]; then # Give singularity the appropriate flag - ADDITIONAL_SINGULARITY_FLAGS="--nv ${ADDITIONAL_SINGULARITY_FLAGS}" - [[ ${VERBOSE} -eq 1 ]] && echo "ADDITIONAL_SINGULARITY_FLAGS=${ADDITIONAL_SINGULARITY_FLAGS}" + ADDITIONAL_CONTAINER_OPTIONS+=(--nv) + [[ ${VERBOSE} -eq 1 ]] && echo "ADDITIONAL_CONTAINER_OPTIONS=${ADDITIONAL_CONTAINER_OPTIONS[@]}" fi if [[ "${NVIDIA_MODE}" == "install" || "${NVIDIA_MODE}" == "all" ]]; then # Add additional bind mounts to allow CUDA to install within a container @@ -621,8 +622,8 @@ if [ ! -z ${EESSI_SOFTWARE_SUBDIR_OVERRIDE} ]; then fi echo "Launching container with command (next line):" -echo "singularity ${RUN_QUIET} ${MODE} ${ADDITIONAL_SINGULARITY_FLAGS} ${EESSI_FUSE_MOUNTS[@]} ${CONTAINER} $@" -singularity ${RUN_QUIET} ${MODE} ${ADDITIONAL_SINGULARITY_FLAGS} "${EESSI_FUSE_MOUNTS[@]}" ${CONTAINER} "$@" +echo "singularity ${RUN_QUIET} ${MODE} ${ADDITIONAL_CONTAINER_OPTIONS[@]} ${EESSI_FUSE_MOUNTS[@]} ${CONTAINER} $@" +singularity ${RUN_QUIET} ${MODE} "${ADDITIONAL_CONTAINER_OPTIONS[@]}" "${EESSI_FUSE_MOUNTS[@]}" ${CONTAINER} "$@" exit_code=$? # 6. save tmp if requested (arg -s|--save) From fd976675c798b1c79205460eec225469fbf28473 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 20 Dec 2023 14:50:55 +0100 Subject: [PATCH 337/698] use quotes when adding --nv --- eessi_container.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eessi_container.sh b/eessi_container.sh index 268f94975e..d6e9558202 100755 --- a/eessi_container.sh +++ b/eessi_container.sh @@ -442,7 +442,7 @@ declare -a ADDITIONAL_CONTAINER_OPTIONS=() if [[ ${SETUP_NVIDIA} -eq 1 ]]; then if [[ "${NVIDIA_MODE}" == "run" || "${NVIDIA_MODE}" == "all" ]]; then # Give singularity the appropriate flag - ADDITIONAL_CONTAINER_OPTIONS+=(--nv) + ADDITIONAL_CONTAINER_OPTIONS+=("--nv") [[ ${VERBOSE} -eq 1 ]] && echo "ADDITIONAL_CONTAINER_OPTIONS=${ADDITIONAL_CONTAINER_OPTIONS[@]}" fi if [[ "${NVIDIA_MODE}" == "install" || "${NVIDIA_MODE}" == "all" ]]; then From 19171465240f52b3ef0f7eba17e4467031e23a58 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 20 Dec 2023 15:22:20 +0100 Subject: [PATCH 338/698] comment out running of link_nvidia_host_libraries.sh script, since it requires working nvidia-smi command --- EESSI-install-software.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/EESSI-install-software.sh b/EESSI-install-software.sh index 95fb03e9b7..4e3f0acee5 100755 --- a/EESSI-install-software.sh +++ b/EESSI-install-software.sh @@ -198,7 +198,9 @@ ${TOPDIR}/install_scripts.sh --prefix ${EESSI_PREFIX} ${EESSI_PREFIX}/gpu_support/nvidia/install_cuda_host_injections.sh -c 12.1.1 --accept-cuda-eula # Install drivers in host_injections -${EESSI_PREFIX}/gpu_support/nvidia/link_nvidia_host_libraries.sh +# TODO: this is commented out for now, because the script assumes that nvidia-smi is available and works; +# if not, an error is produced, and the bot flags the whole build as failed (even when not installing GPU software) +# ${EESSI_PREFIX}/gpu_support/nvidia/link_nvidia_host_libraries.sh # use PR patch file to determine in which easystack files stuff was added for easystack_file in $(cat ${pr_diff} | grep '^+++' | cut -f2 -d' ' | sed 's@^[a-z]/@@g' | grep '^easystacks/.*yml$' | egrep -v 'known-issues|missing'); do From f80f0fc0f70026e4be1fa980e13a991102503737 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 20 Dec 2023 20:15:58 +0100 Subject: [PATCH 339/698] clean up post_sanitycheck_cuda hook and inject_gpu_property function used in parse_hook --- eb_hooks.py | 149 +++++++++++++++++++++++++++++----------------------- 1 file changed, 83 insertions(+), 66 deletions(-) diff --git a/eb_hooks.py b/eb_hooks.py index 78580c14b9..27cc873fa1 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -7,7 +7,7 @@ from easybuild.framework.easyconfig.constants import EASYCONFIG_CONSTANTS from easybuild.tools.build_log import EasyBuildError, print_msg from easybuild.tools.config import build_option, update_build_option -from easybuild.tools.filetools import apply_regex_substitutions, copy_file, which +from easybuild.tools.filetools import apply_regex_substitutions, copy_file, remove_file, symlink, which from easybuild.tools.run import run_cmd from easybuild.tools.systemtools import AARCH64, POWER, X86_64, get_cpu_architecture, get_cpu_features from easybuild.tools.toolchain.compiler import OPTARCH_GENERIC @@ -250,12 +250,6 @@ def pre_configure_hook(self, *args, **kwargs): PRE_CONFIGURE_HOOKS[self.name](self, *args, **kwargs) -def post_sanitycheck_hook(self, *args, **kwargs): - """Main post-sanity-check hook: trigger custom functions based on software name.""" - if self.name in POST_SANITYCHECK_HOOKS: - POST_SANITYCHECK_HOOKS[self.name](self, *args, **kwargs) - - def pre_configure_hook_openblas_optarch_generic(self, *args, **kwargs): """ Pre-configure hook for OpenBLAS: add DYNAMIC_ARCH=1 to build/test/install options when using --optarch=GENERIC @@ -402,76 +396,99 @@ def pre_single_extension_isoband(ext, *args, **kwargs): ext.cfg['preinstallopts'] = "sed -i 's/SIGSTKSZ/32768/g' src/testthat/vendor/catch.h && " +def post_sanitycheck_hook(self, *args, **kwargs): + """Main post-sanity-check hook: trigger custom functions based on software name.""" + if self.name in POST_SANITYCHECK_HOOKS: + POST_SANITYCHECK_HOOKS[self.name](self, *args, **kwargs) + + def post_sanitycheck_cuda(self, *args, **kwargs): - """Delete CUDA files we are not allowed to ship and replace them with a symlink to a possible installation under host_injections.""" - print_msg("Replacing CUDA stuff we cannot ship with symlinks...") - # read CUDA EULA - eula_path = os.path.join(self.installdir, "EULA.txt") - tmp_buffer = [] - with open(eula_path) as infile: - copy = False - for line in infile: - if line.strip() == "2.6. Attachment A": - copy = True - continue - elif line.strip() == "2.7. Attachment B": - copy = False - continue - elif copy: - tmp_buffer.append(line) - # create whitelist without file extensions, they're not really needed and they only complicate things - whitelist = ['EULA', 'README'] - file_extensions = [".so", ".a", ".h", ".bc"] - for tmp in tmp_buffer: - for word in tmp.split(): - if any(ext in word for ext in file_extensions): - whitelist.append(word.split(".")[0]) - whitelist = list(set(whitelist)) - # Do some quick checks for things we should or shouldn't have in the list - if "nvcc" in whitelist: - raise EasyBuildError("Found 'nvcc' in whitelist: %s" % whitelist) - if "libcudart" not in whitelist: - raise EasyBuildError("Did not find 'libcudart' in whitelist: %s" % whitelist) - # iterate over all files in the CUDA path - for root, dirs, files in os.walk(self.installdir): - for filename in files: - # we only really care about real files, i.e. not symlinks - if not os.path.islink(os.path.join(root, filename)): - # check if the current file is part of the whitelist - basename = filename.split(".")[0] - if basename not in whitelist: - # if it is not in the whitelist, delete the file and create a symlink to host_injections - source = os.path.join(root, filename) - target = source.replace("versions", "host_injections") - # Make sure source and target are not the same - if source == target: - raise EasyBuildError("Source (%s) and target (%s) are the same location, are you sure you are" - "using this hook for an EESSI installation?") - os.remove(source) - # Using os.symlink requires the existence of the target directory, so we use os.system - system_command="ln -s '%s' '%s'" % (target, source) - if os.system(system_command) != 0: - raise EasyBuildError("Failed to create symbolic link: %s" % system_command) + """ + Remove files from CUDA installation that we are not allowed to ship, + and replace them with a symlink to a corresponding installation under host_injections. + """ + if self.name == 'CUDA': + print_msg("Replacing files in CUDA installation that we can not ship with symlinks to host_injections...") + + # read CUDA EULA, construct allowlist based on section 2.6 that specifies list of files that can be shipped + eula_path = os.path.join(self.installdir, 'EULA.txt') + relevant_eula_lines = [] + with open(eula_path) as infile: + copy = False + for line in infile: + if line.strip() == "2.6. Attachment A": + copy = True + continue + elif line.strip() == "2.7. Attachment B": + copy = False + continue + elif copy: + relevant_eula_lines.append(line) + + # create list without file extensions, they're not really needed and they only complicate things + allowlist = ['EULA', 'README'] + file_extensions = ['.so', '.a', '.h', '.bc'] + for line in relevant_eula_lines: + for word in line.split(): + if any(ext in word for ext in file_extensions): + allowlist.append(os.path.splitext(word)[0]) + allowlist = sorted(set(allowlist)) + self.log.info("Allowlist for files in CUDA installation that can be redistributed: " + ', '.join(allowlist)) + + # Do some quick sanity checks for things we should or shouldn't have in the list + if 'nvcc' in allowlist: + raise EasyBuildError("Found 'nvcc' in allowlist: %s" % allowlist) + if 'libcudart' not in allowlist: + raise EasyBuildError("Did not find 'libcudart' in allowlist: %s" % allowlist) + + # iterate over all files in the CUDA installation directory + for dir_path, _, files in os.walk(self.installdir): + for filename in files: + full_path = os.path.join(dir_path, filename) + # we only really care about real files, i.e. not symlinks + if not os.path.islink(full_path): + # check if the current file is part of the allowlist + basename = os.path.splitext(filename)[0] + if basename in allowlist: + self.log.debug("%s is found in allowlist, so keeping it: %s", basename, full_path) + else: + self.log.debug("%s is not found in allowlist, so replacing it with symlink: %s", + basename, full_path) + # if it is not in the allowlist, delete the file and create a symlink to host_injections + host_inj_path = full_path.replace('versions', 'host_injections') + # make sure source and target of symlink are not the same + if full_path == host_inj_path: + raise EasyBuildError("Source (%s) and target (%s) are the same location, are you sure you " + "are using this hook for an EESSI installation?", + full_path, host_inj_path) + remove_file(full_path) + symlink(host_inj_path, full_path) + else: + raise EasyBuildError("CUDA-specific hook triggered for non-CUDA easyconfig?!") def inject_gpu_property(ec): + """ + Add 'gpu' property, via modluafooter easyconfig parameter + """ ec_dict = ec.asdict() - # Check if CUDA is in the dependencies, if so add the GPU Lmod tag - if ("CUDA" in [dep[0] for dep in iter(ec_dict["dependencies"])]): - ec.log.info("[parse hook] Injecting gpu as Lmod arch property and envvar with CUDA version") - key = "modluafooter" + # Check if CUDA is in the dependencies, if so add the 'gpu' Lmod property + if ('CUDA' in [dep[0] for dep in iter(ec_dict['dependencies'])]): + ec.log.info("Injecting gpu as Lmod arch property and envvar with CUDA version") + key = 'modluafooter' value = 'add_property("arch","gpu")' cuda_version = 0 - for dep in iter(ec_dict["dependencies"]): + for dep in iter(ec_dict['dependencies']): # Make CUDA a build dependency only (rpathing saves us from link errors) - if "CUDA" in dep[0]: + if 'CUDA' in dep[0]: cuda_version = dep[1] - ec_dict["dependencies"].remove(dep) - ec_dict["builddependencies"].append(dep) if dep not in ec_dict["builddependencies"] else ec_dict["builddependencies"] - value = "\n".join([value, 'setenv("EESSICUDAVERSION","%s")' % cuda_version]) + ec_dict['dependencies'].remove(dep) + if dep not in ec_dict['builddependencies']: + ec_dict['builddependencies'].append(dep) + value = '\n'.join([value, 'setenv("EESSICUDAVERSION","%s")' % cuda_version]) if key in ec_dict: if not value in ec_dict[key]: - ec[key] = "\n".join([ec_dict[key], value]) + ec[key] = '\n'.join([ec_dict[key], value]) else: ec[key] = value return ec From 35b5efb35c5dcbae09d083e25f9cfa46035466ee Mon Sep 17 00:00:00 2001 From: Richard Top Date: Wed, 20 Dec 2023 19:41:12 +0000 Subject: [PATCH 340/698] {2023.06}[foss/2022b] QuantumESPRESSO v7.2 --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2022b.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2022b.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2022b.yml index 69ffb750a2..fd88fafb0c 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2022b.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2022b.yml @@ -4,3 +4,4 @@ easyconfigs: options: from-pr: 19339 - Qt5-5.15.7-GCCcore-12.2.0.eb + - QuantumESPRESSO-7.2-foss-2022b.eb From 2d378421b697306642467d9019b748a1e67f39bc Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 20 Dec 2023 21:22:42 +0100 Subject: [PATCH 341/698] remove empty line in eessi-2023.06-eb-4.8.2-2023a.yml --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml index 91efae766f..87ccd69e99 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml @@ -35,7 +35,6 @@ easyconfigs: - Boost-1.82.0-GCC-12.3.0.eb - netCDF-4.9.2-gompi-2023a.eb - FFmpeg-6.0-GCCcore-12.3.0.eb - - CUDA-Samples-12.1-GCC-12.3.0-CUDA-12.1.1.eb: # use easyconfig that only install subset of CUDA samples, # to circumvent problem with nvcc linking to glibc of host OS; From f007c4061c3104a29b1053e877c61a32a244c30f Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 20 Dec 2023 23:24:15 +0100 Subject: [PATCH 342/698] use easyconfigs PR 19451 for installing CUDA-Samples v12.1 --- .../2023.06/eessi-2023.06-eb-4.8.2-2023a.yml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml index 87ccd69e99..596b9ea21f 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml @@ -37,7 +37,9 @@ easyconfigs: - FFmpeg-6.0-GCCcore-12.3.0.eb - CUDA-Samples-12.1-GCC-12.3.0-CUDA-12.1.1.eb: # use easyconfig that only install subset of CUDA samples, - # to circumvent problem with nvcc linking to glibc of host OS; - # see https://github.com/easybuilders/easybuild-easyconfigs/pull/19189 + # to circumvent problem with nvcc linking to glibc of host OS, + # see https://github.com/easybuilders/easybuild-easyconfigs/pull/19189; + # and where additional samples are excluded because they fail to build on aarch64, + # see https://github.com/easybuilders/easybuild-easyconfigs/pull/19451; options: - from-pr: 19189 + from-pr: 19451 From 70fa0f9ac3cd54a582640dc7bdadcd31c210fffc Mon Sep 17 00:00:00 2001 From: Alan O'Cais Date: Thu, 21 Dec 2023 00:34:38 +0100 Subject: [PATCH 343/698] Ship the scripts, and keep them in a single location --- EESSI-install-software.sh | 4 ++-- create_lmodrc.py | 22 +++++++++---------- create_tarball.sh | 4 ++++ install_scripts.sh | 4 ++-- .../nvidia/install_cuda_host_injections.sh | 2 +- .../nvidia/link_nvidia_host_libraries.sh | 2 +- 6 files changed, 20 insertions(+), 18 deletions(-) rename {gpu_support => scripts/gpu_support}/nvidia/install_cuda_host_injections.sh (99%) rename {gpu_support => scripts/gpu_support}/nvidia/link_nvidia_host_libraries.sh (99%) diff --git a/EESSI-install-software.sh b/EESSI-install-software.sh index 4e3f0acee5..b61ca7a579 100755 --- a/EESSI-install-software.sh +++ b/EESSI-install-software.sh @@ -195,12 +195,12 @@ ${TOPDIR}/install_scripts.sh --prefix ${EESSI_PREFIX} # Install full CUDA SDK in host_injections # Hardcode this for now, see if it works # TODO: We should make a nice yaml and loop over all CUDA versions in that yaml to figure out what to install -${EESSI_PREFIX}/gpu_support/nvidia/install_cuda_host_injections.sh -c 12.1.1 --accept-cuda-eula +${EESSI_PREFIX}/scripts/gpu_support/nvidia/install_cuda_host_injections.sh -c 12.1.1 --accept-cuda-eula # Install drivers in host_injections # TODO: this is commented out for now, because the script assumes that nvidia-smi is available and works; # if not, an error is produced, and the bot flags the whole build as failed (even when not installing GPU software) -# ${EESSI_PREFIX}/gpu_support/nvidia/link_nvidia_host_libraries.sh +# ${EESSI_PREFIX}/scripts/gpu_support/nvidia/link_nvidia_host_libraries.sh # use PR patch file to determine in which easystack files stuff was added for easystack_file in $(cat ${pr_diff} | grep '^+++' | cut -f2 -d' ' | sed 's@^[a-z]/@@g' | grep '^easystacks/.*yml$' | egrep -v 'known-issues|missing'); do diff --git a/create_lmodrc.py b/create_lmodrc.py index 6a72d8dc62..80635d78cc 100755 --- a/create_lmodrc.py +++ b/create_lmodrc.py @@ -36,6 +36,7 @@ -- If we try to load CUDA itself, check if the full CUDA SDK was installed on the host in host_injections. -- This is required for end users to build additional CUDA software. If the full SDK isn't present, refuse -- to load the CUDA module and print an informative message on how to set up GPU support for EESSI + local refer_to_docs = "For more information on how to do this, see https://www.eessi.io/docs/gpu/.\\n" if simpleName == 'CUDA' then -- get the full host_injections path local hostInjections = string.gsub(os.getenv('EESSI_SOFTWARE_PATH') or "", 'versions', 'host_injections') @@ -43,11 +44,10 @@ local cudaEasyBuildDir = hostInjections .. "/software/" .. t.modFullName .. "/easybuild" local cudaDirExists = isDir(cudaEasyBuildDir) if not cudaDirExists then - local cvmfsRepo = os.getenv('EESSI_CVMFS_REPO') local advice = "but while the module file exists, the actual software is not entirely shipped with EESSI " - advice = advice .. "due to licencing. Please install a full copy of the CUDA SDK using the script " - advice = advice .. cvmfsRepo .. "/gpu_support/nvidia/install_cuda_host_injections.sh.\\n" - advice = advice .. "More information, see https://www.eessi.io/docs/gpu/.\\n" + advice = advice .. "due to licencing. You will need to install a full copy of the CUDA SDK where EESSI " + advice = advice .. "can find it.\\n" + advice = advice .. refer_to_docs LmodError("\\nYou requested to load ", simpleName, " ", advice) end end @@ -62,10 +62,9 @@ local singularityCudaExists = isFile("/.singularity.d/libs/libcuda.so") if not (cudaDriverExists or singularityCudaExists) then local advice = "which relies on the CUDA runtime environment and driver libraries. " - advice = advice .. "In order to be able to use the module, please run the script " - advice = advice .. cvmfsRepo .. "/gpu_support/nvidia/link_nvidia_host_libraries.sh " - advice = advice .. "to make sure EESSI can find the drivers from on your host system.\\n" - advice = advice .. "More information, see https://www.eessi.io/docs/gpu/.\\n" + advice = advice .. "In order to be able to use the module, you will need " + advice = advice .. "to make sure EESSI can find the driver libraries on your host system.\\n" + advice = advice .. refer_to_docs LmodError("\\nYou requested to load ", simpleName, " ", advice) else -- CUDA driver exists, now we check its version to see if an update is needed @@ -85,10 +84,9 @@ end if driver_libs_need_update == true then local advice = "but the module you want to load requires CUDA " .. cudaVersion_req .. ". " - advice = advice .. "Please update your CUDA driver libraries and rerun the script" - advice = advice .. cvmfsRepo .. "/gpu_support/nvidia/install_cuda_host_injections.sh " - advice = advice .. "to let EESSI know about the update.\\n" - advice = advice .. "More information, see https://www.eessi.io/docs/gpu/.\\n" + advice = advice .. "Please update your CUDA driver libraries and then " + advice = advice .. "let EESSI know about the update.\\n" + advice = advice .. refer_to_docs LmodError("\\nYour driver CUDA version is ", cudaVersion, " ", advice) end end diff --git a/create_tarball.sh b/create_tarball.sh index 8510caebf1..09ce94c835 100755 --- a/create_tarball.sh +++ b/create_tarball.sh @@ -40,6 +40,10 @@ echo ">> Collecting list of files/directories to include in tarball via ${PWD}.. files_list=${tmpdir}/files.list.txt module_files_list=${tmpdir}/module_files.list.txt +if [ -d ${eessi_version}/scripts ]; then + # include scripts we wish to ship along with EESSI, + find ${eessi_version}/scripts -type f | grep -v '/\.wh\.' >> ${files_list} +fi if [ -d ${eessi_version}/software/${os}/${cpu_arch_subdir}/.lmod ]; then # include Lmod cache and configuration file (lmodrc.lua), # skip whiteout files and backup copies of Lmod cache (spiderT.old.*) diff --git a/install_scripts.sh b/install_scripts.sh index d53dbb6a9c..224400db1c 100755 --- a/install_scripts.sh +++ b/install_scripts.sh @@ -50,8 +50,8 @@ for file in utils.sh; do cp -v -u ${SCRIPTS_DIR_SOURCE}/${file} ${SCRIPTS_DIR_TARGET}/${file} done # Subdirs for GPU support -NVIDIA_GPU_SUPPORT_DIR_SOURCE=${TOPDIR}/gpu_support/nvidia # Source dir -NVIDIA_GPU_SUPPORT_DIR_TARGET=${INSTALL_PREFIX}/gpu_support/nvidia # Target dir +NVIDIA_GPU_SUPPORT_DIR_SOURCE=${SCRIPTS_DIR_SOURCE}/gpu_support/nvidia # Source dir +NVIDIA_GPU_SUPPORT_DIR_TARGET=${SCRIPTS_DIR_TARGET}/gpu_support/nvidia # Target dir # Create target dir mkdir -p ${NVIDIA_GPU_SUPPORT_DIR_TARGET} diff --git a/gpu_support/nvidia/install_cuda_host_injections.sh b/scripts/gpu_support/nvidia/install_cuda_host_injections.sh similarity index 99% rename from gpu_support/nvidia/install_cuda_host_injections.sh rename to scripts/gpu_support/nvidia/install_cuda_host_injections.sh index 62996fa924..a9310d817a 100755 --- a/gpu_support/nvidia/install_cuda_host_injections.sh +++ b/scripts/gpu_support/nvidia/install_cuda_host_injections.sh @@ -14,7 +14,7 @@ # Initialise our bash functions TOPDIR=$(dirname $(realpath $BASH_SOURCE)) -source "$TOPDIR"/../../scripts/utils.sh +source "$TOPDIR"/../../utils.sh # Function to display help message show_help() { diff --git a/gpu_support/nvidia/link_nvidia_host_libraries.sh b/scripts/gpu_support/nvidia/link_nvidia_host_libraries.sh similarity index 99% rename from gpu_support/nvidia/link_nvidia_host_libraries.sh rename to scripts/gpu_support/nvidia/link_nvidia_host_libraries.sh index cb7420a0e9..e6ff110797 100755 --- a/gpu_support/nvidia/link_nvidia_host_libraries.sh +++ b/scripts/gpu_support/nvidia/link_nvidia_host_libraries.sh @@ -5,7 +5,7 @@ # Initialise our bash functions TOPDIR=$(dirname $(realpath $BASH_SOURCE)) -source "$TOPDIR"/../../scripts/utils.sh +source "$TOPDIR"/../../utils.sh # We rely on ldconfig to give us the location of the libraries on the host command_name="ldconfig" From db0c14136f7d4e244e42e374f64357eea0f63789 Mon Sep 17 00:00:00 2001 From: ocaisa Date: Thu, 21 Dec 2023 09:27:28 +0000 Subject: [PATCH 344/698] Update create_lmodrc.py Co-authored-by: Kenneth Hoste --- create_lmodrc.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/create_lmodrc.py b/create_lmodrc.py index 80635d78cc..0e738a530e 100755 --- a/create_lmodrc.py +++ b/create_lmodrc.py @@ -63,7 +63,7 @@ if not (cudaDriverExists or singularityCudaExists) then local advice = "which relies on the CUDA runtime environment and driver libraries. " advice = advice .. "In order to be able to use the module, you will need " - advice = advice .. "to make sure EESSI can find the driver libraries on your host system.\\n" + advice = advice .. "to make sure EESSI can find the GPU driver libraries on your host system.\\n" advice = advice .. refer_to_docs LmodError("\\nYou requested to load ", simpleName, " ", advice) else From 293b1075e5619748f043019a5e856e0b52046d0d Mon Sep 17 00:00:00 2001 From: ocaisa Date: Thu, 21 Dec 2023 09:28:08 +0000 Subject: [PATCH 345/698] Update create_tarball.sh Co-authored-by: Kenneth Hoste --- create_tarball.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/create_tarball.sh b/create_tarball.sh index 09ce94c835..4d3ad37311 100755 --- a/create_tarball.sh +++ b/create_tarball.sh @@ -40,10 +40,12 @@ echo ">> Collecting list of files/directories to include in tarball via ${PWD}.. files_list=${tmpdir}/files.list.txt module_files_list=${tmpdir}/module_files.list.txt +# include scripts that were copied by install_scripts.sh if [ -d ${eessi_version}/scripts ]; then # include scripts we wish to ship along with EESSI, find ${eessi_version}/scripts -type f | grep -v '/\.wh\.' >> ${files_list} fi + if [ -d ${eessi_version}/software/${os}/${cpu_arch_subdir}/.lmod ]; then # include Lmod cache and configuration file (lmodrc.lua), # skip whiteout files and backup copies of Lmod cache (spiderT.old.*) From 73476b2b20c551ab7e6f0947f544f5f44d3f2537 Mon Sep 17 00:00:00 2001 From: Alan O'Cais Date: Thu, 21 Dec 2023 12:16:38 +0100 Subject: [PATCH 346/698] Only copy scripts if the contents differ --- install_scripts.sh | 21 +- .../nvidia/install_cuda_host_injections.sh | 211 ++++++++++++++++++ .../nvidia/link_nvidia_host_libraries.sh | 136 +++++++++++ temp/scripts/utils.sh | 144 ++++++++++++ 4 files changed, 510 insertions(+), 2 deletions(-) create mode 100755 temp/scripts/gpu_support/nvidia/install_cuda_host_injections.sh create mode 100755 temp/scripts/gpu_support/nvidia/link_nvidia_host_libraries.sh create mode 100644 temp/scripts/utils.sh diff --git a/install_scripts.sh b/install_scripts.sh index 224400db1c..588248e8d2 100755 --- a/install_scripts.sh +++ b/install_scripts.sh @@ -8,6 +8,23 @@ display_help() { echo " -h | --help - display this usage information" } +compare_and_copy() { + if [ "$#" -ne 2 ]; then + echo "Usage of function: compare_and_copy " + return 1 + fi + + source_file="$1" + destination_file="$2" + + if [ ! -f "$destination_file" ] || ! diff -q "$source_file" "$destination_file" ; then + cp "$source_file" "$destination_file" + echo "File $1 copied to $2." + else + echo "Files $1 and $2 are identical. No copy needed." + fi +} + POSITIONAL_ARGS=() @@ -47,7 +64,7 @@ mkdir -p ${SCRIPTS_DIR_TARGET} # Copy scripts into this prefix echo "copying scripts from ${SCRIPTS_DIR_SOURCE} to ${SCRIPTS_DIR_TARGET}" for file in utils.sh; do - cp -v -u ${SCRIPTS_DIR_SOURCE}/${file} ${SCRIPTS_DIR_TARGET}/${file} + compare_and_copy ${SCRIPTS_DIR_SOURCE}/${file} ${SCRIPTS_DIR_TARGET}/${file} done # Subdirs for GPU support NVIDIA_GPU_SUPPORT_DIR_SOURCE=${SCRIPTS_DIR_SOURCE}/gpu_support/nvidia # Source dir @@ -60,5 +77,5 @@ mkdir -p ${NVIDIA_GPU_SUPPORT_DIR_TARGET} # To be on the safe side, we dont do recursive copies, but we are explicitely copying each individual file we want to add echo "copying scripts from ${NVIDIA_GPU_SUPPORT_DIR_SOURCE} to ${NVIDIA_GPU_SUPPORT_DIR_TARGET}" for file in install_cuda_host_injections.sh link_nvidia_host_libraries.sh; do - cp -v -u ${NVIDIA_GPU_SUPPORT_DIR_SOURCE}/${file} ${NVIDIA_GPU_SUPPORT_DIR_TARGET}/${file} + compare_and_copy ${NVIDIA_GPU_SUPPORT_DIR_SOURCE}/${file} ${NVIDIA_GPU_SUPPORT_DIR_TARGET}/${file} done diff --git a/temp/scripts/gpu_support/nvidia/install_cuda_host_injections.sh b/temp/scripts/gpu_support/nvidia/install_cuda_host_injections.sh new file mode 100755 index 0000000000..a9310d817a --- /dev/null +++ b/temp/scripts/gpu_support/nvidia/install_cuda_host_injections.sh @@ -0,0 +1,211 @@ +#!/usr/bin/env bash + +# This script can be used to install CUDA under the `.../host_injections` directory. +# This provides the parts of the CUDA installation that cannot be redistributed as +# part of EESSI due to license limitations. While GPU-based software from EESSI will +# _run_ without these, installation of additional CUDA software requires the CUDA +# installation(s) under `host_injections` to be present. +# +# The `host_injections` directory is a variant symlink that by default points to +# `/opt/eessi`, unless otherwise defined in the local CVMFS configuration (see +# https://cvmfs.readthedocs.io/en/stable/cpt-repo.html#variant-symlinks). For the +# installation to be successful, this directory needs to be writeable by the user +# executing this script. + +# Initialise our bash functions +TOPDIR=$(dirname $(realpath $BASH_SOURCE)) +source "$TOPDIR"/../../utils.sh + +# Function to display help message +show_help() { + echo "Usage: $0 [OPTIONS]" + echo "Options:" + echo " --help Display this help message" + echo " --accept-cuda-eula You _must_ accept the CUDA EULA to install" + echo " CUDA, see the EULA at" + echo " https://docs.nvidia.com/cuda/eula/index.html" + echo " -c, --cuda-version CUDA_VERSION Specify a version o CUDA to install (must" + echo " have a corresponding easyconfig in the" + echo " EasyBuild release)" + echo " -t, --temp-dir /path/to/tmpdir Specify a location to use for temporary" + echo " storage during the CUDA install" + echo " (must have >10GB available)" +} + +# Initialize variables +install_cuda_version="" +eula_accepted=0 + +# Parse command-line options +while [[ $# -gt 0 ]]; do + case "$1" in + --help) + show_help + exit 0 + ;; + -c|--cuda-version) + if [ -n "$2" ]; then + install_cuda_version="$2" + shift 2 + else + echo "Error: Argument required for $1" + show_help + exit 1 + fi + ;; + --accept-cuda-eula) + eula_accepted=1 + shift 1 + ;; + -t|--temp-dir) + if [ -n "$2" ]; then + CUDA_TEMP_DIR="$2" + shift 2 + else + echo "Error: Argument required for $1" + show_help + exit 1 + fi + ;; + *) + show_help + fatal_error "Error: Unknown option: $1" + ;; + esac +done + +# Make sure EESSI is initialised +check_eessi_initialised + +# Make sure the CUDA version supplied is a semantic version +is_semantic_version() { + local version=$1 + local regex='^[0-9]+\.[0-9]+\.[0-9]+$' + + if [[ $version =~ $regex ]]; then + return 0 # Return success (0) if it's a semantic version + else + return 1 # Return failure (1) if it's not a semantic version + fi +} +if ! is_semantic_version "$install_cuda_version"; then + show_help + error="\nYou must provide a semantic version for CUDA (e.g., 12.1.1) via the appropriate\n" + error="${error}command line option. This script is intended for use with EESSI so the 'correct'\n" + error="${error}version to provide is probably one of those available under\n" + error="${error}$EESSI_SOFTWARE_PATH/software/CUDA\n" + fatal_error "${error}" +fi + +# Make sure they have accepted the CUDA EULA +if [ "$eula_accepted" -ne 1 ]; then + show_help + error="\nYou _must_ accept the CUDA EULA via the appropriate command line option.\n" + fatal_error "${error}" +fi + +# As an installation location just use $EESSI_SOFTWARE_PATH but replacing `versions` with `host_injections` +# (CUDA is a binary installation so no need to worry too much about the EasyBuild setup) +cuda_install_parent=${EESSI_SOFTWARE_PATH/versions/host_injections} + +# Only install CUDA if specified version is not found. +# (existence of easybuild subdir implies a successful install) +if [ -d "${cuda_install_parent}"/software/CUDA/"${install_cuda_version}"/easybuild ]; then + echo_green "CUDA software found! No need to install CUDA again." +else + # We need to be able write to the installation space so let's make sure we can + if ! create_directory_structure "${cuda_install_parent}"/software/CUDA ; then + fatal_error "No write permissions to directory ${cuda_install_parent}/software/CUDA" + fi + + # we need a directory we can use for temporary storage + if [[ -z "${CUDA_TEMP_DIR}" ]]; then + tmpdir=$(mktemp -d) + else + tmpdir="${CUDA_TEMP_DIR}"/temp + if ! mkdir "$tmpdir" ; then + fatal_error "Could not create directory ${tmpdir}" + fi + fi + + required_space_in_tmpdir=50000 + # Let's see if we have sources and build locations defined if not, we use the temporary space + if [[ -z "${EASYBUILD_BUILDPATH}" ]]; then + export EASYBUILD_BUILDPATH=${tmpdir}/build + required_space_in_tmpdir=$((required_space_in_tmpdir + 5000000)) + fi + if [[ -z "${EASYBUILD_SOURCEPATH}" ]]; then + export EASYBUILD_SOURCEPATH=${tmpdir}/sources + required_space_in_tmpdir=$((required_space_in_tmpdir + 5000000)) + fi + + # The install is pretty fat, you need lots of space for download/unpack/install (~3*5GB), + # need to do a space check before we proceed + avail_space=$(df --output=avail "${cuda_install_parent}"/ | tail -n 1 | awk '{print $1}') + if (( avail_space < 5000000 )); then + fatal_error "Need at least 5GB disk space to install CUDA under ${cuda_install_parent}, exiting now..." + fi + avail_space=$(df --output=avail "${tmpdir}"/ | tail -n 1 | awk '{print $1}') + if (( avail_space < required_space_in_tmpdir )); then + error="Need at least ${required_space_in_tmpdir} disk space under ${tmpdir}.\n" + error="${error}Set the environment variable CUDA_TEMP_DIR to a location with adequate space to pass this check." + error="${error}You can alternatively set EASYBUILD_BUILDPATH and/or EASYBUILD_SOURCEPATH " + error="${error}to reduce this requirement. Exiting now..." + fatal_error "${error}" + fi + + if ! command -v "eb" &>/dev/null; then + echo_yellow "Attempting to load an EasyBuild module to do actual install" + module load EasyBuild + # There are some scenarios where this may fail + if [ $? -ne 0 ]; then + error="'eb' command not found in your environment and\n" + error="${error} module load EasyBuild\n" + error="${error}failed for some reason.\n" + error="${error}Please re-run this script with the 'eb' command available." + fatal_error "${error}" + fi + fi + + cuda_easyconfig="CUDA-${install_cuda_version}.eb" + + # Check the easyconfig file is available in the release + # (eb search always returns 0, so we need a grep to ensure a usable exit code) + eb --search ^${cuda_easyconfig}|grep CUDA > /dev/null 2>&1 + # Check the exit code + if [ $? -ne 0 ]; then + eb_version=$(eb --version) + available_cuda_easyconfigs=$(eb --search ^CUDA-*.eb|grep CUDA) + + error="The easyconfig ${cuda_easyconfig} was not found in EasyBuild version:\n" + error="${error} ${eb_version}\n" + error="${error}You either need to give a different version of CUDA to install _or_ \n" + error="${error}use a different version of EasyBuild for the installation.\n" + error="${error}\nThe versions of available with the current eb command are:\n" + error="${error}${available_cuda_easyconfigs}" + fatal_error "${error}" + fi + + # We need the --rebuild option, as the CUDA module may or may not be on the + # `MODULEPATH` yet. Even if it is, we still want to redo this installation + # since it will provide the symlinked targets for the parts of the CUDA + # installation in the `.../versions/...` prefix + # We install the module in our `tmpdir` since we do not need the modulefile, + # we only care about providing the targets for the symlinks. + extra_args="--rebuild --installpath-modules=${tmpdir}" + + # We don't want hooks used in this install, we need a vanilla CUDA installation + touch "$tmpdir"/none.py + # shellcheck disable=SC2086 # Intended splitting of extra_args + eb --prefix="$tmpdir" ${extra_args} --accept-eula-for=CUDA --hooks="$tmpdir"/none.py --installpath="${cuda_install_parent}"/ "${cuda_easyconfig}" + ret=$? + if [ $ret -ne 0 ]; then + eb_last_log=$(unset EB_VERBOSE; eb --last-log) + cp -a ${eb_last_log} . + fatal_error "CUDA installation failed, please check EasyBuild logs $(basename ${eb_last_log})..." + else + echo_green "CUDA installation at ${cuda_install_parent}/software/CUDA/${install_cuda_version} succeeded!" + fi + # clean up tmpdir + rm -rf "${tmpdir}" +fi diff --git a/temp/scripts/gpu_support/nvidia/link_nvidia_host_libraries.sh b/temp/scripts/gpu_support/nvidia/link_nvidia_host_libraries.sh new file mode 100755 index 0000000000..e6ff110797 --- /dev/null +++ b/temp/scripts/gpu_support/nvidia/link_nvidia_host_libraries.sh @@ -0,0 +1,136 @@ +#!/bin/bash + +# This script links host libraries related to GPU drivers to a location where +# they can be found by the EESSI linker + +# Initialise our bash functions +TOPDIR=$(dirname $(realpath $BASH_SOURCE)) +source "$TOPDIR"/../../utils.sh + +# We rely on ldconfig to give us the location of the libraries on the host +command_name="ldconfig" +# We cannot use a version of ldconfig that's being shipped under CVMFS +exclude_prefix="/cvmfs" + +found_paths=() +# Always attempt to use /sbin/ldconfig +if [ -x "/sbin/$command_name" ]; then + found_paths+=("/sbin/$command_name") +fi +IFS=':' read -ra path_dirs <<< "$PATH" +for dir in "${path_dirs[@]}"; do + if [ "$dir" = "/sbin" ]; then + continue # we've already checked for $command_name in /sbin, don't need to do it twice + fi + if [[ ! "$dir" =~ ^$exclude_prefix ]]; then + if [ -x "$dir/$command_name" ]; then + found_paths+=("$dir/$command_name") + fi + fi +done + +if [ ${#found_paths[@]} -gt 0 ]; then + echo "Found $command_name in the following locations:" + printf -- "- %s\n" "${found_paths[@]}" + echo "Using first version" + host_ldconfig=${found_paths[0]} +else + error="$command_name not found in PATH or only found in paths starting with $exclude_prefix." + fatal_error "$error" +fi + +# Make sure EESSI is initialised (doesn't matter what version) +check_eessi_initialised + +# Find the CUDA version of the host CUDA drivers +# (making sure that this can still work inside prefix environment inside a container) +export LD_LIBRARY_PATH=/.singularity.d/libs:$LD_LIBRARY_PATH +nvidia_smi_command="nvidia-smi --query-gpu=driver_version --format=csv,noheader" +if $nvidia_smi_command > /dev/null; then + host_driver_version=$($nvidia_smi_command | tail -n1) + # If the first worked, this should work too + host_cuda_version=$(nvidia-smi -q --display=COMPUTE | grep CUDA | awk 'NF>1{print $NF}') +else + error="Failed to successfully execute\n $nvidia_smi_command\n" + fatal_error "$error" +fi + +# Let's make sure the driver libraries are not already in place +link_drivers=1 + +host_injections_nvidia_dir="${EESSI_CVMFS_REPO}/host_injections/nvidia/${EESSI_CPU_FAMILY}" +host_injection_driver_dir="${host_injections_nvidia_dir}/host" +host_injection_driver_version_file="$host_injection_driver_dir/driver_version.txt" +if [ -e "$host_injection_driver_version_file" ]; then + if grep -q "$host_driver_version" "$host_injection_driver_version_file"; then + echo_green "The host CUDA driver libraries have already been linked!" + link_drivers=0 + else + # There's something there but it is out of date + echo_yellow "Cleaning out outdated symlinks" + rm $host_injection_driver_dir/* + if [ $? -ne 0 ]; then + error="Unable to remove files under '$host_injection_driver_dir'." + fatal_error "$error" + fi + fi +fi + +drivers_linked=0 +if [ "$link_drivers" -eq 1 ]; then + if ! create_directory_structure "${host_injection_driver_dir}" ; then + fatal_error "No write permissions to directory ${host_injection_driver_dir}" + fi + cd ${host_injection_driver_dir} + # Need a small temporary space to hold a couple of files + temp_dir=$(mktemp -d) + + # Gather libraries on the host (_must_ be host ldconfig) + $host_ldconfig -p | awk '{print $NF}' > "$temp_dir"/libs.txt + # Allow for the fact that we may be in a container so the CUDA libs might be in there + ls /.singularity.d/libs/* >> "$temp_dir"/libs.txt 2>/dev/null + + # Leverage singularity to find the full list of libraries we should be linking to + echo_yellow "Downloading latest version of nvliblist.conf from Apptainer" + curl -o "$temp_dir"/nvliblist.conf https://raw.githubusercontent.com/apptainer/apptainer/main/etc/nvliblist.conf + + # Make symlinks to all the interesting libraries + grep '.so$' "$temp_dir"/nvliblist.conf | xargs -i grep {} "$temp_dir"/libs.txt | xargs -i ln -s {} + + # Inject driver and CUDA versions into dir + echo $host_driver_version > driver_version.txt + echo $host_cuda_version > cuda_version.txt + drivers_linked=1 + + # Remove the temporary directory when done + rm -r "$temp_dir" +fi + +# Make latest symlink for NVIDIA drivers +cd $host_injections_nvidia_dir +symlink="latest" +if [ -L "$symlink" ]; then + # Unless the drivers have been installed, leave the symlink alone + if [ "$drivers_linked" -eq 1 ]; then + ln -sf host latest + fi +else + # No link exists yet + ln -s host latest +fi + +# Make sure the libraries can be found by the EESSI linker +host_injection_linker_dir=${EESSI_EPREFIX/versions/host_injections} +if [ -L "$host_injection_linker_dir/lib" ]; then + target_path=$(readlink -f "$host_injection_linker_dir/lib") + if [ "$target_path" != "$$host_injections_nvidia_dir/latest" ]; then + cd $host_injection_linker_dir + ln -sf $host_injections_nvidia_dir/latest lib + fi +else + create_directory_structure $host_injection_linker_dir + cd $host_injection_linker_dir + ln -s $host_injections_nvidia_dir/latest lib +fi + +echo_green "Host NVIDIA gpu drivers linked successfully for EESSI" diff --git a/temp/scripts/utils.sh b/temp/scripts/utils.sh new file mode 100644 index 0000000000..b2be3f6221 --- /dev/null +++ b/temp/scripts/utils.sh @@ -0,0 +1,144 @@ +function echo_green() { + echo -e "\e[32m$1\e[0m" +} + +function echo_red() { + echo -e "\e[31m$1\e[0m" +} + +function echo_yellow() { + echo -e "\e[33m$1\e[0m" +} + +ANY_ERROR_EXITCODE=1 +function fatal_error() { + echo_red "ERROR: $1" >&2 + if [[ $# -gt 1 ]]; then + exit "$2" + else + exit "${ANY_ERROR_EXITCODE}" + fi +} + +function check_exit_code { + ec=$1 + ok_msg=$2 + fail_msg=$3 + + if [[ $ec -eq 0 ]]; then + echo_green "${ok_msg}" + else + fatal_error "${fail_msg}" + fi +} + +function check_eessi_initialised() { + if [[ -z "${EESSI_SOFTWARE_PATH}" ]]; then + fatal_error "EESSI has not been initialised!" + else + return 0 + fi +} + +function check_in_prefix_shell() { + # Make sure EPREFIX is defined + if [[ -z "${EPREFIX}" ]]; then + fatal_error "This script cannot be used without having first defined EPREFIX" + fi + if [[ ! ${SHELL} = ${EPREFIX}/bin/bash ]]; then + fatal_error "Not running in Gentoo Prefix environment, run '${EPREFIX}/startprefix' first!" + fi +} + +function create_directory_structure() { + # Ensure we are given a single path argument + if [ $# -ne 1 ]; then + echo_red "Function requires a single (relative or absolute) path argument" >&2 + return $ANY_ERROR_EXITCODE + fi + dir_structure="$1" + + # Attempt to create the directory structure + error_message=$(mkdir -p "$dir_structure" 2>&1) + return_code=$? + # If it fails be explicit about the error + if [ ${return_code} -ne 0 ]; then + real_dir=$(realpath -m "$dir_structure") + echo_red "Creating ${dir_structure} (real path ${real_dir}) failed with:\n ${error_message}" >&2 + else + # If we're creating it, our use case is that we want to be able to write there + # (this is a check in case the directory already existed) + if [ ! -w "${dir_structure}" ]; then + real_dir=$(realpath -m "$dir_structure") + echo_red "You do not have (required) write permissions to ${dir_structure} (real path ${real_dir})!" + return_code=$ANY_ERROR_EXITCODE + fi + fi + + return $return_code +} + +function get_path_for_tool { + tool_name=$1 + tool_envvar_name=$2 + + which_out=$(which "${tool_name}" 2>&1) + exit_code=$? + if [[ ${exit_code} -eq 0 ]]; then + echo "INFO: found tool ${tool_name} in PATH (${which_out})" >&2 + echo "${which_out}" + return 0 + fi + if [[ -z "${tool_envvar_name}" ]]; then + msg="no env var holding the full path to tool '${tool_name}' provided" + echo "${msg}" >&2 + return 1 + else + tool_envvar_value=${!tool_envvar_name} + if [[ -x "${tool_envvar_value}" ]]; then + msg="INFO: found tool ${tool_envvar_value} via env var ${tool_envvar_name}" + echo "${msg}" >&2 + echo "${tool_envvar_value}" + return 0 + else + msg="ERROR: tool '${tool_name}' not in PATH\n" + msg+="ERROR: tool '${tool_envvar_value}' via '${tool_envvar_name}' not in PATH" + echo "${msg}" >&2 + echo "" + return 2 + fi + fi +} + +function get_host_from_url { + url=$1 + re="(http|https)://([^/:]+)" + if [[ $url =~ $re ]]; then + echo "${BASH_REMATCH[2]}" + return 0 + else + echo "" + return 1 + fi +} + +function get_port_from_url { + url=$1 + re="(http|https)://[^:]+:([0-9]+)" + if [[ $url =~ $re ]]; then + echo "${BASH_REMATCH[2]}" + return 0 + else + echo "" + return 1 + fi +} + +function get_ipv4_address { + hname=$1 + hipv4=$(grep "${hname}" /etc/hosts | grep -v '^[[:space:]]*#' | cut -d ' ' -f 1) + # TODO try other methods if the one above does not work --> tool that verifies + # what method can be used? + echo "${hipv4}" + return 0 +} From a333a741bb75a68f6d29cb718472af70e3b5c912 Mon Sep 17 00:00:00 2001 From: Alan O'Cais Date: Thu, 21 Dec 2023 12:19:19 +0100 Subject: [PATCH 347/698] Remove temporary test directory --- .../nvidia/install_cuda_host_injections.sh | 211 ------------------ .../nvidia/link_nvidia_host_libraries.sh | 136 ----------- temp/scripts/utils.sh | 144 ------------ 3 files changed, 491 deletions(-) delete mode 100755 temp/scripts/gpu_support/nvidia/install_cuda_host_injections.sh delete mode 100755 temp/scripts/gpu_support/nvidia/link_nvidia_host_libraries.sh delete mode 100644 temp/scripts/utils.sh diff --git a/temp/scripts/gpu_support/nvidia/install_cuda_host_injections.sh b/temp/scripts/gpu_support/nvidia/install_cuda_host_injections.sh deleted file mode 100755 index a9310d817a..0000000000 --- a/temp/scripts/gpu_support/nvidia/install_cuda_host_injections.sh +++ /dev/null @@ -1,211 +0,0 @@ -#!/usr/bin/env bash - -# This script can be used to install CUDA under the `.../host_injections` directory. -# This provides the parts of the CUDA installation that cannot be redistributed as -# part of EESSI due to license limitations. While GPU-based software from EESSI will -# _run_ without these, installation of additional CUDA software requires the CUDA -# installation(s) under `host_injections` to be present. -# -# The `host_injections` directory is a variant symlink that by default points to -# `/opt/eessi`, unless otherwise defined in the local CVMFS configuration (see -# https://cvmfs.readthedocs.io/en/stable/cpt-repo.html#variant-symlinks). For the -# installation to be successful, this directory needs to be writeable by the user -# executing this script. - -# Initialise our bash functions -TOPDIR=$(dirname $(realpath $BASH_SOURCE)) -source "$TOPDIR"/../../utils.sh - -# Function to display help message -show_help() { - echo "Usage: $0 [OPTIONS]" - echo "Options:" - echo " --help Display this help message" - echo " --accept-cuda-eula You _must_ accept the CUDA EULA to install" - echo " CUDA, see the EULA at" - echo " https://docs.nvidia.com/cuda/eula/index.html" - echo " -c, --cuda-version CUDA_VERSION Specify a version o CUDA to install (must" - echo " have a corresponding easyconfig in the" - echo " EasyBuild release)" - echo " -t, --temp-dir /path/to/tmpdir Specify a location to use for temporary" - echo " storage during the CUDA install" - echo " (must have >10GB available)" -} - -# Initialize variables -install_cuda_version="" -eula_accepted=0 - -# Parse command-line options -while [[ $# -gt 0 ]]; do - case "$1" in - --help) - show_help - exit 0 - ;; - -c|--cuda-version) - if [ -n "$2" ]; then - install_cuda_version="$2" - shift 2 - else - echo "Error: Argument required for $1" - show_help - exit 1 - fi - ;; - --accept-cuda-eula) - eula_accepted=1 - shift 1 - ;; - -t|--temp-dir) - if [ -n "$2" ]; then - CUDA_TEMP_DIR="$2" - shift 2 - else - echo "Error: Argument required for $1" - show_help - exit 1 - fi - ;; - *) - show_help - fatal_error "Error: Unknown option: $1" - ;; - esac -done - -# Make sure EESSI is initialised -check_eessi_initialised - -# Make sure the CUDA version supplied is a semantic version -is_semantic_version() { - local version=$1 - local regex='^[0-9]+\.[0-9]+\.[0-9]+$' - - if [[ $version =~ $regex ]]; then - return 0 # Return success (0) if it's a semantic version - else - return 1 # Return failure (1) if it's not a semantic version - fi -} -if ! is_semantic_version "$install_cuda_version"; then - show_help - error="\nYou must provide a semantic version for CUDA (e.g., 12.1.1) via the appropriate\n" - error="${error}command line option. This script is intended for use with EESSI so the 'correct'\n" - error="${error}version to provide is probably one of those available under\n" - error="${error}$EESSI_SOFTWARE_PATH/software/CUDA\n" - fatal_error "${error}" -fi - -# Make sure they have accepted the CUDA EULA -if [ "$eula_accepted" -ne 1 ]; then - show_help - error="\nYou _must_ accept the CUDA EULA via the appropriate command line option.\n" - fatal_error "${error}" -fi - -# As an installation location just use $EESSI_SOFTWARE_PATH but replacing `versions` with `host_injections` -# (CUDA is a binary installation so no need to worry too much about the EasyBuild setup) -cuda_install_parent=${EESSI_SOFTWARE_PATH/versions/host_injections} - -# Only install CUDA if specified version is not found. -# (existence of easybuild subdir implies a successful install) -if [ -d "${cuda_install_parent}"/software/CUDA/"${install_cuda_version}"/easybuild ]; then - echo_green "CUDA software found! No need to install CUDA again." -else - # We need to be able write to the installation space so let's make sure we can - if ! create_directory_structure "${cuda_install_parent}"/software/CUDA ; then - fatal_error "No write permissions to directory ${cuda_install_parent}/software/CUDA" - fi - - # we need a directory we can use for temporary storage - if [[ -z "${CUDA_TEMP_DIR}" ]]; then - tmpdir=$(mktemp -d) - else - tmpdir="${CUDA_TEMP_DIR}"/temp - if ! mkdir "$tmpdir" ; then - fatal_error "Could not create directory ${tmpdir}" - fi - fi - - required_space_in_tmpdir=50000 - # Let's see if we have sources and build locations defined if not, we use the temporary space - if [[ -z "${EASYBUILD_BUILDPATH}" ]]; then - export EASYBUILD_BUILDPATH=${tmpdir}/build - required_space_in_tmpdir=$((required_space_in_tmpdir + 5000000)) - fi - if [[ -z "${EASYBUILD_SOURCEPATH}" ]]; then - export EASYBUILD_SOURCEPATH=${tmpdir}/sources - required_space_in_tmpdir=$((required_space_in_tmpdir + 5000000)) - fi - - # The install is pretty fat, you need lots of space for download/unpack/install (~3*5GB), - # need to do a space check before we proceed - avail_space=$(df --output=avail "${cuda_install_parent}"/ | tail -n 1 | awk '{print $1}') - if (( avail_space < 5000000 )); then - fatal_error "Need at least 5GB disk space to install CUDA under ${cuda_install_parent}, exiting now..." - fi - avail_space=$(df --output=avail "${tmpdir}"/ | tail -n 1 | awk '{print $1}') - if (( avail_space < required_space_in_tmpdir )); then - error="Need at least ${required_space_in_tmpdir} disk space under ${tmpdir}.\n" - error="${error}Set the environment variable CUDA_TEMP_DIR to a location with adequate space to pass this check." - error="${error}You can alternatively set EASYBUILD_BUILDPATH and/or EASYBUILD_SOURCEPATH " - error="${error}to reduce this requirement. Exiting now..." - fatal_error "${error}" - fi - - if ! command -v "eb" &>/dev/null; then - echo_yellow "Attempting to load an EasyBuild module to do actual install" - module load EasyBuild - # There are some scenarios where this may fail - if [ $? -ne 0 ]; then - error="'eb' command not found in your environment and\n" - error="${error} module load EasyBuild\n" - error="${error}failed for some reason.\n" - error="${error}Please re-run this script with the 'eb' command available." - fatal_error "${error}" - fi - fi - - cuda_easyconfig="CUDA-${install_cuda_version}.eb" - - # Check the easyconfig file is available in the release - # (eb search always returns 0, so we need a grep to ensure a usable exit code) - eb --search ^${cuda_easyconfig}|grep CUDA > /dev/null 2>&1 - # Check the exit code - if [ $? -ne 0 ]; then - eb_version=$(eb --version) - available_cuda_easyconfigs=$(eb --search ^CUDA-*.eb|grep CUDA) - - error="The easyconfig ${cuda_easyconfig} was not found in EasyBuild version:\n" - error="${error} ${eb_version}\n" - error="${error}You either need to give a different version of CUDA to install _or_ \n" - error="${error}use a different version of EasyBuild for the installation.\n" - error="${error}\nThe versions of available with the current eb command are:\n" - error="${error}${available_cuda_easyconfigs}" - fatal_error "${error}" - fi - - # We need the --rebuild option, as the CUDA module may or may not be on the - # `MODULEPATH` yet. Even if it is, we still want to redo this installation - # since it will provide the symlinked targets for the parts of the CUDA - # installation in the `.../versions/...` prefix - # We install the module in our `tmpdir` since we do not need the modulefile, - # we only care about providing the targets for the symlinks. - extra_args="--rebuild --installpath-modules=${tmpdir}" - - # We don't want hooks used in this install, we need a vanilla CUDA installation - touch "$tmpdir"/none.py - # shellcheck disable=SC2086 # Intended splitting of extra_args - eb --prefix="$tmpdir" ${extra_args} --accept-eula-for=CUDA --hooks="$tmpdir"/none.py --installpath="${cuda_install_parent}"/ "${cuda_easyconfig}" - ret=$? - if [ $ret -ne 0 ]; then - eb_last_log=$(unset EB_VERBOSE; eb --last-log) - cp -a ${eb_last_log} . - fatal_error "CUDA installation failed, please check EasyBuild logs $(basename ${eb_last_log})..." - else - echo_green "CUDA installation at ${cuda_install_parent}/software/CUDA/${install_cuda_version} succeeded!" - fi - # clean up tmpdir - rm -rf "${tmpdir}" -fi diff --git a/temp/scripts/gpu_support/nvidia/link_nvidia_host_libraries.sh b/temp/scripts/gpu_support/nvidia/link_nvidia_host_libraries.sh deleted file mode 100755 index e6ff110797..0000000000 --- a/temp/scripts/gpu_support/nvidia/link_nvidia_host_libraries.sh +++ /dev/null @@ -1,136 +0,0 @@ -#!/bin/bash - -# This script links host libraries related to GPU drivers to a location where -# they can be found by the EESSI linker - -# Initialise our bash functions -TOPDIR=$(dirname $(realpath $BASH_SOURCE)) -source "$TOPDIR"/../../utils.sh - -# We rely on ldconfig to give us the location of the libraries on the host -command_name="ldconfig" -# We cannot use a version of ldconfig that's being shipped under CVMFS -exclude_prefix="/cvmfs" - -found_paths=() -# Always attempt to use /sbin/ldconfig -if [ -x "/sbin/$command_name" ]; then - found_paths+=("/sbin/$command_name") -fi -IFS=':' read -ra path_dirs <<< "$PATH" -for dir in "${path_dirs[@]}"; do - if [ "$dir" = "/sbin" ]; then - continue # we've already checked for $command_name in /sbin, don't need to do it twice - fi - if [[ ! "$dir" =~ ^$exclude_prefix ]]; then - if [ -x "$dir/$command_name" ]; then - found_paths+=("$dir/$command_name") - fi - fi -done - -if [ ${#found_paths[@]} -gt 0 ]; then - echo "Found $command_name in the following locations:" - printf -- "- %s\n" "${found_paths[@]}" - echo "Using first version" - host_ldconfig=${found_paths[0]} -else - error="$command_name not found in PATH or only found in paths starting with $exclude_prefix." - fatal_error "$error" -fi - -# Make sure EESSI is initialised (doesn't matter what version) -check_eessi_initialised - -# Find the CUDA version of the host CUDA drivers -# (making sure that this can still work inside prefix environment inside a container) -export LD_LIBRARY_PATH=/.singularity.d/libs:$LD_LIBRARY_PATH -nvidia_smi_command="nvidia-smi --query-gpu=driver_version --format=csv,noheader" -if $nvidia_smi_command > /dev/null; then - host_driver_version=$($nvidia_smi_command | tail -n1) - # If the first worked, this should work too - host_cuda_version=$(nvidia-smi -q --display=COMPUTE | grep CUDA | awk 'NF>1{print $NF}') -else - error="Failed to successfully execute\n $nvidia_smi_command\n" - fatal_error "$error" -fi - -# Let's make sure the driver libraries are not already in place -link_drivers=1 - -host_injections_nvidia_dir="${EESSI_CVMFS_REPO}/host_injections/nvidia/${EESSI_CPU_FAMILY}" -host_injection_driver_dir="${host_injections_nvidia_dir}/host" -host_injection_driver_version_file="$host_injection_driver_dir/driver_version.txt" -if [ -e "$host_injection_driver_version_file" ]; then - if grep -q "$host_driver_version" "$host_injection_driver_version_file"; then - echo_green "The host CUDA driver libraries have already been linked!" - link_drivers=0 - else - # There's something there but it is out of date - echo_yellow "Cleaning out outdated symlinks" - rm $host_injection_driver_dir/* - if [ $? -ne 0 ]; then - error="Unable to remove files under '$host_injection_driver_dir'." - fatal_error "$error" - fi - fi -fi - -drivers_linked=0 -if [ "$link_drivers" -eq 1 ]; then - if ! create_directory_structure "${host_injection_driver_dir}" ; then - fatal_error "No write permissions to directory ${host_injection_driver_dir}" - fi - cd ${host_injection_driver_dir} - # Need a small temporary space to hold a couple of files - temp_dir=$(mktemp -d) - - # Gather libraries on the host (_must_ be host ldconfig) - $host_ldconfig -p | awk '{print $NF}' > "$temp_dir"/libs.txt - # Allow for the fact that we may be in a container so the CUDA libs might be in there - ls /.singularity.d/libs/* >> "$temp_dir"/libs.txt 2>/dev/null - - # Leverage singularity to find the full list of libraries we should be linking to - echo_yellow "Downloading latest version of nvliblist.conf from Apptainer" - curl -o "$temp_dir"/nvliblist.conf https://raw.githubusercontent.com/apptainer/apptainer/main/etc/nvliblist.conf - - # Make symlinks to all the interesting libraries - grep '.so$' "$temp_dir"/nvliblist.conf | xargs -i grep {} "$temp_dir"/libs.txt | xargs -i ln -s {} - - # Inject driver and CUDA versions into dir - echo $host_driver_version > driver_version.txt - echo $host_cuda_version > cuda_version.txt - drivers_linked=1 - - # Remove the temporary directory when done - rm -r "$temp_dir" -fi - -# Make latest symlink for NVIDIA drivers -cd $host_injections_nvidia_dir -symlink="latest" -if [ -L "$symlink" ]; then - # Unless the drivers have been installed, leave the symlink alone - if [ "$drivers_linked" -eq 1 ]; then - ln -sf host latest - fi -else - # No link exists yet - ln -s host latest -fi - -# Make sure the libraries can be found by the EESSI linker -host_injection_linker_dir=${EESSI_EPREFIX/versions/host_injections} -if [ -L "$host_injection_linker_dir/lib" ]; then - target_path=$(readlink -f "$host_injection_linker_dir/lib") - if [ "$target_path" != "$$host_injections_nvidia_dir/latest" ]; then - cd $host_injection_linker_dir - ln -sf $host_injections_nvidia_dir/latest lib - fi -else - create_directory_structure $host_injection_linker_dir - cd $host_injection_linker_dir - ln -s $host_injections_nvidia_dir/latest lib -fi - -echo_green "Host NVIDIA gpu drivers linked successfully for EESSI" diff --git a/temp/scripts/utils.sh b/temp/scripts/utils.sh deleted file mode 100644 index b2be3f6221..0000000000 --- a/temp/scripts/utils.sh +++ /dev/null @@ -1,144 +0,0 @@ -function echo_green() { - echo -e "\e[32m$1\e[0m" -} - -function echo_red() { - echo -e "\e[31m$1\e[0m" -} - -function echo_yellow() { - echo -e "\e[33m$1\e[0m" -} - -ANY_ERROR_EXITCODE=1 -function fatal_error() { - echo_red "ERROR: $1" >&2 - if [[ $# -gt 1 ]]; then - exit "$2" - else - exit "${ANY_ERROR_EXITCODE}" - fi -} - -function check_exit_code { - ec=$1 - ok_msg=$2 - fail_msg=$3 - - if [[ $ec -eq 0 ]]; then - echo_green "${ok_msg}" - else - fatal_error "${fail_msg}" - fi -} - -function check_eessi_initialised() { - if [[ -z "${EESSI_SOFTWARE_PATH}" ]]; then - fatal_error "EESSI has not been initialised!" - else - return 0 - fi -} - -function check_in_prefix_shell() { - # Make sure EPREFIX is defined - if [[ -z "${EPREFIX}" ]]; then - fatal_error "This script cannot be used without having first defined EPREFIX" - fi - if [[ ! ${SHELL} = ${EPREFIX}/bin/bash ]]; then - fatal_error "Not running in Gentoo Prefix environment, run '${EPREFIX}/startprefix' first!" - fi -} - -function create_directory_structure() { - # Ensure we are given a single path argument - if [ $# -ne 1 ]; then - echo_red "Function requires a single (relative or absolute) path argument" >&2 - return $ANY_ERROR_EXITCODE - fi - dir_structure="$1" - - # Attempt to create the directory structure - error_message=$(mkdir -p "$dir_structure" 2>&1) - return_code=$? - # If it fails be explicit about the error - if [ ${return_code} -ne 0 ]; then - real_dir=$(realpath -m "$dir_structure") - echo_red "Creating ${dir_structure} (real path ${real_dir}) failed with:\n ${error_message}" >&2 - else - # If we're creating it, our use case is that we want to be able to write there - # (this is a check in case the directory already existed) - if [ ! -w "${dir_structure}" ]; then - real_dir=$(realpath -m "$dir_structure") - echo_red "You do not have (required) write permissions to ${dir_structure} (real path ${real_dir})!" - return_code=$ANY_ERROR_EXITCODE - fi - fi - - return $return_code -} - -function get_path_for_tool { - tool_name=$1 - tool_envvar_name=$2 - - which_out=$(which "${tool_name}" 2>&1) - exit_code=$? - if [[ ${exit_code} -eq 0 ]]; then - echo "INFO: found tool ${tool_name} in PATH (${which_out})" >&2 - echo "${which_out}" - return 0 - fi - if [[ -z "${tool_envvar_name}" ]]; then - msg="no env var holding the full path to tool '${tool_name}' provided" - echo "${msg}" >&2 - return 1 - else - tool_envvar_value=${!tool_envvar_name} - if [[ -x "${tool_envvar_value}" ]]; then - msg="INFO: found tool ${tool_envvar_value} via env var ${tool_envvar_name}" - echo "${msg}" >&2 - echo "${tool_envvar_value}" - return 0 - else - msg="ERROR: tool '${tool_name}' not in PATH\n" - msg+="ERROR: tool '${tool_envvar_value}' via '${tool_envvar_name}' not in PATH" - echo "${msg}" >&2 - echo "" - return 2 - fi - fi -} - -function get_host_from_url { - url=$1 - re="(http|https)://([^/:]+)" - if [[ $url =~ $re ]]; then - echo "${BASH_REMATCH[2]}" - return 0 - else - echo "" - return 1 - fi -} - -function get_port_from_url { - url=$1 - re="(http|https)://[^:]+:([0-9]+)" - if [[ $url =~ $re ]]; then - echo "${BASH_REMATCH[2]}" - return 0 - else - echo "" - return 1 - fi -} - -function get_ipv4_address { - hname=$1 - hipv4=$(grep "${hname}" /etc/hosts | grep -v '^[[:space:]]*#' | cut -d ' ' -f 1) - # TODO try other methods if the one above does not work --> tool that verifies - # what method can be used? - echo "${hipv4}" - return 0 -} From 43c73c07643cf756ff8411b9068bf4cb2a64eec4 Mon Sep 17 00:00:00 2001 From: ocaisa Date: Thu, 21 Dec 2023 13:06:53 +0100 Subject: [PATCH 348/698] Get rid of copy/paste unfriendly '.' --- install_scripts.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install_scripts.sh b/install_scripts.sh index 588248e8d2..6e6cd825ac 100755 --- a/install_scripts.sh +++ b/install_scripts.sh @@ -19,7 +19,7 @@ compare_and_copy() { if [ ! -f "$destination_file" ] || ! diff -q "$source_file" "$destination_file" ; then cp "$source_file" "$destination_file" - echo "File $1 copied to $2." + echo "File $1 copied to $2" else echo "Files $1 and $2 are identical. No copy needed." fi From 3ec3df8f4a91c6684ed83c6b021c231ca74ba7c0 Mon Sep 17 00:00:00 2001 From: ocaisa Date: Thu, 21 Dec 2023 14:11:09 +0100 Subject: [PATCH 349/698] Update create_tarball.sh --- create_tarball.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/create_tarball.sh b/create_tarball.sh index 4d3ad37311..a172428af1 100755 --- a/create_tarball.sh +++ b/create_tarball.sh @@ -43,13 +43,13 @@ module_files_list=${tmpdir}/module_files.list.txt # include scripts that were copied by install_scripts.sh if [ -d ${eessi_version}/scripts ]; then # include scripts we wish to ship along with EESSI, - find ${eessi_version}/scripts -type f | grep -v '/\.wh\.' >> ${files_list} + find ${eessi_version}/scripts -type f | grep -v '/\.wh\.' > ${files_list} fi if [ -d ${eessi_version}/software/${os}/${cpu_arch_subdir}/.lmod ]; then # include Lmod cache and configuration file (lmodrc.lua), # skip whiteout files and backup copies of Lmod cache (spiderT.old.*) - find ${eessi_version}/software/${os}/${cpu_arch_subdir}/.lmod -type f | egrep -v '/\.wh\.|spiderT.old' > ${files_list} + find ${eessi_version}/software/${os}/${cpu_arch_subdir}/.lmod -type f | egrep -v '/\.wh\.|spiderT.old' >> ${files_list} fi if [ -d ${eessi_version}/software/${os}/${cpu_arch_subdir}/modules ]; then # module files From 42e3404a0015d7b4049c5cd3e5a01ee764261d44 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 21 Dec 2023 14:13:23 +0100 Subject: [PATCH 350/698] always append to list of files to include in tarball, to avoid overwriting it --- create_tarball.sh | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/create_tarball.sh b/create_tarball.sh index a172428af1..faaa9fda6f 100755 --- a/create_tarball.sh +++ b/create_tarball.sh @@ -40,10 +40,10 @@ echo ">> Collecting list of files/directories to include in tarball via ${PWD}.. files_list=${tmpdir}/files.list.txt module_files_list=${tmpdir}/module_files.list.txt -# include scripts that were copied by install_scripts.sh -if [ -d ${eessi_version}/scripts ]; then - # include scripts we wish to ship along with EESSI, - find ${eessi_version}/scripts -type f | grep -v '/\.wh\.' > ${files_list} +# include Lmod cache and configuration file (lmodrc.lua), +if [ -d ${eessi_version}/software/${os}/${cpu_arch_subdir}/.lmod ]; then + # skip whiteout files and backup copies of Lmod cache (spiderT.old.*) + find ${eessi_version}/software/${os}/${cpu_arch_subdir}/.lmod -type f | egrep -v '/\.wh\.|spiderT.old' >> ${files_list} fi if [ -d ${eessi_version}/software/${os}/${cpu_arch_subdir}/.lmod ]; then @@ -51,6 +51,12 @@ if [ -d ${eessi_version}/software/${os}/${cpu_arch_subdir}/.lmod ]; then # skip whiteout files and backup copies of Lmod cache (spiderT.old.*) find ${eessi_version}/software/${os}/${cpu_arch_subdir}/.lmod -type f | egrep -v '/\.wh\.|spiderT.old' >> ${files_list} fi + +# include scripts that were copied by install_scripts.sh, which we want to ship in EESSI repository +if [ -d ${eessi_version}/scripts ]; then + find ${eessi_version}/scripts -type f | grep -v '/\.wh\.' >> ${files_list} +fi + if [ -d ${eessi_version}/software/${os}/${cpu_arch_subdir}/modules ]; then # module files find ${eessi_version}/software/${os}/${cpu_arch_subdir}/modules -type f | grep -v '/\.wh\.' >> ${files_list} @@ -61,6 +67,7 @@ if [ -d ${eessi_version}/software/${os}/${cpu_arch_subdir}/modules ]; then | grep -v '/\.wh\.' | grep -v '/\.modulerc\.lua' | sed -e 's/.lua$//' | sed -e 's@.*/modules/all/@@g' | sort -u \ >> ${module_files_list} fi + if [ -d ${eessi_version}/software/${os}/${cpu_arch_subdir}/software -a -r ${module_files_list} ]; then # installation directories but only those for which module files were created # Note, we assume that module names (as defined by 'PACKAGE_NAME/VERSION.lua' From 60741ae979757b72c87551a9d0e15afefda4a4a6 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 21 Dec 2023 20:48:36 +0100 Subject: [PATCH 351/698] make link_nvidia_host_libraries.sh script a bit more robust, in case target of host_injections directory is a non-existing directory --- .../nvidia/link_nvidia_host_libraries.sh | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/scripts/gpu_support/nvidia/link_nvidia_host_libraries.sh b/scripts/gpu_support/nvidia/link_nvidia_host_libraries.sh index e6ff110797..e8d7f0d0a7 100755 --- a/scripts/gpu_support/nvidia/link_nvidia_host_libraries.sh +++ b/scripts/gpu_support/nvidia/link_nvidia_host_libraries.sh @@ -48,8 +48,10 @@ export LD_LIBRARY_PATH=/.singularity.d/libs:$LD_LIBRARY_PATH nvidia_smi_command="nvidia-smi --query-gpu=driver_version --format=csv,noheader" if $nvidia_smi_command > /dev/null; then host_driver_version=$($nvidia_smi_command | tail -n1) + echo_green "Found NVIDIA GPU driver version ${host_driver_version}" # If the first worked, this should work too host_cuda_version=$(nvidia-smi -q --display=COMPUTE | grep CUDA | awk 'NF>1{print $NF}') + echo_green "Found host CUDA version ${host_cuda_version}" else error="Failed to successfully execute\n $nvidia_smi_command\n" fatal_error "$error" @@ -58,12 +60,18 @@ fi # Let's make sure the driver libraries are not already in place link_drivers=1 +# first make sure that target of host_injections variant symlink is an existing directory +host_injections_target=$(realpath -m ${EESSI_CVMFS_REPO}/host_injections) +if [ ! -d ${host_injections_target} ]; then + create_directory_structure ${host_injections_target} +fi + host_injections_nvidia_dir="${EESSI_CVMFS_REPO}/host_injections/nvidia/${EESSI_CPU_FAMILY}" host_injection_driver_dir="${host_injections_nvidia_dir}/host" host_injection_driver_version_file="$host_injection_driver_dir/driver_version.txt" if [ -e "$host_injection_driver_version_file" ]; then if grep -q "$host_driver_version" "$host_injection_driver_version_file"; then - echo_green "The host CUDA driver libraries have already been linked!" + echo_green "The host GPU driver libraries (v${host_driver_version}) have already been linked! (based on ${host_injection_driver_version_file})" link_drivers=0 else # There's something there but it is out of date @@ -91,8 +99,8 @@ if [ "$link_drivers" -eq 1 ]; then ls /.singularity.d/libs/* >> "$temp_dir"/libs.txt 2>/dev/null # Leverage singularity to find the full list of libraries we should be linking to - echo_yellow "Downloading latest version of nvliblist.conf from Apptainer" - curl -o "$temp_dir"/nvliblist.conf https://raw.githubusercontent.com/apptainer/apptainer/main/etc/nvliblist.conf + echo_yellow "Downloading latest version of nvliblist.conf from Apptainer to ${temp_dir}/nvliblist.conf" + curl --silent --output "$temp_dir"/nvliblist.conf https://raw.githubusercontent.com/apptainer/apptainer/main/etc/nvliblist.conf # Make symlinks to all the interesting libraries grep '.so$' "$temp_dir"/nvliblist.conf | xargs -i grep {} "$temp_dir"/libs.txt | xargs -i ln -s {} @@ -133,4 +141,4 @@ else ln -s $host_injections_nvidia_dir/latest lib fi -echo_green "Host NVIDIA gpu drivers linked successfully for EESSI" +echo_green "Host NVIDIA GPU drivers linked successfully for EESSI" From 5c248d1dcb844ec11a76f9f368ba523b7edf3e87 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Fri, 22 Dec 2023 11:39:31 +0100 Subject: [PATCH 352/698] Ensure that bot reports success if no EasyStacks were changed in a PR. Relevant for PRs that e.g. only update things in .../scripts --- EESSI-install-software.sh | 75 +++++++++++++++++++++------------------ 1 file changed, 40 insertions(+), 35 deletions(-) diff --git a/EESSI-install-software.sh b/EESSI-install-software.sh index b61ca7a579..edbcf7040b 100755 --- a/EESSI-install-software.sh +++ b/EESSI-install-software.sh @@ -203,42 +203,47 @@ ${EESSI_PREFIX}/scripts/gpu_support/nvidia/install_cuda_host_injections.sh -c 12 # ${EESSI_PREFIX}/scripts/gpu_support/nvidia/link_nvidia_host_libraries.sh # use PR patch file to determine in which easystack files stuff was added -for easystack_file in $(cat ${pr_diff} | grep '^+++' | cut -f2 -d' ' | sed 's@^[a-z]/@@g' | grep '^easystacks/.*yml$' | egrep -v 'known-issues|missing'); do - - echo -e "Processing easystack file ${easystack_file}...\n\n" - - # determine version of EasyBuild module to load based on EasyBuild version included in name of easystack file - eb_version=$(echo ${easystack_file} | sed 's/.*eb-\([0-9.]*\).*/\1/g') - - # load EasyBuild module (will be installed if it's not available yet) - source ${TOPDIR}/load_easybuild_module.sh ${eb_version} - - ${EB} --show-config - - echo_green "All set, let's start installing some software with EasyBuild v${eb_version} in ${EASYBUILD_INSTALLPATH}..." - - if [ -f ${easystack_file} ]; then - echo_green "Feeding easystack file ${easystack_file} to EasyBuild..." - - ${EB} --easystack ${TOPDIR}/${easystack_file} --robot - ec=$? - - # copy EasyBuild log file if EasyBuild exited with an error - if [ ${ec} -ne 0 ]; then - eb_last_log=$(unset EB_VERBOSE; eb --last-log) - # copy to current working directory - cp -a ${eb_last_log} . - echo "Last EasyBuild log file copied from ${eb_last_log} to ${PWD}" - # copy to build logs dir (with context added) - copy_build_log "${eb_last_log}" "${build_logs_dir}" +changed_easystacks=$(cat ${pr_diff} | grep '^+++' | cut -f2 -d' ' | sed 's@^[a-z]/@@g' | grep '^easystacks/.*yml$' | egrep -v 'known-issues|missing') +if [ -z ${changed_easystacks} ]; then + echo "No missing installations" # Ensure the bot report success, as there was nothing to be build here +else + for easystack_file in ${changed_easystacks}; do + + echo -e "Processing easystack file ${easystack_file}...\n\n" + + # determine version of EasyBuild module to load based on EasyBuild version included in name of easystack file + eb_version=$(echo ${easystack_file} | sed 's/.*eb-\([0-9.]*\).*/\1/g') + + # load EasyBuild module (will be installed if it's not available yet) + source ${TOPDIR}/load_easybuild_module.sh ${eb_version} + + ${EB} --show-config + + echo_green "All set, let's start installing some software with EasyBuild v${eb_version} in ${EASYBUILD_INSTALLPATH}..." + + if [ -f ${easystack_file} ]; then + echo_green "Feeding easystack file ${easystack_file} to EasyBuild..." + + ${EB} --easystack ${TOPDIR}/${easystack_file} --robot + ec=$? + + # copy EasyBuild log file if EasyBuild exited with an error + if [ ${ec} -ne 0 ]; then + eb_last_log=$(unset EB_VERBOSE; eb --last-log) + # copy to current working directory + cp -a ${eb_last_log} . + echo "Last EasyBuild log file copied from ${eb_last_log} to ${PWD}" + # copy to build logs dir (with context added) + copy_build_log "${eb_last_log}" "${build_logs_dir}" + fi + + $TOPDIR/check_missing_installations.sh ${TOPDIR}/${easystack_file} + else + fatal_error "Easystack file ${easystack_file} not found!" fi - - $TOPDIR/check_missing_installations.sh ${TOPDIR}/${easystack_file} - else - fatal_error "Easystack file ${easystack_file} not found!" - fi - -done + + done +fi ### add packages here From ac53cf0ea0160d47e302393ef60d2829586708af Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Fri, 22 Dec 2023 14:54:46 +0100 Subject: [PATCH 353/698] Make the pedantic deploy step of the bot happy... --- EESSI-install-software.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/EESSI-install-software.sh b/EESSI-install-software.sh index edbcf7040b..69de9d1997 100755 --- a/EESSI-install-software.sh +++ b/EESSI-install-software.sh @@ -205,7 +205,7 @@ ${EESSI_PREFIX}/scripts/gpu_support/nvidia/install_cuda_host_injections.sh -c 12 # use PR patch file to determine in which easystack files stuff was added changed_easystacks=$(cat ${pr_diff} | grep '^+++' | cut -f2 -d' ' | sed 's@^[a-z]/@@g' | grep '^easystacks/.*yml$' | egrep -v 'known-issues|missing') if [ -z ${changed_easystacks} ]; then - echo "No missing installations" # Ensure the bot report success, as there was nothing to be build here + echo "No missing installations, party time!" # Ensure the bot report success, as there was nothing to be build here else for easystack_file in ${changed_easystacks}; do From 203cbd104d8189fbc007c88fa505efba3d02826e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Sat, 23 Dec 2023 14:49:44 +0100 Subject: [PATCH 354/698] add ALL-0.9.2-foss-2023a.eb --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml index 567db44e42..7d879044d8 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml @@ -35,3 +35,6 @@ easyconfigs: - Boost-1.82.0-GCC-12.3.0.eb - netCDF-4.9.2-gompi-2023a.eb - FFmpeg-6.0-GCCcore-12.3.0.eb + - ALL-0.9.2-foss-2023a.eb: + options: + from-pr: 19455 From b1daa1253af0a77804f5bee803886322209db641 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 2 Jan 2024 09:42:46 +0100 Subject: [PATCH 355/698] {2023.06}[system] EasyBuild v4.9.0 --- .../2023.06/eessi-2023.06-eb-4.9.0-001-system.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-001-system.yml diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-001-system.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-001-system.yml new file mode 100644 index 0000000000..a7bce002c7 --- /dev/null +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-001-system.yml @@ -0,0 +1,4 @@ +easyconfigs: + - EasyBuild-4.9.0.eb: + options: + from-pr: 19464 From d299c7459681facd6316d7a0c7889e217c7b72f6 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 2 Jan 2024 14:26:45 +0100 Subject: [PATCH 356/698] don't include files in .lmod directory twice in tarball --- create_tarball.sh | 6 ------ 1 file changed, 6 deletions(-) diff --git a/create_tarball.sh b/create_tarball.sh index faaa9fda6f..a619df9439 100755 --- a/create_tarball.sh +++ b/create_tarball.sh @@ -40,12 +40,6 @@ echo ">> Collecting list of files/directories to include in tarball via ${PWD}.. files_list=${tmpdir}/files.list.txt module_files_list=${tmpdir}/module_files.list.txt -# include Lmod cache and configuration file (lmodrc.lua), -if [ -d ${eessi_version}/software/${os}/${cpu_arch_subdir}/.lmod ]; then - # skip whiteout files and backup copies of Lmod cache (spiderT.old.*) - find ${eessi_version}/software/${os}/${cpu_arch_subdir}/.lmod -type f | egrep -v '/\.wh\.|spiderT.old' >> ${files_list} -fi - if [ -d ${eessi_version}/software/${os}/${cpu_arch_subdir}/.lmod ]; then # include Lmod cache and configuration file (lmodrc.lua), # skip whiteout files and backup copies of Lmod cache (spiderT.old.*) From 2d0d7e852fe958ff55e1e5a2c1f6e4fb4c3a5f70 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 2 Jan 2024 20:00:13 +0100 Subject: [PATCH 357/698] {2023.06} foss/2023b --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml new file mode 100644 index 0000000000..88ab50b8e7 --- /dev/null +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml @@ -0,0 +1,3 @@ +easyconfigs: + - GCC-13.2.0.eb + - foss-2023b.eb From 5c0061510b7ffdcfe733307555db8f9e1bc5ed09 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 3 Jan 2024 11:47:09 +0100 Subject: [PATCH 358/698] update pre-configure hook for OpenBLAS to use -mtune=generic rather than -mcpu=generic when building with DYNAMIC_ARCH=1 on aarch64 --- eb_hooks.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/eb_hooks.py b/eb_hooks.py index 27cc873fa1..7a31e87937 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -3,6 +3,7 @@ import os import re +import easybuild.tools.environment as env from easybuild.easyblocks.generic.configuremake import obtain_config_guess from easybuild.framework.easyconfig.constants import EASYCONFIG_CONSTANTS from easybuild.tools.build_log import EasyBuildError, print_msg @@ -258,6 +259,13 @@ def pre_configure_hook_openblas_optarch_generic(self, *args, **kwargs): if build_option('optarch') == OPTARCH_GENERIC: for step in ('build', 'test', 'install'): self.cfg.update(f'{step}opts', "DYNAMIC_ARCH=1") + + # use -mtune=generic rather than -mcpu=generic in $CFLAGS on aarch64, + # because -mcpu=generic implies a particular -march=armv* which clashes with those used by OpenBLAS + # when building with DYNAMIC_ARCH=1 + if get_cpu_architecture() == AARCH64: + cflags = os.getenv('CFLAGS').replace('-mcpu=generic', '-mtune=generic') + env.setvar('CFLAGS', cflags) else: raise EasyBuildError("OpenBLAS-specific hook triggered for non-OpenBLAS easyconfig?!") From 98b51a90fa62e65ab9d87b096246b4744e8b96ab Mon Sep 17 00:00:00 2001 From: Pedro Santos Neves <10762799+Neves-P@users.noreply.github.com> Date: Wed, 3 Jan 2024 19:16:34 +0100 Subject: [PATCH 359/698] Use only half the cores to build OpenFOAM --- eb_hooks.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eb_hooks.py b/eb_hooks.py index 8e29d2c103..edff46221a 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -79,7 +79,7 @@ def post_ready_hook(self, *args, **kwargs): # 'parallel' easyconfig parameter is set via EasyBlock.set_parallel in ready step based on available cores. # here we reduce parallellism to only use half of that for selected software, # to avoid failing builds/tests due to out-of-memory problems - if self.name in ['TensorFlow']: + if self.name in ['TensorFlow'] or self.name in ['OpenFOAM']: parallel = self.cfg['parallel'] if parallel > 1: self.cfg['parallel'] = parallel // 2 From 4936618476b3b30572ca8fece14c890d89f4e34e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Fri, 5 Jan 2024 15:12:16 +0100 Subject: [PATCH 360/698] add SciPy-bundle-2023.11-gfbf-2023b.eb --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml index 88ab50b8e7..b184b88701 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml @@ -1,3 +1,4 @@ easyconfigs: - GCC-13.2.0.eb - foss-2023b.eb + - SciPy-bundle-2023.11-gfbf-2023b.eb From 142a65b881183c6c889f3d9cdaef95c0543c4853 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Fri, 5 Jan 2024 19:22:50 +0100 Subject: [PATCH 361/698] also apply SciPy-bundle hook to version 2023.11 --- eb_hooks.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/eb_hooks.py b/eb_hooks.py index 7a31e87937..73eac9286d 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -367,15 +367,15 @@ def pre_test_hook_ignore_failing_tests_SciPybundle(self, *args, **kwargs): FAILED optimize/tests/test_linprog.py::TestLinprogIPSparse::test_bug_6139 - A... FAILED optimize/tests/test_linprog.py::TestLinprogIPSparsePresolve::test_bug_6139 = 2 failed, 30554 passed, 2064 skipped, 10992 deselected, 76 xfailed, 7 xpassed, 40 warnings in 380.27s (0:06:20) = - In versions 2023.07, 2 failing tests in scipy 1.11.1: + In versions 2023.07 and 2023.11, 2 failing tests in scipy 1.11.1 and 1.11.4: FAILED scipy/spatial/tests/test_distance.py::TestPdist::test_pdist_correlation_iris FAILED scipy/spatial/tests/test_distance.py::TestPdist::test_pdist_correlation_iris_float32 = 2 failed, 54409 passed, 3016 skipped, 223 xfailed, 13 xpassed, 10917 warnings in 892.04s (0:14:52) = In previous versions we were not as strict yet on the numpy/SciPy tests """ cpu_target = get_eessi_envvar('EESSI_SOFTWARE_SUBDIR') - if self.name == 'SciPy-bundle' and self.version in ['2021.10', '2023.07'] and cpu_target == CPU_TARGET_NEOVERSE_V1: - self.cfg['testopts'] = "|| echo ignoring failing tests" + if self.name == 'SciPy-bundle' and self.version in ['2021.10', '2023.07', '2023.11'] and cpu_target == CPU_TARGET_NEOVERSE_V1: + self.cfg['testopts'] = "|| echo ignoring failing tests" def pre_single_extension_hook(ext, *args, **kwargs): From d4a831de06fdbae3f81d8f48afdce2f9c7a386ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Sat, 6 Jan 2024 11:23:14 +0100 Subject: [PATCH 362/698] add new easystack for eb 4.9.0 2023a, add PyTorch 2.1.2 --- .../2023.06/eessi-2023.06-eb-4.9.0-2023a.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml new file mode 100644 index 0000000000..1ecf60bdf2 --- /dev/null +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml @@ -0,0 +1,4 @@ +easyconfigs: + - PyTorch-2.1.2-foss-2023a.eb: + options: + from-pr: 19480 From 9c0ca0d408304ece1cdeed0aeabb42b9403bfd94 Mon Sep 17 00:00:00 2001 From: Pedro Santos Neves <10762799+Neves-P@users.noreply.github.com> Date: Mon, 8 Jan 2024 11:31:46 +0100 Subject: [PATCH 363/698] Revert to using all cores in OpenFOAM tests Reducing in half did not solve issue with hanging/crashing in sanity checks --- eb_hooks.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eb_hooks.py b/eb_hooks.py index 3b52b54e9e..00aee51816 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -80,7 +80,7 @@ def post_ready_hook(self, *args, **kwargs): # 'parallel' easyconfig parameter is set via EasyBlock.set_parallel in ready step based on available cores. # here we reduce parallellism to only use half of that for selected software, # to avoid failing builds/tests due to out-of-memory problems - if self.name in ['TensorFlow'] or self.name in ['OpenFOAM']: + if self.name in ['TensorFlow']: parallel = self.cfg['parallel'] if parallel > 1: self.cfg['parallel'] = parallel // 2 From 78466f569ca028d0119c293cd2f1d2409626619a Mon Sep 17 00:00:00 2001 From: Pedro Santos Neves <10762799+Neves-P@users.noreply.github.com> Date: Wed, 10 Jan 2024 16:39:40 +0100 Subject: [PATCH 364/698] Add OpenFOAM-11-foss-2023a --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml index aab910d1cc..803b6138e7 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml @@ -46,3 +46,6 @@ easyconfigs: - ALL-0.9.2-foss-2023a.eb: options: from-pr: 19455 + - OpenFOAM-11-foss-2023a.eb: + options: + from-pr: 19545 From f6ee972f2a8d1c38fd23fc93fe45415793a85513 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 10 Jan 2024 17:43:10 +0100 Subject: [PATCH 365/698] {2023.06}[2022b] SciPy-bundle v2023.02 --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2022b.yml | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2022b.yml diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2022b.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2022b.yml new file mode 100644 index 0000000000..fdacd95c55 --- /dev/null +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2022b.yml @@ -0,0 +1,2 @@ +easyconfigs: + - SciPy-bundle-2023.02-gfbf-2022b.eb From 838ceffc09b6007384fc41697c2cbee335c8a234 Mon Sep 17 00:00:00 2001 From: Neves-P Date: Fri, 12 Jan 2024 12:07:53 +0100 Subject: [PATCH 366/698] Use EasyBuildv4.9.0 for OpenFOAMv11 install --- .../2023.06/eessi-2023.06-eb-4.8.2-2023a.yml | 3 --- .../2023.06/eessi-2023.06-eb-4.9.0-2023a.yml | 4 ++++ 2 files changed, 4 insertions(+), 3 deletions(-) create mode 100644 easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml index 803b6138e7..aab910d1cc 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml @@ -46,6 +46,3 @@ easyconfigs: - ALL-0.9.2-foss-2023a.eb: options: from-pr: 19455 - - OpenFOAM-11-foss-2023a.eb: - options: - from-pr: 19545 diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml new file mode 100644 index 0000000000..e33a8af48c --- /dev/null +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml @@ -0,0 +1,4 @@ +easyconfigs: + - OpenFOAM-11-foss-2023a.eb: + options: + from-pr: 19545 From b55efbf4d6d066dd292240e3863c8028c6336098 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Wed, 10 Jan 2024 18:41:52 +0100 Subject: [PATCH 367/698] add pre_single_extension_scipy hook to replace -mcpu=native with -march=armv8.4-a when building scipy 1.10.1 on aarch64/neoverse_v1 --- eb_hooks.py | 38 ++++++++++++++++++++++++++++---------- 1 file changed, 28 insertions(+), 10 deletions(-) diff --git a/eb_hooks.py b/eb_hooks.py index 73eac9286d..883d79c6e8 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -384,16 +384,6 @@ def pre_single_extension_hook(ext, *args, **kwargs): PRE_SINGLE_EXTENSION_HOOKS[ext.name](ext, *args, **kwargs) -def pre_single_extension_testthat(ext, *args, **kwargs): - """ - Pre-extension hook for testthat R package, to fix build on top of recent glibc. - """ - if ext.name == 'testthat' and LooseVersion(ext.version) < LooseVersion('3.1.0'): - # use constant value instead of SIGSTKSZ for stack size, - # cfr. https://github.com/r-lib/testthat/issues/1373 + https://github.com/r-lib/testthat/pull/1403 - ext.cfg['preinstallopts'] = "sed -i 's/SIGSTKSZ/32768/g' inst/include/testthat/vendor/catch.h && " - - def pre_single_extension_isoband(ext, *args, **kwargs): """ Pre-extension hook for isoband R package, to fix build on top of recent glibc. @@ -404,6 +394,33 @@ def pre_single_extension_isoband(ext, *args, **kwargs): ext.cfg['preinstallopts'] = "sed -i 's/SIGSTKSZ/32768/g' src/testthat/vendor/catch.h && " +def pre_single_extension_scipy(ext, *args, **kwargs): + """ + Pre-extension hook for scipy, to change -march=native to -march=armv8.4-a for scipy 1.10.x when buidling for + aarch64/neoverse_v1 CPU target. + """ + cpu_target = get_eessi_envvar('EESSI_SOFTWARE_SUBDIR') + if ext.name == 'scipy' and ext.version == '1.10.1' and cpu_target == CPU_TARGET_NEOVERSE_V1: + cflags = os.getenv('CFLAGS') + if '-mcpu=native' in cflags: + cflags = cflags.replace('-mcpu=native', '-march=armv8.4-a') + ext.cfg.update('configopts', ' '.join([ + "-Dc_args='%s'" % cflags, + "-Dcpp_args='%s'" % cflags, + "-Dfortran_args='%s'" % cflags, + ])) + + +def pre_single_extension_testthat(ext, *args, **kwargs): + """ + Pre-extension hook for testthat R package, to fix build on top of recent glibc. + """ + if ext.name == 'testthat' and LooseVersion(ext.version) < LooseVersion('3.1.0'): + # use constant value instead of SIGSTKSZ for stack size, + # cfr. https://github.com/r-lib/testthat/issues/1373 + https://github.com/r-lib/testthat/pull/1403 + ext.cfg['preinstallopts'] = "sed -i 's/SIGSTKSZ/32768/g' inst/include/testthat/vendor/catch.h && " + + def post_sanitycheck_hook(self, *args, **kwargs): """Main post-sanity-check hook: trigger custom functions based on software name.""" if self.name in POST_SANITYCHECK_HOOKS: @@ -531,6 +548,7 @@ def inject_gpu_property(ec): PRE_SINGLE_EXTENSION_HOOKS = { 'isoband': pre_single_extension_isoband, + 'scipy': pre_single_extension_scipy, 'testthat': pre_single_extension_testthat, } From 684abebfe2a55cd66aef8ceb31169ea23e12ccc9 Mon Sep 17 00:00:00 2001 From: Xin An Date: Fri, 12 Jan 2024 15:37:13 +0100 Subject: [PATCH 368/698] {2023.06}[GCC/12.3.0] ReFrame v4.3.3 --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml index aab910d1cc..feab9d2c19 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml @@ -46,3 +46,4 @@ easyconfigs: - ALL-0.9.2-foss-2023a.eb: options: from-pr: 19455 + - ReFrame-4.3.3.eb From da6dc24615a7892dbea809bae173db588f2140a5 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 12 Jan 2024 18:34:08 +0100 Subject: [PATCH 369/698] build numpy with -march=armv8.4-a instead of -mcpu=native (instead of scipy) --- eb_hooks.py | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/eb_hooks.py b/eb_hooks.py index 883d79c6e8..9d84a9e9f8 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -394,21 +394,19 @@ def pre_single_extension_isoband(ext, *args, **kwargs): ext.cfg['preinstallopts'] = "sed -i 's/SIGSTKSZ/32768/g' src/testthat/vendor/catch.h && " -def pre_single_extension_scipy(ext, *args, **kwargs): +def pre_single_extension_numpy(ext, *args, **kwargs): """ - Pre-extension hook for scipy, to change -march=native to -march=armv8.4-a for scipy 1.10.x when buidling for + Pre-extension hook for numpy, to change -march=native to -march=armv8.4-a for scipy 1.10.x when buidling for aarch64/neoverse_v1 CPU target. """ cpu_target = get_eessi_envvar('EESSI_SOFTWARE_SUBDIR') - if ext.name == 'scipy' and ext.version == '1.10.1' and cpu_target == CPU_TARGET_NEOVERSE_V1: - cflags = os.getenv('CFLAGS') - if '-mcpu=native' in cflags: - cflags = cflags.replace('-mcpu=native', '-march=armv8.4-a') - ext.cfg.update('configopts', ' '.join([ - "-Dc_args='%s'" % cflags, - "-Dcpp_args='%s'" % cflags, - "-Dfortran_args='%s'" % cflags, - ])) + if ext.name == 'numpy' and ext.version == '1.24.2' and cpu_target == CPU_TARGET_NEOVERSE_V1: + # unsure which of these actually matter for numpy, so changing all of them + for envvar in ('CFLAGS', 'CXXFLAGS', 'F90FLAGS', 'FFLAGS'): + value = os.getenv(envvar) + if '-mcpu=native' in value: + value = value.replace('-mcpu=native', '-march=armv8.4-a') + env.setvar(envvar, value) def pre_single_extension_testthat(ext, *args, **kwargs): @@ -548,7 +546,7 @@ def inject_gpu_property(ec): PRE_SINGLE_EXTENSION_HOOKS = { 'isoband': pre_single_extension_isoband, - 'scipy': pre_single_extension_scipy, + 'numpy': pre_single_extension_numpy, 'testthat': pre_single_extension_testthat, } From 7ee64cd33a36cd99b1d5a09d007e14fc868015ea Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 12 Jan 2024 18:51:11 +0100 Subject: [PATCH 370/698] use PyTorch easyconfig from easyconfigs PR #19573 which has extra fixes for non-x86 platforms --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml index 1ecf60bdf2..b7767c4fd5 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml @@ -1,4 +1,4 @@ easyconfigs: - PyTorch-2.1.2-foss-2023a.eb: options: - from-pr: 19480 + from-pr: 19573 From 9943e357127f3ecea98517b1c78c09929710626d Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Sat, 13 Jan 2024 18:23:00 +0100 Subject: [PATCH 371/698] update optarch build option to make sure that -march=armv8.4-a is used instead of -mcpu=native for numpy, reset it after installing numpy, and allow 2 failing scipy tests in SciPy-bundle v2023.02 --- eb_hooks.py | 39 +++++++++++++++++++++++++++++---------- 1 file changed, 29 insertions(+), 10 deletions(-) diff --git a/eb_hooks.py b/eb_hooks.py index 9d84a9e9f8..5e6ffef823 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -367,23 +367,30 @@ def pre_test_hook_ignore_failing_tests_SciPybundle(self, *args, **kwargs): FAILED optimize/tests/test_linprog.py::TestLinprogIPSparse::test_bug_6139 - A... FAILED optimize/tests/test_linprog.py::TestLinprogIPSparsePresolve::test_bug_6139 = 2 failed, 30554 passed, 2064 skipped, 10992 deselected, 76 xfailed, 7 xpassed, 40 warnings in 380.27s (0:06:20) = - In versions 2023.07 and 2023.11, 2 failing tests in scipy 1.11.1 and 1.11.4: + In versions 2023.02, 2023.07, and 2023.11, 2 failing tests in scipy (versions 1.10.1, 1.11.1, 1.11.4): FAILED scipy/spatial/tests/test_distance.py::TestPdist::test_pdist_correlation_iris FAILED scipy/spatial/tests/test_distance.py::TestPdist::test_pdist_correlation_iris_float32 = 2 failed, 54409 passed, 3016 skipped, 223 xfailed, 13 xpassed, 10917 warnings in 892.04s (0:14:52) = In previous versions we were not as strict yet on the numpy/SciPy tests """ cpu_target = get_eessi_envvar('EESSI_SOFTWARE_SUBDIR') - if self.name == 'SciPy-bundle' and self.version in ['2021.10', '2023.07', '2023.11'] and cpu_target == CPU_TARGET_NEOVERSE_V1: + scipy_bundle_versions = ('2021.10', '2023.02', '2023.07', '2023.11') + if self.name == 'SciPy-bundle' and self.version in scipy_bundle_versions and cpu_target == CPU_TARGET_NEOVERSE_V1: self.cfg['testopts'] = "|| echo ignoring failing tests" def pre_single_extension_hook(ext, *args, **kwargs): - """Main pre-configure hook: trigger custom functions based on software name.""" + """Main pre-extension: trigger custom functions based on software name.""" if ext.name in PRE_SINGLE_EXTENSION_HOOKS: PRE_SINGLE_EXTENSION_HOOKS[ext.name](ext, *args, **kwargs) +def post_single_extension_hook(ext, *args, **kwargs): + """Main post-extension hook: trigger custom functions based on software name.""" + if ext.name in POST_SINGLE_EXTENSION_HOOKS: + POST_SINGLE_EXTENSION_HOOKS[ext.name](ext, *args, **kwargs) + + def pre_single_extension_isoband(ext, *args, **kwargs): """ Pre-extension hook for isoband R package, to fix build on top of recent glibc. @@ -396,17 +403,25 @@ def pre_single_extension_isoband(ext, *args, **kwargs): def pre_single_extension_numpy(ext, *args, **kwargs): """ - Pre-extension hook for numpy, to change -march=native to -march=armv8.4-a for scipy 1.10.x when buidling for - aarch64/neoverse_v1 CPU target. + Pre-extension hook for numpy, to change -march=native to -march=armv8.4-a for scipy 1.10.x + when building for aarch64/neoverse_v1 CPU target. """ cpu_target = get_eessi_envvar('EESSI_SOFTWARE_SUBDIR') if ext.name == 'numpy' and ext.version == '1.24.2' and cpu_target == CPU_TARGET_NEOVERSE_V1: + # note: this hook is called before build environment is set up (by calling toolchain.prepare()), + # so environment variables like $CFLAGS are not defined yet # unsure which of these actually matter for numpy, so changing all of them - for envvar in ('CFLAGS', 'CXXFLAGS', 'F90FLAGS', 'FFLAGS'): - value = os.getenv(envvar) - if '-mcpu=native' in value: - value = value.replace('-mcpu=native', '-march=armv8.4-a') - env.setvar(envvar, value) + ext.orig_optarch = build_option('optarch') + update_build_option('optarch', 'march=armv8.4-a') + + +def post_single_extension_numpy(ext, *args, **kwargs): + """ + Post-extension hook for numpy, to reset 'optarch' build option. + """ + cpu_target = get_eessi_envvar('EESSI_SOFTWARE_SUBDIR') + if ext.name == 'numpy' and ext.version == '1.24.2' and cpu_target == CPU_TARGET_NEOVERSE_V1: + update_build_option('optarch', ext.orig_optarch) def pre_single_extension_testthat(ext, *args, **kwargs): @@ -550,6 +565,10 @@ def inject_gpu_property(ec): 'testthat': pre_single_extension_testthat, } +POST_SINGLE_EXTENSION_HOOKS = { + 'numpy': post_single_extension_numpy, +} + POST_SANITYCHECK_HOOKS = { 'CUDA': post_sanitycheck_cuda, } From 258292c99e5aff3c24dc52652f7ad3ddc55af48b Mon Sep 17 00:00:00 2001 From: Xin An Date: Mon, 15 Jan 2024 11:10:23 +0100 Subject: [PATCH 372/698] {2023.06} Add ReFrame v4.3.3 to system easystack --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml | 1 - .../2023.06/eessi-2023.06-eb-4.9.0-001-system.yml | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml index feab9d2c19..aab910d1cc 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml @@ -46,4 +46,3 @@ easyconfigs: - ALL-0.9.2-foss-2023a.eb: options: from-pr: 19455 - - ReFrame-4.3.3.eb diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-001-system.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-001-system.yml index a7bce002c7..25c13e49c9 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-001-system.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-001-system.yml @@ -2,3 +2,4 @@ easyconfigs: - EasyBuild-4.9.0.eb: options: from-pr: 19464 + - ReFrame-4.3.3.eb From 847eb715bb33825de47c2a90b99d7806c2b1e1d9 Mon Sep 17 00:00:00 2001 From: Xin An Date: Mon, 15 Jan 2024 11:15:22 +0100 Subject: [PATCH 373/698] {2023.06} Add ReFrame v4.3.3 to system easystack eb v4.8.2 --- .../2023.06/eessi-2023.06-eb-4.8.2-001-system.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-001-system.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-001-system.yml index f02b9f2802..d85440ec5b 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-001-system.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-001-system.yml @@ -5,3 +5,4 @@ easyconfigs: - Nextflow-23.10.0.eb: options: from-pr: 19172 + - ReFrame-4.3.3.eb From 41f6dea98fa5a4b14b590ba42dffec9eacfaf8a5 Mon Sep 17 00:00:00 2001 From: Richard Top Date: Mon, 15 Jan 2024 10:39:09 +0000 Subject: [PATCH 374/698] {2023.06}[foss/2022b] R v4.2.2 --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2022b.yml | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2022b.yml diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2022b.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2022b.yml new file mode 100644 index 0000000000..f8af4b5b45 --- /dev/null +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2022b.yml @@ -0,0 +1,2 @@ +easyconfigs: + - R-4.2.2-foss-2022b.eb From b16dc0a1cc01e054f27940d10a9a038399fc1478 Mon Sep 17 00:00:00 2001 From: Richard Top Date: Mon, 15 Jan 2024 12:47:09 +0000 Subject: [PATCH 375/698] {2023.06}[gompi/2023b] netCDF v4.9.2 --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml index b184b88701..9a3b8efa6d 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml @@ -2,3 +2,6 @@ easyconfigs: - GCC-13.2.0.eb - foss-2023b.eb - SciPy-bundle-2023.11-gfbf-2023b.eb + - netCDF-4.9.2-gompi-2023b.eb: + options: + from-pr: 19534 From 937efa6d8520e5af5f8292a21cbd0d3a9c5a8344 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Mon, 15 Jan 2024 18:06:00 +0100 Subject: [PATCH 376/698] fix docstring in pre_single_extension_numpy hook --- eb_hooks.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eb_hooks.py b/eb_hooks.py index 5e6ffef823..7c52e24ff1 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -403,7 +403,7 @@ def pre_single_extension_isoband(ext, *args, **kwargs): def pre_single_extension_numpy(ext, *args, **kwargs): """ - Pre-extension hook for numpy, to change -march=native to -march=armv8.4-a for scipy 1.10.x + Pre-extension hook for numpy, to change -march=native to -march=armv8.4-a for numpy 1.24.2 when building for aarch64/neoverse_v1 CPU target. """ cpu_target = get_eessi_envvar('EESSI_SOFTWARE_SUBDIR') From 9ae0832f722908e9a703c272c1ea7967580a33af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Mon, 15 Jan 2024 22:44:49 +0100 Subject: [PATCH 377/698] merge main branch --- .../2023.06/eessi-2023.06-eb-4.8.2-2022b.yml | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2022b.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2022b.yml index f27e928364..69ffb750a2 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2022b.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2022b.yml @@ -1,13 +1,6 @@ easyconfigs: - foss-2022b.eb - - pybind11-2.10.3-GCCcore-12.2.0.eb: - # avoid indirect dependency on old CMake version built with GCCcore/10.2.0 via Catch2 build dependency; - # see https://github.com/easybuilders/easybuild-easyconfigs/pull/19270 + - HarfBuzz-5.3.1-GCCcore-12.2.0.eb: options: - from-pr: 19270 - - LERC-4.0.0-GCCcore-12.2.0.eb: - # avoid RPATH-related sanity check errors by compiling LERC's test binary in postinstallcmds; - # see https://github.com/easybuilders/easybuild-easyconfigs/pull/19386 - options: - from-pr: 19386 - - GDAL-3.6.2-foss-2022b.eb + from-pr: 19339 + - Qt5-5.15.7-GCCcore-12.2.0.eb From 0e917d51b20458c8e7339f5e859e1121bc026d43 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Mon, 15 Jan 2024 22:47:39 +0100 Subject: [PATCH 378/698] add GDAL-3.6.2-foss-2022b.eb --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2022b.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2022b.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2022b.yml index fdacd95c55..9e92c79062 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2022b.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2022b.yml @@ -1,2 +1,3 @@ easyconfigs: - SciPy-bundle-2023.02-gfbf-2022b.eb + - GDAL-3.6.2-foss-2022b.eb From 15c228b555590b0da28d174ce79d1a8cea44c64b Mon Sep 17 00:00:00 2001 From: Richard Top Date: Tue, 16 Jan 2024 08:53:33 +0000 Subject: [PATCH 379/698] added a hook for neoverse_v1 failing tests --- eb_hooks.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/eb_hooks.py b/eb_hooks.py index 7c52e24ff1..41d196b097 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -378,6 +378,18 @@ def pre_test_hook_ignore_failing_tests_SciPybundle(self, *args, **kwargs): if self.name == 'SciPy-bundle' and self.version in scipy_bundle_versions and cpu_target == CPU_TARGET_NEOVERSE_V1: self.cfg['testopts'] = "|| echo ignoring failing tests" +def pre_test_hook_ignore_failing_tests_netCDF(self, *args, **kwargs): + """ + Pre-test hook for SciPy-bundle: skip failing tests for selected netCDF versions on neoverse_v1 + cfr. https://github.com/EESSI/software-layer/issues/425 + The following tests are problematic: + 163 - nc_test4_run_par_test (Timeout) + 190 - h5_test_run_par_tests (Timeout) + A few other tests are skipped in the easyconfig and patches for similar issues, see above issue for details. + """ + cpu_target = get_eessi_envvar('EESSI_SOFTWARE_SUBDIR') + if self.name == 'netCDF' and self.version == '4.9.2' and cpu_target == CPU_TARGET_NEOVERSE_V1: + self.cfg['testopts'] = "|| echo ignoring failing tests" def pre_single_extension_hook(ext, *args, **kwargs): """Main pre-extension: trigger custom functions based on software name.""" @@ -557,6 +569,7 @@ def inject_gpu_property(ec): 'ESPResSo': pre_test_hook_ignore_failing_tests_ESPResSo, 'FFTW.MPI': pre_test_hook_ignore_failing_tests_FFTWMPI, 'SciPy-bundle': pre_test_hook_ignore_failing_tests_SciPybundle, + 'netCDF': pre_test_hook_ignore_failing_tests_netCDF, } PRE_SINGLE_EXTENSION_HOOKS = { From 90e25455b6e1525165d42425ee6035825d040aec Mon Sep 17 00:00:00 2001 From: Richard Top Date: Tue, 16 Jan 2024 12:26:37 +0000 Subject: [PATCH 380/698] added eessi-2023.06-known-issues.yml --- eessi-2023.06-known-issues.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 eessi-2023.06-known-issues.yml diff --git a/eessi-2023.06-known-issues.yml b/eessi-2023.06-known-issues.yml new file mode 100644 index 0000000000..cb2d945af2 --- /dev/null +++ b/eessi-2023.06-known-issues.yml @@ -0,0 +1,4 @@ +- aarch64/neoverse_v1: + - netCDF-4.9.2-GCC-12.3.0/GCC-13.2.0: + - issue: https://github.com/EESSI/software-layer/issues/425 + - info: "netCDF intermittent test failures" From 67e6a258860325c3242e22939c0df9f91c07334e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Tue, 16 Jan 2024 14:02:14 +0100 Subject: [PATCH 381/698] add at-spi2-core-2.49.91-GCCcore-12.3.0.eb --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml index e33a8af48c..1586c16827 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml @@ -2,3 +2,4 @@ easyconfigs: - OpenFOAM-11-foss-2023a.eb: options: from-pr: 19545 + - at-spi2-core-2.49.91-GCCcore-12.3.0.eb From b49ce5d7929c64687acb8e114ae4938f232647db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Tue, 16 Jan 2024 14:12:40 +0100 Subject: [PATCH 382/698] add pre-configure hook for at-spi2-core --- eb_hooks.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/eb_hooks.py b/eb_hooks.py index 7c52e24ff1..ff9072c793 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -335,6 +335,19 @@ def pre_configure_hook_LAMMPS_aarch64(self, *args, **kwargs): raise EasyBuildError("LAMMPS-specific hook triggered for non-LAMMPS easyconfig?!") +def pre_configure_hook_atspi2core_filter_ld_library_path(self, *args, **kwargs): + """ + pre-configure hook for at-spi2-core: + - instruct GObject-Introspection's g-ir-scanner tool to not set $LD_LIBRARY_PATH + when EasyBuild is configured to filter it + """ + if self.name == 'at-spi2-core': + if build_option('filter_env_vars') and 'LD_LIBRARY_PATH' in build_option('filter_env_vars'): + self.cfg.update('preconfigopts', 'sed -i "s/gir_extra_args = \[/gir_extra_args = \[\\n \'--lib-dirs-envvar=FILTER_LD_LIBRARY_PATH\',/g" %(start_dir)s/atspi/meson.build && ') + else: + raise EasyBuildError("at-spi2-core-specific hook triggered for non-at-spi2-core easyconfig?!") + + def pre_test_hook(self,*args, **kwargs): """Main pre-test hook: trigger custom functions based on software name.""" if self.name in PRE_TEST_HOOKS: @@ -551,6 +564,7 @@ def inject_gpu_property(ec): 'OpenBLAS': pre_configure_hook_openblas_optarch_generic, 'WRF': pre_configure_hook_wrf_aarch64, 'LAMMPS': pre_configure_hook_LAMMPS_aarch64, + 'at-spi2-core': pre_configure_hook_atspi2core_filter_ld_library_path, } PRE_TEST_HOOKS = { From 23aa7ce5e0e59f2280cbc5feda7e3f213788b9b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Tue, 16 Jan 2024 14:18:42 +0100 Subject: [PATCH 383/698] split long line --- eb_hooks.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/eb_hooks.py b/eb_hooks.py index ff9072c793..c63121afad 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -343,7 +343,8 @@ def pre_configure_hook_atspi2core_filter_ld_library_path(self, *args, **kwargs): """ if self.name == 'at-spi2-core': if build_option('filter_env_vars') and 'LD_LIBRARY_PATH' in build_option('filter_env_vars'): - self.cfg.update('preconfigopts', 'sed -i "s/gir_extra_args = \[/gir_extra_args = \[\\n \'--lib-dirs-envvar=FILTER_LD_LIBRARY_PATH\',/g" %(start_dir)s/atspi/meson.build && ') + sed_cmd = 'sed -i "s/gir_extra_args = \[/gir_extra_args = \[\\n \'--lib-dirs-envvar=FILTER_LD_LIBRARY_PATH\',/g" %(start_dir)s/atspi/meson.build && ') + self.cfg.update('preconfigopts', sed_cmd) else: raise EasyBuildError("at-spi2-core-specific hook triggered for non-at-spi2-core easyconfig?!") From 75bf2dec2d333df9bf0bee84116f0ea9bdce5d9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Tue, 16 Jan 2024 14:58:29 +0100 Subject: [PATCH 384/698] fix syntax, remove ) --- eb_hooks.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eb_hooks.py b/eb_hooks.py index c63121afad..a9169d60b8 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -343,7 +343,7 @@ def pre_configure_hook_atspi2core_filter_ld_library_path(self, *args, **kwargs): """ if self.name == 'at-spi2-core': if build_option('filter_env_vars') and 'LD_LIBRARY_PATH' in build_option('filter_env_vars'): - sed_cmd = 'sed -i "s/gir_extra_args = \[/gir_extra_args = \[\\n \'--lib-dirs-envvar=FILTER_LD_LIBRARY_PATH\',/g" %(start_dir)s/atspi/meson.build && ') + sed_cmd = 'sed -i "s/gir_extra_args = \[/gir_extra_args = \[\\n \'--lib-dirs-envvar=FILTER_LD_LIBRARY_PATH\',/g" %(start_dir)s/atspi/meson.build && ' self.cfg.update('preconfigopts', sed_cmd) else: raise EasyBuildError("at-spi2-core-specific hook triggered for non-at-spi2-core easyconfig?!") From 9a1b4c82583d9022fb9a50bff9ce7d2e080cc290 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Tue, 16 Jan 2024 15:53:57 +0100 Subject: [PATCH 385/698] add link to github issue --- eb_hooks.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/eb_hooks.py b/eb_hooks.py index a9169d60b8..b3cbc4b28e 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -339,7 +339,8 @@ def pre_configure_hook_atspi2core_filter_ld_library_path(self, *args, **kwargs): """ pre-configure hook for at-spi2-core: - instruct GObject-Introspection's g-ir-scanner tool to not set $LD_LIBRARY_PATH - when EasyBuild is configured to filter it + when EasyBuild is configured to filter it, see: + https://github.com/EESSI/software-layer/issues/196 """ if self.name == 'at-spi2-core': if build_option('filter_env_vars') and 'LD_LIBRARY_PATH' in build_option('filter_env_vars'): From 9944ab6546d856acdf0d92231dac56af8aab82b8 Mon Sep 17 00:00:00 2001 From: TopRichard <121792457+TopRichard@users.noreply.github.com> Date: Tue, 16 Jan 2024 17:17:29 +0100 Subject: [PATCH 386/698] Update eb_hooks.py Co-authored-by: ocaisa --- eb_hooks.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eb_hooks.py b/eb_hooks.py index 41d196b097..3b18f330ed 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -380,7 +380,7 @@ def pre_test_hook_ignore_failing_tests_SciPybundle(self, *args, **kwargs): def pre_test_hook_ignore_failing_tests_netCDF(self, *args, **kwargs): """ - Pre-test hook for SciPy-bundle: skip failing tests for selected netCDF versions on neoverse_v1 + Pre-test hook for netCDF: skip failing tests for selected netCDF versions on neoverse_v1 cfr. https://github.com/EESSI/software-layer/issues/425 The following tests are problematic: 163 - nc_test4_run_par_test (Timeout) From 5577d243ccb43df34256036a617b0ab1b53665e0 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 16 Jan 2024 20:14:26 +0100 Subject: [PATCH 387/698] {2023.06}[foss/2023a] ESPResSo v4.2.1 --- .../2023.06/eessi-2023.06-eb-4.9.0-2023a.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml index e33a8af48c..0569affbca 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml @@ -1,4 +1,9 @@ easyconfigs: - OpenFOAM-11-foss-2023a.eb: + # see https://github.com/easybuilders/easybuild-easyconfigs/pull/19545 options: from-pr: 19545 + - ESPResSo-4.2.1-foss-2023a.eb: + # see https://github.com/easybuilders/easybuild-easyconfigs/pull/19592 + options: + from-pr: 19592 From 07a99b43b7b7577e881095a73b74300a00793567 Mon Sep 17 00:00:00 2001 From: Xin An Date: Wed, 17 Jan 2024 11:01:27 +0100 Subject: [PATCH 388/698] remove reframe v433 from eb v4.8.2 --- .../2023.06/eessi-2023.06-eb-4.8.2-001-system.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-001-system.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-001-system.yml index d85440ec5b..f02b9f2802 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-001-system.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-001-system.yml @@ -5,4 +5,3 @@ easyconfigs: - Nextflow-23.10.0.eb: options: from-pr: 19172 - - ReFrame-4.3.3.eb From 34f4c453044ea6acd324b462f47de38db33c3b61 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 18 Jan 2024 12:03:25 +0100 Subject: [PATCH 389/698] fix known issues YAML file for netCDF --- eessi-2023.06-known-issues.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/eessi-2023.06-known-issues.yml b/eessi-2023.06-known-issues.yml index cb2d945af2..0ee661be73 100644 --- a/eessi-2023.06-known-issues.yml +++ b/eessi-2023.06-known-issues.yml @@ -1,4 +1,7 @@ - aarch64/neoverse_v1: - - netCDF-4.9.2-GCC-12.3.0/GCC-13.2.0: + - netCDF-4.9.2-gompi-2023a.eb: + - issue: https://github.com/EESSI/software-layer/issues/425 + - info: "netCDF intermittent test failures" + - netCDF-4.9.2-gompi-2023b.eb: - issue: https://github.com/EESSI/software-layer/issues/425 - info: "netCDF intermittent test failures" From 13ea5e7affb71e73546c963e4136591f213f3193 Mon Sep 17 00:00:00 2001 From: Alexander Puck Neuwirth Date: Thu, 18 Jan 2024 13:30:46 +0100 Subject: [PATCH 390/698] {2023.06}[2023a] Rivet 3.1.9 --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml index eba776ab1f..f27c9a316f 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml @@ -8,3 +8,6 @@ easyconfigs: # see https://github.com/easybuilders/easybuild-easyconfigs/pull/19592 options: from-pr: 19592 + - Rivet-3.1.9-gompi-2023a-HepMC3-3.2.6.eb: + options: + from-pr: 19631 From abfc7ae9f5b8f52c9cb5a348bcf263d3d0bf650a Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 19 Jan 2024 09:19:59 +0100 Subject: [PATCH 391/698] complete overview of known issues (so far) for software.eessi.io version 2023.06 --- eessi-2023.06-known-issues.yml | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/eessi-2023.06-known-issues.yml b/eessi-2023.06-known-issues.yml index 0ee661be73..8d8cfe4d07 100644 --- a/eessi-2023.06-known-issues.yml +++ b/eessi-2023.06-known-issues.yml @@ -1,7 +1,28 @@ - aarch64/neoverse_v1: + - ESPResSo-4.2.1-foss-2023a: + - issue: https://github.com/EESSI/software-layer/issues/363 + - info: "ESPResSo tests failing due to timeouts" + - FFTW.MPI-3.3.10-gompi-2023a: + - issue: https://github.com/EESSI/software-layer/issues/325 + - info: "Flaky FFTW tests, random failures" + - FFTW.MPI-3.3.10-gompi-2023b: + - issue: https://github.com/EESSI/software-layer/issues/325 + - info: "Flaky FFTW tests, random failures" - netCDF-4.9.2-gompi-2023a.eb: - issue: https://github.com/EESSI/software-layer/issues/425 - info: "netCDF intermittent test failures" - netCDF-4.9.2-gompi-2023b.eb: - issue: https://github.com/EESSI/software-layer/issues/425 - info: "netCDF intermittent test failures" + - OpenBLAS-0.3.21-GCC-12.2.0: + - issue: https://github.com/EESSI/software-layer/issues/314 + - info: "Increased number of numerical errors in OpenBLAS test suite (344 vs max. 150 on x86_64/*)" + - SciPy-bundle-2023.11-gfbf-2023b: + - issue: https://github.com/EESSI/software-layer/issues/318 + - info: "numpy built with -march=armv8.4-a instead of -mcpu=native (no SVE) + 2 failing tests (vs 50005 passed) in scipy test suite" + - SciPy-bundle-2023.11-gfbf-2023b: + - issue: https://github.com/EESSI/software-layer/issues/318 + - info: "2 failing tests (vs 54409 passed) in scipy test suite" + - SciPy-bundle-2023.11-gfbf-2023b: + - issue: https://github.com/EESSI/software-layer/issues/318 + - info: "2 failing tests (vs 54876 passed) in scipy test suite" From efbc538248634d06dc8e09374af87188dd373f0e Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 19 Jan 2024 09:20:32 +0100 Subject: [PATCH 392/698] limit hook to increase max failing numerical tests on neoverse_v1 to OpenBLAS < 0.3.23 --- eb_hooks.py | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/eb_hooks.py b/eb_hooks.py index 14742678bb..2bc2fdebd5 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -185,20 +185,21 @@ def parse_hook_fontconfig_add_fonts(ec, eprefix): def parse_hook_openblas_relax_lapack_tests_num_errors(ec, eprefix): - """Relax number of failing numerical LAPACK tests for aarch64/neoverse_v1 CPU target.""" + """Relax number of failing numerical LAPACK tests for aarch64/neoverse_v1 CPU target for OpenBLAS < 0.3.23""" cpu_target = get_eessi_envvar('EESSI_SOFTWARE_SUBDIR') if ec.name == 'OpenBLAS': - # relax maximum number of failed numerical LAPACK tests for aarch64/neoverse_v1 CPU target - # since the default setting of 150 that works well on other aarch64 targets and x86_64 is a bit too strict - # See https://github.com/EESSI/software-layer/issues/314 - cfg_option = 'max_failing_lapack_tests_num_errors' - if cpu_target == CPU_TARGET_NEOVERSE_V1: - orig_value = ec[cfg_option] - ec[cfg_option] = 400 - print_msg("Maximum number of failing LAPACK tests with numerical errors for %s relaxed to %s (was %s)", - ec.name, ec[cfg_option], orig_value) - else: - print_msg("Not changing option %s for %s on non-AARCH64", cfg_option, ec.name) + if LooseVersion(ec.version) < LooseVersion('0.3.23'): + # relax maximum number of failed numerical LAPACK tests for aarch64/neoverse_v1 CPU target + # since the default setting of 150 that works well on other aarch64 targets and x86_64 is a bit too strict + # See https://github.com/EESSI/software-layer/issues/314 + cfg_option = 'max_failing_lapack_tests_num_errors' + if cpu_target == CPU_TARGET_NEOVERSE_V1: + orig_value = ec[cfg_option] + ec[cfg_option] = 400 + print_msg("Maximum number of failing LAPACK tests with numerical errors for %s relaxed to %s (was %s)", + ec.name, ec[cfg_option], orig_value) + else: + print_msg("Not changing option %s for %s on non-AARCH64", cfg_option, ec.name) else: raise EasyBuildError("OpenBLAS-specific hook triggered for non-OpenBLAS easyconfig?!") From 855251262cb228c8adf1ea37ad22af6e71ddb8c7 Mon Sep 17 00:00:00 2001 From: Richard Top Date: Fri, 19 Jan 2024 11:07:59 +0000 Subject: [PATCH 393/698] {2023.06}[gfbf/2023b] matplotlib v3.8.2 --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml index 9a3b8efa6d..4dd31dbd5d 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml @@ -5,3 +5,6 @@ easyconfigs: - netCDF-4.9.2-gompi-2023b.eb: options: from-pr: 19534 + - matplotlib-3.8.2-gfbf-2023b.eb: + options: + from-pr: 19552 From 6705bfc57c35bf4ee4a1c3e8c08356c57c0b91c5 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 19 Jan 2024 16:31:12 +0100 Subject: [PATCH 394/698] fix entries in known issues for SciPy-bundle --- eessi-2023.06-known-issues.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/eessi-2023.06-known-issues.yml b/eessi-2023.06-known-issues.yml index 8d8cfe4d07..475ee2c1d7 100644 --- a/eessi-2023.06-known-issues.yml +++ b/eessi-2023.06-known-issues.yml @@ -17,10 +17,10 @@ - OpenBLAS-0.3.21-GCC-12.2.0: - issue: https://github.com/EESSI/software-layer/issues/314 - info: "Increased number of numerical errors in OpenBLAS test suite (344 vs max. 150 on x86_64/*)" - - SciPy-bundle-2023.11-gfbf-2023b: + - SciPy-bundle-2023.02-gfbf-2022b: - issue: https://github.com/EESSI/software-layer/issues/318 - info: "numpy built with -march=armv8.4-a instead of -mcpu=native (no SVE) + 2 failing tests (vs 50005 passed) in scipy test suite" - - SciPy-bundle-2023.11-gfbf-2023b: + - SciPy-bundle-2023.07-gfbf-2023a: - issue: https://github.com/EESSI/software-layer/issues/318 - info: "2 failing tests (vs 54409 passed) in scipy test suite" - SciPy-bundle-2023.11-gfbf-2023b: From a94759aee70d581e63f46200b8fdeb148c546590 Mon Sep 17 00:00:00 2001 From: Richard Top Date: Tue, 23 Jan 2024 13:52:47 +0000 Subject: [PATCH 395/698] Trying with parallel 1 which was removed in PR18467 --- .../2023.06/eessi-2023.06-eb-4.8.2-2022b.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2022b.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2022b.yml index fd88fafb0c..18fb0a742f 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2022b.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2022b.yml @@ -4,4 +4,6 @@ easyconfigs: options: from-pr: 19339 - Qt5-5.15.7-GCCcore-12.2.0.eb - - QuantumESPRESSO-7.2-foss-2022b.eb + - QuantumESPRESSO-7.2-foss-2022b.eb: + options: + parallel: 1 From 832b152c5296fc05487aa48a7e9d52a69f700e2e Mon Sep 17 00:00:00 2001 From: Richard Top Date: Tue, 23 Jan 2024 14:00:24 +0000 Subject: [PATCH 396/698] Trying with parallel 1 --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2022b.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2022b.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2022b.yml index 18fb0a742f..24fe340bf2 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2022b.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2022b.yml @@ -6,4 +6,4 @@ easyconfigs: - Qt5-5.15.7-GCCcore-12.2.0.eb - QuantumESPRESSO-7.2-foss-2022b.eb: options: - parallel: 1 + parallel 1 From 4d691eca00db20c4e948459973b660dde51d3d58 Mon Sep 17 00:00:00 2001 From: Richard Top Date: Tue, 23 Jan 2024 16:49:24 +0000 Subject: [PATCH 397/698] Trying with parallel 1 --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2022b.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2022b.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2022b.yml index 24fe340bf2..6c08ff774c 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2022b.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2022b.yml @@ -6,4 +6,4 @@ easyconfigs: - Qt5-5.15.7-GCCcore-12.2.0.eb - QuantumESPRESSO-7.2-foss-2022b.eb: options: - parallel 1 + parallel: '1' From 699052b0ba0145c22051838303548804ab2559d0 Mon Sep 17 00:00:00 2001 From: Thomas Roeblitz Date: Tue, 23 Jan 2024 18:21:23 +0100 Subject: [PATCH 398/698] only pick a software subdir that is present in the CVMFS repository --- init/eessi_environment_variables | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/init/eessi_environment_variables b/init/eessi_environment_variables index 3584bfaf34..af5222e7b9 100644 --- a/init/eessi_environment_variables +++ b/init/eessi_environment_variables @@ -27,8 +27,17 @@ if [ -d $EESSI_PREFIX ]; then # determine subdirectory in software layer if [ "$EESSI_USE_ARCHDETECT" == "1" ]; then # if archdetect is enabled, use internal code - export EESSI_SOFTWARE_SUBDIR=$(${EESSI_INIT_DIR_PATH}/eessi_archdetect.sh cpupath) - show_msg "archdetect says ${EESSI_SOFTWARE_SUBDIR}" + all_cpupaths=$(${EESSI_INIT_DIR_PATH}/eessi_archdetect.sh -a cpupath) + # iterate over colon-separated list verifying if the architecture is present + # under $EESSI_PREFIX/software/$EESSI_OS_TYPE; if so use the architecture as best match + IFS=: read -r -a archs <<< "${all_cpupaths}" + for arch in "${archs[@]}"; do + if [ -d ${EESSI_PREFIX}/software/${EESSI_OS_TYPE}/${arch} ]; then + export EESSI_SOFTWARE_SUBDIR=${arch} + show_msg "archdetect says ${EESSI_SOFTWARE_SUBDIR}" + break + fi + done elif [ "$EESSI_USE_ARCHSPEC" == "1" ]; then # note: eessi_software_subdir_for_host.py will pick up value from $EESSI_SOFTWARE_SUBDIR_OVERRIDE if it's defined! export EESSI_EPREFIX_PYTHON=$EESSI_EPREFIX/usr/bin/python3 From 97572ac5aaf3d83fe6f81d03c84e7e6161465186 Mon Sep 17 00:00:00 2001 From: Alexander Puck Neuwirth Date: Tue, 23 Jan 2024 22:01:12 +0100 Subject: [PATCH 399/698] Use MR with fixed zlib --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml index f27c9a316f..b9f51cff48 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml @@ -10,4 +10,4 @@ easyconfigs: from-pr: 19592 - Rivet-3.1.9-gompi-2023a-HepMC3-3.2.6.eb: options: - from-pr: 19631 + from-pr: 19679 From abfc5b01d40c1bc8492483682b0ea5f8767f58ef Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Wed, 24 Jan 2024 16:21:14 +0100 Subject: [PATCH 400/698] Add hook to accept higher number of failing tests (10) for PyTorch on ARM --- eb_hooks.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/eb_hooks.py b/eb_hooks.py index 7a31e87937..ef50fa8ba9 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -20,6 +20,7 @@ from distutils.version import LooseVersion +CPU_TARGET_NEOVERSE_N1 = 'aarch64/neoverse_n1' CPU_TARGET_NEOVERSE_V1 = 'aarch64/neoverse_v1' CPU_TARGET_AARCH64_GENERIC = 'aarch64/generic' @@ -378,6 +379,21 @@ def pre_test_hook_ignore_failing_tests_SciPybundle(self, *args, **kwargs): self.cfg['testopts'] = "|| echo ignoring failing tests" +def pre_test_hook_increase_max_failed_tests_arm_PyTorch(self, *args, **kwargs): + """ + Pre-test hook for PyTorch: increase max failing tests for ARM for PyTorch 2.1.2 + See https://github.com/EESSI/software-layer/pull/444#issuecomment-1890416171 + """ + cpu_target = get_eessi_envvar('EESSI_SOFTWARE_SUBDIR') + arm_target = ( + cpu_target == CPU_TARGET_NEOVERSE_V1 or + cpu_target == CPU_TARGET_NEOVERSE_N1 or + cpu_target == CPU_TARGET_AARCH64_GENERIC + ) + if self.name == 'PyTorch' and self.version == '2.1.2' and arm_target: + self.cfg['max_failed_tests'] = 10 + + def pre_single_extension_hook(ext, *args, **kwargs): """Main pre-configure hook: trigger custom functions based on software name.""" if ext.name in PRE_SINGLE_EXTENSION_HOOKS: @@ -527,6 +543,7 @@ def inject_gpu_property(ec): 'ESPResSo': pre_test_hook_ignore_failing_tests_ESPResSo, 'FFTW.MPI': pre_test_hook_ignore_failing_tests_FFTWMPI, 'SciPy-bundle': pre_test_hook_ignore_failing_tests_SciPybundle, + 'PyTorch': pre_test_hook_increase_max_failed_tests_arm_PyTorch, } PRE_SINGLE_EXTENSION_HOOKS = { From 9fc553944e7322030b69ef472d02aec87739c5b9 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Wed, 24 Jan 2024 16:51:08 +0100 Subject: [PATCH 401/698] do general check for ARM, like done in the kokkos hook --- eb_hooks.py | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/eb_hooks.py b/eb_hooks.py index ef50fa8ba9..f949d02272 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -20,7 +20,6 @@ from distutils.version import LooseVersion -CPU_TARGET_NEOVERSE_N1 = 'aarch64/neoverse_n1' CPU_TARGET_NEOVERSE_V1 = 'aarch64/neoverse_v1' CPU_TARGET_AARCH64_GENERIC = 'aarch64/generic' @@ -385,12 +384,7 @@ def pre_test_hook_increase_max_failed_tests_arm_PyTorch(self, *args, **kwargs): See https://github.com/EESSI/software-layer/pull/444#issuecomment-1890416171 """ cpu_target = get_eessi_envvar('EESSI_SOFTWARE_SUBDIR') - arm_target = ( - cpu_target == CPU_TARGET_NEOVERSE_V1 or - cpu_target == CPU_TARGET_NEOVERSE_N1 or - cpu_target == CPU_TARGET_AARCH64_GENERIC - ) - if self.name == 'PyTorch' and self.version == '2.1.2' and arm_target: + if self.name == 'PyTorch' and self.version == '2.1.2' and get_cpu_architecture() == AARCH64:: self.cfg['max_failed_tests'] = 10 From ed45a743b26605dcf67f54da11de1dda6d015145 Mon Sep 17 00:00:00 2001 From: Richard Top Date: Wed, 24 Jan 2024 16:18:38 +0000 Subject: [PATCH 402/698] Added libxc to post_ready_hook --- eb_hooks.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eb_hooks.py b/eb_hooks.py index 2bc2fdebd5..4d791c7c3d 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -80,7 +80,7 @@ def post_ready_hook(self, *args, **kwargs): # 'parallel' easyconfig parameter is set via EasyBlock.set_parallel in ready step based on available cores. # here we reduce parallellism to only use half of that for selected software, # to avoid failing builds/tests due to out-of-memory problems - if self.name in ['TensorFlow']: + if self.name in ['TensorFlow', 'libxc']: parallel = self.cfg['parallel'] if parallel > 1: self.cfg['parallel'] = parallel // 2 From 63a9c98720f6773c1d01c7a92a45972a5e8ce00a Mon Sep 17 00:00:00 2001 From: Richard Top Date: Wed, 24 Jan 2024 16:21:18 +0000 Subject: [PATCH 403/698] Reverted to default easyconfig setting --- .../2023.06/eessi-2023.06-eb-4.8.2-2022b.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2022b.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2022b.yml index 6c08ff774c..fd88fafb0c 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2022b.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2022b.yml @@ -4,6 +4,4 @@ easyconfigs: options: from-pr: 19339 - Qt5-5.15.7-GCCcore-12.2.0.eb - - QuantumESPRESSO-7.2-foss-2022b.eb: - options: - parallel: '1' + - QuantumESPRESSO-7.2-foss-2022b.eb From a4ade847f2bba2f0118eccbc17cefd4fbf296052 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Wed, 24 Jan 2024 18:47:44 +0100 Subject: [PATCH 404/698] remove double colon --- eb_hooks.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eb_hooks.py b/eb_hooks.py index f949d02272..4544c7d398 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -384,7 +384,7 @@ def pre_test_hook_increase_max_failed_tests_arm_PyTorch(self, *args, **kwargs): See https://github.com/EESSI/software-layer/pull/444#issuecomment-1890416171 """ cpu_target = get_eessi_envvar('EESSI_SOFTWARE_SUBDIR') - if self.name == 'PyTorch' and self.version == '2.1.2' and get_cpu_architecture() == AARCH64:: + if self.name == 'PyTorch' and self.version == '2.1.2' and get_cpu_architecture() == AARCH64: self.cfg['max_failed_tests'] = 10 From 5ac329bf0b31f508969db150d30514e8f5f7eb50 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Wed, 24 Jan 2024 18:47:57 +0100 Subject: [PATCH 405/698] remove redundant line --- eb_hooks.py | 1 - 1 file changed, 1 deletion(-) diff --git a/eb_hooks.py b/eb_hooks.py index 4544c7d398..91591f121f 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -383,7 +383,6 @@ def pre_test_hook_increase_max_failed_tests_arm_PyTorch(self, *args, **kwargs): Pre-test hook for PyTorch: increase max failing tests for ARM for PyTorch 2.1.2 See https://github.com/EESSI/software-layer/pull/444#issuecomment-1890416171 """ - cpu_target = get_eessi_envvar('EESSI_SOFTWARE_SUBDIR') if self.name == 'PyTorch' and self.version == '2.1.2' and get_cpu_architecture() == AARCH64: self.cfg['max_failed_tests'] = 10 From 128fea77374fc47babcdf591a91eddcbd8d94ef8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Thu, 25 Jan 2024 12:10:50 +0100 Subject: [PATCH 406/698] add item for PyTorch test failures on aarch64 --- eessi-2023.06-known-issues.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/eessi-2023.06-known-issues.yml b/eessi-2023.06-known-issues.yml index 475ee2c1d7..5ca68e4f44 100644 --- a/eessi-2023.06-known-issues.yml +++ b/eessi-2023.06-known-issues.yml @@ -17,6 +17,9 @@ - OpenBLAS-0.3.21-GCC-12.2.0: - issue: https://github.com/EESSI/software-layer/issues/314 - info: "Increased number of numerical errors in OpenBLAS test suite (344 vs max. 150 on x86_64/*)" + - PyTorch-2.1.2-foss-2023a: + - issue: https://github.com/EESSI/software-layer/issues/461 + - info: "8 failing tests (out of 209539) on aarch64/*" - SciPy-bundle-2023.02-gfbf-2022b: - issue: https://github.com/EESSI/software-layer/issues/318 - info: "numpy built with -march=armv8.4-a instead of -mcpu=native (no SVE) + 2 failing tests (vs 50005 passed) in scipy test suite" From 5955adcf75954b2fd66680af051f5feb7c9a1fc9 Mon Sep 17 00:00:00 2001 From: Richard Top Date: Thu, 25 Jan 2024 20:56:54 +0000 Subject: [PATCH 407/698] {2023.06}[GCCcore/13.2.0] Qt5 v5.15.11 --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml index 4dd31dbd5d..0d1863f5f3 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml @@ -8,3 +8,6 @@ easyconfigs: - matplotlib-3.8.2-gfbf-2023b.eb: options: from-pr: 19552 + - Qt5-5.15.11-GCCcore-13.2.0.eb: + options: + from-pr: 19320 From bec06f5998d01d20584e7ab6a3b1654dbaed2faf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Fri, 26 Jan 2024 13:31:12 +0100 Subject: [PATCH 408/698] add pytorch issue for aarch64/generic and aarch64/neoverse_n1 --- eessi-2023.06-known-issues.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/eessi-2023.06-known-issues.yml b/eessi-2023.06-known-issues.yml index 5ca68e4f44..569a0d9f56 100644 --- a/eessi-2023.06-known-issues.yml +++ b/eessi-2023.06-known-issues.yml @@ -1,3 +1,11 @@ +- aarch64/generic: + - PyTorch-2.1.2-foss-2023a: + - issue: https://github.com/EESSI/software-layer/issues/461 + - info: "8 failing tests (out of 209539) on aarch64/*" +- aarch64/neoverse_n1: + - PyTorch-2.1.2-foss-2023a: + - issue: https://github.com/EESSI/software-layer/issues/461 + - info: "8 failing tests (out of 209539) on aarch64/*" - aarch64/neoverse_v1: - ESPResSo-4.2.1-foss-2023a: - issue: https://github.com/EESSI/software-layer/issues/363 From 69a7010feafa11a38e654c62907438aa37bec2f3 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 26 Jan 2024 16:47:44 +0100 Subject: [PATCH 409/698] {2023.09}[gfbf/2023a] scikit-learn 1.3.1 --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml index b9f51cff48..43d9944b8a 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml @@ -11,3 +11,4 @@ easyconfigs: - Rivet-3.1.9-gompi-2023a-HepMC3-3.2.6.eb: options: from-pr: 19679 + - scikit-learn-1.3.1-gfbf-2023a.eb From b82c7bdb8999c62f4b953c9bb2ebc6d55624e500 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Fri, 26 Jan 2024 21:51:58 +0100 Subject: [PATCH 410/698] use CDO from pr 19735 --- .../2023.06/eessi-2023.06-eb-4.8.2-2023a.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml index 2f25925a3a..b0205f8a85 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml @@ -46,4 +46,6 @@ easyconfigs: - ALL-0.9.2-foss-2023a.eb: options: from-pr: 19455 - - CDO-2.2.2-gompi-2023a.eb \ No newline at end of file + - CDO-2.2.2-gompi-2023a.eb: + options: + from-pr: 19735 From 737455a35385b38ded34af3a5bdcc70edb1c2c50 Mon Sep 17 00:00:00 2001 From: Thomas Roeblitz Date: Sun, 28 Jan 2024 00:38:40 +0100 Subject: [PATCH 411/698] bump versions of GH actions to address Node.js deprecation note --- .github/workflows/scorecards.yml | 2 +- .github/workflows/test-software.eessi.io.yml | 2 +- .github/workflows/test_eessi_container_script.yml | 2 +- .github/workflows/test_licenses.yml | 4 ++-- .github/workflows/tests.yml | 4 ++-- .github/workflows/tests_archdetect.yml | 2 +- .github/workflows/tests_init.yml | 4 ++-- .github/workflows/tests_readme.yml | 2 +- .github/workflows/tests_scripts.yml | 2 +- 9 files changed, 12 insertions(+), 12 deletions(-) diff --git a/.github/workflows/scorecards.yml b/.github/workflows/scorecards.yml index ec018bd049..dc18fd584a 100644 --- a/.github/workflows/scorecards.yml +++ b/.github/workflows/scorecards.yml @@ -35,7 +35,7 @@ jobs: steps: - name: "Checkout code" - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # v3.1.0 + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 with: persist-credentials: false diff --git a/.github/workflows/test-software.eessi.io.yml b/.github/workflows/test-software.eessi.io.yml index 3ac341a177..df801ca16e 100644 --- a/.github/workflows/test-software.eessi.io.yml +++ b/.github/workflows/test-software.eessi.io.yml @@ -22,7 +22,7 @@ jobs: - x86_64/generic steps: - name: Check out software-layer repository - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # v3.1.0 + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - name: Mount EESSI CernVM-FS pilot repository uses: cvmfs-contrib/github-action-cvmfs@d4641d0d591c9a5c3be23835ced2fb648b44c04b # v3.1 diff --git a/.github/workflows/test_eessi_container_script.yml b/.github/workflows/test_eessi_container_script.yml index 33122e6ff4..32120d0087 100644 --- a/.github/workflows/test_eessi_container_script.yml +++ b/.github/workflows/test_eessi_container_script.yml @@ -22,7 +22,7 @@ jobs: #- save steps: - name: Check out software-layer repository - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # v3.1.0 + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - name: install Apptainer run: | diff --git a/.github/workflows/test_licenses.yml b/.github/workflows/test_licenses.yml index 00a2c90f6b..3b9675d523 100644 --- a/.github/workflows/test_licenses.yml +++ b/.github/workflows/test_licenses.yml @@ -8,10 +8,10 @@ jobs: runs-on: ubuntu-20.04 steps: - name: Check out software-layer repository - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # v3.1.0 + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - name: set up Python - uses: actions/setup-python@13ae5bb136fac2878aff31522b9efb785519f984 # v4.3.0 + uses: actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c # v5.0.0 with: python-version: '3.9' diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index cc00685a40..8e74a4e844 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -12,10 +12,10 @@ jobs: fail-fast: false steps: - name: checkout - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # v3.1.0 + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - name: set up Python - uses: actions/setup-python@13ae5bb136fac2878aff31522b9efb785519f984 # v4.3.0 + uses: actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c # v5.0.0 with: python-version: ${{matrix.python}} architecture: x64 diff --git a/.github/workflows/tests_archdetect.yml b/.github/workflows/tests_archdetect.yml index 1e8b830e14..5b63efaed3 100644 --- a/.github/workflows/tests_archdetect.yml +++ b/.github/workflows/tests_archdetect.yml @@ -22,7 +22,7 @@ jobs: fail-fast: false steps: - name: checkout - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # v3.1.0 + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - name: Mount EESSI CernVM-FS pilot repository uses: cvmfs-contrib/github-action-cvmfs@d4641d0d591c9a5c3be23835ced2fb648b44c04b # v3.1 diff --git a/.github/workflows/tests_init.yml b/.github/workflows/tests_init.yml index 417b7851f1..38ccbbad31 100644 --- a/.github/workflows/tests_init.yml +++ b/.github/workflows/tests_init.yml @@ -12,10 +12,10 @@ jobs: fail-fast: false steps: - name: checkout - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # v3.1.0 + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - name: set up Python - uses: actions/setup-python@13ae5bb136fac2878aff31522b9efb785519f984 # v4.3.0 + uses: actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c # v5.0.0 with: python-version: ${{matrix.python}} architecture: x64 diff --git a/.github/workflows/tests_readme.yml b/.github/workflows/tests_readme.yml index d229879f67..efdb796e5e 100644 --- a/.github/workflows/tests_readme.yml +++ b/.github/workflows/tests_readme.yml @@ -17,7 +17,7 @@ jobs: runs-on: ubuntu-20.04 steps: - name: Check out software-layer repository - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # v3.1.0 + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - name: verify if README.md is consistent with EESSI_VERSION from init/eessi_defaults run: | diff --git a/.github/workflows/tests_scripts.yml b/.github/workflows/tests_scripts.yml index a369f4f187..df1884dd8c 100644 --- a/.github/workflows/tests_scripts.yml +++ b/.github/workflows/tests_scripts.yml @@ -29,7 +29,7 @@ jobs: runs-on: ubuntu-20.04 steps: - name: checkout - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # v3.1.0 + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - name: install Apptainer run: | From 8daea34e875bb0fa77e28db4f2ca46761afe4757 Mon Sep 17 00:00:00 2001 From: Thomas Roeblitz Date: Sun, 28 Jan 2024 00:49:45 +0100 Subject: [PATCH 412/698] bump version of cvmfs action to address Node.js deprecation note --- .github/workflows/test-software.eessi.io.yml | 2 +- .github/workflows/tests_archdetect.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test-software.eessi.io.yml b/.github/workflows/test-software.eessi.io.yml index df801ca16e..8cfb023bc6 100644 --- a/.github/workflows/test-software.eessi.io.yml +++ b/.github/workflows/test-software.eessi.io.yml @@ -25,7 +25,7 @@ jobs: uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - name: Mount EESSI CernVM-FS pilot repository - uses: cvmfs-contrib/github-action-cvmfs@d4641d0d591c9a5c3be23835ced2fb648b44c04b # v3.1 + uses: cvmfs-contrib/github-action-cvmfs@55899ca74cf78ab874bdf47f5a804e47c198743c # v4.0 with: cvmfs_config_package: https://github.com/EESSI/filesystem-layer/releases/download/latest/cvmfs-config-eessi_latest_all.deb cvmfs_http_proxy: DIRECT diff --git a/.github/workflows/tests_archdetect.yml b/.github/workflows/tests_archdetect.yml index 5b63efaed3..922c9a1bf0 100644 --- a/.github/workflows/tests_archdetect.yml +++ b/.github/workflows/tests_archdetect.yml @@ -25,7 +25,7 @@ jobs: uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - name: Mount EESSI CernVM-FS pilot repository - uses: cvmfs-contrib/github-action-cvmfs@d4641d0d591c9a5c3be23835ced2fb648b44c04b # v3.1 + uses: cvmfs-contrib/github-action-cvmfs@55899ca74cf78ab874bdf47f5a804e47c198743c # v4.0 with: cvmfs_config_package: https://github.com/EESSI/filesystem-layer/releases/download/latest/cvmfs-config-eessi_latest_all.deb cvmfs_http_proxy: DIRECT From 0f3646ef0eec6a89aa1a8a5479c8040264af5af3 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Mon, 5 Feb 2024 17:28:18 +0100 Subject: [PATCH 413/698] Second attempt at having the bot run the test suite, now based on Thomas' PR 366 --- bot/check-test.sh | 66 ++++++++++++++++++++++++++++++++++ run_tests.sh | 10 +++++- test_suite.sh | 92 +++++++++++++++++++++++++++++------------------ 3 files changed, 132 insertions(+), 36 deletions(-) create mode 100644 bot/check-test.sh diff --git a/bot/check-test.sh b/bot/check-test.sh new file mode 100644 index 0000000000..9fc783aa99 --- /dev/null +++ b/bot/check-test.sh @@ -0,0 +1,66 @@ +#!/bin/bash +# +# Dummy script that only creates test result file for the bot, without actually checking anything +# +# This script is part of the EESSI software layer, see +# https://github.com/EESSI/software-layer.git +# +# author: Kenneth Hoste (HPC-UGent) +# +# license: GPLv2 +# +job_dir=${PWD} +job_out="slurm-${SLURM_JOB_ID}.out" +job_test_result_file="_bot_job${SLURM_JOB_ID}.test" + +# ReFrame prints e.g. +#[----------] start processing checks +#[ RUN ] GROMACS_EESSI %benchmark_info=HECBioSim/Crambin %nb_impl=cpu %scale=2_nodes %module_name=GROMACS/2021.3-foss-2021a /d597cff4 @snellius:rome+default +#[ RUN ] GROMACS_EESSI %benchmark_info=HECBioSim/Crambin %nb_impl=cpu %scale=2_nodes %module_name=GROMACS/2021.3-foss-2021a /d597cff4 @snellius:genoa+default +#[ RUN ] GROMACS_EESSI %benchmark_info=HECBioSim/Crambin %nb_impl=cpu %scale=1_cpn_2_nodes %module_name=GROMACS/2021.3-foss-2021a /f4194106 @snellius:genoa+default +#[ FAIL ] (1/3) GROMACS_EESSI %benchmark_info=HECBioSim/Crambin %nb_impl=cpu %scale=2_nodes %module_name=GROMACS/2021.3-foss-2021a /d597cff4 @snellius:genoa+default +#==> test failed during 'sanity': test staged in '/scratch-shared/casparl/reframe_output/staging/snellius/genoa/default/GROMACS_EESSI_d597cff4' +#[ OK ] (2/3) GROMACS_EESSI %benchmark_info=HECBioSim/Crambin %nb_impl=cpu %scale=2_nodes %module_name=GROMACS/2021.3-foss-2021a /d597cff4 @snellius:rome+default +#P: perf: 8.441 ns/day (r:0, l:None, u:None) +#[ FAIL ] (3/3) GROMACS_EESSI %benchmark_info=HECBioSim/Crambin %nb_impl=cpu %scale=1_cpn_2_nodes %module_name=GROMACS/2021.3-foss-2021a /f4194106 @snellius:genoa+default +#==> test failed during 'sanity': test staged in '/scratch-shared/casparl/reframe_output/staging/snellius/genoa/default/GROMACS_EESSI_f4194106' +#[----------] all spawned checks have finished +#[ FAILED ] Ran 3/3 test case(s) from 2 check(s) (2 failure(s), 0 skipped, 0 aborted) + +# We will grep for the last and final line, since this reflects the overall result +# Specifically, we grep for FAILED, since this is also what we print if a step in the test script itself fails +FAILED=-1 +if [[ ${SLURM} -eq 1 ]]; then + GP_failed='\[\s*FAILED\s*\]' + grep_out=$(grep -v "^>> searching for " ${job_dir}/${job_out} | grep "${GP_failed}") + [[ $? -eq 0 ]] && FAILED=1 || FAILED=0 + # have to be careful to not add searched for pattern into slurm out file + [[ ${VERBOSE} -ne 0 ]] && echo ">> searching for '"${GP_failed}"'" + [[ ${VERBOSE} -ne 0 ]] && echo "${grep_out}" +fi + + +# Here, we grep for 'ERROR:', which is printed if a fatal_error is encountered when executing the test step +# I.e. this is an error in execution of the run_tests.sh itself, NOT in running the actual tests +ERROR=-1 +if [[ ${SLURM} -eq 1 ]]; then + GP_error='ERROR: ' + grep_out=$(grep -v "^>> searching for " ${job_dir}/${job_out} | grep "${GP_error}") + [[ $? -eq 0 ]] && ERROR=1 || ERROR=0 + # have to be careful to not add searched for pattern into slurm out file + [[ ${VERBOSE} -ne 0 ]] && echo ">> searching for '"${GP_error}"'" + [[ ${VERBOSE} -ne 0 ]] && echo "${grep_out}" +fi + +echo "[TEST]" > ${job_test_result_file} +if [[ ${ERROR} -eq 1 ]]; then + echo "comment_description = Failure to execute test step" >> ${job_test_result_file} + echo "status = FAILURE" >> ${job_test_result_file} +elif [[ ${FAILED} -eq 1 ]]; then + echo "comment_description = EESSI test suite produced failures" >> ${job_test_result_file} +else + echo "comment_description = Test step run succesfully" >> ${job_test_result_file} + echo "status = SUCCESS" >> ${job_test_result_file} +fi + +exit 0 diff --git a/run_tests.sh b/run_tests.sh index ccbc751f22..69672f18f3 100644 --- a/run_tests.sh +++ b/run_tests.sh @@ -1,4 +1,12 @@ #!/bin/bash base_dir=$(dirname $(realpath $0)) source ${base_dir}/init/eessi_defaults -./run_in_compat_layer_env.sh ./test_suite.sh "$@" + +# Note: for these tests, we _don't_ run in the compat layer env +# These tests should mimic what users do, and they are typically not in a prefix environment + +# Run eb --sanity-check-only on changed easyconfigs +# TODO: in the future we may implement this as a light first check. + +# Run the test suite +./test_suite.sh "$@" diff --git a/test_suite.sh b/test_suite.sh index fcaaa339d2..36262a6cbf 100644 --- a/test_suite.sh +++ b/test_suite.sh @@ -144,41 +144,63 @@ else echo_green ">> MODULEPATH set up: ${MODULEPATH}" fi -# assume there's only one diff file that corresponds to the PR patch file -pr_diff=$(ls [0-9]*.diff | head -1) - -# "split" the file by prefixing each line belonging to the same file with the -# same number -split_file=$(awk '/^\+\+\+/{n++}{print n, " ", $0 }' ${pr_diff}) - -# determine which easystack files may have changed -changed_es_files=$(echo "${split_file}" | grep '^[0-9 ]*+++ ./eessi.*.yml$' | egrep -v 'known-issues|missing') - -# process all changed easystackfiles -for es_file_num in $(echo "${changed_es_files}" | cut -f1 -d' ') -do - # determine added lines that do not contain a yaml comment only - added_lines=$(echo "${split_file}" | grep "${es_file_num} + " | sed -e "s/^"${es_file_num}" + //" | grep -v "^[ ]*#") - # determine easyconfigs - easyconfigs=$(echo "${added_lines}" | cut -f3 -d' ') - # get easystack file name - easystack_file=$(echo "${changed_es_files}" | grep "^${es_file_num}" | sed -e "s/^"${es_file_num}" ... .\///") - echo -e "Processing easystack file ${easystack_file}...\n\n" - - # determine version of EasyBuild module to load based on EasyBuild version included in name of easystack file - eb_version=$(echo ${easystack_file} | sed 's/.*eb-\([0-9.]*\).*/\1/g') - - # load EasyBuild module - module load EasyBuild/${eb_version} - - echo_green "All set, let's run sanity checks for installed packages..." - - for easyconfig in ${easyconfigs}; - do - echo "Running sanity check for '${easyconfig}'..." - eb --sanity-check-only ${easyconfig} - done -done +# TODO: this should not be hardcoded. Ideally, we put some logic in place to discover the newest version +# of the ReFrame module available in the current environment +module load ReFrame/4.3.3 +if [[ $? -eq 0 ]]; then + echo_green ">> Loaded ReFrame/4.3.3" +else + fatal_error "Failed to load the ReFrame module" +fi + +# Check ReFrame came with the hpctestlib and we can import it +python3 -c 'import hpctestlib.sciapps.gromacs' +if [[ $? -eq 0 ]]; then + echo_green "Succesfully found and imported hpctestlib.sciapps.gromas" +else + fatal_error "Failed to load hpctestlib" +fi + +# Clone the EESSI test suite +git clone https://github.com/EESSI/test-suite EESSI-test-suite +export TESTSUITEPREFIX=$PWD/EESSI-test-suite +export PYTHONPATH=$TESTSUITEPREFIX:$PYTHONPATH + +# Check that we can import from the testsuite +python3 -c 'import eessi.testsuite' +if [[ $? -eq 0 ]]; then + echo_green "Succesfully found and imported eessi.testsuite" +else + fatal_error "FAILED to import from eessi.testsuite in Python" +fi + +# Configure ReFrame +export RFM_CONFIG_FILES=$TESTSUITEPREFIX/config/github_actions.py +export RFM_CHECK_SEARCH_PATH=$TESTSUITEPREFIX/eessi/testsuite/tests +export RFM_CHECK_SEARCH_RECURSIVE=1 +export RFM_PREFIX=$PWD/reframe_runs + +# Check we can run reframe +reframe --version +if [[ $? -eq 0 ]]; then + echo_green "Succesfully ran reframe --version" +else + fatal_error "Failed to run ReFrame --version" +fi + +# List the tests we want to run +export REFRAME_ARGS='--tag CI --tag 1_nodes' +reframe "${REFRAME_ARGS}" --list +if [[ $? -eq 0 ]]; then + echo_green "Succesfully listed ReFrame tests with command: reframe ${REFRAME_ARGS} --list" +else + fatal_error "Failed to list ReFrame tests with command: reframe ${REFRAME_ARGS} --list" +fi + +# Run all tests +reframe "${REFRAME_ARGS}" --run echo ">> Cleaning up ${TMPDIR}..." rm -r ${TMPDIR} + +exit 0 From 34fca15420fb37eeb136da55542b44b0a474a63d Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Mon, 5 Feb 2024 17:35:29 +0100 Subject: [PATCH 414/698] Make a very simple change to an easystack file so we are able to trigger the bot build and test procedures and see if this PR actually works --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml index 82190071ab..4c73b5887a 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml @@ -15,3 +15,4 @@ easyconfigs: options: from-pr: 19573 - scikit-learn-1.3.1-gfbf-2023a.eb + - patchelf-0.18.0-GCCcore-12.3.0.eb From 3faae9de814b96cd07896bd4042ae7b5b4b50f63 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Tue, 6 Feb 2024 10:00:25 +0100 Subject: [PATCH 415/698] Make scripts executable --- bot/check-test.sh | 0 run_tests.sh | 0 test_suite.sh | 0 3 files changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 bot/check-test.sh mode change 100644 => 100755 run_tests.sh mode change 100644 => 100755 test_suite.sh diff --git a/bot/check-test.sh b/bot/check-test.sh old mode 100644 new mode 100755 diff --git a/run_tests.sh b/run_tests.sh old mode 100644 new mode 100755 diff --git a/test_suite.sh b/test_suite.sh old mode 100644 new mode 100755 From 081e2b195b1dd948ae86d4f8e1634d368db3b467 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Tue, 6 Feb 2024 10:30:25 +0100 Subject: [PATCH 416/698] Check for existence of SLURM output first --- bot/check-test.sh | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/bot/check-test.sh b/bot/check-test.sh index 9fc783aa99..9308a87e8e 100755 --- a/bot/check-test.sh +++ b/bot/check-test.sh @@ -13,6 +13,17 @@ job_dir=${PWD} job_out="slurm-${SLURM_JOB_ID}.out" job_test_result_file="_bot_job${SLURM_JOB_ID}.test" +# Check that job output file is found +[[ ${VERBOSE} -ne 0 ]] && echo ">> searching for job output file(s) matching '"${job_out}"'" +if [[ -f ${job_out} ]]; then + SLURM=1 + [[ ${VERBOSE} -ne 0 ]] && echo " found slurm output file '"${job_out}"'" +else + SLURM=0 + [[ ${VERBOSE} -ne 0 ]] && echo " Slurm output file '"${job_out}"' NOT found" +fi + + # ReFrame prints e.g. #[----------] start processing checks #[ RUN ] GROMACS_EESSI %benchmark_info=HECBioSim/Crambin %nb_impl=cpu %scale=2_nodes %module_name=GROMACS/2021.3-foss-2021a /d597cff4 @snellius:rome+default @@ -39,7 +50,6 @@ if [[ ${SLURM} -eq 1 ]]; then [[ ${VERBOSE} -ne 0 ]] && echo "${grep_out}" fi - # Here, we grep for 'ERROR:', which is printed if a fatal_error is encountered when executing the test step # I.e. this is an error in execution of the run_tests.sh itself, NOT in running the actual tests ERROR=-1 @@ -53,11 +63,13 @@ if [[ ${SLURM} -eq 1 ]]; then fi echo "[TEST]" > ${job_test_result_file} -if [[ ${ERROR} -eq 1 ]]; then - echo "comment_description = Failure to execute test step" >> ${job_test_result_file} +if [[ ${SLURM} -eq 0 ]]; then + echo "comment_description = FAILED (job output file not found)" >> ${job_test_result_file} +elif [[ ${ERROR} -eq 1 ]]; then + echo "comment_description = FAILED (test step failed to execute)" >> ${job_test_result_file} echo "status = FAILURE" >> ${job_test_result_file} elif [[ ${FAILED} -eq 1 ]]; then - echo "comment_description = EESSI test suite produced failures" >> ${job_test_result_file} + echo "comment_description = FAILED (EESSI test suite produced failures)" >> ${job_test_result_file} else echo "comment_description = Test step run succesfully" >> ${job_test_result_file} echo "status = SUCCESS" >> ${job_test_result_file} From 9b6fa731d6ac55e3e57538eda01c9c47d73300b1 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Tue, 6 Feb 2024 10:43:20 +0100 Subject: [PATCH 417/698] Clarify return messages from the bot --- bot/check-test.sh | 8 ++++---- test_suite.sh | 20 -------------------- 2 files changed, 4 insertions(+), 24 deletions(-) diff --git a/bot/check-test.sh b/bot/check-test.sh index 9308a87e8e..05c7589640 100755 --- a/bot/check-test.sh +++ b/bot/check-test.sh @@ -64,14 +64,14 @@ fi echo "[TEST]" > ${job_test_result_file} if [[ ${SLURM} -eq 0 ]]; then - echo "comment_description = FAILED (job output file not found)" >> ${job_test_result_file} + echo "comment_description = :cry: FAILED (job output file not found, cannot check test results)" >> ${job_test_result_file} elif [[ ${ERROR} -eq 1 ]]; then - echo "comment_description = FAILED (test step failed to execute)" >> ${job_test_result_file} + echo "comment_description = :cry: FAILED (EESSI test suite was not run, test step itself failed to execute)" >> ${job_test_result_file} echo "status = FAILURE" >> ${job_test_result_file} elif [[ ${FAILED} -eq 1 ]]; then - echo "comment_description = FAILED (EESSI test suite produced failures)" >> ${job_test_result_file} + echo "comment_description = :cry: FAILED (EESSI test suite produced failures)" >> ${job_test_result_file} else - echo "comment_description = Test step run succesfully" >> ${job_test_result_file} + echo "comment_description = :grin: SUCCESS" >> ${job_test_result_file} echo "status = SUCCESS" >> ${job_test_result_file} fi diff --git a/test_suite.sh b/test_suite.sh index 36262a6cbf..7995f8aa3a 100755 --- a/test_suite.sh +++ b/test_suite.sh @@ -78,26 +78,9 @@ else fatal_error "$EESSI_CVMFS_REPO is not available!" fi -# make sure we're in Prefix environment by checking $SHELL -if [[ ${SHELL} = ${EPREFIX}/bin/bash ]]; then - echo_green ">> It looks like we're in a Gentoo Prefix environment, good!" -else - fatal_error "Not running in Gentoo Prefix environment, run '${EPREFIX}/startprefix' first!" -fi - # avoid that pyc files for EasyBuild are stored in EasyBuild installation directory export PYTHONPYCACHEPREFIX=$TMPDIR/pycache -DETECTION_PARAMETERS='' -GENERIC=0 -EB='eb' -if [[ "$EASYBUILD_OPTARCH" == "GENERIC" ]]; then - echo_yellow ">> GENERIC build/test requested, taking appropriate measures!" - DETECTION_PARAMETERS="$DETECTION_PARAMETERS --generic" - GENERIC=1 - EB='eb --optarch=GENERIC' -fi - echo ">> Determining software subdirectory to use for current build/test host..." if [ -z $EESSI_SOFTWARE_SUBDIR_OVERRIDE ]; then export EESSI_SOFTWARE_SUBDIR_OVERRIDE=$(python3 $TOPDIR/eessi_software_subdir.py $DETECTION_PARAMETERS) @@ -129,9 +112,6 @@ else fatal_error "Failed to initialize Lmod?! (see output in ${ml_version_out}" fi -echo ">> Configuring EasyBuild..." -source $TOPDIR/configure_easybuild - echo ">> Setting up \$MODULEPATH..." # make sure no modules are loaded module --force purge From cb48b36e590f1d36d7a8d08df22eb538b716c70b Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Tue, 6 Feb 2024 11:32:15 +0100 Subject: [PATCH 418/698] Use EESSI_SOFTWARE_PATH instead of EASYBUILD_INSTALLPATH to set the modulepath. It should be the same, and we no longer configure EasyBuild, since we don't use it when running the test suite --- test_suite.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test_suite.sh b/test_suite.sh index 7995f8aa3a..1464a3a5d4 100755 --- a/test_suite.sh +++ b/test_suite.sh @@ -117,7 +117,7 @@ echo ">> Setting up \$MODULEPATH..." module --force purge # ignore current $MODULEPATH entirely module unuse $MODULEPATH -module use $EASYBUILD_INSTALLPATH/modules/all +module use ${EESSI_SOFTWARE_PATH}/modules/all if [[ -z ${MODULEPATH} ]]; then fatal_error "Failed to set up \$MODULEPATH?!" else From d1a0219486fe4a4c1ad94039b4b74b41ebf7da1f Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Tue, 6 Feb 2024 12:02:12 +0100 Subject: [PATCH 419/698] Do git clone in a seperate script, so that that can be run in the prefix layer --- clone_eessi_test_suite.sh | 1 + run_tests.sh | 3 ++- test_suite.sh | 9 +++++++-- 3 files changed, 10 insertions(+), 3 deletions(-) create mode 100755 clone_eessi_test_suite.sh diff --git a/clone_eessi_test_suite.sh b/clone_eessi_test_suite.sh new file mode 100755 index 0000000000..f7684c8cfd --- /dev/null +++ b/clone_eessi_test_suite.sh @@ -0,0 +1 @@ +git clone https://github.com/EESSI/test-suite EESSI-test-suite diff --git a/run_tests.sh b/run_tests.sh index 69672f18f3..90185fea17 100755 --- a/run_tests.sh +++ b/run_tests.sh @@ -9,4 +9,5 @@ source ${base_dir}/init/eessi_defaults # TODO: in the future we may implement this as a light first check. # Run the test suite -./test_suite.sh "$@" +./run_in_compat_layer_env.sh clone_eessi_test_suite.sh +./test_suite.sh diff --git a/test_suite.sh b/test_suite.sh index 1464a3a5d4..6177f0a253 100755 --- a/test_suite.sh +++ b/test_suite.sh @@ -141,9 +141,14 @@ else fatal_error "Failed to load hpctestlib" fi -# Clone the EESSI test suite -git clone https://github.com/EESSI/test-suite EESSI-test-suite +# Cloning should already be done by clone_eessi_test_suite.sh, which runs in compat layer to have 'git' available +# git clone https://github.com/EESSI/test-suite EESSI-test-suite export TESTSUITEPREFIX=$PWD/EESSI-test-suite +if [ -d $TESTSUITEPREFIX ]; then + echo_green "Clone of the test suite $TESTSUITEPREFIX available, OK!" +else + fatal_error "Clone of the test suite $TESTSUITEPREFIX is not available!" +fi export PYTHONPATH=$TESTSUITEPREFIX:$PYTHONPATH # Check that we can import from the testsuite From 86d5d3d47d076fbdf0a61c57ca83fee8a1c87123 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Tue, 6 Feb 2024 12:06:09 +0100 Subject: [PATCH 420/698] Should use the one from current dir --- run_tests.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/run_tests.sh b/run_tests.sh index 90185fea17..bcca1ee417 100755 --- a/run_tests.sh +++ b/run_tests.sh @@ -9,5 +9,5 @@ source ${base_dir}/init/eessi_defaults # TODO: in the future we may implement this as a light first check. # Run the test suite -./run_in_compat_layer_env.sh clone_eessi_test_suite.sh +./run_in_compat_layer_env.sh ./clone_eessi_test_suite.sh ./test_suite.sh From 7861aec18c0081c8ff24e7ed46d34f9ea52c2dae Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Tue, 6 Feb 2024 12:10:56 +0100 Subject: [PATCH 421/698] Remove quotes, see if that helps --- test_suite.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test_suite.sh b/test_suite.sh index 6177f0a253..1ac82a5e66 100755 --- a/test_suite.sh +++ b/test_suite.sh @@ -175,7 +175,7 @@ fi # List the tests we want to run export REFRAME_ARGS='--tag CI --tag 1_nodes' -reframe "${REFRAME_ARGS}" --list +reframe ${REFRAME_ARGS} --list if [[ $? -eq 0 ]]; then echo_green "Succesfully listed ReFrame tests with command: reframe ${REFRAME_ARGS} --list" else From a7b5ee13c841e940ab136ee2d014b4426a23baa7 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Tue, 6 Feb 2024 12:52:41 +0100 Subject: [PATCH 422/698] Apparently, we need to remove curly braces too --- test_suite.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test_suite.sh b/test_suite.sh index 1ac82a5e66..46c3493f41 100755 --- a/test_suite.sh +++ b/test_suite.sh @@ -175,7 +175,7 @@ fi # List the tests we want to run export REFRAME_ARGS='--tag CI --tag 1_nodes' -reframe ${REFRAME_ARGS} --list +reframe $REFRAME_ARGS --list if [[ $? -eq 0 ]]; then echo_green "Succesfully listed ReFrame tests with command: reframe ${REFRAME_ARGS} --list" else From f50e463e9d0d0f5d91b161805279b6a8a764b990 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Tue, 6 Feb 2024 13:03:31 +0100 Subject: [PATCH 423/698] Make sure this actually gets reported as failure, as the ReFrame runtime fails to run the test suite (it is not an indication of tests failing themselves). --- test_suite.sh | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/test_suite.sh b/test_suite.sh index 46c3493f41..8a69bdee8d 100755 --- a/test_suite.sh +++ b/test_suite.sh @@ -175,7 +175,7 @@ fi # List the tests we want to run export REFRAME_ARGS='--tag CI --tag 1_nodes' -reframe $REFRAME_ARGS --list +reframe ${REFRAME_ARGS} --list if [[ $? -eq 0 ]]; then echo_green "Succesfully listed ReFrame tests with command: reframe ${REFRAME_ARGS} --list" else @@ -184,6 +184,12 @@ fi # Run all tests reframe "${REFRAME_ARGS}" --run +if [[ $? -eq 0 ]]; then + echo_green "ReFrame runtime ran succesfully with command: reframe ${REFRAME_ARGS} --run." +else + fatal_error "ReFrame runtime failed to run with command: reframe ${REFRAME_ARGS} --run." +fi + echo ">> Cleaning up ${TMPDIR}..." rm -r ${TMPDIR} From f67df9bc1319053901aa506668533cbb8b99716f Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Tue, 6 Feb 2024 13:04:49 +0100 Subject: [PATCH 424/698] Fix the actual issue: make sure that two arguments are interpreted seperately by not quoting them --- test_suite.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test_suite.sh b/test_suite.sh index 8a69bdee8d..633333890c 100755 --- a/test_suite.sh +++ b/test_suite.sh @@ -183,7 +183,7 @@ else fi # Run all tests -reframe "${REFRAME_ARGS}" --run +reframe ${REFRAME_ARGS} --run if [[ $? -eq 0 ]]; then echo_green "ReFrame runtime ran succesfully with command: reframe ${REFRAME_ARGS} --run." else From 3394851c5347a045431d7826f579ad5f35f01edf Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Tue, 6 Feb 2024 13:32:27 +0100 Subject: [PATCH 425/698] See if we can make check-test formatting more fancy --- bot/check-test.sh | 84 +++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 78 insertions(+), 6 deletions(-) diff --git a/bot/check-test.sh b/bot/check-test.sh index 05c7589640..3fa7c1d694 100755 --- a/bot/check-test.sh +++ b/bot/check-test.sh @@ -64,15 +64,87 @@ fi echo "[TEST]" > ${job_test_result_file} if [[ ${SLURM} -eq 0 ]]; then - echo "comment_description = :cry: FAILED (job output file not found, cannot check test results)" >> ${job_test_result_file} + summary=":cry: FAILURE" + summary_details="(job output file not found, cannot check test results)"# >> ${job_test_result_file} + status="FAILURE" elif [[ ${ERROR} -eq 1 ]]; then - echo "comment_description = :cry: FAILED (EESSI test suite was not run, test step itself failed to execute)" >> ${job_test_result_file} - echo "status = FAILURE" >> ${job_test_result_file} + summary=":cry: FAILURE" + summary_details="(EESSI test suite was not run, test step itself failed to execute)"# >> ${job_test_result_file} + status="FAILURE" +# echo "status = FAILURE" >> ${job_test_result_file} elif [[ ${FAILED} -eq 1 ]]; then - echo "comment_description = :cry: FAILED (EESSI test suite produced failures)" >> ${job_test_result_file} + summary=":cry: FAILURE" + summary_details="(EESSI test suite produced failures)"# >> ${job_test_result_file} + status="FAILURE" else - echo "comment_description = :grin: SUCCESS" >> ${job_test_result_file} - echo "status = SUCCESS" >> ${job_test_result_file} + summary=":grin: SUCCESS"# >> ${job_test_result_file} + summary_details="" + status="SUCCESS" +# echo "status = SUCCESS" >> ${job_test_result_file} fi +function add_detail() { + actual=${1} + expected=${2} + success_msg="${3}" + failure_msg="${4}" + if [[ ${actual} -eq ${expected} ]]; then + success "${success_msg}" + else + failure "${failure_msg}" + fi +} + +echo "[TEST]" > ${job_result_file} +echo -n "comment_description = " >> ${job_result_file} + +# Use template for writing PR comment with details +# construct and write complete PR comment details: implements third alternative +comment_template="
    __SUMMARY_FMT__
    __DETAILS_FMT____ARTEFACTS_FMT__
    " +comment_summary_fmt="__SUMMARY__ _(click triangle for details)_" +comment_details_fmt="
    _Details_
    __DETAILS_LIST__
    " +comment_success_item_fmt=":white_check_mark: __ITEM__" +comment_failure_item_fmt=":x: __ITEM__" +comment_artefacts_fmt="
    _Artefacts_
    __ARTEFACTS_LIST__
    " +comment_artefact_details_fmt="
    __ARTEFACT_SUMMARY____ARTEFACT_DETAILS__
    " + +comment_summary="${comment_summary_fmt/__SUMMARY__/${summary}}" + +# first construct comment_details_list, abbreviated CoDeList +# then use it to set comment_details +CoDeList="" + +success_msg="job output file ${job_out}" +failure_msg="no job output file ${job_out}" +CoDeList=${CoDeList}$(add_detail ${SLURM} 1 "${success_msg}" "${failure_msg}") + +success_msg="no message matching ${GP_error}" +failure_msg="found message matching ${GP_error}" +CoDeList=${CoDeList}$(add_detail ${ERROR} 0 "${success_msg}" "${failure_msg}") + +success_msg="no message matching ${GP_failed}" +failure_msg="found message matching ${GP_failed}" +CoDeList=${CoDeList}$(add_detail ${FAILED} 0 "${success_msg}" "${failure_msg}") + +# Should not be needed for testing, I think? Maybe for loading ReFrame module... +# success_msg="no message matching ${GP_req_missing}" +# failure_msg="found message matching ${GP_req_missing}" +# CoDeList=${CoDeList}$(add_detail ${MISSING} 0 "${success_msg}" "${failure_msg}") +# +# success_msg="found message(s) matching ${GP_no_missing}" +# failure_msg="no message matching ${GP_no_missing}" +# CoDeList=${CoDeList}$(add_detail ${NO_MISSING} 1 "${success_msg}" "${failure_msg}") +# +# success_msg="found message matching ${GP_tgz_created}" +# failure_msg="no message matching ${GP_tgz_created}" +# CoDeList=${CoDeList}$(add_detail ${TGZ} 1 "${success_msg}" "${failure_msg}") + +comment_details="${comment_details_fmt/__DETAILS_LIST__/${CoDeList}}" + +comment_description=${comment_template/__SUMMARY_FMT__/${comment_summary}} +comment_description=${comment_description/__DETAILS_FMT__/${comment_details}} + +# Actually writing the comment description to the result file +echo "${comment_description}" >> ${job_result_file} + exit 0 From 8e5682a47a589a2e251852ed674b71f16980ffc7 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Tue, 6 Feb 2024 14:51:46 +0100 Subject: [PATCH 426/698] Replace the env var for the result file --- bot/check-test.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/bot/check-test.sh b/bot/check-test.sh index 3fa7c1d694..89d3d6a3c6 100755 --- a/bot/check-test.sh +++ b/bot/check-test.sh @@ -95,8 +95,8 @@ function add_detail() { fi } -echo "[TEST]" > ${job_result_file} -echo -n "comment_description = " >> ${job_result_file} +echo "[TEST]" > ${job_test_result_file} +echo -n "comment_description = " >> ${job_test_result_file} # Use template for writing PR comment with details # construct and write complete PR comment details: implements third alternative @@ -145,6 +145,6 @@ comment_description=${comment_template/__SUMMARY_FMT__/${comment_summary}} comment_description=${comment_description/__DETAILS_FMT__/${comment_details}} # Actually writing the comment description to the result file -echo "${comment_description}" >> ${job_result_file} +echo "${comment_description}" >> ${job_test_result_file} exit 0 From 6cf0cf959844081b004595bd3a6c21329ccf256d Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Tue, 6 Feb 2024 14:53:21 +0100 Subject: [PATCH 427/698] Add missing functions --- bot/check-test.sh | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/bot/check-test.sh b/bot/check-test.sh index 89d3d6a3c6..87c79b3b30 100755 --- a/bot/check-test.sh +++ b/bot/check-test.sh @@ -83,6 +83,24 @@ else # echo "status = SUCCESS" >> ${job_test_result_file} fi +function print_br_item() { + format="${1}" + item="${2}" + echo -n "${format//__ITEM__/${item}}
    " +} + +function success() { + format="${comment_success_item_fmt}" + item="$1" + print_br_item "${format}" "${item}" +} + +function failure() { + format="${comment_failure_item_fmt}" + item="$1" + print_br_item "${format}" "${item}" +} + function add_detail() { actual=${1} expected=${2} From 7fe24e13cdef3f703b51930423a2296e3dc07d59 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Tue, 6 Feb 2024 15:14:50 +0100 Subject: [PATCH 428/698] Remove artefacts from reporting --- bot/check-test.sh | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/bot/check-test.sh b/bot/check-test.sh index 87c79b3b30..da06cd630b 100755 --- a/bot/check-test.sh +++ b/bot/check-test.sh @@ -118,13 +118,11 @@ echo -n "comment_description = " >> ${job_test_result_file} # Use template for writing PR comment with details # construct and write complete PR comment details: implements third alternative -comment_template="
    __SUMMARY_FMT__
    __DETAILS_FMT____ARTEFACTS_FMT__
    " +comment_template="
    __SUMMARY_FMT__
    __DETAILS_FMT__
    " comment_summary_fmt="__SUMMARY__ _(click triangle for details)_" comment_details_fmt="
    _Details_
    __DETAILS_LIST__
    " comment_success_item_fmt=":white_check_mark: __ITEM__" comment_failure_item_fmt=":x: __ITEM__" -comment_artefacts_fmt="
    _Artefacts_
    __ARTEFACTS_LIST__
    " -comment_artefact_details_fmt="
    __ARTEFACT_SUMMARY____ARTEFACT_DETAILS__
    " comment_summary="${comment_summary_fmt/__SUMMARY__/${summary}}" From afc309a168048e54b625ec857a5d09a14ca1d585 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Tue, 6 Feb 2024 15:25:33 +0100 Subject: [PATCH 429/698] Add a reason for the failure --- bot/check-test.sh | 42 ++++++++++++++++++++++-------------------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/bot/check-test.sh b/bot/check-test.sh index da06cd630b..38e86efccd 100755 --- a/bot/check-test.sh +++ b/bot/check-test.sh @@ -65,24 +65,37 @@ fi echo "[TEST]" > ${job_test_result_file} if [[ ${SLURM} -eq 0 ]]; then summary=":cry: FAILURE" - summary_details="(job output file not found, cannot check test results)"# >> ${job_test_result_file} + summary_details="Reason: job output file not found, cannot check test results." status="FAILURE" elif [[ ${ERROR} -eq 1 ]]; then summary=":cry: FAILURE" - summary_details="(EESSI test suite was not run, test step itself failed to execute)"# >> ${job_test_result_file} + summary_details="Reason: EESSI test suite was not run, test step itself failed to execute." status="FAILURE" -# echo "status = FAILURE" >> ${job_test_result_file} elif [[ ${FAILED} -eq 1 ]]; then summary=":cry: FAILURE" - summary_details="(EESSI test suite produced failures)"# >> ${job_test_result_file} + summary_details="Reason: EESSI test suite produced failures." status="FAILURE" else - summary=":grin: SUCCESS"# >> ${job_test_result_file} + summary=":grin: SUCCESS" summary_details="" status="SUCCESS" -# echo "status = SUCCESS" >> ${job_test_result_file} fi + +echo "[TEST]" > ${job_test_result_file} +echo -n "comment_description = " >> ${job_test_result_file} + +# Use template for writing PR comment with details +# construct and write complete PR comment details: implements third alternative +comment_template="
    __SUMMARY_FMT__
    __DETAILS_FMT__
    " +comment_summary_fmt="__SUMMARY__ _(click triangle for details)_" +comment_details_fmt="
    _Details_
    __DETAILS_LIST__
    " +comment_success_item_fmt=":white_check_mark: __ITEM__" +comment_failure_item_fmt=":x: __ITEM__" + +comment_summary="${comment_summary_fmt/__SUMMARY__/${summary}}" + +# Declare functions function print_br_item() { format="${1}" item="${2}" @@ -113,22 +126,11 @@ function add_detail() { fi } -echo "[TEST]" > ${job_test_result_file} -echo -n "comment_description = " >> ${job_test_result_file} - -# Use template for writing PR comment with details -# construct and write complete PR comment details: implements third alternative -comment_template="
    __SUMMARY_FMT__
    __DETAILS_FMT__
    " -comment_summary_fmt="__SUMMARY__ _(click triangle for details)_" -comment_details_fmt="
    _Details_
    __DETAILS_LIST__
    " -comment_success_item_fmt=":white_check_mark: __ITEM__" -comment_failure_item_fmt=":x: __ITEM__" - -comment_summary="${comment_summary_fmt/__SUMMARY__/${summary}}" - # first construct comment_details_list, abbreviated CoDeList # then use it to set comment_details -CoDeList="" + +# Initialize with summary_details, which elaborates on the reason for failure +CoDeList=$(print_br_item "__ITEM__" "${summary_details}" success_msg="job output file ${job_out}" failure_msg="no job output file ${job_out}" From b84e48755dfb582a5a4bae3480e8865df179331e Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Tue, 6 Feb 2024 15:32:07 +0100 Subject: [PATCH 430/698] Fixed missing bracket --- bot/check-test.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bot/check-test.sh b/bot/check-test.sh index 38e86efccd..e340907bb3 100755 --- a/bot/check-test.sh +++ b/bot/check-test.sh @@ -130,7 +130,7 @@ function add_detail() { # then use it to set comment_details # Initialize with summary_details, which elaborates on the reason for failure -CoDeList=$(print_br_item "__ITEM__" "${summary_details}" +CoDeList=$(print_br_item "__ITEM__" "${summary_details}") success_msg="job output file ${job_out}" failure_msg="no job output file ${job_out}" From ef7bc0142f0ff518e82121371403c4da9bc0444d Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Tue, 6 Feb 2024 15:48:44 +0100 Subject: [PATCH 431/698] Add reporting of the ReFrame result --- bot/check-test.sh | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/bot/check-test.sh b/bot/check-test.sh index e340907bb3..78c153e5dc 100755 --- a/bot/check-test.sh +++ b/bot/check-test.sh @@ -43,11 +43,11 @@ fi FAILED=-1 if [[ ${SLURM} -eq 1 ]]; then GP_failed='\[\s*FAILED\s*\]' - grep_out=$(grep -v "^>> searching for " ${job_dir}/${job_out} | grep "${GP_failed}") + grep_reframe_result=$(grep -v "^>> searching for " ${job_dir}/${job_out} | grep "${GP_failed}") [[ $? -eq 0 ]] && FAILED=1 || FAILED=0 # have to be careful to not add searched for pattern into slurm out file [[ ${VERBOSE} -ne 0 ]] && echo ">> searching for '"${GP_failed}"'" - [[ ${VERBOSE} -ne 0 ]] && echo "${grep_out}" + [[ ${VERBOSE} -ne 0 ]] && echo "${grep_reframe_result}" fi # Here, we grep for 'ERROR:', which is printed if a fatal_error is encountered when executing the test step @@ -62,6 +62,15 @@ if [[ ${SLURM} -eq 1 ]]; then [[ ${VERBOSE} -ne 0 ]] && echo "${grep_out}" fi +# Grep for the success pattern, so we can report the amount of tests run +if [[ ${SLURM} -eq 1 ]]; then + GP_success='\[\s*PASSED\s*\]' + grep_reframe_result=$(grep -v "^>> searching for " ${job_dir}/${job_out} | grep "${GP_success}") + # have to be careful to not add searched for pattern into slurm out file + [[ ${VERBOSE} -ne 0 ]] && echo ">> searching for '"${GP_success}"'" + [[ ${VERBOSE} -ne 0 ]] && echo "${grep_reframe_result}" +fi + echo "[TEST]" > ${job_test_result_file} if [[ ${SLURM} -eq 0 ]]; then summary=":cry: FAILURE" @@ -132,6 +141,11 @@ function add_detail() { # Initialize with summary_details, which elaborates on the reason for failure CoDeList=$(print_br_item "__ITEM__" "${summary_details}") +# Add final ReFrame line as line +if [[ ! -z ${grep_reframe_result} ]]; then + CoDeList=${CoDeList}$(print_br_item "__ITEM__" "${grep_reframe_result}" +fi + success_msg="job output file ${job_out}" failure_msg="no job output file ${job_out}" CoDeList=${CoDeList}$(add_detail ${SLURM} 1 "${success_msg}" "${failure_msg}") @@ -140,8 +154,8 @@ success_msg="no message matching ${GP_error}" failure_msg="found message matching ${GP_error}" CoDeList=${CoDeList}$(add_detail ${ERROR} 0 "${success_msg}" "${failure_msg}") -success_msg="no message matching ${GP_failed}" -failure_msg="found message matching ${GP_failed}" +success_msg="no message matching ""${GP_failed}""" +failure_msg="found message matching ""${GP_failed}""" CoDeList=${CoDeList}$(add_detail ${FAILED} 0 "${success_msg}" "${failure_msg}") # Should not be needed for testing, I think? Maybe for loading ReFrame module... From 867681a2ed7413b8ecdbf646d05a20d7d2553adc Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Tue, 6 Feb 2024 16:01:40 +0100 Subject: [PATCH 432/698] Add missing bracket. Again --- bot/check-test.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bot/check-test.sh b/bot/check-test.sh index 78c153e5dc..7ff5f8a3ea 100755 --- a/bot/check-test.sh +++ b/bot/check-test.sh @@ -143,7 +143,7 @@ CoDeList=$(print_br_item "__ITEM__" "${summary_details}") # Add final ReFrame line as line if [[ ! -z ${grep_reframe_result} ]]; then - CoDeList=${CoDeList}$(print_br_item "__ITEM__" "${grep_reframe_result}" + CoDeList=${CoDeList}$(print_br_item "__ITEM__" "${grep_reframe_result}") fi success_msg="job output file ${job_out}" From 47e30cac825362f85138e1d6cb3fe8ba02f13c6e Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Tue, 6 Feb 2024 16:17:25 +0100 Subject: [PATCH 433/698] Add some echo for debugging --- bot/check-test.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/bot/check-test.sh b/bot/check-test.sh index 7ff5f8a3ea..1a2d8b5d5d 100755 --- a/bot/check-test.sh +++ b/bot/check-test.sh @@ -171,6 +171,9 @@ CoDeList=${CoDeList}$(add_detail ${FAILED} 0 "${success_msg}" "${failure_msg}") # failure_msg="no message matching ${GP_tgz_created}" # CoDeList=${CoDeList}$(add_detail ${TGZ} 1 "${success_msg}" "${failure_msg}") +echo "Finale CoDeList is:" +echo ${CoDeList} + comment_details="${comment_details_fmt/__DETAILS_LIST__/${CoDeList}}" comment_description=${comment_template/__SUMMARY_FMT__/${comment_summary}} From 1bdadf884e8f18ec911f8961a894125a6c5cccce Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Tue, 6 Feb 2024 16:24:34 +0100 Subject: [PATCH 434/698] more debugging output --- bot/check-test.sh | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/bot/check-test.sh b/bot/check-test.sh index 1a2d8b5d5d..841b8ed01b 100755 --- a/bot/check-test.sh +++ b/bot/check-test.sh @@ -137,14 +137,20 @@ function add_detail() { # first construct comment_details_list, abbreviated CoDeList # then use it to set comment_details +CoDeList="" # Initialize with summary_details, which elaborates on the reason for failure -CoDeList=$(print_br_item "__ITEM__" "${summary_details}") +if [[ ! -z ${summary_details} ]]; then + CoDeList=${CoDeList}$(print_br_item "__ITEM__" "${summary_details}") +fi # Add final ReFrame line as line if [[ ! -z ${grep_reframe_result} ]]; then CoDeList=${CoDeList}$(print_br_item "__ITEM__" "${grep_reframe_result}") fi +echo "CoDeList up here is" +echo ${CoDeList} + success_msg="job output file ${job_out}" failure_msg="no job output file ${job_out}" From 5152f5e47380c462c234566f5fc3c29922694ef1 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Tue, 6 Feb 2024 16:54:02 +0100 Subject: [PATCH 435/698] Lets try some nicer formatting with headers etc. See if this actually prints something. --- bot/check-test.sh | 62 ++++++++++++++++++++++++++++++++--------------- 1 file changed, 42 insertions(+), 20 deletions(-) diff --git a/bot/check-test.sh b/bot/check-test.sh index 841b8ed01b..8f8eb66f5e 100755 --- a/bot/check-test.sh +++ b/bot/check-test.sh @@ -74,19 +74,19 @@ fi echo "[TEST]" > ${job_test_result_file} if [[ ${SLURM} -eq 0 ]]; then summary=":cry: FAILURE" - summary_details="Reason: job output file not found, cannot check test results." + reason="Reason: job output file not found, cannot check test results." status="FAILURE" elif [[ ${ERROR} -eq 1 ]]; then summary=":cry: FAILURE" - summary_details="Reason: EESSI test suite was not run, test step itself failed to execute." + reason="Reason: EESSI test suite was not run, test step itself failed to execute." status="FAILURE" elif [[ ${FAILED} -eq 1 ]]; then summary=":cry: FAILURE" - summary_details="Reason: EESSI test suite produced failures." + reason="Reason: EESSI test suite produced failures." status="FAILURE" else summary=":grin: SUCCESS" - summary_details="" + reason="" status="SUCCESS" fi @@ -96,13 +96,36 @@ echo -n "comment_description = " >> ${job_test_result_file} # Use template for writing PR comment with details # construct and write complete PR comment details: implements third alternative -comment_template="
    __SUMMARY_FMT__
    __DETAILS_FMT__
    " -comment_summary_fmt="__SUMMARY__ _(click triangle for details)_" -comment_details_fmt="
    _Details_
    __DETAILS_LIST__
    " +comment_template="
    __SUMMARY_FMT__
    __REASON_FMT____REFRAME_FMT____DETAILS_FMT__
    " comment_success_item_fmt=":white_check_mark: __ITEM__" comment_failure_item_fmt=":x: __ITEM__" +# Initialize comment_description +comment_description=${comment_template} + +# Now, start replacing template items one by one +comment_summary_fmt="__SUMMARY__ _(click triangle for details)_" comment_summary="${comment_summary_fmt/__SUMMARY__/${summary}}" +comment_description=${comment_description/__SUMMARY_FMT__/${comment_summary}} + + +# Omit this if there is no reason (e.g. because it was succesful) +if [[ -z ${reason} ]]; then + comment_reason_fmt="
    _Reason_
    __REASONS__
    " + reason_details="${comment_reason_fmt/__REASONS__/${reason}}" + comment_description=${comment_description/__REASON_FMT__/${reason_details}} +else + comment_description=${comment_description/__REASON_FMT__/""} +fi + +# Omit this if there is no reframe summary (i.e. the workflow didn't run succesfully) +if [[ -z ${grep_reframe_result} ]]; then + comment_reframe_fmt="
    _ReFrame Summary_
    __REFRAME_SUMMARY__
    " + reframe_summary=${comment_reframe_ftm/__REFRAME_SUMMARY__/${grep_reframe_result}} + comment_description=${comment_description/__REFRAME_FMT__/${reframe_summary}} +else + comment_description=${comment_description/__REFRAME_FMT__/""} +fi # Declare functions function print_br_item() { @@ -139,17 +162,17 @@ function add_detail() { # then use it to set comment_details CoDeList="" -# Initialize with summary_details, which elaborates on the reason for failure -if [[ ! -z ${summary_details} ]]; then - CoDeList=${CoDeList}$(print_br_item "__ITEM__" "${summary_details}") -fi - -# Add final ReFrame line as line -if [[ ! -z ${grep_reframe_result} ]]; then - CoDeList=${CoDeList}$(print_br_item "__ITEM__" "${grep_reframe_result}") -fi -echo "CoDeList up here is" -echo ${CoDeList} +# # Initialize with summary_details, which elaborates on the reason for failure +# if [[ ! -z ${summary_details} ]]; then +# CoDeList=${CoDeList}$(print_br_item "__ITEM__" "${summary_details}") +# fi +# +# # Add final ReFrame line as line +# if [[ ! -z ${grep_reframe_result} ]]; then +# CoDeList=${CoDeList}$(print_br_item "__ITEM__" "${grep_reframe_result}") +# fi +# echo "CoDeList up here is" +# echo ${CoDeList} success_msg="job output file ${job_out}" @@ -180,9 +203,8 @@ CoDeList=${CoDeList}$(add_detail ${FAILED} 0 "${success_msg}" "${failure_msg}") echo "Finale CoDeList is:" echo ${CoDeList} +comment_details_fmt="
    _Details_
    __DETAILS_LIST__
    " comment_details="${comment_details_fmt/__DETAILS_LIST__/${CoDeList}}" - -comment_description=${comment_template/__SUMMARY_FMT__/${comment_summary}} comment_description=${comment_description/__DETAILS_FMT__/${comment_details}} # Actually writing the comment description to the result file From ea38c66114af601071e1edc626cf9952219a7a18 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Tue, 6 Feb 2024 17:07:28 +0100 Subject: [PATCH 436/698] Inverse check, it was incorrect --- bot/check-test.sh | 21 ++++----------------- 1 file changed, 4 insertions(+), 17 deletions(-) diff --git a/bot/check-test.sh b/bot/check-test.sh index 8f8eb66f5e..01769bbac3 100755 --- a/bot/check-test.sh +++ b/bot/check-test.sh @@ -109,8 +109,8 @@ comment_summary="${comment_summary_fmt/__SUMMARY__/${summary}}" comment_description=${comment_description/__SUMMARY_FMT__/${comment_summary}} -# Omit this if there is no reason (e.g. because it was succesful) -if [[ -z ${reason} ]]; then +# Only add if there is a reason (e.g. no reason for successful runs) +if [[ ! -z ${reason} ]]; then comment_reason_fmt="
    _Reason_
    __REASONS__
    " reason_details="${comment_reason_fmt/__REASONS__/${reason}}" comment_description=${comment_description/__REASON_FMT__/${reason_details}} @@ -118,8 +118,8 @@ else comment_description=${comment_description/__REASON_FMT__/""} fi -# Omit this if there is no reframe summary (i.e. the workflow didn't run succesfully) -if [[ -z ${grep_reframe_result} ]]; then +# Only add if there is a reframe summary (e.g. no reframe summary if reframe wasn't launched succesfully) +if [[ ! -z ${grep_reframe_result} ]]; then comment_reframe_fmt="
    _ReFrame Summary_
    __REFRAME_SUMMARY__
    " reframe_summary=${comment_reframe_ftm/__REFRAME_SUMMARY__/${grep_reframe_result}} comment_description=${comment_description/__REFRAME_FMT__/${reframe_summary}} @@ -162,19 +162,6 @@ function add_detail() { # then use it to set comment_details CoDeList="" -# # Initialize with summary_details, which elaborates on the reason for failure -# if [[ ! -z ${summary_details} ]]; then -# CoDeList=${CoDeList}$(print_br_item "__ITEM__" "${summary_details}") -# fi -# -# # Add final ReFrame line as line -# if [[ ! -z ${grep_reframe_result} ]]; then -# CoDeList=${CoDeList}$(print_br_item "__ITEM__" "${grep_reframe_result}") -# fi -# echo "CoDeList up here is" -# echo ${CoDeList} - - success_msg="job output file ${job_out}" failure_msg="no job output file ${job_out}" CoDeList=${CoDeList}$(add_detail ${SLURM} 1 "${success_msg}" "${failure_msg}") From 8edb6fffb401f0e74e0b975b5585d3f9257f88f8 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Tue, 6 Feb 2024 17:11:41 +0100 Subject: [PATCH 437/698] Remove debugging output --- bot/check-test.sh | 3 --- 1 file changed, 3 deletions(-) diff --git a/bot/check-test.sh b/bot/check-test.sh index 01769bbac3..7a663f35d1 100755 --- a/bot/check-test.sh +++ b/bot/check-test.sh @@ -187,9 +187,6 @@ CoDeList=${CoDeList}$(add_detail ${FAILED} 0 "${success_msg}" "${failure_msg}") # failure_msg="no message matching ${GP_tgz_created}" # CoDeList=${CoDeList}$(add_detail ${TGZ} 1 "${success_msg}" "${failure_msg}") -echo "Finale CoDeList is:" -echo ${CoDeList} - comment_details_fmt="
    _Details_
    __DETAILS_LIST__
    " comment_details="${comment_details_fmt/__DETAILS_LIST__/${CoDeList}}" comment_description=${comment_description/__DETAILS_FMT__/${comment_details}} From 26bd2cb04af381af580805b094f69c096ea40410 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Tue, 6 Feb 2024 17:33:12 +0100 Subject: [PATCH 438/698] Correct the regex pattern to account for the fact that the slurm output file contains special characters in that pattern that are NOT whitespace --- bot/check-test.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/bot/check-test.sh b/bot/check-test.sh index 7a663f35d1..aebd56d333 100755 --- a/bot/check-test.sh +++ b/bot/check-test.sh @@ -42,7 +42,7 @@ fi # Specifically, we grep for FAILED, since this is also what we print if a step in the test script itself fails FAILED=-1 if [[ ${SLURM} -eq 1 ]]; then - GP_failed='\[\s*FAILED\s*\]' + GP_failed='\[.*FAILED.*\].*Ran .* test case' grep_reframe_result=$(grep -v "^>> searching for " ${job_dir}/${job_out} | grep "${GP_failed}") [[ $? -eq 0 ]] && FAILED=1 || FAILED=0 # have to be careful to not add searched for pattern into slurm out file @@ -64,7 +64,7 @@ fi # Grep for the success pattern, so we can report the amount of tests run if [[ ${SLURM} -eq 1 ]]; then - GP_success='\[\s*PASSED\s*\]' + GP_success='\[.*PASSED.*\].*Ran .* test case' grep_reframe_result=$(grep -v "^>> searching for " ${job_dir}/${job_out} | grep "${GP_success}") # have to be careful to not add searched for pattern into slurm out file [[ ${VERBOSE} -ne 0 ]] && echo ">> searching for '"${GP_success}"'" @@ -119,6 +119,8 @@ else fi # Only add if there is a reframe summary (e.g. no reframe summary if reframe wasn't launched succesfully) +echo "ReFrame result:" +echo "${grep_reframe_result}" if [[ ! -z ${grep_reframe_result} ]]; then comment_reframe_fmt="
    _ReFrame Summary_
    __REFRAME_SUMMARY__
    " reframe_summary=${comment_reframe_ftm/__REFRAME_SUMMARY__/${grep_reframe_result}} From 416b72d3cb18d6150e0ef8760cd5b66867e29496 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Tue, 6 Feb 2024 17:45:30 +0100 Subject: [PATCH 439/698] Corrected typo --- bot/check-test.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bot/check-test.sh b/bot/check-test.sh index aebd56d333..702add848d 100755 --- a/bot/check-test.sh +++ b/bot/check-test.sh @@ -123,7 +123,7 @@ echo "ReFrame result:" echo "${grep_reframe_result}" if [[ ! -z ${grep_reframe_result} ]]; then comment_reframe_fmt="
    _ReFrame Summary_
    __REFRAME_SUMMARY__
    " - reframe_summary=${comment_reframe_ftm/__REFRAME_SUMMARY__/${grep_reframe_result}} + reframe_summary=${comment_reframe_fmt/__REFRAME_SUMMARY__/${grep_reframe_result}} comment_description=${comment_description/__REFRAME_FMT__/${reframe_summary}} else comment_description=${comment_description/__REFRAME_FMT__/""} From 19900937361e16259dce714c9e4acda4b09e0a7b Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Tue, 6 Feb 2024 17:51:27 +0100 Subject: [PATCH 440/698] Trigger failure in the workflow on purpose, to show what that looks like --- test_suite.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test_suite.sh b/test_suite.sh index 633333890c..4439821d56 100755 --- a/test_suite.sh +++ b/test_suite.sh @@ -166,7 +166,7 @@ export RFM_CHECK_SEARCH_RECURSIVE=1 export RFM_PREFIX=$PWD/reframe_runs # Check we can run reframe -reframe --version +reframe --version BLABLABLA if [[ $? -eq 0 ]]; then echo_green "Succesfully ran reframe --version" else @@ -174,7 +174,7 @@ else fi # List the tests we want to run -export REFRAME_ARGS='--tag CI --tag 1_nodes' +export REFRAME_ARGS='--tag CI --tag 1_node' reframe ${REFRAME_ARGS} --list if [[ $? -eq 0 ]]; then echo_green "Succesfully listed ReFrame tests with command: reframe ${REFRAME_ARGS} --list" From 4b9885612fa13d2d1f45522ca1aa04ec333863b8 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Tue, 6 Feb 2024 18:11:30 +0100 Subject: [PATCH 441/698] Change order of checking error codes. If the ReFrame tests ran and we find that pattern, that should take priority. Other errors might have come from errors in the build phase... --- bot/check-test.sh | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/bot/check-test.sh b/bot/check-test.sh index 702add848d..7b7ada98e7 100755 --- a/bot/check-test.sh +++ b/bot/check-test.sh @@ -62,10 +62,12 @@ if [[ ${SLURM} -eq 1 ]]; then [[ ${VERBOSE} -ne 0 ]] && echo "${grep_out}" fi +SUCCESS=-1 # Grep for the success pattern, so we can report the amount of tests run if [[ ${SLURM} -eq 1 ]]; then GP_success='\[.*PASSED.*\].*Ran .* test case' grep_reframe_result=$(grep -v "^>> searching for " ${job_dir}/${job_out} | grep "${GP_success}") + [[ $? -eq 0 ]] && SUCCESS=1 || SUCCESS=0 # have to be careful to not add searched for pattern into slurm out file [[ ${VERBOSE} -ne 0 ]] && echo ">> searching for '"${GP_success}"'" [[ ${VERBOSE} -ne 0 ]] && echo "${grep_reframe_result}" @@ -74,19 +76,27 @@ fi echo "[TEST]" > ${job_test_result_file} if [[ ${SLURM} -eq 0 ]]; then summary=":cry: FAILURE" - reason="Reason: job output file not found, cannot check test results." + reason="Job output file not found, cannot check test results." status="FAILURE" -elif [[ ${ERROR} -eq 1 ]]; then +# Should come before general errors: if SUCCESS==1, it indicates the test suite ran succesfully +# regardless of other things that might have gone wrong +elif [[ ${SUCCESS} -eq 1 ]]; then + summary=":grin: SUCCESS" + reason="" + status="SUCCESS" +# Should come before general errors: if FAILED==1, it indicates the test suite ran +# otherwise the pattern wouldn't have been there +elif [[ ${FAILED} -eq 1 ]]; then summary=":cry: FAILURE" - reason="Reason: EESSI test suite was not run, test step itself failed to execute." + reason="EESSI test suite produced failures." status="FAILURE" -elif [[ ${FAILED} -eq 1 ]]; then +elif [[ ${ERROR} -eq 1 ]]; then summary=":cry: FAILURE" - reason="Reason: EESSI test suite produced failures." + reason="EESSI test suite was not run, test step itself failed to execute." status="FAILURE" else - summary=":grin: SUCCESS" - reason="" + summary=":grin: FAILURE" + reason="Failed for unknown reason" status="SUCCESS" fi From 0f261420106862049091494d6a640a6c46de5dd8 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Wed, 7 Feb 2024 12:11:25 +0100 Subject: [PATCH 442/698] Make sure we don't overwrite the grepped result from failures --- bot/check-test.sh | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/bot/check-test.sh b/bot/check-test.sh index 7b7ada98e7..8af45d26a6 100755 --- a/bot/check-test.sh +++ b/bot/check-test.sh @@ -43,11 +43,11 @@ fi FAILED=-1 if [[ ${SLURM} -eq 1 ]]; then GP_failed='\[.*FAILED.*\].*Ran .* test case' - grep_reframe_result=$(grep -v "^>> searching for " ${job_dir}/${job_out} | grep "${GP_failed}") + grep_reframe_failed=$(grep -v "^>> searching for " ${job_dir}/${job_out} | grep "${GP_failed}") [[ $? -eq 0 ]] && FAILED=1 || FAILED=0 # have to be careful to not add searched for pattern into slurm out file [[ ${VERBOSE} -ne 0 ]] && echo ">> searching for '"${GP_failed}"'" - [[ ${VERBOSE} -ne 0 ]] && echo "${grep_reframe_result}" + [[ ${VERBOSE} -ne 0 ]] && echo "${grep_reframe_failed}" fi # Here, we grep for 'ERROR:', which is printed if a fatal_error is encountered when executing the test step @@ -66,11 +66,17 @@ SUCCESS=-1 # Grep for the success pattern, so we can report the amount of tests run if [[ ${SLURM} -eq 1 ]]; then GP_success='\[.*PASSED.*\].*Ran .* test case' - grep_reframe_result=$(grep -v "^>> searching for " ${job_dir}/${job_out} | grep "${GP_success}") + grep_reframe_success=$(grep -v "^>> searching for " ${job_dir}/${job_out} | grep "${GP_success}") [[ $? -eq 0 ]] && SUCCESS=1 || SUCCESS=0 # have to be careful to not add searched for pattern into slurm out file [[ ${VERBOSE} -ne 0 ]] && echo ">> searching for '"${GP_success}"'" - [[ ${VERBOSE} -ne 0 ]] && echo "${grep_reframe_result}" + [[ ${VERBOSE} -ne 0 ]] && echo "${grep_reframe_success}" +fi + +if [[ ! -z ${grep_reframe_failed} ]]; then + grep_reframe_results=${grep_reframe_failed} +else + grep_reframe_results=${grep_reframe_success} fi echo "[TEST]" > ${job_test_result_file} From 94e0bb5e3b886192508d95485b221b3ec7a6ff5e Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Wed, 7 Feb 2024 13:09:31 +0100 Subject: [PATCH 443/698] Fix plural/singular typo --- bot/check-test.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bot/check-test.sh b/bot/check-test.sh index 8af45d26a6..39901f0691 100755 --- a/bot/check-test.sh +++ b/bot/check-test.sh @@ -74,9 +74,9 @@ if [[ ${SLURM} -eq 1 ]]; then fi if [[ ! -z ${grep_reframe_failed} ]]; then - grep_reframe_results=${grep_reframe_failed} + grep_reframe_result=${grep_reframe_failed} else - grep_reframe_results=${grep_reframe_success} + grep_reframe_result=${grep_reframe_success} fi echo "[TEST]" > ${job_test_result_file} From 9e7ac1c7c4f2f64250ef504810d057e0cb3e5225 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Wed, 7 Feb 2024 13:25:45 +0100 Subject: [PATCH 444/698] Be a bit more expressive about what we are doing --- test_suite.sh | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/test_suite.sh b/test_suite.sh index 4439821d56..1610d87738 100755 --- a/test_suite.sh +++ b/test_suite.sh @@ -165,8 +165,11 @@ export RFM_CHECK_SEARCH_PATH=$TESTSUITEPREFIX/eessi/testsuite/tests export RFM_CHECK_SEARCH_RECURSIVE=1 export RFM_PREFIX=$PWD/reframe_runs +echo "Configured reframe with the following environment variables:" +env | grep "RFM_" + # Check we can run reframe -reframe --version BLABLABLA +reframe --version if [[ $? -eq 0 ]]; then echo_green "Succesfully ran reframe --version" else @@ -175,6 +178,7 @@ fi # List the tests we want to run export REFRAME_ARGS='--tag CI --tag 1_node' +echo "Listing tests: reframe ${REFRAME_ARGS} --list" reframe ${REFRAME_ARGS} --list if [[ $? -eq 0 ]]; then echo_green "Succesfully listed ReFrame tests with command: reframe ${REFRAME_ARGS} --list" @@ -183,6 +187,7 @@ else fi # Run all tests +echo "Running tests: reframe ${REFRAME_ARGS} --run" reframe ${REFRAME_ARGS} --run if [[ $? -eq 0 ]]; then echo_green "ReFrame runtime ran succesfully with command: reframe ${REFRAME_ARGS} --run." @@ -190,7 +195,6 @@ else fatal_error "ReFrame runtime failed to run with command: reframe ${REFRAME_ARGS} --run." fi - echo ">> Cleaning up ${TMPDIR}..." rm -r ${TMPDIR} From 3a52bde23e5de6cfe4d5da170060c07d8dfc0009 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Wed, 7 Feb 2024 14:28:08 +0100 Subject: [PATCH 445/698] Change to dedicated config file for testing by the bot in the build job --- test_suite.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test_suite.sh b/test_suite.sh index 1610d87738..d6699878f9 100755 --- a/test_suite.sh +++ b/test_suite.sh @@ -160,7 +160,7 @@ else fi # Configure ReFrame -export RFM_CONFIG_FILES=$TESTSUITEPREFIX/config/github_actions.py +export RFM_CONFIG_FILES=$TESTSUITEPREFIX/config/software_layer_bot.py export RFM_CHECK_SEARCH_PATH=$TESTSUITEPREFIX/eessi/testsuite/tests export RFM_CHECK_SEARCH_RECURSIVE=1 export RFM_PREFIX=$PWD/reframe_runs From 159e384bdef117265e09a0a420cce3fa6d8842c8 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Wed, 7 Feb 2024 14:47:54 +0100 Subject: [PATCH 446/698] Make it verbose, see if we can see why autodetect fails --- test_suite.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test_suite.sh b/test_suite.sh index d6699878f9..a8e1b2d97a 100755 --- a/test_suite.sh +++ b/test_suite.sh @@ -177,7 +177,7 @@ else fi # List the tests we want to run -export REFRAME_ARGS='--tag CI --tag 1_node' +export REFRAME_ARGS='--tag CI --tag 1_node -vvv' echo "Listing tests: reframe ${REFRAME_ARGS} --list" reframe ${REFRAME_ARGS} --list if [[ $? -eq 0 ]]; then From b92044e5f913ce0a6c7082c0ebfb4e238d47f95d Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Wed, 7 Feb 2024 16:23:53 +0100 Subject: [PATCH 447/698] Add ReFrame config template. Not that four template variables need to be replaced for this to be a valid ReFrame config file --- reframe_config_bot.py | 58 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 reframe_config_bot.py diff --git a/reframe_config_bot.py b/reframe_config_bot.py new file mode 100644 index 0000000000..65ccf9f43e --- /dev/null +++ b/reframe_config_bot.py @@ -0,0 +1,58 @@ +# WARNING: this file is intended as template and the __X__ template variables need to be replaced +# before it can act as a configuration file +# Once replaced, this is a config file for running tests after the build phase, by the bot + +from eessi.testsuite.common_config import common_logging_config +from eessi.testsuite.constants import * # noqa: F403 + + +site_configuration = { + 'systems': [ + { + 'name': 'Testing in bot Build jobs for EESSI software Layer', + 'descr': 'Software-layer bot', + 'hostnames': ['.*'], + 'modules_system': 'lmod', + 'partitions': [ + { + 'name': 'default', + 'scheduler': 'local', + 'launcher': 'mpirun', + 'environs': ['default'], + 'features': [FEATURES[CPU]], + 'processor': { + 'num_cpus': __NUM_CPUS__, + 'num_sockets': __NUM_SOCKETS__, + 'num_cpus_per_core': __NUM_CPUS_PER_CORE__, + 'num_cpus_per_socket': __NUM_CPUS_PER_SOCKET__, + } + 'resources': [ + { + 'name': 'memory', + 'options': ['--mem={size}'], + } + ], + 'max_jobs': 1 + } + ] + } + ], + 'environments': [ + { + 'name': 'default', + 'cc': 'cc', + 'cxx': '', + 'ftn': '' + } + ], + 'general': [ + { + 'purge_environment': True, + 'resolve_module_conflicts': False, # avoid loading the module before submitting the job + # Enable automatic detection of CPU architecture + # See https://reframe-hpc.readthedocs.io/en/stable/configure.html#auto-detecting-processor-information + 'remote_detect': True, + } + ], + 'logging': common_logging_config(), +} From 02b0e3115dfc81387554f0cb9fe2c292e60098ab Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Wed, 7 Feb 2024 16:30:18 +0100 Subject: [PATCH 448/698] Use template config file and make replacements based on lscpu --- test_suite.sh | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/test_suite.sh b/test_suite.sh index a8e1b2d97a..f5cc7fabfd 100755 --- a/test_suite.sh +++ b/test_suite.sh @@ -156,11 +156,11 @@ python3 -c 'import eessi.testsuite' if [[ $? -eq 0 ]]; then echo_green "Succesfully found and imported eessi.testsuite" else - fatal_error "FAILED to import from eessi.testsuite in Python" + fatal_error "Failed to import from eessi.testsuite in Python" fi # Configure ReFrame -export RFM_CONFIG_FILES=$TESTSUITEPREFIX/config/software_layer_bot.py +export RFM_CONFIG_FILES=$TOPDIR/reframe_config_bot.py export RFM_CHECK_SEARCH_PATH=$TESTSUITEPREFIX/eessi/testsuite/tests export RFM_CHECK_SEARCH_RECURSIVE=1 export RFM_PREFIX=$PWD/reframe_runs @@ -168,6 +168,33 @@ export RFM_PREFIX=$PWD/reframe_runs echo "Configured reframe with the following environment variables:" env | grep "RFM_" +# Inject correct CPU properties into the ReFrame config file +cpuinfo=$(lscpu) +if [[ "${cpuinfo}" =~ CPU\(s\):[^0-9]*([0-9]+) ]]; then + cpu_count=${BASH_REMATCH[1]} +else + fatal_error "Failed to get the number of CPUs for the current test hardware with lscpu." +fi +if [[ "${text}" =~ Socket\(s\):[^0-9]*([0-9]+) ]]; then + socket_count=${BASH_REMATCH[1]} +else + fatal_error "Failed to get the number of sockets for the current test hardware with lscpu." +fi +if [[ "${text}" =~ (Thread\(s\) per core:[^0-9]*([0-9]+)) ]]; then + threads_per_core=${BASH_REMATCH[2]} +else + fatal_error "Failed to get the number of threads per core for the current test hardware with lscpu." +fi +if [[ "${text}" =~ (Core\(s\) per socket:[^0-9]*([0-9]+)) ]]; then + cores_per_socket=${BASH_REMATCH[2]} +else + fatal_error "Failed to get the number of cores per socket for the current test hardware with lscpu." +fi +sed -i "s/__NUM_CPUS__/${cpu_count}/g" $RFM_CONFIG_FILES +sed -i "s/__NUM_SOCKETS__/${socket_count}/g" $RFM_CONFIG_FILES +sed -i "s/__NUM_CPUS_PER_CORE__/${threads_per_core}/g" $RFM_CONFIG_FILES +sed -i "s/__NUM_CPUS_PER_SOCKETS__/${cores_per_socket}/g" $RFM_CONFIG_FILES + # Check we can run reframe reframe --version if [[ $? -eq 0 ]]; then From 58c4cfa772454405c456503c29a6fc8d59956910 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Wed, 7 Feb 2024 16:39:46 +0100 Subject: [PATCH 449/698] Fix incorrect variable name --- test_suite.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test_suite.sh b/test_suite.sh index f5cc7fabfd..7ba5282327 100755 --- a/test_suite.sh +++ b/test_suite.sh @@ -175,17 +175,17 @@ if [[ "${cpuinfo}" =~ CPU\(s\):[^0-9]*([0-9]+) ]]; then else fatal_error "Failed to get the number of CPUs for the current test hardware with lscpu." fi -if [[ "${text}" =~ Socket\(s\):[^0-9]*([0-9]+) ]]; then +if [[ "${cpuinfo}" =~ Socket\(s\):[^0-9]*([0-9]+) ]]; then socket_count=${BASH_REMATCH[1]} else fatal_error "Failed to get the number of sockets for the current test hardware with lscpu." fi -if [[ "${text}" =~ (Thread\(s\) per core:[^0-9]*([0-9]+)) ]]; then +if [[ "${cpuinfo}" =~ (Thread\(s\) per core:[^0-9]*([0-9]+)) ]]; then threads_per_core=${BASH_REMATCH[2]} else fatal_error "Failed to get the number of threads per core for the current test hardware with lscpu." fi -if [[ "${text}" =~ (Core\(s\) per socket:[^0-9]*([0-9]+)) ]]; then +if [[ "${cpuinfo}" =~ (Core\(s\) per socket:[^0-9]*([0-9]+)) ]]; then cores_per_socket=${BASH_REMATCH[2]} else fatal_error "Failed to get the number of cores per socket for the current test hardware with lscpu." From 2fc121e86399b7c7c3cab6092b609a91a88db43f Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Wed, 7 Feb 2024 16:57:48 +0100 Subject: [PATCH 450/698] Missing comma --- reframe_config_bot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reframe_config_bot.py b/reframe_config_bot.py index 65ccf9f43e..bbe8a7e2df 100644 --- a/reframe_config_bot.py +++ b/reframe_config_bot.py @@ -25,7 +25,7 @@ 'num_sockets': __NUM_SOCKETS__, 'num_cpus_per_core': __NUM_CPUS_PER_CORE__, 'num_cpus_per_socket': __NUM_CPUS_PER_SOCKET__, - } + }, 'resources': [ { 'name': 'memory', From db08f4f39a618450c70f1d52f43c46f244011545 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Wed, 7 Feb 2024 21:30:43 +0100 Subject: [PATCH 451/698] Corrected typo --- test_suite.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test_suite.sh b/test_suite.sh index 7ba5282327..9bd95c6749 100755 --- a/test_suite.sh +++ b/test_suite.sh @@ -193,7 +193,7 @@ fi sed -i "s/__NUM_CPUS__/${cpu_count}/g" $RFM_CONFIG_FILES sed -i "s/__NUM_SOCKETS__/${socket_count}/g" $RFM_CONFIG_FILES sed -i "s/__NUM_CPUS_PER_CORE__/${threads_per_core}/g" $RFM_CONFIG_FILES -sed -i "s/__NUM_CPUS_PER_SOCKETS__/${cores_per_socket}/g" $RFM_CONFIG_FILES +sed -i "s/__NUM_CPUS_PER_SOCKET__/${cores_per_socket}/g" $RFM_CONFIG_FILES # Check we can run reframe reframe --version From 6b3a6ccc985314e5c66c8097e8eb26e1c1fb3546 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Wed, 7 Feb 2024 21:47:43 +0100 Subject: [PATCH 452/698] Remove verbose flags --- test_suite.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test_suite.sh b/test_suite.sh index 9bd95c6749..99643c42b8 100755 --- a/test_suite.sh +++ b/test_suite.sh @@ -204,7 +204,7 @@ else fi # List the tests we want to run -export REFRAME_ARGS='--tag CI --tag 1_node -vvv' +export REFRAME_ARGS='--tag CI --tag 1_node' echo "Listing tests: reframe ${REFRAME_ARGS} --list" reframe ${REFRAME_ARGS} --list if [[ $? -eq 0 ]]; then From a70b4f132e36f078cb3b4f0d802f96a877699050 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Wed, 7 Feb 2024 21:55:16 +0100 Subject: [PATCH 453/698] Pick name without spaces, to avoid issues with directories --- reframe_config_bot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reframe_config_bot.py b/reframe_config_bot.py index bbe8a7e2df..ad66a72041 100644 --- a/reframe_config_bot.py +++ b/reframe_config_bot.py @@ -9,7 +9,7 @@ site_configuration = { 'systems': [ { - 'name': 'Testing in bot Build jobs for EESSI software Layer', + 'name': 'BotBuildTests', 'descr': 'Software-layer bot', 'hostnames': ['.*'], 'modules_system': 'lmod', From cee4ab62308a33a59b0837b33707870d2a2d2c6c Mon Sep 17 00:00:00 2001 From: torri Date: Thu, 8 Feb 2024 14:33:50 +0100 Subject: [PATCH 454/698] {2023.06}{GCCcore/12.3.0} BWA 0.7.17.20220923 --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml index b0205f8a85..cbffb4b2b6 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml @@ -49,3 +49,6 @@ easyconfigs: - CDO-2.2.2-gompi-2023a.eb: options: from-pr: 19735 + - BWA-0.7.17.20220923-GCCcore-12.3.0.eb: + options: + from-pr: 19820 From ce24e6d6de196ca191371b186b449b7a9d4aa5c9 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Thu, 8 Feb 2024 17:50:39 +0100 Subject: [PATCH 455/698] Pick more meaningful name for SLURM variable, namely SLURM_OUTPUT_FOUND --- bot/check-build.sh | 22 +++++++++++----------- bot/check-test.sh | 18 +++++++++--------- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/bot/check-build.sh b/bot/check-build.sh index ec1ca56bba..42dca46a08 100755 --- a/bot/check-build.sh +++ b/bot/check-build.sh @@ -95,18 +95,18 @@ job_dir=${PWD} [[ ${VERBOSE} -ne 0 ]] && echo ">> analysing job in directory ${job_dir}" -job_out="slurm-${SLURM_JOB_ID}.out" +job_out="slurm-${SLURM_OUTPUT_FOUND_JOB_ID}.out" [[ ${VERBOSE} -ne 0 ]] && echo ">> searching for job output file(s) matching '"${job_out}"'" if [[ -f ${job_out} ]]; then - SLURM=1 + SLURM_OUTPUT_FOUND=1 [[ ${VERBOSE} -ne 0 ]] && echo " found slurm output file '"${job_out}"'" else - SLURM=0 + SLURM_OUTPUT_FOUND=0 [[ ${VERBOSE} -ne 0 ]] && echo " Slurm output file '"${job_out}"' NOT found" fi ERROR=-1 -if [[ ${SLURM} -eq 1 ]]; then +if [[ ${SLURM_OUTPUT_FOUND} -eq 1 ]]; then GP_error='ERROR: ' grep_out=$(grep -v "^>> searching for " ${job_dir}/${job_out} | grep "${GP_error}") [[ $? -eq 0 ]] && ERROR=1 || ERROR=0 @@ -116,7 +116,7 @@ if [[ ${SLURM} -eq 1 ]]; then fi FAILED=-1 -if [[ ${SLURM} -eq 1 ]]; then +if [[ ${SLURM_OUTPUT_FOUND} -eq 1 ]]; then GP_failed='FAILED: ' grep_out=$(grep -v "^>> searching for " ${job_dir}/${job_out} | grep "${GP_failed}") [[ $? -eq 0 ]] && FAILED=1 || FAILED=0 @@ -126,7 +126,7 @@ if [[ ${SLURM} -eq 1 ]]; then fi MISSING=-1 -if [[ ${SLURM} -eq 1 ]]; then +if [[ ${SLURM_OUTPUT_FOUND} -eq 1 ]]; then GP_req_missing=' required modules missing:' grep_out=$(grep -v "^>> searching for " ${job_dir}/${job_out} | grep "${GP_req_missing}") [[ $? -eq 0 ]] && MISSING=1 || MISSING=0 @@ -136,7 +136,7 @@ if [[ ${SLURM} -eq 1 ]]; then fi NO_MISSING=-1 -if [[ ${SLURM} -eq 1 ]]; then +if [[ ${SLURM_OUTPUT_FOUND} -eq 1 ]]; then GP_no_missing='No missing installations' grep_out=$(grep -v "^>> searching for " ${job_dir}/${job_out} | grep "${GP_no_missing}") [[ $? -eq 0 ]] && NO_MISSING=1 || NO_MISSING=0 @@ -147,7 +147,7 @@ fi TGZ=-1 TARBALL= -if [[ ${SLURM} -eq 1 ]]; then +if [[ ${SLURM_OUTPUT_FOUND} -eq 1 ]]; then GP_tgz_created="\.tar\.gz created!" grep_out=$(grep -v "^>> searching for " ${job_dir}/${job_out} | grep "${GP_tgz_created}" | sort -u) if [[ $? -eq 0 ]]; then @@ -169,9 +169,9 @@ fi [[ ${VERBOSE} -ne 0 ]] && echo " NO_MISSING.: $([[ $NO_MISSING -eq 1 ]] && echo 'yes' || echo 'no') (yes)" [[ ${VERBOSE} -ne 0 ]] && echo " TGZ_CREATED: $([[ $TGZ -eq 1 ]] && echo 'yes' || echo 'no') (yes)" -job_result_file=_bot_job${SLURM_JOB_ID}.result +job_result_file=_bot_job${SLURM_OUTPUT_FOUND_JOB_ID}.result -if [[ ${SLURM} -eq 1 ]] && \ +if [[ ${SLURM_OUTPUT_FOUND} -eq 1 ]] && \ [[ ${ERROR} -eq 0 ]] && \ [[ ${FAILED} -eq 0 ]] && \ [[ ${MISSING} -eq 0 ]] && \ @@ -340,7 +340,7 @@ CoDeList="" success_msg="job output file ${job_out}" failure_msg="no job output file ${job_out}" -CoDeList=${CoDeList}$(add_detail ${SLURM} 1 "${success_msg}" "${failure_msg}") +CoDeList=${CoDeList}$(add_detail ${SLURM_OUTPUT_FOUND} 1 "${success_msg}" "${failure_msg}") success_msg="no message matching ${GP_error}" failure_msg="found message matching ${GP_error}" diff --git a/bot/check-test.sh b/bot/check-test.sh index 39901f0691..549afd2f65 100755 --- a/bot/check-test.sh +++ b/bot/check-test.sh @@ -10,16 +10,16 @@ # license: GPLv2 # job_dir=${PWD} -job_out="slurm-${SLURM_JOB_ID}.out" -job_test_result_file="_bot_job${SLURM_JOB_ID}.test" +job_out="slurm-${SLURM_OUTPUT_FOUND_JOB_ID}.out" +job_test_result_file="_bot_job${SLURM_OUTPUT_FOUND_JOB_ID}.test" # Check that job output file is found [[ ${VERBOSE} -ne 0 ]] && echo ">> searching for job output file(s) matching '"${job_out}"'" if [[ -f ${job_out} ]]; then - SLURM=1 + SLURM_OUTPUT_FOUND=1 [[ ${VERBOSE} -ne 0 ]] && echo " found slurm output file '"${job_out}"'" else - SLURM=0 + SLURM_OUTPUT_FOUND=0 [[ ${VERBOSE} -ne 0 ]] && echo " Slurm output file '"${job_out}"' NOT found" fi @@ -41,7 +41,7 @@ fi # We will grep for the last and final line, since this reflects the overall result # Specifically, we grep for FAILED, since this is also what we print if a step in the test script itself fails FAILED=-1 -if [[ ${SLURM} -eq 1 ]]; then +if [[ ${SLURM_OUTPUT_FOUND} -eq 1 ]]; then GP_failed='\[.*FAILED.*\].*Ran .* test case' grep_reframe_failed=$(grep -v "^>> searching for " ${job_dir}/${job_out} | grep "${GP_failed}") [[ $? -eq 0 ]] && FAILED=1 || FAILED=0 @@ -53,7 +53,7 @@ fi # Here, we grep for 'ERROR:', which is printed if a fatal_error is encountered when executing the test step # I.e. this is an error in execution of the run_tests.sh itself, NOT in running the actual tests ERROR=-1 -if [[ ${SLURM} -eq 1 ]]; then +if [[ ${SLURM_OUTPUT_FOUND} -eq 1 ]]; then GP_error='ERROR: ' grep_out=$(grep -v "^>> searching for " ${job_dir}/${job_out} | grep "${GP_error}") [[ $? -eq 0 ]] && ERROR=1 || ERROR=0 @@ -64,7 +64,7 @@ fi SUCCESS=-1 # Grep for the success pattern, so we can report the amount of tests run -if [[ ${SLURM} -eq 1 ]]; then +if [[ ${SLURM_OUTPUT_FOUND} -eq 1 ]]; then GP_success='\[.*PASSED.*\].*Ran .* test case' grep_reframe_success=$(grep -v "^>> searching for " ${job_dir}/${job_out} | grep "${GP_success}") [[ $? -eq 0 ]] && SUCCESS=1 || SUCCESS=0 @@ -80,7 +80,7 @@ else fi echo "[TEST]" > ${job_test_result_file} -if [[ ${SLURM} -eq 0 ]]; then +if [[ ${SLURM_OUTPUT_FOUND} -eq 0 ]]; then summary=":cry: FAILURE" reason="Job output file not found, cannot check test results." status="FAILURE" @@ -182,7 +182,7 @@ CoDeList="" success_msg="job output file ${job_out}" failure_msg="no job output file ${job_out}" -CoDeList=${CoDeList}$(add_detail ${SLURM} 1 "${success_msg}" "${failure_msg}") +CoDeList=${CoDeList}$(add_detail ${SLURM_OUTPUT_FOUND} 1 "${success_msg}" "${failure_msg}") success_msg="no message matching ${GP_error}" failure_msg="found message matching ${GP_error}" From 9881c2ad5f93c617c075e8df81d770033ec2a121 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Thu, 8 Feb 2024 17:51:36 +0100 Subject: [PATCH 456/698] Correct erroneous status --- bot/check-test.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bot/check-test.sh b/bot/check-test.sh index 549afd2f65..9724f45832 100755 --- a/bot/check-test.sh +++ b/bot/check-test.sh @@ -103,7 +103,7 @@ elif [[ ${ERROR} -eq 1 ]]; then else summary=":grin: FAILURE" reason="Failed for unknown reason" - status="SUCCESS" + status="FAILURE" fi From 1446055cb5cd4306d61809c67b5dcda4ce930c8b Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Thu, 8 Feb 2024 17:53:09 +0100 Subject: [PATCH 457/698] Rename CoDeList variable to comment_details_list --- bot/check-build.sh | 18 +++++++++--------- bot/check-test.sh | 18 +++++++++--------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/bot/check-build.sh b/bot/check-build.sh index 42dca46a08..584d4ff828 100755 --- a/bot/check-build.sh +++ b/bot/check-build.sh @@ -334,35 +334,35 @@ echo -n "comment_description = " >> ${job_result_file} comment_summary="${comment_summary_fmt/__SUMMARY__/${summary}}" -# first construct comment_details_list, abbreviated CoDeList +# first construct comment_details_list, abbreviated comment_details_list # then use it to set comment_details -CoDeList="" +comment_details_list="" success_msg="job output file ${job_out}" failure_msg="no job output file ${job_out}" -CoDeList=${CoDeList}$(add_detail ${SLURM_OUTPUT_FOUND} 1 "${success_msg}" "${failure_msg}") +comment_details_list=${comment_details_list}$(add_detail ${SLURM_OUTPUT_FOUND} 1 "${success_msg}" "${failure_msg}") success_msg="no message matching ${GP_error}" failure_msg="found message matching ${GP_error}" -CoDeList=${CoDeList}$(add_detail ${ERROR} 0 "${success_msg}" "${failure_msg}") +comment_details_list=${comment_details_list}$(add_detail ${ERROR} 0 "${success_msg}" "${failure_msg}") success_msg="no message matching ${GP_failed}" failure_msg="found message matching ${GP_failed}" -CoDeList=${CoDeList}$(add_detail ${FAILED} 0 "${success_msg}" "${failure_msg}") +comment_details_list=${comment_details_list}$(add_detail ${FAILED} 0 "${success_msg}" "${failure_msg}") success_msg="no message matching ${GP_req_missing}" failure_msg="found message matching ${GP_req_missing}" -CoDeList=${CoDeList}$(add_detail ${MISSING} 0 "${success_msg}" "${failure_msg}") +comment_details_list=${comment_details_list}$(add_detail ${MISSING} 0 "${success_msg}" "${failure_msg}") success_msg="found message(s) matching ${GP_no_missing}" failure_msg="no message matching ${GP_no_missing}" -CoDeList=${CoDeList}$(add_detail ${NO_MISSING} 1 "${success_msg}" "${failure_msg}") +comment_details_list=${comment_details_list}$(add_detail ${NO_MISSING} 1 "${success_msg}" "${failure_msg}") success_msg="found message matching ${GP_tgz_created}" failure_msg="no message matching ${GP_tgz_created}" -CoDeList=${CoDeList}$(add_detail ${TGZ} 1 "${success_msg}" "${failure_msg}") +comment_details_list=${comment_details_list}$(add_detail ${TGZ} 1 "${success_msg}" "${failure_msg}") -comment_details="${comment_details_fmt/__DETAILS_LIST__/${CoDeList}}" +comment_details="${comment_details_fmt/__DETAILS_LIST__/${comment_details_list}}" # first construct comment_artefacts_list, abbreviated CoArList diff --git a/bot/check-test.sh b/bot/check-test.sh index 9724f45832..fe1fcfe85d 100755 --- a/bot/check-test.sh +++ b/bot/check-test.sh @@ -176,37 +176,37 @@ function add_detail() { fi } -# first construct comment_details_list, abbreviated CoDeList +# first construct comment_details_list, abbreviated comment_details_list # then use it to set comment_details -CoDeList="" +comment_details_list="" success_msg="job output file ${job_out}" failure_msg="no job output file ${job_out}" -CoDeList=${CoDeList}$(add_detail ${SLURM_OUTPUT_FOUND} 1 "${success_msg}" "${failure_msg}") +comment_details_list=${comment_details_list}$(add_detail ${SLURM_OUTPUT_FOUND} 1 "${success_msg}" "${failure_msg}") success_msg="no message matching ${GP_error}" failure_msg="found message matching ${GP_error}" -CoDeList=${CoDeList}$(add_detail ${ERROR} 0 "${success_msg}" "${failure_msg}") +comment_details_list=${comment_details_list}$(add_detail ${ERROR} 0 "${success_msg}" "${failure_msg}") success_msg="no message matching ""${GP_failed}""" failure_msg="found message matching ""${GP_failed}""" -CoDeList=${CoDeList}$(add_detail ${FAILED} 0 "${success_msg}" "${failure_msg}") +comment_details_list=${comment_details_list}$(add_detail ${FAILED} 0 "${success_msg}" "${failure_msg}") # Should not be needed for testing, I think? Maybe for loading ReFrame module... # success_msg="no message matching ${GP_req_missing}" # failure_msg="found message matching ${GP_req_missing}" -# CoDeList=${CoDeList}$(add_detail ${MISSING} 0 "${success_msg}" "${failure_msg}") +# comment_details_list=${comment_details_list}$(add_detail ${MISSING} 0 "${success_msg}" "${failure_msg}") # # success_msg="found message(s) matching ${GP_no_missing}" # failure_msg="no message matching ${GP_no_missing}" -# CoDeList=${CoDeList}$(add_detail ${NO_MISSING} 1 "${success_msg}" "${failure_msg}") +# comment_details_list=${comment_details_list}$(add_detail ${NO_MISSING} 1 "${success_msg}" "${failure_msg}") # # success_msg="found message matching ${GP_tgz_created}" # failure_msg="no message matching ${GP_tgz_created}" -# CoDeList=${CoDeList}$(add_detail ${TGZ} 1 "${success_msg}" "${failure_msg}") +# comment_details_list=${comment_details_list}$(add_detail ${TGZ} 1 "${success_msg}" "${failure_msg}") comment_details_fmt="
    _Details_
    __DETAILS_LIST__
    " -comment_details="${comment_details_fmt/__DETAILS_LIST__/${CoDeList}}" +comment_details="${comment_details_fmt/__DETAILS_LIST__/${comment_details_list}}" comment_description=${comment_description/__DETAILS_FMT__/${comment_details}} # Actually writing the comment description to the result file From f80c0eb42f891c686cd1818ccbfc353e8bb29f05 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Thu, 8 Feb 2024 17:54:00 +0100 Subject: [PATCH 458/698] Remove commented section, it is not relevant --- bot/check-test.sh | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/bot/check-test.sh b/bot/check-test.sh index fe1fcfe85d..9e7a524607 100755 --- a/bot/check-test.sh +++ b/bot/check-test.sh @@ -192,19 +192,6 @@ success_msg="no message matching ""${GP_failed}""" failure_msg="found message matching ""${GP_failed}""" comment_details_list=${comment_details_list}$(add_detail ${FAILED} 0 "${success_msg}" "${failure_msg}") -# Should not be needed for testing, I think? Maybe for loading ReFrame module... -# success_msg="no message matching ${GP_req_missing}" -# failure_msg="found message matching ${GP_req_missing}" -# comment_details_list=${comment_details_list}$(add_detail ${MISSING} 0 "${success_msg}" "${failure_msg}") -# -# success_msg="found message(s) matching ${GP_no_missing}" -# failure_msg="no message matching ${GP_no_missing}" -# comment_details_list=${comment_details_list}$(add_detail ${NO_MISSING} 1 "${success_msg}" "${failure_msg}") -# -# success_msg="found message matching ${GP_tgz_created}" -# failure_msg="no message matching ${GP_tgz_created}" -# comment_details_list=${comment_details_list}$(add_detail ${TGZ} 1 "${success_msg}" "${failure_msg}") - comment_details_fmt="
    _Details_
    __DETAILS_LIST__
    " comment_details="${comment_details_fmt/__DETAILS_LIST__/${comment_details_list}}" comment_description=${comment_description/__DETAILS_FMT__/${comment_details}} From ff5baace136c589becaf42adab32b4a0eed7afc6 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen <33718780+casparvl@users.noreply.github.com> Date: Thu, 8 Feb 2024 17:57:36 +0100 Subject: [PATCH 459/698] Update run_tests.sh Avoid a one-line script (if possible) Co-authored-by: Kenneth Hoste --- run_tests.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/run_tests.sh b/run_tests.sh index bcca1ee417..5e9fcb543d 100755 --- a/run_tests.sh +++ b/run_tests.sh @@ -9,5 +9,5 @@ source ${base_dir}/init/eessi_defaults # TODO: in the future we may implement this as a light first check. # Run the test suite -./run_in_compat_layer_env.sh ./clone_eessi_test_suite.sh +./run_in_compat_layer_env.sh "git clone https://github.com/EESSI/test-suite EESSI-test-suite" ./test_suite.sh From 4adae1838edd1146d1a4a8c4322bffeb5e49db64 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Thu, 8 Feb 2024 18:42:47 +0100 Subject: [PATCH 460/698] Fix mistake in replacing SLURM with SLURM_OUTPUT_FOUND --- bot/check-build.sh | 4 ++-- bot/check-test.sh | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/bot/check-build.sh b/bot/check-build.sh index 584d4ff828..1b46652049 100755 --- a/bot/check-build.sh +++ b/bot/check-build.sh @@ -95,7 +95,7 @@ job_dir=${PWD} [[ ${VERBOSE} -ne 0 ]] && echo ">> analysing job in directory ${job_dir}" -job_out="slurm-${SLURM_OUTPUT_FOUND_JOB_ID}.out" +job_out="slurm-${SLURM_JOB_ID}.out" [[ ${VERBOSE} -ne 0 ]] && echo ">> searching for job output file(s) matching '"${job_out}"'" if [[ -f ${job_out} ]]; then SLURM_OUTPUT_FOUND=1 @@ -169,7 +169,7 @@ fi [[ ${VERBOSE} -ne 0 ]] && echo " NO_MISSING.: $([[ $NO_MISSING -eq 1 ]] && echo 'yes' || echo 'no') (yes)" [[ ${VERBOSE} -ne 0 ]] && echo " TGZ_CREATED: $([[ $TGZ -eq 1 ]] && echo 'yes' || echo 'no') (yes)" -job_result_file=_bot_job${SLURM_OUTPUT_FOUND_JOB_ID}.result +job_result_file=_bot_job${SLURM_JOB_ID}.result if [[ ${SLURM_OUTPUT_FOUND} -eq 1 ]] && \ [[ ${ERROR} -eq 0 ]] && \ diff --git a/bot/check-test.sh b/bot/check-test.sh index 9e7a524607..faf6e440fa 100755 --- a/bot/check-test.sh +++ b/bot/check-test.sh @@ -10,8 +10,8 @@ # license: GPLv2 # job_dir=${PWD} -job_out="slurm-${SLURM_OUTPUT_FOUND_JOB_ID}.out" -job_test_result_file="_bot_job${SLURM_OUTPUT_FOUND_JOB_ID}.test" +job_out="slurm-${SLURM_JOB_ID}.out" +job_test_result_file="_bot_job${SLURM__JOB_ID}.test" # Check that job output file is found [[ ${VERBOSE} -ne 0 ]] && echo ">> searching for job output file(s) matching '"${job_out}"'" From 9e6955f53e70d3848ca2199756150993c36212ec Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Thu, 8 Feb 2024 18:52:44 +0100 Subject: [PATCH 461/698] Change name of the template for the ReFrame config file to make clear it is a template. Then, alter the sed commands so that they output to a new file: the actual config file --- reframe_config_bot.py => reframe_config_bot.py.tmpl | 0 test_suite.sh | 9 +++++---- 2 files changed, 5 insertions(+), 4 deletions(-) rename reframe_config_bot.py => reframe_config_bot.py.tmpl (100%) diff --git a/reframe_config_bot.py b/reframe_config_bot.py.tmpl similarity index 100% rename from reframe_config_bot.py rename to reframe_config_bot.py.tmpl diff --git a/test_suite.sh b/test_suite.sh index 99643c42b8..b3884c3b81 100755 --- a/test_suite.sh +++ b/test_suite.sh @@ -161,6 +161,7 @@ fi # Configure ReFrame export RFM_CONFIG_FILES=$TOPDIR/reframe_config_bot.py +export RFM_CONFIG_FILE_TEMPLATE=$TOPDIR/reframe_config_bot.py.tmpl export RFM_CHECK_SEARCH_PATH=$TESTSUITEPREFIX/eessi/testsuite/tests export RFM_CHECK_SEARCH_RECURSIVE=1 export RFM_PREFIX=$PWD/reframe_runs @@ -190,10 +191,10 @@ if [[ "${cpuinfo}" =~ (Core\(s\) per socket:[^0-9]*([0-9]+)) ]]; then else fatal_error "Failed to get the number of cores per socket for the current test hardware with lscpu." fi -sed -i "s/__NUM_CPUS__/${cpu_count}/g" $RFM_CONFIG_FILES -sed -i "s/__NUM_SOCKETS__/${socket_count}/g" $RFM_CONFIG_FILES -sed -i "s/__NUM_CPUS_PER_CORE__/${threads_per_core}/g" $RFM_CONFIG_FILES -sed -i "s/__NUM_CPUS_PER_SOCKET__/${cores_per_socket}/g" $RFM_CONFIG_FILES +sed "s/__NUM_CPUS__/${cpu_count}/g" $RFM_CONFIG_FILE_TEMPLATE > $RFM_CONFIG_FILES +sed "s/__NUM_SOCKETS__/${socket_count}/g" $RFM_CONFIG_FILE_TEMPLATE > $RFM_CONFIG_FILES +sed "s/__NUM_CPUS_PER_CORE__/${threads_per_core}/g" $RFM_CONFIG_FILE_TEMPLATE > $RFM_CONFIG_FILES +sed "s/__NUM_CPUS_PER_SOCKET__/${cores_per_socket}/g" $RFM_CONFIG_FILE_TEMPLATE > $RFM_CONFIG_FILES # Check we can run reframe reframe --version From 08a7fd8eaa64dce298624e1d4f6054d2938a7fcc Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Thu, 8 Feb 2024 18:55:20 +0100 Subject: [PATCH 462/698] Fix typo in variable --- bot/check-test.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bot/check-test.sh b/bot/check-test.sh index faf6e440fa..ef52206346 100755 --- a/bot/check-test.sh +++ b/bot/check-test.sh @@ -11,7 +11,7 @@ # job_dir=${PWD} job_out="slurm-${SLURM_JOB_ID}.out" -job_test_result_file="_bot_job${SLURM__JOB_ID}.test" +job_test_result_file="_bot_job${SLURM_JOB_ID}.test" # Check that job output file is found [[ ${VERBOSE} -ne 0 ]] && echo ">> searching for job output file(s) matching '"${job_out}"'" From 8b5bde5413553c03f58ce788ef03e78ae87f343b Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Thu, 8 Feb 2024 18:56:07 +0100 Subject: [PATCH 463/698] No longer needed --- clone_eessi_test_suite.sh | 1 - 1 file changed, 1 deletion(-) delete mode 100755 clone_eessi_test_suite.sh diff --git a/clone_eessi_test_suite.sh b/clone_eessi_test_suite.sh deleted file mode 100755 index f7684c8cfd..0000000000 --- a/clone_eessi_test_suite.sh +++ /dev/null @@ -1 +0,0 @@ -git clone https://github.com/EESSI/test-suite EESSI-test-suite From 5d383eb8bc4c729cfa85d1aeae9ea10d82000c5c Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Thu, 8 Feb 2024 19:03:29 +0100 Subject: [PATCH 464/698] Added header, rephrased some comments --- run_tests.sh | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/run_tests.sh b/run_tests.sh index 5e9fcb543d..0c51a14807 100755 --- a/run_tests.sh +++ b/run_tests.sh @@ -1,13 +1,24 @@ #!/bin/bash +# +# This script gets invoked by the bot/test.sh script to run within the EESSI container +# Thus, this script defines all of the steps that should run for the tests. +# Note that, unless we have good reason, we don't run test steps in the prefix environment: +# users also typically don't run in the prefix environment, and we want to check if the +# software works well in that specific setup. +# +# This script is part of the EESSI software layer, see +# https://github.com/EESSI/software-layer.git +# +# author: Caspar van Leeuwe (@casparvl) +# +# license: GPLv2 +# + base_dir=$(dirname $(realpath $0)) source ${base_dir}/init/eessi_defaults -# Note: for these tests, we _don't_ run in the compat layer env -# These tests should mimic what users do, and they are typically not in a prefix environment - -# Run eb --sanity-check-only on changed easyconfigs -# TODO: in the future we may implement this as a light first check. +# Git clone has to be run in compat layer, to make the git command available +./run_in_compat_layer_env.sh "git clone https://github.com/EESSI/test-suite EESSI-test-suite" # Run the test suite -./run_in_compat_layer_env.sh "git clone https://github.com/EESSI/test-suite EESSI-test-suite" ./test_suite.sh From cdf79712184e89a31afaaff3880fc7cf0387b2e5 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Thu, 8 Feb 2024 19:13:11 +0100 Subject: [PATCH 465/698] Fix headers --- run_tests.sh | 2 +- test_suite.sh | 13 +++++++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/run_tests.sh b/run_tests.sh index 0c51a14807..de7fd8c2e1 100755 --- a/run_tests.sh +++ b/run_tests.sh @@ -9,7 +9,7 @@ # This script is part of the EESSI software layer, see # https://github.com/EESSI/software-layer.git # -# author: Caspar van Leeuwe (@casparvl) +# author: Caspar van Leeuwen (@casparvl) # # license: GPLv2 # diff --git a/test_suite.sh b/test_suite.sh index b3884c3b81..ffe8955f1e 100755 --- a/test_suite.sh +++ b/test_suite.sh @@ -1,9 +1,14 @@ #!/bin/bash # -# Run sanity check for all requested modules (and built dependencies)? -# get ec from diff -# set up EasyBuild -# run `eb --sanity-only ec` +# This script creates a ReFrame config file from a template, in which CPU properties get replaced +# based on where this script is run (typically: a build node). Then, it runs the EESSI test suite. +# +# This script is part of the EESSI software layer, see +# https://github.com/EESSI/software-layer.git +# +# author: Caspar van Leeuwen (@casparvl) +# +# license: GPLv2 display_help() { echo "usage: $0 [OPTIONS]" From 79a9ad320aec47ac368ed96f72e0f59a0cfbe9f5 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Thu, 8 Feb 2024 19:16:10 +0100 Subject: [PATCH 466/698] Load default ReFrame version --- test_suite.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test_suite.sh b/test_suite.sh index ffe8955f1e..1f6d8ae44d 100755 --- a/test_suite.sh +++ b/test_suite.sh @@ -129,11 +129,11 @@ else echo_green ">> MODULEPATH set up: ${MODULEPATH}" fi -# TODO: this should not be hardcoded. Ideally, we put some logic in place to discover the newest version -# of the ReFrame module available in the current environment -module load ReFrame/4.3.3 +# Load the ReFrame module +# Currently, we load the default version. Maybe we should somehow make this configurable in the future? +module load ReFrame if [[ $? -eq 0 ]]; then - echo_green ">> Loaded ReFrame/4.3.3" + echo_green ">> Loaded ReFrame module" else fatal_error "Failed to load the ReFrame module" fi From 2f280e4304b520de295fdb408218e3125b153853 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Thu, 8 Feb 2024 19:21:24 +0100 Subject: [PATCH 467/698] Point to docs for ReFrame config --- test_suite.sh | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/test_suite.sh b/test_suite.sh index 1f6d8ae44d..d2403b91d8 100755 --- a/test_suite.sh +++ b/test_suite.sh @@ -130,7 +130,7 @@ else fi # Load the ReFrame module -# Currently, we load the default version. Maybe we should somehow make this configurable in the future? + Currently, we load the default version. Maybe we should somehow make this configurable in the future? module load ReFrame if [[ $? -eq 0 ]]; then echo_green ">> Loaded ReFrame module" @@ -139,15 +139,16 @@ else fi # Check ReFrame came with the hpctestlib and we can import it -python3 -c 'import hpctestlib.sciapps.gromacs' +reframe_import="hpctestlib.sciapps.gromacs" +python3 -c "import ${reframe_import}" if [[ $? -eq 0 ]]; then - echo_green "Succesfully found and imported hpctestlib.sciapps.gromas" + echo_green "Succesfully found and imported ${reframe_import}" else - fatal_error "Failed to load hpctestlib" + fatal_error "Failed to import ${reframe_import}" fi -# Cloning should already be done by clone_eessi_test_suite.sh, which runs in compat layer to have 'git' available -# git clone https://github.com/EESSI/test-suite EESSI-test-suite +# Cloning should already be done in run_tests.sh before test_suite.sh is invoked +# Check if that succeeded export TESTSUITEPREFIX=$PWD/EESSI-test-suite if [ -d $TESTSUITEPREFIX ]; then echo_green "Clone of the test suite $TESTSUITEPREFIX available, OK!" @@ -157,14 +158,15 @@ fi export PYTHONPATH=$TESTSUITEPREFIX:$PYTHONPATH # Check that we can import from the testsuite -python3 -c 'import eessi.testsuite' +testsuite_import="eessi.testsuite" +python3 -c "import ${testsuite_import}" if [[ $? -eq 0 ]]; then - echo_green "Succesfully found and imported eessi.testsuite" + echo_green "Succesfully found and imported ${testsuite_import}" else - fatal_error "Failed to import from eessi.testsuite in Python" + fatal_error "Failed to import ${testsuite_import}" fi -# Configure ReFrame +# Configure ReFrame, see https://www.eessi.io/docs/test-suite/installation-configuration export RFM_CONFIG_FILES=$TOPDIR/reframe_config_bot.py export RFM_CONFIG_FILE_TEMPLATE=$TOPDIR/reframe_config_bot.py.tmpl export RFM_CHECK_SEARCH_PATH=$TESTSUITEPREFIX/eessi/testsuite/tests From e5d60b9c6bd2b3a39a32454a9ee6707320693c11 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Thu, 8 Feb 2024 19:26:17 +0100 Subject: [PATCH 468/698] Fix silly mistake: I was overwriting the ReFrame config file with every sed call --- test_suite.sh | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/test_suite.sh b/test_suite.sh index d2403b91d8..755102e6bc 100755 --- a/test_suite.sh +++ b/test_suite.sh @@ -198,17 +198,18 @@ if [[ "${cpuinfo}" =~ (Core\(s\) per socket:[^0-9]*([0-9]+)) ]]; then else fatal_error "Failed to get the number of cores per socket for the current test hardware with lscpu." fi -sed "s/__NUM_CPUS__/${cpu_count}/g" $RFM_CONFIG_FILE_TEMPLATE > $RFM_CONFIG_FILES -sed "s/__NUM_SOCKETS__/${socket_count}/g" $RFM_CONFIG_FILE_TEMPLATE > $RFM_CONFIG_FILES -sed "s/__NUM_CPUS_PER_CORE__/${threads_per_core}/g" $RFM_CONFIG_FILE_TEMPLATE > $RFM_CONFIG_FILES -sed "s/__NUM_CPUS_PER_SOCKET__/${cores_per_socket}/g" $RFM_CONFIG_FILE_TEMPLATE > $RFM_CONFIG_FILES +cp ${RFM_CONFIG_FILE_TEMPLATE} ${RFM_CONFIG_FILES} +sed -i "s/__NUM_CPUS__/${cpu_count}/g" $RFM_CONFIG_FILES +sed -i "s/__NUM_SOCKETS__/${socket_count}/g" $RFM_CONFIG_FILES +sed -i "s/__NUM_CPUS_PER_CORE__/${threads_per_core}/g" $RFM_CONFIG_FILES +sed -i "s/__NUM_CPUS_PER_SOCKET__/${cores_per_socket}/g" $RFM_CONFIG_FILES # Check we can run reframe reframe --version if [[ $? -eq 0 ]]; then - echo_green "Succesfully ran reframe --version" + echo_green "Succesfully ran 'reframe --version'" else - fatal_error "Failed to run ReFrame --version" + fatal_error "Failed to run 'reframe --version'" fi # List the tests we want to run @@ -224,7 +225,8 @@ fi # Run all tests echo "Running tests: reframe ${REFRAME_ARGS} --run" reframe ${REFRAME_ARGS} --run -if [[ $? -eq 0 ]]; then +reframe_exit_code=$? +if [[ ${reframe_exit_code} -eq 0 ]]; then echo_green "ReFrame runtime ran succesfully with command: reframe ${REFRAME_ARGS} --run." else fatal_error "ReFrame runtime failed to run with command: reframe ${REFRAME_ARGS} --run." @@ -233,4 +235,4 @@ fi echo ">> Cleaning up ${TMPDIR}..." rm -r ${TMPDIR} -exit 0 +exit ${reframe_exit_code} From b5c60ccfc483602eb6cebb9e1f580c9d99cd964b Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Thu, 8 Feb 2024 19:28:32 +0100 Subject: [PATCH 469/698] See if @boegel is correct and if we don't actually need ANY software change to have the bot run... --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml index 4c73b5887a..82190071ab 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml @@ -15,4 +15,3 @@ easyconfigs: options: from-pr: 19573 - scikit-learn-1.3.1-gfbf-2023a.eb - - patchelf-0.18.0-GCCcore-12.3.0.eb From f925c7f9eba3c07b57c5d9276e6d2d02a3ce3e1f Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 8 Feb 2024 19:50:43 +0100 Subject: [PATCH 470/698] rename BWA easyconfig in easystack file (uses '-' to separate version and datestamp) --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml index cbffb4b2b6..7244219dc3 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml @@ -49,6 +49,6 @@ easyconfigs: - CDO-2.2.2-gompi-2023a.eb: options: from-pr: 19735 - - BWA-0.7.17.20220923-GCCcore-12.3.0.eb: + - BWA-0.7.17-20220923-GCCcore-12.3.0.eb: options: from-pr: 19820 From 67232a17d0bd26debc9a584700b93ce3fc56cc16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Fri, 9 Feb 2024 16:14:13 +0100 Subject: [PATCH 471/698] add hook to exclude failing Highway tests on neoverse_v1 --- eb_hooks.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/eb_hooks.py b/eb_hooks.py index 7c52e24ff1..f2a60c1845 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -341,6 +341,15 @@ def pre_test_hook(self,*args, **kwargs): PRE_TEST_HOOKS[self.name](self, *args, **kwargs) +def pre_test_hook_exclude_failing_tests_Highway(self, *args, **kwargs): + """ + Pre-test hook for Highway: exclude failing TestAllShiftRightLanes/SVE tests on neoverse_v1 + cfr. https://github.com/google/highway/issues/1938 + """ + cpu_target = get_eessi_envvar('EESSI_SOFTWARE_SUBDIR') + if self.name == 'Highway' and self.version in ['1.0.3'] and cpu_target == CPU_TARGET_NEOVERSE_V1: + self.cfg['runtest'] += ' ARGS="-E TestAllShiftRightLanes/SVE"' + def pre_test_hook_ignore_failing_tests_ESPResSo(self, *args, **kwargs): """ Pre-test hook for ESPResSo: skip failing tests, tests frequently timeout due to known bugs in ESPResSo v4.2.1 @@ -556,6 +565,7 @@ def inject_gpu_property(ec): PRE_TEST_HOOKS = { 'ESPResSo': pre_test_hook_ignore_failing_tests_ESPResSo, 'FFTW.MPI': pre_test_hook_ignore_failing_tests_FFTWMPI, + 'Highway': pre_test_hook_exclude_failing_tests_Highway, 'SciPy-bundle': pre_test_hook_ignore_failing_tests_SciPybundle, } From 0d48dcabcf0360bedfaa49f2c5d711c65a08ab38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Fri, 9 Feb 2024 16:23:33 +0100 Subject: [PATCH 472/698] add extra blank line --- eb_hooks.py | 1 + 1 file changed, 1 insertion(+) diff --git a/eb_hooks.py b/eb_hooks.py index f2a60c1845..f2a9c83d77 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -350,6 +350,7 @@ def pre_test_hook_exclude_failing_tests_Highway(self, *args, **kwargs): if self.name == 'Highway' and self.version in ['1.0.3'] and cpu_target == CPU_TARGET_NEOVERSE_V1: self.cfg['runtest'] += ' ARGS="-E TestAllShiftRightLanes/SVE"' + def pre_test_hook_ignore_failing_tests_ESPResSo(self, *args, **kwargs): """ Pre-test hook for ESPResSo: skip failing tests, tests frequently timeout due to known bugs in ESPResSo v4.2.1 From 8b38c322f7e76974799d658a2b9b02e65e0ca7ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Fri, 9 Feb 2024 16:41:03 +0100 Subject: [PATCH 473/698] add known issue for Highway --- eessi-2023.06-known-issues.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/eessi-2023.06-known-issues.yml b/eessi-2023.06-known-issues.yml index 569a0d9f56..875757559e 100644 --- a/eessi-2023.06-known-issues.yml +++ b/eessi-2023.06-known-issues.yml @@ -16,6 +16,9 @@ - FFTW.MPI-3.3.10-gompi-2023b: - issue: https://github.com/EESSI/software-layer/issues/325 - info: "Flaky FFTW tests, random failures" + - Highway-1.0.3-GCCcore-12.2.0.eb: + - issue: https://github.com/EESSI/software-layer/issues/469 + - info: "failing SVE test due to wrong expected value" - netCDF-4.9.2-gompi-2023a.eb: - issue: https://github.com/EESSI/software-layer/issues/425 - info: "netCDF intermittent test failures" From 669e6e42e8a641011a7ff4a7f1c686128de461f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Fri, 9 Feb 2024 16:42:09 +0100 Subject: [PATCH 474/698] link to internal issue for Highway, and only exclude a single SVE test --- eb_hooks.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/eb_hooks.py b/eb_hooks.py index c7ef6de1b6..488c25c412 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -357,14 +357,14 @@ def pre_test_hook(self,*args, **kwargs): PRE_TEST_HOOKS[self.name](self, *args, **kwargs) -def pre_test_hook_exclude_failing_tests_Highway(self, *args, **kwargs): +def pre_test_hook_exclude_failing_test_Highway(self, *args, **kwargs): """ - Pre-test hook for Highway: exclude failing TestAllShiftRightLanes/SVE tests on neoverse_v1 - cfr. https://github.com/google/highway/issues/1938 + Pre-test hook for Highway: exclude failing TestAllShiftRightLanes/SVE_256 test on neoverse_v1 + cfr. https://github.com/EESSI/software-layer/issues/469 """ cpu_target = get_eessi_envvar('EESSI_SOFTWARE_SUBDIR') if self.name == 'Highway' and self.version in ['1.0.3'] and cpu_target == CPU_TARGET_NEOVERSE_V1: - self.cfg['runtest'] += ' ARGS="-E TestAllShiftRightLanes/SVE"' + self.cfg['runtest'] += ' ARGS="-E TestAllShiftRightLanes/SVE_256"' def pre_test_hook_ignore_failing_tests_ESPResSo(self, *args, **kwargs): @@ -604,7 +604,7 @@ def inject_gpu_property(ec): PRE_TEST_HOOKS = { 'ESPResSo': pre_test_hook_ignore_failing_tests_ESPResSo, 'FFTW.MPI': pre_test_hook_ignore_failing_tests_FFTWMPI, - 'Highway': pre_test_hook_exclude_failing_tests_Highway, + 'Highway': pre_test_hook_exclude_failing_test_Highway, 'SciPy-bundle': pre_test_hook_ignore_failing_tests_SciPybundle, 'netCDF': pre_test_hook_ignore_failing_tests_netCDF, 'PyTorch': pre_test_hook_increase_max_failed_tests_arm_PyTorch, From 7fc04d830d372abbebcf9ec3701e38d7b3fec4b8 Mon Sep 17 00:00:00 2001 From: Thomas Roeblitz Date: Sun, 11 Feb 2024 21:46:02 +0100 Subject: [PATCH 475/698] {2023.06}[foss/2022b] ImageMagick v7.1.0-53 --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2022b.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2022b.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2022b.yml index 9e92c79062..b8fddd02bb 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2022b.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2022b.yml @@ -1,3 +1,4 @@ easyconfigs: - SciPy-bundle-2023.02-gfbf-2022b.eb - GDAL-3.6.2-foss-2022b.eb + - ImageMagick-7.1.0-53-GCCcore-12.2.0.eb From 3336f29795e9b1aca48065f5bcb0e96de996d08f Mon Sep 17 00:00:00 2001 From: lara Date: Mon, 12 Feb 2024 16:17:47 +0100 Subject: [PATCH 476/698] {2023.06}[foss/2023a] LAMMPS 2Aug2023 --- .../2023.06/eessi-2023.06-eb-4.9.0-2023a.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml index 82190071ab..4c17a049fd 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml @@ -15,3 +15,9 @@ easyconfigs: options: from-pr: 19573 - scikit-learn-1.3.1-gfbf-2023a.eb + - LAMMPS-2Aug2023_update2-foss-2023a-kokkos.eb: + # see https://github.com/easybuilders/easybuild-easyconfigs/pull/19471 + # see https://github.com/easybuilders/easybuild-easyblocks/pull/3036 + options: + from-pr: 19471 + include-easyblocks-from-pr: 3036 From 0d0385271ca0b0bcf6aef755147e1ed53df64e0c Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Mon, 12 Feb 2024 21:33:55 +0100 Subject: [PATCH 477/698] add Lmod hook to set $OMPI_MCA_btl to '^smcuda' when loading OpenMPI module --- create_lmodrc.py | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/create_lmodrc.py b/create_lmodrc.py index 0e738a530e..bc69dd4396 100755 --- a/create_lmodrc.py +++ b/create_lmodrc.py @@ -94,7 +94,28 @@ end end +local function openmpi_load_hook(t) + -- disable smcuda BTL when loading OpenMPI module for aarch64/neoverse_v1, + -- to work around hang/crash due to bug in OpenMPI; + -- see https://gitlab.com/eessi/support/-/issues/41 + local frameStk = require("FrameStk"):singleton() + local mt = frameStk:mt() + local moduleName = string.match(t.modFullName, "(.-)/") + local cpuTarget = os.getenv("EESSI_SOFTWARE_SUBDIR") or "" + if (moduleName == "OpenMPI") and (cpuTarget == "aarch64/neoverse_v1") then + local msg = "Adding '^smcuda' to $OMPI_MCA_btl to work around bug in OpenMPI" + LmodMessage(msg .. " (see https://gitlab.com/eessi/support/-/issues/41)") + local ompiMcaBtl = os.getenv("OMPI_MCA_btl") + if ompiMcaBtl == nil then + setenv("OMPI_MCA_btl", "^smcuda") + else + setenv("OMPI_MCA_btl", ompiMcaBtl .. ",^smcuda") + end + end +end + hook.register("load", cuda_enabled_load_hook) +hook.register("load", openmpi_load_hook) """ def error(msg): From a721c4b5c1ab6b53c2338bed239a9a3c5299a388 Mon Sep 17 00:00:00 2001 From: ocaisa Date: Tue, 13 Feb 2024 17:10:59 +0100 Subject: [PATCH 478/698] Add snakemake 8.4.2 to foss/2023a --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml index 82190071ab..0a83e7be77 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml @@ -15,3 +15,6 @@ easyconfigs: options: from-pr: 19573 - scikit-learn-1.3.1-gfbf-2023a.eb + - snakemake-8.4.2-foss-2023a.eb: + options: + from-pr: 19646 From 69d6d2e227c6f2ceb0ad39068d6fe4a99d7fd24e Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Wed, 14 Feb 2024 14:55:14 +0100 Subject: [PATCH 479/698] Add escape character to star, so that the regex pattern prints correctly on GitHub in the report --- bot/check-test.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bot/check-test.sh b/bot/check-test.sh index ef52206346..bc5ba84101 100755 --- a/bot/check-test.sh +++ b/bot/check-test.sh @@ -188,6 +188,8 @@ success_msg="no message matching ${GP_error}" failure_msg="found message matching ${GP_error}" comment_details_list=${comment_details_list}$(add_detail ${ERROR} 0 "${success_msg}" "${failure_msg}") +# Add an escape character to every *, for it to be printed correctly in the comment on GitHub +GP_failed="${GP_failed//\*/\\*}" success_msg="no message matching ""${GP_failed}""" failure_msg="found message matching ""${GP_failed}""" comment_details_list=${comment_details_list}$(add_detail ${FAILED} 0 "${success_msg}" "${failure_msg}") From 8151ef15b47f7fdb88e646b0d5a3fd08c86c7c69 Mon Sep 17 00:00:00 2001 From: lara Date: Thu, 15 Feb 2024 11:15:19 +0100 Subject: [PATCH 480/698] add parse hook for LAMMPS CI + remove pre_configure_hook_LAMMPS_aarch64 see: https://github.com/easybuilders/easybuild-easyblocks/pull/3036 --- eb_hooks.py | 33 ++++++++++++++------------------- 1 file changed, 14 insertions(+), 19 deletions(-) diff --git a/eb_hooks.py b/eb_hooks.py index 488c25c412..c3ba03acfd 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -246,6 +246,19 @@ def parse_hook_ucx_eprefix(ec, eprefix): raise EasyBuildError("UCX-specific hook triggered for non-UCX easyconfig?!") +def parse_hook_lammps_remove_deps_for_CI_aarch64(ec, *args, **kwargs): + """ + Remove x86_64 specific dependencies for the CI to pass on aarch64 + """ + if ec.name == 'LAMMPS': + if ec.version == '2Aug2023_update2': + if os.getenv('EESSI_CPU_FAMILY') == 'aarch64': + ec['dependencies'].remove(('ScaFaCoS', '1.0.4')) + ec['dependencies'].remove(('tbb', '2021.11.0')) + else: + raise EasyBuildError("LAMMPS-specific hook triggered for non-LAMMPS easyconfig?!") + + def pre_configure_hook(self, *args, **kwargs): """Main pre-configure hook: trigger custom functions based on software name.""" if self.name in PRE_CONFIGURE_HOOKS: @@ -318,24 +331,6 @@ def pre_configure_hook_wrf_aarch64(self, *args, **kwargs): raise EasyBuildError("WRF-specific hook triggered for non-WRF easyconfig?!") -def pre_configure_hook_LAMMPS_aarch64(self, *args, **kwargs): - """ - pre-configure hook for LAMMPS: - - set kokkos_arch on Aarch64 - """ - - cpu_target = get_eessi_envvar('EESSI_SOFTWARE_SUBDIR') - if self.name == 'LAMMPS': - if self.version == '23Jun2022': - if get_cpu_architecture() == AARCH64: - if cpu_target == CPU_TARGET_AARCH64_GENERIC: - self.cfg['kokkos_arch'] = 'ARM80' - else: - self.cfg['kokkos_arch'] = 'ARM81' - else: - raise EasyBuildError("LAMMPS-specific hook triggered for non-LAMMPS easyconfig?!") - - def pre_configure_hook_atspi2core_filter_ld_library_path(self, *args, **kwargs): """ pre-configure hook for at-spi2-core: @@ -586,6 +581,7 @@ def inject_gpu_property(ec): 'pybind11': parse_hook_pybind11_replace_catch2, 'Qt5': parse_hook_qt5_check_qtwebengine_disable, 'UCX': parse_hook_ucx_eprefix, + 'LAMMPS': parse_hook_lammps_remove_deps_for_CI_aarch64, } POST_PREPARE_HOOKS = { @@ -597,7 +593,6 @@ def inject_gpu_property(ec): 'MetaBAT': pre_configure_hook_metabat_filtered_zlib_dep, 'OpenBLAS': pre_configure_hook_openblas_optarch_generic, 'WRF': pre_configure_hook_wrf_aarch64, - 'LAMMPS': pre_configure_hook_LAMMPS_aarch64, 'at-spi2-core': pre_configure_hook_atspi2core_filter_ld_library_path, } From 8491f9f090f5a55441904cd1d3b4c7ba5dacab4f Mon Sep 17 00:00:00 2001 From: Alan O'Cais Date: Thu, 15 Feb 2024 11:58:49 +0100 Subject: [PATCH 481/698] Always use LMOD_RC file, and make sure loading CUDA apps always works when building --- eessi_container.sh | 6 ++++++ init/eessi_environment_variables | 16 +++++++++------- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/eessi_container.sh b/eessi_container.sh index d6e9558202..143cbcc6c8 100755 --- a/eessi_container.sh +++ b/eessi_container.sh @@ -457,6 +457,12 @@ if [[ ${SETUP_NVIDIA} -eq 1 ]]; then mkdir -p ${EESSI_USR_LOCAL_CUDA} BIND_PATHS="${BIND_PATHS},${EESSI_VAR_LOG}:/var/log,${EESSI_USR_LOCAL_CUDA}:/usr/local/cuda" [[ ${VERBOSE} -eq 1 ]] && echo "BIND_PATHS=${BIND_PATHS}" + if [[ "${NVIDIA_MODE}" == "install" ]] ; then + # We need to "trick" our LMOD_RC file to allow us to load CUDA modules even without a CUDA driver + # (this works because we build within a container and the LMOD_RC recognises that) + touch ${EESSI_TMPDIR}/libcuda.so + export SINGULARITY_CONTAINLIBS="${EESSI_TMPDIR}/libcuda.so" + fi fi fi diff --git a/init/eessi_environment_variables b/init/eessi_environment_variables index af5222e7b9..e042e8575a 100644 --- a/init/eessi_environment_variables +++ b/init/eessi_environment_variables @@ -50,6 +50,15 @@ if [ -d $EESSI_PREFIX ]; then show_msg "Using ${EESSI_SOFTWARE_SUBDIR} as software subdirectory." export EESSI_SOFTWARE_PATH=$EESSI_PREFIX/software/$EESSI_OS_TYPE/$EESSI_SOFTWARE_SUBDIR + + # Configure our LMOD_RC file + export LMOD_RC="$EESSI_SOFTWARE_PATH/.lmod/lmodrc.lua" + if [ -f $LMOD_RC ]; then + show_msg "Found Lmod configuration file at $LMOD_RC" + else + error "Lmod configuration file not found at $LMOD_RC" + fi + if [ ! -z $EESSI_BASIC_ENV ]; then show_msg "Only setting up basic environment, so we're done" elif [ -d $EESSI_SOFTWARE_PATH ]; then @@ -76,13 +85,6 @@ if [ -d $EESSI_PREFIX ]; then false fi - export LMOD_RC="$EESSI_SOFTWARE_PATH/.lmod/lmodrc.lua" - if [ -f $LMOD_RC ]; then - show_msg "Found Lmod configuration file at $LMOD_RC" - else - error "Lmod configuration file not found at $LMOD_RC" - fi - else error "EESSI software layer at $EESSI_SOFTWARE_PATH not found!" fi From 2dd048e96cef85b203b76a9ca330c5c72813dbbc Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Thu, 15 Feb 2024 15:44:15 +0100 Subject: [PATCH 482/698] Add the list(SCALES.keys()) feature (though technically we could limit to singlenode already here...). Also, make sure color is not used for printing the ReFrame results, to avoid color-characters making it into the slurm output file --- reframe_config_bot.py.tmpl | 4 +++- test_suite.sh | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/reframe_config_bot.py.tmpl b/reframe_config_bot.py.tmpl index ad66a72041..b2f7916e79 100644 --- a/reframe_config_bot.py.tmpl +++ b/reframe_config_bot.py.tmpl @@ -19,7 +19,9 @@ site_configuration = { 'scheduler': 'local', 'launcher': 'mpirun', 'environs': ['default'], - 'features': [FEATURES[CPU]], + 'features': [ + FEATURES[CPU] + ] + list(SCALES.keys()), 'processor': { 'num_cpus': __NUM_CPUS__, 'num_sockets': __NUM_SOCKETS__, diff --git a/test_suite.sh b/test_suite.sh index 755102e6bc..f8c46ef764 100755 --- a/test_suite.sh +++ b/test_suite.sh @@ -213,7 +213,7 @@ else fi # List the tests we want to run -export REFRAME_ARGS='--tag CI --tag 1_node' +export REFRAME_ARGS='--tag CI --tag 1_node --nocolor' echo "Listing tests: reframe ${REFRAME_ARGS} --list" reframe ${REFRAME_ARGS} --list if [[ $? -eq 0 ]]; then From 0492b9e6d836ef75126ca5e8f613c7ad7487dc2b Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Thu, 15 Feb 2024 15:45:25 +0100 Subject: [PATCH 483/698] Try the original regex patterns, capturing spaces more specifically, now that we got rid of color characters --- bot/check-test.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bot/check-test.sh b/bot/check-test.sh index bc5ba84101..4b5f7575e5 100755 --- a/bot/check-test.sh +++ b/bot/check-test.sh @@ -42,7 +42,7 @@ fi # Specifically, we grep for FAILED, since this is also what we print if a step in the test script itself fails FAILED=-1 if [[ ${SLURM_OUTPUT_FOUND} -eq 1 ]]; then - GP_failed='\[.*FAILED.*\].*Ran .* test case' + GP_failed='\[\s*FAILED\s*\].*Ran .* test case' grep_reframe_failed=$(grep -v "^>> searching for " ${job_dir}/${job_out} | grep "${GP_failed}") [[ $? -eq 0 ]] && FAILED=1 || FAILED=0 # have to be careful to not add searched for pattern into slurm out file @@ -65,7 +65,7 @@ fi SUCCESS=-1 # Grep for the success pattern, so we can report the amount of tests run if [[ ${SLURM_OUTPUT_FOUND} -eq 1 ]]; then - GP_success='\[.*PASSED.*\].*Ran .* test case' + GP_success='\[\s*PASSED\s*\].*Ran .* test case' grep_reframe_success=$(grep -v "^>> searching for " ${job_dir}/${job_out} | grep "${GP_success}") [[ $? -eq 0 ]] && SUCCESS=1 || SUCCESS=0 # have to be careful to not add searched for pattern into slurm out file From 4b5228a2d7671ebfce15d22ca93e80bd92a38000 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 15 Feb 2024 19:35:46 +0100 Subject: [PATCH 484/698] {2023.06}[foss/2023a] matplotlib v3.7.2 + PyQt5 v5.15.10 --- .../2023.06/eessi-2023.06-eb-4.9.0-2023a.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml index c2b33ee91e..157a47a49e 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml @@ -24,3 +24,8 @@ easyconfigs: options: from-pr: 19471 include-easyblocks-from-pr: 3036 + - matplotlib-3.7.2-gfbf-2023a.eb + - PyQt5-5.15.10-GCCcore-12.3.0.eb: + # see https://github.com/easybuilders/easybuild-easyconfigs/pull/19554 + options: + from-pr: 19554 From 4ec7c704d4caedd7b680b3f20ceecd39eeae33b8 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 16 Feb 2024 07:29:00 +0100 Subject: [PATCH 485/698] fix hook for LAMMPS to filter out ScaFaCoS and tbb dependencies on aarch64/* --- eb_hooks.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/eb_hooks.py b/eb_hooks.py index c3ba03acfd..d29a837339 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -250,11 +250,15 @@ def parse_hook_lammps_remove_deps_for_CI_aarch64(ec, *args, **kwargs): """ Remove x86_64 specific dependencies for the CI to pass on aarch64 """ - if ec.name == 'LAMMPS': - if ec.version == '2Aug2023_update2': - if os.getenv('EESSI_CPU_FAMILY') == 'aarch64': - ec['dependencies'].remove(('ScaFaCoS', '1.0.4')) - ec['dependencies'].remove(('tbb', '2021.11.0')) + if ec.name == 'LAMMPS' and ec.version in ('2Aug2023_update2',): + if os.getenv('EESSI_CPU_FAMILY') == 'aarch64': + # ScaFaCoS and tbb are not compatible with aarch64/* CPU targets, + # so remove them as dependencies for LAMMPS (they're optional); + # see also https://github.com/easybuilders/easybuild-easyconfigs/pull/19164 + + # https://github.com/easybuilders/easybuild-easyconfigs/pull/19000; + # we need this hook because we check for missing installations for all CPU targets + # on an x86_64 VM in GitHub Actions (so condition based on ARCH in LAMMPS easyconfig is always true) + ec['dependencies'] = [dep for dep in ec['dependencies'] if dep[0] not in ('ScaFaCoS', 'tbb')] else: raise EasyBuildError("LAMMPS-specific hook triggered for non-LAMMPS easyconfig?!") From 0f6dc766c4770e160f193aac35be546094dc7c73 Mon Sep 17 00:00:00 2001 From: Pedro Santos Neves <10762799+Neves-P@users.noreply.github.com> Date: Fri, 16 Feb 2024 20:37:53 +0100 Subject: [PATCH 486/698] Update eessi-2023.06-eb-4.9.0-2022b.yml --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2022b.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2022b.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2022b.yml index 9e92c79062..903364a289 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2022b.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2022b.yml @@ -1,3 +1,6 @@ easyconfigs: - SciPy-bundle-2023.02-gfbf-2022b.eb - GDAL-3.6.2-foss-2022b.eb + - waLBerla-6.1-foss-2022b.eb 19324 + options: + from-pr: 19252 From 3bac7114115028c6d08b808d4201da010671c854 Mon Sep 17 00:00:00 2001 From: Pedro Santos Neves <10762799+Neves-P@users.noreply.github.com> Date: Fri, 16 Feb 2024 20:41:27 +0100 Subject: [PATCH 487/698] Add waLBerla v6.1 foss2022b Fix easybuild PR number --- .../2023.06/eessi-2023.06-eb-4.9.0-2022b.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2022b.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2022b.yml index 903364a289..3bfb3588d8 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2022b.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2022b.yml @@ -1,6 +1,6 @@ easyconfigs: - SciPy-bundle-2023.02-gfbf-2022b.eb - GDAL-3.6.2-foss-2022b.eb - - waLBerla-6.1-foss-2022b.eb 19324 + - waLBerla-6.1-foss-2022b.eb options: - from-pr: 19252 + from-pr: 19324 From d6e4cecd1b791633443073e6d357ae35e9f26cc6 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Sat, 17 Feb 2024 09:42:30 +0100 Subject: [PATCH 488/698] add missing ':' for waLBerla entry --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2022b.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2022b.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2022b.yml index 3bfb3588d8..2a07133770 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2022b.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2022b.yml @@ -1,6 +1,6 @@ easyconfigs: - SciPy-bundle-2023.02-gfbf-2022b.eb - GDAL-3.6.2-foss-2022b.eb - - waLBerla-6.1-foss-2022b.eb + - waLBerla-6.1-foss-2022b.eb: options: from-pr: 19324 From ec61759dc7b8a2a39613aff55f6ae74a55dd2620 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Mon, 19 Feb 2024 12:11:54 +0100 Subject: [PATCH 489/698] Remove manual setup of MODULEPATH etc, and source the regular EESSI init script to do this --- test_suite.sh | 68 +++++++++++---------------------------------------- 1 file changed, 14 insertions(+), 54 deletions(-) diff --git a/test_suite.sh b/test_suite.sh index f8c46ef764..8a98fd59a8 100755 --- a/test_suite.sh +++ b/test_suite.sh @@ -74,63 +74,14 @@ fi TMPDIR=$(mktemp -d) echo ">> Setting up environment..." - -source $TOPDIR/init/minimal_eessi_env - -if [ -d $EESSI_CVMFS_REPO ]; then - echo_green "$EESSI_CVMFS_REPO available, OK!" -else - fatal_error "$EESSI_CVMFS_REPO is not available!" -fi - -# avoid that pyc files for EasyBuild are stored in EasyBuild installation directory -export PYTHONPYCACHEPREFIX=$TMPDIR/pycache - -echo ">> Determining software subdirectory to use for current build/test host..." -if [ -z $EESSI_SOFTWARE_SUBDIR_OVERRIDE ]; then - export EESSI_SOFTWARE_SUBDIR_OVERRIDE=$(python3 $TOPDIR/eessi_software_subdir.py $DETECTION_PARAMETERS) - echo ">> Determined \$EESSI_SOFTWARE_SUBDIR_OVERRIDE via 'eessi_software_subdir.py $DETECTION_PARAMETERS' script" -else - echo ">> Picking up pre-defined \$EESSI_SOFTWARE_SUBDIR_OVERRIDE: ${EESSI_SOFTWARE_SUBDIR_OVERRIDE}" -fi - -# Set all the EESSI environment variables (respecting $EESSI_SOFTWARE_SUBDIR_OVERRIDE) -# $EESSI_SILENT - don't print any messages -# $EESSI_BASIC_ENV - give a basic set of environment variables -EESSI_SILENT=1 EESSI_BASIC_ENV=1 source $TOPDIR/init/eessi_environment_variables - -if [[ -z ${EESSI_SOFTWARE_SUBDIR} ]]; then - fatal_error "Failed to determine software subdirectory?!" -elif [[ "${EESSI_SOFTWARE_SUBDIR}" != "${EESSI_SOFTWARE_SUBDIR_OVERRIDE}" ]]; then - fatal_error "Values for EESSI_SOFTWARE_SUBDIR_OVERRIDE (${EESSI_SOFTWARE_SUBDIR_OVERRIDE}) and EESSI_SOFTWARE_SUBDIR (${EESSI_SOFTWARE_SUBDIR}) differ!" -else - echo_green ">> Using ${EESSI_SOFTWARE_SUBDIR} as software subdirectory!" -fi - -echo ">> Initializing Lmod..." -source $EPREFIX/usr/share/Lmod/init/bash -ml_version_out=$TMPDIR/ml.out -ml --version &> $ml_version_out -if [[ $? -eq 0 ]]; then - echo_green ">> Found Lmod ${LMOD_VERSION}" -else - fatal_error "Failed to initialize Lmod?! (see output in ${ml_version_out}" -fi - -echo ">> Setting up \$MODULEPATH..." -# make sure no modules are loaded module --force purge -# ignore current $MODULEPATH entirely -module unuse $MODULEPATH -module use ${EESSI_SOFTWARE_PATH}/modules/all -if [[ -z ${MODULEPATH} ]]; then - fatal_error "Failed to set up \$MODULEPATH?!" -else - echo_green ">> MODULEPATH set up: ${MODULEPATH}" -fi +# Make sure defaults are set for EESSI_CVMFS_REPO and EESSI_VERSION, before initializing EESSI +source $TOPDIR/init/eessi_defaults +# Initialize EESSI +source ${EESSI_CVMFS_REPO}/versions/${EESSI_VERSION}/init/bash # Load the ReFrame module - Currently, we load the default version. Maybe we should somehow make this configurable in the future? +# Currently, we load the default version. Maybe we should somehow make this configurable in the future? module load ReFrame if [[ $? -eq 0 ]]; then echo_green ">> Loaded ReFrame module" @@ -138,6 +89,15 @@ else fatal_error "Failed to load the ReFrame module" fi +# Check that a system python3 is available +python3_found=$(which python3) +if [ -z ${python3_found} ]; then + fatal_error "No system python3 found" +else + echo_green "System python3 found:" + python3 -V +fi + # Check ReFrame came with the hpctestlib and we can import it reframe_import="hpctestlib.sciapps.gromacs" python3 -c "import ${reframe_import}" From f3f9721dac3f590768cb9dcb6fbcf26535f049d8 Mon Sep 17 00:00:00 2001 From: Tim Kok Date: Tue, 20 Feb 2024 15:12:53 +0100 Subject: [PATCH 490/698] {2023.06}[foss/2023b] WSClean 3.4 + DP3 6.0 --- .../2023.06/eessi-2023.06-eb-4.9.0-2023b.yml | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml index 4dd31dbd5d..fea9107dc0 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml @@ -8,3 +8,33 @@ easyconfigs: - matplotlib-3.8.2-gfbf-2023b.eb: options: from-pr: 19552 + - AOFlagger-3.4.0-foss-2023b.eb: + options: + from-pr: 19840 + # Exclude Lua from `filter-deps` as the compat layer version is too old for the software + filter-deps: + - Autoconf + - Automake + - Autotools + - binutils + - bzip2 + - DBus + - flex + - gettext + - gperf + - help2man + - intltool + - libreadline + - libtool + - ncurses + - M4 + - makeinfo + - util-linux + - XZ + - zlib + - DP3-6.0-foss-2023b.eb: + options: + from-pr: 19840 + - WSClean-3.4-foss-2023b.eb: + options: + from-pr: 19840 From 9bae7f590a6bfe34e48fe20bc0be066ee407fb25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Tue, 20 Feb 2024 15:26:18 +0100 Subject: [PATCH 491/698] add OpenMPI from PR 19940 (and rebuild: True) --- .../2023.06/eessi-2023.06-eb-4.8.2-2023a.yml | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml index 75dc86c31a..70fb5bfbe0 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml @@ -22,10 +22,6 @@ easyconfigs: options: from-pr: 19339 - Qt5-5.15.10-GCCcore-12.3.0.eb - - gnuplot-5.4.8-GCCcore-12.3.0.eb: - options: - from-pr: 19261 - - OpenFOAM-10-foss-2023a.eb - OSU-Micro-Benchmarks-7.1-1-gompi-2023a.eb - LHAPDF-6.5.4-GCC-12.3.0.eb: options: @@ -56,3 +52,11 @@ easyconfigs: - BWA-0.7.17-20220923-GCCcore-12.3.0.eb: options: from-pr: 19820 + - gnuplot-5.4.8-GCCcore-12.3.0.eb: + options: + from-pr: 19261 + - OpenMPI-4.1.5-GCC-12.3.0.eb: + options: + from-pr: 19940 + rebuild: True + - OpenFOAM-10-foss-2023a.eb From d3c1f654371126a5187d3a9e07b6def690f8725d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Tue, 20 Feb 2024 15:41:24 +0100 Subject: [PATCH 492/698] fix indentation --- .../2023.06/eessi-2023.06-eb-4.8.2-2023a.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml index 70fb5bfbe0..b971c5adad 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml @@ -57,6 +57,6 @@ easyconfigs: from-pr: 19261 - OpenMPI-4.1.5-GCC-12.3.0.eb: options: - from-pr: 19940 - rebuild: True + from-pr: 19940 + rebuild: True - OpenFOAM-10-foss-2023a.eb From f8cd2aa673187d6c1b346d53658932368118bd2a Mon Sep 17 00:00:00 2001 From: Tim Kok Date: Tue, 20 Feb 2024 15:41:51 +0100 Subject: [PATCH 493/698] Remove AOFlagger (Lua is no longer part of filter-deps) --- .../2023.06/eessi-2023.06-eb-4.9.0-2023b.yml | 24 ------------------- 1 file changed, 24 deletions(-) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml index fea9107dc0..bf7e34932b 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml @@ -8,30 +8,6 @@ easyconfigs: - matplotlib-3.8.2-gfbf-2023b.eb: options: from-pr: 19552 - - AOFlagger-3.4.0-foss-2023b.eb: - options: - from-pr: 19840 - # Exclude Lua from `filter-deps` as the compat layer version is too old for the software - filter-deps: - - Autoconf - - Automake - - Autotools - - binutils - - bzip2 - - DBus - - flex - - gettext - - gperf - - help2man - - intltool - - libreadline - - libtool - - ncurses - - M4 - - makeinfo - - util-linux - - XZ - - zlib - DP3-6.0-foss-2023b.eb: options: from-pr: 19840 From eafbb6b757320ee003d678989c05bba6eb28ce2f Mon Sep 17 00:00:00 2001 From: Tim Kok Date: Tue, 20 Feb 2024 17:29:55 +0100 Subject: [PATCH 494/698] Include easyblocks from pr 3088 to fix Python path --- .../2023.06/eessi-2023.06-eb-4.9.0-2023b.yml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml index bf7e34932b..e8496f371a 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml @@ -8,9 +8,27 @@ easyconfigs: - matplotlib-3.8.2-gfbf-2023b.eb: options: from-pr: 19552 + - AOFlagger-3.4.0-foss-2023b.eb: + options: + from:pr: 19840 + include-easyblocks-from-pr: 3088 + - casacore-3.5.0-foss-2023b.eb: + options: + from:pr: 19840 + include-easyblocks-from-pr: 3088 - DP3-6.0-foss-2023b.eb: options: from-pr: 19840 + include-easyblocks-from-pr: 3088 + - IDG-1.2.0-foss-2023b.eb: + options: + from-pr: 19840 + include-easyblocks-from-pr: 3088 + - EveryBeam-0.5.2-foss-2023b.eb: + options: + from-pr: 19840 + include-easyblocks-from-pr: 3088 - WSClean-3.4-foss-2023b.eb: options: from-pr: 19840 + include-easyblocks-from-pr: 3088 From df089de7c137ecb3232eca5f4266ca7d7cf577ed Mon Sep 17 00:00:00 2001 From: Tim Kok Date: Tue, 20 Feb 2024 17:42:44 +0100 Subject: [PATCH 495/698] Fix typo --- .../2023.06/eessi-2023.06-eb-4.9.0-2023b.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml index e8496f371a..c874d7753f 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml @@ -10,11 +10,11 @@ easyconfigs: from-pr: 19552 - AOFlagger-3.4.0-foss-2023b.eb: options: - from:pr: 19840 + from-pr: 19840 include-easyblocks-from-pr: 3088 - casacore-3.5.0-foss-2023b.eb: options: - from:pr: 19840 + from-pr: 19840 include-easyblocks-from-pr: 3088 - DP3-6.0-foss-2023b.eb: options: From 2ec41e17b8e6701323e2a1a2070bc7b82c417980 Mon Sep 17 00:00:00 2001 From: Tim Kok Date: Wed, 21 Feb 2024 07:49:52 +0100 Subject: [PATCH 496/698] List dependencies first --- .../2023.06/eessi-2023.06-eb-4.9.0-2023b.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml index c874d7753f..d89bf6b1b0 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml @@ -16,15 +16,15 @@ easyconfigs: options: from-pr: 19840 include-easyblocks-from-pr: 3088 - - DP3-6.0-foss-2023b.eb: + - IDG-1.2.e0-foss-2023b.eb: options: from-pr: 19840 include-easyblocks-from-pr: 3088 - - IDG-1.2.0-foss-2023b.eb: + - EveryBeam-0.5.2-foss-2023b.eb: options: from-pr: 19840 include-easyblocks-from-pr: 3088 - - EveryBeam-0.5.2-foss-2023b.eb: + - DP3-6.0-foss-2023b.eb: options: from-pr: 19840 include-easyblocks-from-pr: 3088 From d0ba0b724fb8ac8a4516d40731023e31fb190b02 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Wed, 21 Feb 2024 09:42:52 +0100 Subject: [PATCH 497/698] fix typo in IDG version --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml index d89bf6b1b0..33acff2e23 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml @@ -16,7 +16,7 @@ easyconfigs: options: from-pr: 19840 include-easyblocks-from-pr: 3088 - - IDG-1.2.e0-foss-2023b.eb: + - IDG-1.2.0-foss-2023b.eb: options: from-pr: 19840 include-easyblocks-from-pr: 3088 From 5d797a93f21bf7e898898af0e15bc063849c0bd8 Mon Sep 17 00:00:00 2001 From: Tim Kok Date: Wed, 21 Feb 2024 11:24:06 +0100 Subject: [PATCH 498/698] Include Armadillo-12.8.0-foss-2023b.eb --- .../2023.06/eessi-2023.06-eb-4.9.0-2023b.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml index 33acff2e23..7d5ce34a83 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml @@ -12,6 +12,10 @@ easyconfigs: options: from-pr: 19840 include-easyblocks-from-pr: 3088 + - Armadillo-12.8.0-foss-2023b.eb: + options: + from-pr: 19840 + include-easyblocks-from-pr: 3088 - casacore-3.5.0-foss-2023b.eb: options: from-pr: 19840 From a55826ddc0f4175e6fb94b7eb355a263d7a4b759 Mon Sep 17 00:00:00 2001 From: Tim Kok Date: Wed, 21 Feb 2024 11:24:41 +0100 Subject: [PATCH 499/698] Revert "Include Armadillo-12.8.0-foss-2023b.eb" This reverts commit b72730eecd5265829b58e8b09c7476d460bb011a. --- .../2023.06/eessi-2023.06-eb-4.9.0-2023b.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml index 7d5ce34a83..33acff2e23 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml @@ -12,10 +12,6 @@ easyconfigs: options: from-pr: 19840 include-easyblocks-from-pr: 3088 - - Armadillo-12.8.0-foss-2023b.eb: - options: - from-pr: 19840 - include-easyblocks-from-pr: 3088 - casacore-3.5.0-foss-2023b.eb: options: from-pr: 19840 From f63a4d83c0f307f7a7928f8deaab28f09f3ecf21 Mon Sep 17 00:00:00 2001 From: Tim Kok Date: Wed, 21 Feb 2024 11:24:06 +0100 Subject: [PATCH 500/698] Include Armadillo-12.8.0-foss-2023b.eb --- .../2023.06/eessi-2023.06-eb-4.9.0-2023b.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml index 33acff2e23..7d5ce34a83 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml @@ -12,6 +12,10 @@ easyconfigs: options: from-pr: 19840 include-easyblocks-from-pr: 3088 + - Armadillo-12.8.0-foss-2023b.eb: + options: + from-pr: 19840 + include-easyblocks-from-pr: 3088 - casacore-3.5.0-foss-2023b.eb: options: from-pr: 19840 From 7a0acebeb3826ba3bbb6172da344d906c60f2a1c Mon Sep 17 00:00:00 2001 From: Tim Kok Date: Wed, 21 Feb 2024 15:35:54 +0100 Subject: [PATCH 501/698] Include arpack-ng-3.9.0-foss-2023b.eb --- .../2023.06/eessi-2023.06-eb-4.9.0-2023b.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml index 7d5ce34a83..07c2af56a7 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml @@ -12,6 +12,10 @@ easyconfigs: options: from-pr: 19840 include-easyblocks-from-pr: 3088 + - arpack-ng-3.9.0-foss-2023b.eb: + options: + from-pr: 19840 + include-easyblocks-from-pr: 3088 - Armadillo-12.8.0-foss-2023b.eb: options: from-pr: 19840 From 5c546ea8bff9692f4f6fbd68c0951bc29ff78f05 Mon Sep 17 00:00:00 2001 From: Tim Kok Date: Thu, 22 Feb 2024 18:05:46 +0100 Subject: [PATCH 502/698] Disable 'vectorize' toolchain option for casacore 3.5.0 on aarch64/neoverse_v1 with eb_hook --- eb_hooks.py | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/eb_hooks.py b/eb_hooks.py index d29a837339..42f67278a8 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -21,7 +21,7 @@ CPU_TARGET_NEOVERSE_V1 = 'aarch64/neoverse_v1' -CPU_TARGET_AARCH64_GENERIC = 'aarch64/generic' +CPU_TARGET_AARCH64_GENERIC = 'aarch64/generic' EESSI_RPATH_OVERRIDE_ATTR = 'orig_rpath_override_dirs' @@ -159,6 +159,28 @@ def post_prepare_hook(self, *args, **kwargs): if self.name in POST_PREPARE_HOOKS: POST_PREPARE_HOOKS[self.name](self, *args, **kwargs) +def parse_hook_casacore_disable_vectorize(ec, eprefix): + """ + Disable 'vectorize' toolchain option for casacore 3.5.0 on aarch64/neoverse_v1 + Compiling casacore 3.5.0 with GCC 13.2.0 (foss-2023) gives an error when building for aarch64/neoverse_v1. + See also, https://github.com/EESSI/software-layer/pull/479 + """ + if ec.name == 'casacore': + tcname, tcversion = ec['toolchain']['name'], ec['toolchain']['version'] + if ( + LooseVersion(ec.version) == LooseVersion('3.5.0') and + tcname == 'foss' and tcversion == '2023b' + ): + if get_cpu_architecture() == CPU_TARGET_NEOVERSE_V1: + ec['toolchainopts']['vectorize'] = False + print_msg("Changed toochainopts for %s: %s", ec.name, ec['toolchainopts']) + else: + print_msg("Not changing option vectorize for %s on non-AARCH64", ec.name) + else: + print_msg("Not changing option vectorize for %s %s %s", ec.name, ec.version, ec.toolchain) + + else: + raise EasyBuildError("casacore-specific hook triggered for non-casacore easyconfig?!") def parse_hook_cgal_toolchainopts_precise(ec, eprefix): """Enable 'precise' rather than 'strict' toolchain option for CGAL on POWER.""" @@ -327,7 +349,7 @@ def pre_configure_hook_wrf_aarch64(self, *args, **kwargs): if LooseVersion(self.version) <= LooseVersion('3.9.0'): self.cfg.update('preconfigopts', "sed -i 's/%s/%s/g' arch/configure_new.defaults && " % (pattern, repl)) print_msg("Using custom preconfigopts for %s: %s", self.name, self.cfg['preconfigopts']) - + if LooseVersion('4.0.0') <= LooseVersion(self.version) <= LooseVersion('4.2.1'): self.cfg.update('preconfigopts', "sed -i 's/%s/%s/g' arch/configure.defaults && " % (pattern, repl)) print_msg("Using custom preconfigopts for %s: %s", self.name, self.cfg['preconfigopts']) @@ -414,7 +436,7 @@ def pre_test_hook_ignore_failing_tests_netCDF(self, *args, **kwargs): """ cpu_target = get_eessi_envvar('EESSI_SOFTWARE_SUBDIR') if self.name == 'netCDF' and self.version == '4.9.2' and cpu_target == CPU_TARGET_NEOVERSE_V1: - self.cfg['testopts'] = "|| echo ignoring failing tests" + self.cfg['testopts'] = "|| echo ignoring failing tests" def pre_test_hook_increase_max_failed_tests_arm_PyTorch(self, *args, **kwargs): """ @@ -579,6 +601,7 @@ def inject_gpu_property(ec): PARSE_HOOKS = { + 'casacore': parse_hook_casacore_disable_vectorize, 'CGAL': parse_hook_cgal_toolchainopts_precise, 'fontconfig': parse_hook_fontconfig_add_fonts, 'OpenBLAS': parse_hook_openblas_relax_lapack_tests_num_errors, From 5b822a3e2292e80077956b0a3f7c9e453a1d25cd Mon Sep 17 00:00:00 2001 From: Tim Kok Date: Thu, 22 Feb 2024 18:09:02 +0100 Subject: [PATCH 503/698] Remove empty line --- eb_hooks.py | 1 - 1 file changed, 1 deletion(-) diff --git a/eb_hooks.py b/eb_hooks.py index 42f67278a8..2cc9f63ad4 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -178,7 +178,6 @@ def parse_hook_casacore_disable_vectorize(ec, eprefix): print_msg("Not changing option vectorize for %s on non-AARCH64", ec.name) else: print_msg("Not changing option vectorize for %s %s %s", ec.name, ec.version, ec.toolchain) - else: raise EasyBuildError("casacore-specific hook triggered for non-casacore easyconfig?!") From 889243779f41ee43c68079c2bd98133857d75e98 Mon Sep 17 00:00:00 2001 From: Tim Kok Date: Thu, 22 Feb 2024 18:11:03 +0100 Subject: [PATCH 504/698] Cleanup code --- eb_hooks.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/eb_hooks.py b/eb_hooks.py index 2cc9f63ad4..448d6fe62c 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -159,10 +159,11 @@ def post_prepare_hook(self, *args, **kwargs): if self.name in POST_PREPARE_HOOKS: POST_PREPARE_HOOKS[self.name](self, *args, **kwargs) + def parse_hook_casacore_disable_vectorize(ec, eprefix): """ Disable 'vectorize' toolchain option for casacore 3.5.0 on aarch64/neoverse_v1 - Compiling casacore 3.5.0 with GCC 13.2.0 (foss-2023) gives an error when building for aarch64/neoverse_v1. + Compiling casacore 3.5.0 with GCC 13.2.0 (foss-2023b) gives an error when building for aarch64/neoverse_v1. See also, https://github.com/EESSI/software-layer/pull/479 """ if ec.name == 'casacore': @@ -181,6 +182,7 @@ def parse_hook_casacore_disable_vectorize(ec, eprefix): else: raise EasyBuildError("casacore-specific hook triggered for non-casacore easyconfig?!") + def parse_hook_cgal_toolchainopts_precise(ec, eprefix): """Enable 'precise' rather than 'strict' toolchain option for CGAL on POWER.""" if ec.name == 'CGAL': From 3dcf5fae07e154858eec0f7ff866a27d00268e2a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Thu, 22 Feb 2024 22:38:15 +0100 Subject: [PATCH 505/698] add WRF-4.4.1-foss-2022b-dmpar.eb --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2022b.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2022b.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2022b.yml index 2a07133770..ac50c77b67 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2022b.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2022b.yml @@ -4,3 +4,4 @@ easyconfigs: - waLBerla-6.1-foss-2022b.eb: options: from-pr: 19324 + - WRF-4.4.1-foss-2022b-dmpar.eb From 4e5f2db05384b43af4ebbe4bca3b787660b21875 Mon Sep 17 00:00:00 2001 From: t1mk1k <96469032+t1mk1k@users.noreply.github.com> Date: Fri, 23 Feb 2024 15:26:14 +0100 Subject: [PATCH 506/698] Retrieve cpu_target from EESSI env vars MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Bob Dröge --- eb_hooks.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/eb_hooks.py b/eb_hooks.py index 448d6fe62c..747ca5f601 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -172,7 +172,8 @@ def parse_hook_casacore_disable_vectorize(ec, eprefix): LooseVersion(ec.version) == LooseVersion('3.5.0') and tcname == 'foss' and tcversion == '2023b' ): - if get_cpu_architecture() == CPU_TARGET_NEOVERSE_V1: + cpu_target = get_eessi_envvar('EESSI_SOFTWARE_SUBDIR') + if cpu_target == CPU_TARGET_NEOVERSE_V1: ec['toolchainopts']['vectorize'] = False print_msg("Changed toochainopts for %s: %s", ec.name, ec['toolchainopts']) else: From 354407375cc65087c5850f162077b7fa22f785f2 Mon Sep 17 00:00:00 2001 From: Tim Kok Date: Fri, 23 Feb 2024 15:30:27 +0100 Subject: [PATCH 507/698] Specify print message for skipping non-neoverse_v1 --- eb_hooks.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eb_hooks.py b/eb_hooks.py index 747ca5f601..15813ec354 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -177,7 +177,7 @@ def parse_hook_casacore_disable_vectorize(ec, eprefix): ec['toolchainopts']['vectorize'] = False print_msg("Changed toochainopts for %s: %s", ec.name, ec['toolchainopts']) else: - print_msg("Not changing option vectorize for %s on non-AARCH64", ec.name) + print_msg("Not changing option vectorize for %s on non-neoverse_v1", ec.name) else: print_msg("Not changing option vectorize for %s %s %s", ec.name, ec.version, ec.toolchain) else: From 0aea4b44691d237d9359e0a35991b3874b2a092b Mon Sep 17 00:00:00 2001 From: Tim Kok Date: Mon, 26 Feb 2024 19:33:34 +0100 Subject: [PATCH 508/698] Create toolchainopts dict if it does not exist --- eb_hooks.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/eb_hooks.py b/eb_hooks.py index 15813ec354..d93ee37067 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -174,6 +174,8 @@ def parse_hook_casacore_disable_vectorize(ec, eprefix): ): cpu_target = get_eessi_envvar('EESSI_SOFTWARE_SUBDIR') if cpu_target == CPU_TARGET_NEOVERSE_V1: + if not hasattr(ec, 'toolchainopts'): + ec['toolchainopts'] = {} ec['toolchainopts']['vectorize'] = False print_msg("Changed toochainopts for %s: %s", ec.name, ec['toolchainopts']) else: From 07296d3589587cf1090e574513185ad6e50b3d69 Mon Sep 17 00:00:00 2001 From: Tim Kok Date: Tue, 27 Feb 2024 11:17:33 +0100 Subject: [PATCH 509/698] Enable lax vector conversion for DP3 --- eb_hooks.py | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/eb_hooks.py b/eb_hooks.py index d93ee37067..1478f1a508 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -186,6 +186,32 @@ def parse_hook_casacore_disable_vectorize(ec, eprefix): raise EasyBuildError("casacore-specific hook triggered for non-casacore easyconfig?!") +def parse_hook_dp3_enable_relaxed_vector_conversions(ec, eprefix): + """ + Enable lax vector conversion for DP3 on aarch64/neoverse_v1 + Compiling DP3 6.0 with GCC 13.2.0 (foss-2023b) gives a conversion error when building for aarch64/neoverse_v1. + See also, https://github.com/EESSI/software-layer/pull/479 + """ + if ec.name == 'DP3': + tcname, tcversion = ec['toolchain']['name'], ec['toolchain']['version'] + if ( + LooseVersion(ec.version) == LooseVersion('6.0') and + tcname == 'foss' and tcversion == '2023b' + ): + cpu_target = get_eessi_envvar('EESSI_SOFTWARE_SUBDIR') + if cpu_target == CPU_TARGET_NEOVERSE_V1: + if not hasattr(ec, 'configopts'): + ec['configopts'] = "" + ec['configopts'] += ' -DCMAKE_CXX_FLAGS="$CXXFLAGS -flax-vector-conversions" ' + print_msg("Changed configopts for %s: %s", ec.name, ec['configopts']) + else: + print_msg("Not changing configopts for %s on non-neoverse_v1", ec.name) + else: + print_msg("Not changing configopts for %s %s %s", ec.name, ec.version, ec.toolchain) + else: + raise EasyBuildError("DP3-specific hook triggered for non-DP3 easyconfig?!") + + def parse_hook_cgal_toolchainopts_precise(ec, eprefix): """Enable 'precise' rather than 'strict' toolchain option for CGAL on POWER.""" if ec.name == 'CGAL': @@ -607,6 +633,7 @@ def inject_gpu_property(ec): PARSE_HOOKS = { 'casacore': parse_hook_casacore_disable_vectorize, 'CGAL': parse_hook_cgal_toolchainopts_precise, + 'DP3': parse_hook_dp3_enable_relaxed_vector_conversions, 'fontconfig': parse_hook_fontconfig_add_fonts, 'OpenBLAS': parse_hook_openblas_relax_lapack_tests_num_errors, 'pybind11': parse_hook_pybind11_replace_catch2, From 793e9f8ec925aa09b020f72d4acffa1ce0b400eb Mon Sep 17 00:00:00 2001 From: Richard Top Date: Wed, 28 Feb 2024 13:20:54 +0000 Subject: [PATCH 510/698] {2023.06}[foss/2023a] dask v2023.9.2 --- .../2023.06/eessi-2023.06-eb-4.9.0-2023a.yml | 1 + eb_hooks.py | 14 +++++++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml index 157a47a49e..d444b1f8ae 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml @@ -29,3 +29,4 @@ easyconfigs: # see https://github.com/easybuilders/easybuild-easyconfigs/pull/19554 options: from-pr: 19554 + - dask-2023.9.2-foss-2023a.eb diff --git a/eb_hooks.py b/eb_hooks.py index d29a837339..4ed72a12ac 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -204,6 +204,18 @@ def parse_hook_openblas_relax_lapack_tests_num_errors(ec, eprefix): raise EasyBuildError("OpenBLAS-specific hook triggered for non-OpenBLAS easyconfig?!") +def parse_hook_Pillow_SIMD_harcoded_paths(ec, eprefix): + # patch setup.py to prefix hardcoded /usr/* and /lib paths with value of %(sysroot) template + # (which will be empty if EasyBuild is not configured to use an alternate sysroot); + # see also https://gitlab.com/eessi/support/-/issues/9 + if ec.name == 'Pillow-SIMD': + ec.update('preinstallopts', """sed -i 's@"/usr/@"%(sysroot)s/usr/@g' setup.py && """) + ec.update('preinstallopts', """sed -i 's@"/lib@"%(sysroot)s/lib@g' setup.py && """) + print_msg("Using custom configure options for %s: %s", ec.name, ec['preinstallopts']) + else: + raise EasyBuildError("Pillow-SIMD-specific hook triggered for non-Pillow-SIMD easyconfig?!") + + def parse_hook_pybind11_replace_catch2(ec, eprefix): """ Replace Catch2 build dependency in pybind11 easyconfigs with one that doesn't use system toolchain. @@ -237,7 +249,6 @@ def parse_hook_qt5_check_qtwebengine_disable(ec, eprefix): def parse_hook_ucx_eprefix(ec, eprefix): - """Make UCX aware of compatibility layer via additional configuration options.""" if ec.name == 'UCX': ec.update('configopts', '--with-sysroot=%s' % eprefix) ec.update('configopts', '--with-rdmacm=%s' % os.path.join(eprefix, 'usr')) @@ -582,6 +593,7 @@ def inject_gpu_property(ec): 'CGAL': parse_hook_cgal_toolchainopts_precise, 'fontconfig': parse_hook_fontconfig_add_fonts, 'OpenBLAS': parse_hook_openblas_relax_lapack_tests_num_errors, + 'Pillow-SIMD' : parse_hook_Pillow_SIMD_harcoded_paths, 'pybind11': parse_hook_pybind11_replace_catch2, 'Qt5': parse_hook_qt5_check_qtwebengine_disable, 'UCX': parse_hook_ucx_eprefix, From 68a766fe8637c7c90b7c667aa0f738b8807f115f Mon Sep 17 00:00:00 2001 From: Richard Top Date: Wed, 28 Feb 2024 13:27:38 +0000 Subject: [PATCH 511/698] fixed info --- eb_hooks.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/eb_hooks.py b/eb_hooks.py index 4ed72a12ac..d30700267b 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -205,6 +205,7 @@ def parse_hook_openblas_relax_lapack_tests_num_errors(ec, eprefix): def parse_hook_Pillow_SIMD_harcoded_paths(ec, eprefix): + """Make Pillow-SIMD aware of sysroot.""" # patch setup.py to prefix hardcoded /usr/* and /lib paths with value of %(sysroot) template # (which will be empty if EasyBuild is not configured to use an alternate sysroot); # see also https://gitlab.com/eessi/support/-/issues/9 @@ -249,6 +250,7 @@ def parse_hook_qt5_check_qtwebengine_disable(ec, eprefix): def parse_hook_ucx_eprefix(ec, eprefix): + """Make UCX aware of compatibility layer via additional configuration options.""" if ec.name == 'UCX': ec.update('configopts', '--with-sysroot=%s' % eprefix) ec.update('configopts', '--with-rdmacm=%s' % os.path.join(eprefix, 'usr')) From 3cdf80390fa3150bcde82427537776c22bf7bb25 Mon Sep 17 00:00:00 2001 From: Richard Top Date: Wed, 28 Feb 2024 17:33:43 +0000 Subject: [PATCH 512/698] removed the hook and added --from-pr --- .../2023.06/eessi-2023.06-eb-4.9.0-2023a.yml | 5 ++++- eb_hooks.py | 14 -------------- 2 files changed, 4 insertions(+), 15 deletions(-) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml index d444b1f8ae..983d59cc04 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml @@ -29,4 +29,7 @@ easyconfigs: # see https://github.com/easybuilders/easybuild-easyconfigs/pull/19554 options: from-pr: 19554 - - dask-2023.9.2-foss-2023a.eb + - dask-2023.9.2-foss-2023a.eb: + options: + from-pr: 19996 + diff --git a/eb_hooks.py b/eb_hooks.py index d30700267b..d29a837339 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -204,19 +204,6 @@ def parse_hook_openblas_relax_lapack_tests_num_errors(ec, eprefix): raise EasyBuildError("OpenBLAS-specific hook triggered for non-OpenBLAS easyconfig?!") -def parse_hook_Pillow_SIMD_harcoded_paths(ec, eprefix): - """Make Pillow-SIMD aware of sysroot.""" - # patch setup.py to prefix hardcoded /usr/* and /lib paths with value of %(sysroot) template - # (which will be empty if EasyBuild is not configured to use an alternate sysroot); - # see also https://gitlab.com/eessi/support/-/issues/9 - if ec.name == 'Pillow-SIMD': - ec.update('preinstallopts', """sed -i 's@"/usr/@"%(sysroot)s/usr/@g' setup.py && """) - ec.update('preinstallopts', """sed -i 's@"/lib@"%(sysroot)s/lib@g' setup.py && """) - print_msg("Using custom configure options for %s: %s", ec.name, ec['preinstallopts']) - else: - raise EasyBuildError("Pillow-SIMD-specific hook triggered for non-Pillow-SIMD easyconfig?!") - - def parse_hook_pybind11_replace_catch2(ec, eprefix): """ Replace Catch2 build dependency in pybind11 easyconfigs with one that doesn't use system toolchain. @@ -595,7 +582,6 @@ def inject_gpu_property(ec): 'CGAL': parse_hook_cgal_toolchainopts_precise, 'fontconfig': parse_hook_fontconfig_add_fonts, 'OpenBLAS': parse_hook_openblas_relax_lapack_tests_num_errors, - 'Pillow-SIMD' : parse_hook_Pillow_SIMD_harcoded_paths, 'pybind11': parse_hook_pybind11_replace_catch2, 'Qt5': parse_hook_qt5_check_qtwebengine_disable, 'UCX': parse_hook_ucx_eprefix, From 117081843c09ae69e9b25eb18ecc54f6736cc16f Mon Sep 17 00:00:00 2001 From: Alan O'Cais Date: Thu, 29 Feb 2024 10:01:17 +0100 Subject: [PATCH 513/698] Temporary fix for CI by pinning archspec version --- .github/workflows/tests.yml | 2 +- .github/workflows/tests_init.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 8e74a4e844..faa7eb82ff 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -22,7 +22,7 @@ jobs: - name: install Python packages run: | - pip install archspec + pip install archspec==0.2.2 - name: test eessi_software_subdir.py script run: | diff --git a/.github/workflows/tests_init.yml b/.github/workflows/tests_init.yml index 38ccbbad31..053acb9730 100644 --- a/.github/workflows/tests_init.yml +++ b/.github/workflows/tests_init.yml @@ -22,7 +22,7 @@ jobs: - name: install Python packages run: | - pip install archspec pytest + pip install archspec==0.2.2 pytest - name: unit tests for eessi_software_subdir_for_host.py script run: From cf7705643865f85b0e73f5185952a400f41c95f6 Mon Sep 17 00:00:00 2001 From: TopRichard <121792457+TopRichard@users.noreply.github.com> Date: Thu, 29 Feb 2024 13:39:14 +0100 Subject: [PATCH 514/698] remove-blanks --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml index 983d59cc04..7d9c331fcf 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml @@ -32,4 +32,3 @@ easyconfigs: - dask-2023.9.2-foss-2023a.eb: options: from-pr: 19996 - From 887e102631ef5fbfadffef744c7724e28a01217f Mon Sep 17 00:00:00 2001 From: ocaisa Date: Thu, 29 Feb 2024 13:50:41 +0100 Subject: [PATCH 515/698] Update easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml index 7d9c331fcf..d187d8e92c 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml @@ -29,6 +29,7 @@ easyconfigs: # see https://github.com/easybuilders/easybuild-easyconfigs/pull/19554 options: from-pr: 19554 - - dask-2023.9.2-foss-2023a.eb: + - Pillow-SIMD-9.5.0-GCCcore-12.3.0.eb: options: from-pr: 19996 + - dask-2023.9.2-foss-2023a.eb From 938e52e66b529458fad9984f79bce156dc43d023 Mon Sep 17 00:00:00 2001 From: ocaisa Date: Thu, 29 Feb 2024 14:16:17 +0100 Subject: [PATCH 516/698] Update easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml index d187d8e92c..0a0a625c35 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml @@ -31,5 +31,6 @@ easyconfigs: from-pr: 19554 - Pillow-SIMD-9.5.0-GCCcore-12.3.0.eb: options: + # see https://github.com/easybuilders/easybuild-easyconfigs/pull/19996 from-pr: 19996 - dask-2023.9.2-foss-2023a.eb From 301ab593867335700b576cc9949fe58c408325e7 Mon Sep 17 00:00:00 2001 From: Alan O'Cais Date: Thu, 29 Feb 2024 18:12:22 +0100 Subject: [PATCH 517/698] Make check_missing_installations.sh check against develop branch of EasyBuild --- check_missing_installations.sh | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/check_missing_installations.sh b/check_missing_installations.sh index 5ea7c5a4f5..8845adb161 100755 --- a/check_missing_installations.sh +++ b/check_missing_installations.sh @@ -18,6 +18,13 @@ easystack=$1 LOCAL_TMPDIR=$(mktemp -d) +# Clone the develop branch of EasyBuild and use that to search for easyconfigs +git clone -b develop https://github.com/easybuilders/easybuild-easyconfigs.git $LOCAL_TMPDIR/easyconfigs +EASYBUILD_ROBOT_PATHS=$LOCAL_TMPDIR/easyconfigs/easybuild/easyconfigs + +# All PRs used in EESSI are supposed to be merged, so we can strip out all cases of from-pr +grep -v from-pr ${easystack} > ${LOCAL_TMPDIR}/${easystack} + source $TOPDIR/scripts/utils.sh source $TOPDIR/configure_easybuild @@ -27,7 +34,7 @@ ${EB:-eb} --show-config echo ">> Checking for missing installations in ${EASYBUILD_INSTALLPATH}..." eb_missing_out=$LOCAL_TMPDIR/eb_missing.out -${EB:-eb} --easystack ${easystack} --missing 2>&1 | tee ${eb_missing_out} +${EB:-eb} --easystack ${LOCAL_TMPDIR}/${easystack} --missing 2>&1 | tee ${eb_missing_out} exit_code=${PIPESTATUS[0]} ok_msg="Command 'eb --missing ...' succeeded, analysing output..." From 93d1d7df3c0659e9886bac3cd0d4c994e7a82d09 Mon Sep 17 00:00:00 2001 From: Alan O'Cais Date: Thu, 29 Feb 2024 18:19:46 +0100 Subject: [PATCH 518/698] Use filename rather than full path --- check_missing_installations.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/check_missing_installations.sh b/check_missing_installations.sh index 8845adb161..6c38e8e37f 100755 --- a/check_missing_installations.sh +++ b/check_missing_installations.sh @@ -23,7 +23,8 @@ git clone -b develop https://github.com/easybuilders/easybuild-easyconfigs.git $ EASYBUILD_ROBOT_PATHS=$LOCAL_TMPDIR/easyconfigs/easybuild/easyconfigs # All PRs used in EESSI are supposed to be merged, so we can strip out all cases of from-pr -grep -v from-pr ${easystack} > ${LOCAL_TMPDIR}/${easystack} +tmp_easystack=${LOCAL_TMPDIR}/$(basename ${easystack}) +grep -v from-pr ${easystack} > ${tmp_easystack} source $TOPDIR/scripts/utils.sh @@ -34,7 +35,7 @@ ${EB:-eb} --show-config echo ">> Checking for missing installations in ${EASYBUILD_INSTALLPATH}..." eb_missing_out=$LOCAL_TMPDIR/eb_missing.out -${EB:-eb} --easystack ${LOCAL_TMPDIR}/${easystack} --missing 2>&1 | tee ${eb_missing_out} +${EB:-eb} --easystack ${tmp_easystack} --missing 2>&1 | tee ${eb_missing_out} exit_code=${PIPESTATUS[0]} ok_msg="Command 'eb --missing ...' succeeded, analysing output..." From f6259dc563bcb1cad3ee962f56501872e53c0cba Mon Sep 17 00:00:00 2001 From: Alan O'Cais Date: Thu, 29 Feb 2024 18:26:16 +0100 Subject: [PATCH 519/698] export envvar --- check_missing_installations.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/check_missing_installations.sh b/check_missing_installations.sh index 6c38e8e37f..c902fa8184 100755 --- a/check_missing_installations.sh +++ b/check_missing_installations.sh @@ -20,7 +20,7 @@ LOCAL_TMPDIR=$(mktemp -d) # Clone the develop branch of EasyBuild and use that to search for easyconfigs git clone -b develop https://github.com/easybuilders/easybuild-easyconfigs.git $LOCAL_TMPDIR/easyconfigs -EASYBUILD_ROBOT_PATHS=$LOCAL_TMPDIR/easyconfigs/easybuild/easyconfigs +export EASYBUILD_ROBOT_PATHS=$LOCAL_TMPDIR/easyconfigs/easybuild/easyconfigs # All PRs used in EESSI are supposed to be merged, so we can strip out all cases of from-pr tmp_easystack=${LOCAL_TMPDIR}/$(basename ${easystack}) From 78ba8d8e304ec0ae4c82721e3e5fae7e25402f91 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Fri, 1 Mar 2024 12:53:07 +0100 Subject: [PATCH 520/698] Adding OSU microbenchmarks with GPU support for 2023a, and one without GPU support for 2023b --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml index 0a0a625c35..0d8e71e86c 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml @@ -34,3 +34,5 @@ easyconfigs: # see https://github.com/easybuilders/easybuild-easyconfigs/pull/19996 from-pr: 19996 - dask-2023.9.2-foss-2023a.eb + - OSU-Micro-Benchmarks-7.2-gompi-2023a-CUDA-12.1.1.eb + - OSU-Micro-Benchmarks-7.2-gompi-2023b.eb From e666e2c4058a38b251697730a1551ba0ca34601a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Fri, 1 Mar 2024 13:42:12 +0100 Subject: [PATCH 521/698] launch with --fakeroot for build jobs triggered by bot --- eessi_container.sh | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/eessi_container.sh b/eessi_container.sh index d6e9558202..55ce409e2b 100755 --- a/eessi_container.sh +++ b/eessi_container.sh @@ -585,6 +585,11 @@ if [[ "${ACCESS}" == "ro" ]]; then fi if [[ "${ACCESS}" == "rw" ]]; then + if [[ ! -z ${JOB_CFG_FILE} ]]; then + # always launch build jobs triggered by the job with --fakeroot, + # we drop back to a regular user in the build script + ADDITIONAL_CONTAINER_OPTIONS+=("--fakeroot") + fi mkdir -p ${EESSI_TMPDIR}/overlay-upper mkdir -p ${EESSI_TMPDIR}/overlay-work From 34bc1c25bb0cdc926d05bcc0354069658bf73592 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Fri, 1 Mar 2024 13:42:36 +0100 Subject: [PATCH 522/698] remove existing dirs for rebuilds --- EESSI-install-software.sh | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/EESSI-install-software.sh b/EESSI-install-software.sh index 69de9d1997..2803880547 100755 --- a/EESSI-install-software.sh +++ b/EESSI-install-software.sh @@ -222,6 +222,23 @@ else echo_green "All set, let's start installing some software with EasyBuild v${eb_version} in ${EASYBUILD_INSTALLPATH}..." if [ -f ${easystack_file} ]; then + if [ $(basename $(dirname ${easystack_file} = 'rebuilds' ]; then + echo_green "Software rebuild(s) requested, so determining which existing installation have to be removed..." + # we need to remove existing installation directories first, + # so let's figure out which modules have to be rebuilt by doing a dry-run and grepping "someapp/someversion" for the relevant lines (with [R]) + # * [R] $CFGS/s/someapp/someapp-someversion.eb (module: someapp/someversion) + rebuild_apps=$(${EB} --dry-run-short --rebuild --easystack ${easystack_file} | grep "^ \* \[R\]" | grep -o "module: .*[^)]" | awk '{print $2}') + for app in ${rebuild_apps}; do + app_dir=${EASYBUILD_INSTALLPATH}/software/${app} + app_module=${EASYBUILD_INSTALLPATH}/modules/all/${app}.lua + echo_yellow "Removing ${appdir} and {app_module}..." + rm -rf ${appdir} + rm -rf ${app_module} + done + fi + # drop back to a regular user + su - eessi + echo_green "Feeding easystack file ${easystack_file} to EasyBuild..." ${EB} --easystack ${TOPDIR}/${easystack_file} --robot From 46e753208352710344e9c3f6ebb859c9e3975168 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Fri, 1 Mar 2024 13:46:55 +0100 Subject: [PATCH 523/698] rebuild all OpenMPI 4.1.x versions --- .../20240301-OpenMPI-4.1.x-fix-smcuda-eb-4.9.0.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 easystacks/software.eessi.io/2023.06/rebuilds/20240301-OpenMPI-4.1.x-fix-smcuda-eb-4.9.0.yml diff --git a/easystacks/software.eessi.io/2023.06/rebuilds/20240301-OpenMPI-4.1.x-fix-smcuda-eb-4.9.0.yml b/easystacks/software.eessi.io/2023.06/rebuilds/20240301-OpenMPI-4.1.x-fix-smcuda-eb-4.9.0.yml new file mode 100644 index 0000000000..7a6d3c63a3 --- /dev/null +++ b/easystacks/software.eessi.io/2023.06/rebuilds/20240301-OpenMPI-4.1.x-fix-smcuda-eb-4.9.0.yml @@ -0,0 +1,10 @@ +easyconfigs: + - OpenMPI-4.1.4-GCC-12.2.0.eb: + options: + from-pr: 19940 + - OpenMPI-4.1.5-GCC-12.3.0: + options: + from-pr: 19940 + - OpenMPI-4.1.6-GCC-13.2.0: + options: + from-pr: 19940 From 21959d651c35c0cf70b68c239deed30f55bb95d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Fri, 1 Mar 2024 13:58:22 +0100 Subject: [PATCH 524/698] add some comments/links --- .../rebuilds/20240301-OpenMPI-4.1.x-fix-smcuda-eb-4.9.0.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/easystacks/software.eessi.io/2023.06/rebuilds/20240301-OpenMPI-4.1.x-fix-smcuda-eb-4.9.0.yml b/easystacks/software.eessi.io/2023.06/rebuilds/20240301-OpenMPI-4.1.x-fix-smcuda-eb-4.9.0.yml index 7a6d3c63a3..042d0a214c 100644 --- a/easystacks/software.eessi.io/2023.06/rebuilds/20240301-OpenMPI-4.1.x-fix-smcuda-eb-4.9.0.yml +++ b/easystacks/software.eessi.io/2023.06/rebuilds/20240301-OpenMPI-4.1.x-fix-smcuda-eb-4.9.0.yml @@ -1,3 +1,8 @@ +# 2024-03-01 +# Rebuild all OpenMPI 4.1.x versions due to an issue with smcuda: +# https://github.com/open-mpi/ompi/issues/12270 +# https://github.com/open-mpi/ompi/pull/12344 +# https://github.com/easybuilders/easybuild-easyconfigs/pull/19940 easyconfigs: - OpenMPI-4.1.4-GCC-12.2.0.eb: options: From 7054a587884b2cd56a44bf871d0cd052633a6e1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Fri, 1 Mar 2024 13:59:35 +0100 Subject: [PATCH 525/698] fix syntax, add missing parentheses --- EESSI-install-software.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/EESSI-install-software.sh b/EESSI-install-software.sh index 2803880547..2e3641a3ae 100755 --- a/EESSI-install-software.sh +++ b/EESSI-install-software.sh @@ -222,7 +222,7 @@ else echo_green "All set, let's start installing some software with EasyBuild v${eb_version} in ${EASYBUILD_INSTALLPATH}..." if [ -f ${easystack_file} ]; then - if [ $(basename $(dirname ${easystack_file} = 'rebuilds' ]; then + if [ $(basename $(dirname ${easystack_file})) = 'rebuilds' ]; then echo_green "Software rebuild(s) requested, so determining which existing installation have to be removed..." # we need to remove existing installation directories first, # so let's figure out which modules have to be rebuilt by doing a dry-run and grepping "someapp/someversion" for the relevant lines (with [R]) From 1fd1609ec960e3b713e940076241f118677a3181 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Fri, 1 Mar 2024 14:00:03 +0100 Subject: [PATCH 526/698] 'which' is not working in the container, command -v is --- test_suite.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test_suite.sh b/test_suite.sh index 8a98fd59a8..e9168184bc 100755 --- a/test_suite.sh +++ b/test_suite.sh @@ -90,7 +90,7 @@ else fi # Check that a system python3 is available -python3_found=$(which python3) +python3_found=$(command -v python3) if [ -z ${python3_found} ]; then fatal_error "No system python3 found" else From 7b78861fe6ab49547adbcf22df8c044039fbcc3c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Fri, 1 Mar 2024 14:01:30 +0100 Subject: [PATCH 527/698] remove spaces from blank lines --- EESSI-install-software.sh | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/EESSI-install-software.sh b/EESSI-install-software.sh index 2e3641a3ae..25069689cc 100755 --- a/EESSI-install-software.sh +++ b/EESSI-install-software.sh @@ -208,19 +208,19 @@ if [ -z ${changed_easystacks} ]; then echo "No missing installations, party time!" # Ensure the bot report success, as there was nothing to be build here else for easystack_file in ${changed_easystacks}; do - + echo -e "Processing easystack file ${easystack_file}...\n\n" - + # determine version of EasyBuild module to load based on EasyBuild version included in name of easystack file eb_version=$(echo ${easystack_file} | sed 's/.*eb-\([0-9.]*\).*/\1/g') - + # load EasyBuild module (will be installed if it's not available yet) source ${TOPDIR}/load_easybuild_module.sh ${eb_version} - + ${EB} --show-config - + echo_green "All set, let's start installing some software with EasyBuild v${eb_version} in ${EASYBUILD_INSTALLPATH}..." - + if [ -f ${easystack_file} ]; then if [ $(basename $(dirname ${easystack_file})) = 'rebuilds' ]; then echo_green "Software rebuild(s) requested, so determining which existing installation have to be removed..." @@ -240,10 +240,10 @@ else su - eessi echo_green "Feeding easystack file ${easystack_file} to EasyBuild..." - + ${EB} --easystack ${TOPDIR}/${easystack_file} --robot ec=$? - + # copy EasyBuild log file if EasyBuild exited with an error if [ ${ec} -ne 0 ]; then eb_last_log=$(unset EB_VERBOSE; eb --last-log) @@ -253,12 +253,12 @@ else # copy to build logs dir (with context added) copy_build_log "${eb_last_log}" "${build_logs_dir}" fi - + $TOPDIR/check_missing_installations.sh ${TOPDIR}/${easystack_file} else fatal_error "Easystack file ${easystack_file} not found!" fi - + done fi From 87e5ff09fbd8720d4cad0bf60647d970cbea0c87 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Fri, 1 Mar 2024 14:03:49 +0100 Subject: [PATCH 528/698] rename file to be able to find EB version --- ...b-4.9.0.yml => 20240301-eb-4.9.0-OpenMPI-4.1.x-fix-smcuda.yml} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename easystacks/software.eessi.io/2023.06/rebuilds/{20240301-OpenMPI-4.1.x-fix-smcuda-eb-4.9.0.yml => 20240301-eb-4.9.0-OpenMPI-4.1.x-fix-smcuda.yml} (100%) diff --git a/easystacks/software.eessi.io/2023.06/rebuilds/20240301-OpenMPI-4.1.x-fix-smcuda-eb-4.9.0.yml b/easystacks/software.eessi.io/2023.06/rebuilds/20240301-eb-4.9.0-OpenMPI-4.1.x-fix-smcuda.yml similarity index 100% rename from easystacks/software.eessi.io/2023.06/rebuilds/20240301-OpenMPI-4.1.x-fix-smcuda-eb-4.9.0.yml rename to easystacks/software.eessi.io/2023.06/rebuilds/20240301-eb-4.9.0-OpenMPI-4.1.x-fix-smcuda.yml From d07879f4c28a798e84d4e22e30e874ce766c6deb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Fri, 1 Mar 2024 14:06:48 +0100 Subject: [PATCH 529/698] clarify comment about fakeroot --- eessi_container.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/eessi_container.sh b/eessi_container.sh index 55ce409e2b..bedb269cfd 100755 --- a/eessi_container.sh +++ b/eessi_container.sh @@ -586,7 +586,8 @@ fi if [[ "${ACCESS}" == "rw" ]]; then if [[ ! -z ${JOB_CFG_FILE} ]]; then - # always launch build jobs triggered by the job with --fakeroot, + # always launch build jobs triggered by the job with --fakeroot in order to be able to remove existing installations, see: + # https://github.com/EESSI/software-layer/issues/312 # we drop back to a regular user in the build script ADDITIONAL_CONTAINER_OPTIONS+=("--fakeroot") fi From 135c3c890f00ca282af5dff53fa8f48c302c7247 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Fri, 1 Mar 2024 14:08:27 +0100 Subject: [PATCH 530/698] add --allow-use-as-root-and-accept-consequences --- EESSI-install-software.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/EESSI-install-software.sh b/EESSI-install-software.sh index 25069689cc..85cdcbcbbf 100755 --- a/EESSI-install-software.sh +++ b/EESSI-install-software.sh @@ -227,7 +227,7 @@ else # we need to remove existing installation directories first, # so let's figure out which modules have to be rebuilt by doing a dry-run and grepping "someapp/someversion" for the relevant lines (with [R]) # * [R] $CFGS/s/someapp/someapp-someversion.eb (module: someapp/someversion) - rebuild_apps=$(${EB} --dry-run-short --rebuild --easystack ${easystack_file} | grep "^ \* \[R\]" | grep -o "module: .*[^)]" | awk '{print $2}') + rebuild_apps=$(${EB} --allow-use-as-root-and-accept-consequences --dry-run-short --rebuild --easystack ${easystack_file} | grep "^ \* \[R\]" | grep -o "module: .*[^)]" | awk '{print $2}') for app in ${rebuild_apps}; do app_dir=${EASYBUILD_INSTALLPATH}/software/${app} app_module=${EASYBUILD_INSTALLPATH}/modules/all/${app}.lua From f1831b44d53ecd525717c2c0b1049c0c4da1bca7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Fri, 1 Mar 2024 14:14:21 +0100 Subject: [PATCH 531/698] add missing $ --- EESSI-install-software.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/EESSI-install-software.sh b/EESSI-install-software.sh index 85cdcbcbbf..4b87a8f0cd 100755 --- a/EESSI-install-software.sh +++ b/EESSI-install-software.sh @@ -231,7 +231,7 @@ else for app in ${rebuild_apps}; do app_dir=${EASYBUILD_INSTALLPATH}/software/${app} app_module=${EASYBUILD_INSTALLPATH}/modules/all/${app}.lua - echo_yellow "Removing ${appdir} and {app_module}..." + echo_yellow "Removing ${appdir} and ${app_module}..." rm -rf ${appdir} rm -rf ${app_module} done From 68212a41298d9a90e95214ccbd971b6d9e2a626a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Fri, 1 Mar 2024 14:14:51 +0100 Subject: [PATCH 532/698] fix app_dir variable --- EESSI-install-software.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/EESSI-install-software.sh b/EESSI-install-software.sh index 4b87a8f0cd..6b5aeb39bc 100755 --- a/EESSI-install-software.sh +++ b/EESSI-install-software.sh @@ -231,7 +231,7 @@ else for app in ${rebuild_apps}; do app_dir=${EASYBUILD_INSTALLPATH}/software/${app} app_module=${EASYBUILD_INSTALLPATH}/modules/all/${app}.lua - echo_yellow "Removing ${appdir} and ${app_module}..." + echo_yellow "Removing ${app_dir} and ${app_module}..." rm -rf ${appdir} rm -rf ${app_module} done From 6bcd0e3a8e35613979ed7e45b4ca546c7a46759f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Fri, 1 Mar 2024 14:28:15 +0100 Subject: [PATCH 533/698] split loop, first remove everything that needs to be removed, then drop back to regular user and do installations --- EESSI-install-software.sh | 43 +++++++++++++++++++++++---------------- 1 file changed, 26 insertions(+), 17 deletions(-) diff --git a/EESSI-install-software.sh b/EESSI-install-software.sh index 6b5aeb39bc..b7350f9fde 100755 --- a/EESSI-install-software.sh +++ b/EESSI-install-software.sh @@ -207,6 +207,32 @@ changed_easystacks=$(cat ${pr_diff} | grep '^+++' | cut -f2 -d' ' | sed 's@^[a-z if [ -z ${changed_easystacks} ]; then echo "No missing installations, party time!" # Ensure the bot report success, as there was nothing to be build here else + changed_easystacks_rebuilds=$(grep "/rebuilds/" <<< ${changed_easystacks}) + for easystack_file in ${changed_easystacks_rebuilds}; do + # determine version of EasyBuild module to load based on EasyBuild version included in name of easystack file + eb_version=$(echo ${easystack_file} | sed 's/.*eb-\([0-9.]*\).*/\1/g') + + # load EasyBuild module (will be installed if it's not available yet) + source ${TOPDIR}/load_easybuild_module.sh ${eb_version} + + if [ -f ${easystack_file} ]; then + echo_green "Software rebuild(s) requested in ${easystack_file}, so determining which existing installation have to be removed..." + # we need to remove existing installation directories first, + # so let's figure out which modules have to be rebuilt by doing a dry-run and grepping "someapp/someversion" for the relevant lines (with [R]) + # * [R] $CFGS/s/someapp/someapp-someversion.eb (module: someapp/someversion) + rebuild_apps=$(${EB} --allow-use-as-root-and-accept-consequences --dry-run-short --rebuild --easystack ${easystack_file} | grep "^ \* \[R\]" | grep -o "module: .*[^)]" | awk '{print $2}') + for app in ${rebuild_apps}; do + app_dir=${EASYBUILD_INSTALLPATH}/software/${app} + app_module=${EASYBUILD_INSTALLPATH}/modules/all/${app}.lua + echo_yellow "Removing ${app_dir} and ${app_module}..." + rm -rf ${appdir} + rm -rf ${app_module} + done + done + + # drop back to a regular user + su - eessi + for easystack_file in ${changed_easystacks}; do echo -e "Processing easystack file ${easystack_file}...\n\n" @@ -222,23 +248,6 @@ else echo_green "All set, let's start installing some software with EasyBuild v${eb_version} in ${EASYBUILD_INSTALLPATH}..." if [ -f ${easystack_file} ]; then - if [ $(basename $(dirname ${easystack_file})) = 'rebuilds' ]; then - echo_green "Software rebuild(s) requested, so determining which existing installation have to be removed..." - # we need to remove existing installation directories first, - # so let's figure out which modules have to be rebuilt by doing a dry-run and grepping "someapp/someversion" for the relevant lines (with [R]) - # * [R] $CFGS/s/someapp/someapp-someversion.eb (module: someapp/someversion) - rebuild_apps=$(${EB} --allow-use-as-root-and-accept-consequences --dry-run-short --rebuild --easystack ${easystack_file} | grep "^ \* \[R\]" | grep -o "module: .*[^)]" | awk '{print $2}') - for app in ${rebuild_apps}; do - app_dir=${EASYBUILD_INSTALLPATH}/software/${app} - app_module=${EASYBUILD_INSTALLPATH}/modules/all/${app}.lua - echo_yellow "Removing ${app_dir} and ${app_module}..." - rm -rf ${appdir} - rm -rf ${app_module} - done - fi - # drop back to a regular user - su - eessi - echo_green "Feeding easystack file ${easystack_file} to EasyBuild..." ${EB} --easystack ${TOPDIR}/${easystack_file} --robot From c81c0dec1709cd683c571bd50537999da1bdd8ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Fri, 1 Mar 2024 14:31:28 +0100 Subject: [PATCH 534/698] add missing else and fi --- EESSI-install-software.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/EESSI-install-software.sh b/EESSI-install-software.sh index b7350f9fde..62cc1a3df2 100755 --- a/EESSI-install-software.sh +++ b/EESSI-install-software.sh @@ -228,6 +228,9 @@ else rm -rf ${appdir} rm -rf ${app_module} done + else + fatal_error "Easystack file ${easystack_file} not found!" + fi done # drop back to a regular user From f99458395e44b9b063ad6f785e21a1f16edc16ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Fri, 1 Mar 2024 14:40:54 +0100 Subject: [PATCH 535/698] su without hypen --- EESSI-install-software.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/EESSI-install-software.sh b/EESSI-install-software.sh index 62cc1a3df2..01ca19336c 100755 --- a/EESSI-install-software.sh +++ b/EESSI-install-software.sh @@ -234,7 +234,7 @@ else done # drop back to a regular user - su - eessi + su eessi for easystack_file in ${changed_easystacks}; do From 21e3735712a7679f385a20fa767d60a261854568 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Fri, 1 Mar 2024 15:28:28 +0100 Subject: [PATCH 536/698] rerun the script with a regular user after removing installations --- EESSI-install-software.sh | 63 ++++++++++++++++++++++----------------- 1 file changed, 35 insertions(+), 28 deletions(-) diff --git a/EESSI-install-software.sh b/EESSI-install-software.sh index 01ca19336c..1e517bc243 100755 --- a/EESSI-install-software.sh +++ b/EESSI-install-software.sh @@ -187,6 +187,41 @@ fi # assume there's only one diff file that corresponds to the PR patch file pr_diff=$(ls [0-9]*.diff | head -1) +# if this script is run as root, use PR patch file to determine if software needs to be removed first +if [ $UID -eq 0 ]; then + changed_easystacks_rebuilds=$(cat ${pr_diff} | grep '^+++' | cut -f2 -d' ' | sed 's@^[a-z]/@@g' | grep '^easystacks/.*yml$' | egrep -v 'known-issues|missing') | grep "/rebuilds/ + if [ -z ${changed_easystacks} ]; then + echo "No software needs to be removed." + else + for easystack_file in ${changed_easystacks_rebuilds}; do + # determine version of EasyBuild module to load based on EasyBuild version included in name of easystack file + eb_version=$(echo ${easystack_file} | sed 's/.*eb-\([0-9.]*\).*/\1/g') + + # load EasyBuild module (will be installed if it's not available yet) + source ${TOPDIR}/load_easybuild_module.sh ${eb_version} + + if [ -f ${easystack_file} ]; then + echo_green "Software rebuild(s) requested in ${easystack_file}, so determining which existing installation have to be removed..." + # we need to remove existing installation directories first, + # so let's figure out which modules have to be rebuilt by doing a dry-run and grepping "someapp/someversion" for the relevant lines (with [R]) + # * [R] $CFGS/s/someapp/someapp-someversion.eb (module: someapp/someversion) + rebuild_apps=$(${EB} --allow-use-as-root-and-accept-consequences --dry-run-short --rebuild --easystack ${easystack_file} | grep "^ \* \[R\]" | grep -o "module: .*[^)]" | awk '{print $2}') + for app in ${rebuild_apps}; do + app_dir=${EASYBUILD_INSTALLPATH}/software/${app} + app_module=${EASYBUILD_INSTALLPATH}/modules/all/${app}.lua + echo_yellow "Removing ${app_dir} and ${app_module}..." + rm -rf ${appdir} + rm -rf ${app_module} + done + else + fatal_error "Easystack file ${easystack_file} not found!" + fi + done + fi + # now rerun the script with a regular user account to do the software installations + exec su eessi $( readlink -f "$0" ) -- "$@" +fi + # install any additional required scripts # order is important: these are needed to install a full CUDA SDK in host_injections # for now, this just reinstalls all scripts. Note the most elegant, but works @@ -207,34 +242,6 @@ changed_easystacks=$(cat ${pr_diff} | grep '^+++' | cut -f2 -d' ' | sed 's@^[a-z if [ -z ${changed_easystacks} ]; then echo "No missing installations, party time!" # Ensure the bot report success, as there was nothing to be build here else - changed_easystacks_rebuilds=$(grep "/rebuilds/" <<< ${changed_easystacks}) - for easystack_file in ${changed_easystacks_rebuilds}; do - # determine version of EasyBuild module to load based on EasyBuild version included in name of easystack file - eb_version=$(echo ${easystack_file} | sed 's/.*eb-\([0-9.]*\).*/\1/g') - - # load EasyBuild module (will be installed if it's not available yet) - source ${TOPDIR}/load_easybuild_module.sh ${eb_version} - - if [ -f ${easystack_file} ]; then - echo_green "Software rebuild(s) requested in ${easystack_file}, so determining which existing installation have to be removed..." - # we need to remove existing installation directories first, - # so let's figure out which modules have to be rebuilt by doing a dry-run and grepping "someapp/someversion" for the relevant lines (with [R]) - # * [R] $CFGS/s/someapp/someapp-someversion.eb (module: someapp/someversion) - rebuild_apps=$(${EB} --allow-use-as-root-and-accept-consequences --dry-run-short --rebuild --easystack ${easystack_file} | grep "^ \* \[R\]" | grep -o "module: .*[^)]" | awk '{print $2}') - for app in ${rebuild_apps}; do - app_dir=${EASYBUILD_INSTALLPATH}/software/${app} - app_module=${EASYBUILD_INSTALLPATH}/modules/all/${app}.lua - echo_yellow "Removing ${app_dir} and ${app_module}..." - rm -rf ${appdir} - rm -rf ${app_module} - done - else - fatal_error "Easystack file ${easystack_file} not found!" - fi - done - - # drop back to a regular user - su eessi for easystack_file in ${changed_easystacks}; do From 4f436b346bbba403fb8c23c939423ba12b8e1f54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Fri, 1 Mar 2024 15:38:24 +0100 Subject: [PATCH 537/698] fix typo and add missing quote --- EESSI-install-software.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/EESSI-install-software.sh b/EESSI-install-software.sh index 1e517bc243..28bfb8534c 100755 --- a/EESSI-install-software.sh +++ b/EESSI-install-software.sh @@ -189,8 +189,8 @@ pr_diff=$(ls [0-9]*.diff | head -1) # if this script is run as root, use PR patch file to determine if software needs to be removed first if [ $UID -eq 0 ]; then - changed_easystacks_rebuilds=$(cat ${pr_diff} | grep '^+++' | cut -f2 -d' ' | sed 's@^[a-z]/@@g' | grep '^easystacks/.*yml$' | egrep -v 'known-issues|missing') | grep "/rebuilds/ - if [ -z ${changed_easystacks} ]; then + changed_easystacks_rebuilds=$(cat ${pr_diff} | grep '^+++' | cut -f2 -d' ' | sed 's@^[a-z]/@@g' | grep '^easystacks/.*yml$' | egrep -v 'known-issues|missing') | grep "/rebuilds/" + if [ -z ${changed_easystacks_rebuilds} ]; then echo "No software needs to be removed." else for easystack_file in ${changed_easystacks_rebuilds}; do From 0676fdab6d576d0af0b2f107bbd6f92e6cbde146 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Fri, 1 Mar 2024 15:44:04 +0100 Subject: [PATCH 538/698] fix syntax --- EESSI-install-software.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/EESSI-install-software.sh b/EESSI-install-software.sh index 28bfb8534c..0f1856891e 100755 --- a/EESSI-install-software.sh +++ b/EESSI-install-software.sh @@ -189,7 +189,7 @@ pr_diff=$(ls [0-9]*.diff | head -1) # if this script is run as root, use PR patch file to determine if software needs to be removed first if [ $UID -eq 0 ]; then - changed_easystacks_rebuilds=$(cat ${pr_diff} | grep '^+++' | cut -f2 -d' ' | sed 's@^[a-z]/@@g' | grep '^easystacks/.*yml$' | egrep -v 'known-issues|missing') | grep "/rebuilds/" + changed_easystacks_rebuilds=$(cat ${pr_diff} | grep '^+++' | cut -f2 -d' ' | sed 's@^[a-z]/@@g' | grep '^easystacks/.*yml$' | egrep -v 'known-issues|missing' | grep "/rebuilds/") if [ -z ${changed_easystacks_rebuilds} ]; then echo "No software needs to be removed." else From 95d6aaa983c9a59e42ff28a6feab75f493dc2e7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Fri, 1 Mar 2024 15:44:23 +0100 Subject: [PATCH 539/698] fix typo in app_dir variable --- EESSI-install-software.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/EESSI-install-software.sh b/EESSI-install-software.sh index 0f1856891e..7f44403c73 100755 --- a/EESSI-install-software.sh +++ b/EESSI-install-software.sh @@ -210,7 +210,7 @@ if [ $UID -eq 0 ]; then app_dir=${EASYBUILD_INSTALLPATH}/software/${app} app_module=${EASYBUILD_INSTALLPATH}/modules/all/${app}.lua echo_yellow "Removing ${app_dir} and ${app_module}..." - rm -rf ${appdir} + rm -rf ${app_dir} rm -rf ${app_module} done else From 314178937a1876eff79300fc0b562031ffc410a8 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Fri, 1 Mar 2024 15:58:01 +0100 Subject: [PATCH 540/698] Workaround for 'PSM3 can't open nic unit' error --- test_suite.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/test_suite.sh b/test_suite.sh index e9168184bc..e3bab04aec 100755 --- a/test_suite.sh +++ b/test_suite.sh @@ -164,6 +164,9 @@ sed -i "s/__NUM_SOCKETS__/${socket_count}/g" $RFM_CONFIG_FILES sed -i "s/__NUM_CPUS_PER_CORE__/${threads_per_core}/g" $RFM_CONFIG_FILES sed -i "s/__NUM_CPUS_PER_SOCKET__/${cores_per_socket}/g" $RFM_CONFIG_FILES +# Workaround for https://github.com/EESSI/software-layer/pull/467#issuecomment-1973341966 +export PSM3_DEVICES='self,shm' # this is enough, since we only run single node for now + # Check we can run reframe reframe --version if [[ $? -eq 0 ]]; then From e52afc192fc900db8476cb4763a5655228ef9d0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Fri, 1 Mar 2024 16:17:49 +0100 Subject: [PATCH 541/698] run removal step without Prefix --- EESSI-install-software.sh | 3 ++- install_software_layer.sh | 4 ++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/EESSI-install-software.sh b/EESSI-install-software.sh index 7f44403c73..097d0992e5 100755 --- a/EESSI-install-software.sh +++ b/EESSI-install-software.sh @@ -219,7 +219,8 @@ if [ $UID -eq 0 ]; then done fi # now rerun the script with a regular user account to do the software installations - exec su eessi $( readlink -f "$0" ) -- "$@" + #exec su eessi $( readlink -f "$0" ) -- "$@" + exit fi # install any additional required scripts diff --git a/install_software_layer.sh b/install_software_layer.sh index 82ca70b73f..85f856e86a 100755 --- a/install_software_layer.sh +++ b/install_software_layer.sh @@ -1,4 +1,8 @@ #!/bin/bash base_dir=$(dirname $(realpath $0)) source ${base_dir}/init/eessi_defaults +if [ $UID -eq 0 ]; then + ./EESSI-install-software.sh "$@" + exec runuser -u eessi $( readlink -f "$0" ) -- "$@" +fi ./run_in_compat_layer_env.sh ./EESSI-install-software.sh "$@" From be4c59280fdf7de49adcc8029970987201f1b551 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Fri, 1 Mar 2024 16:36:38 +0100 Subject: [PATCH 542/698] move removal part to its own script, at least for now --- EESSI-install-software.sh | 36 -------- EESSI-remove-software.sh | 189 ++++++++++++++++++++++++++++++++++++++ install_software_layer.sh | 2 +- 3 files changed, 190 insertions(+), 37 deletions(-) create mode 100755 EESSI-remove-software.sh diff --git a/EESSI-install-software.sh b/EESSI-install-software.sh index 097d0992e5..ab91d2c6de 100755 --- a/EESSI-install-software.sh +++ b/EESSI-install-software.sh @@ -187,42 +187,6 @@ fi # assume there's only one diff file that corresponds to the PR patch file pr_diff=$(ls [0-9]*.diff | head -1) -# if this script is run as root, use PR patch file to determine if software needs to be removed first -if [ $UID -eq 0 ]; then - changed_easystacks_rebuilds=$(cat ${pr_diff} | grep '^+++' | cut -f2 -d' ' | sed 's@^[a-z]/@@g' | grep '^easystacks/.*yml$' | egrep -v 'known-issues|missing' | grep "/rebuilds/") - if [ -z ${changed_easystacks_rebuilds} ]; then - echo "No software needs to be removed." - else - for easystack_file in ${changed_easystacks_rebuilds}; do - # determine version of EasyBuild module to load based on EasyBuild version included in name of easystack file - eb_version=$(echo ${easystack_file} | sed 's/.*eb-\([0-9.]*\).*/\1/g') - - # load EasyBuild module (will be installed if it's not available yet) - source ${TOPDIR}/load_easybuild_module.sh ${eb_version} - - if [ -f ${easystack_file} ]; then - echo_green "Software rebuild(s) requested in ${easystack_file}, so determining which existing installation have to be removed..." - # we need to remove existing installation directories first, - # so let's figure out which modules have to be rebuilt by doing a dry-run and grepping "someapp/someversion" for the relevant lines (with [R]) - # * [R] $CFGS/s/someapp/someapp-someversion.eb (module: someapp/someversion) - rebuild_apps=$(${EB} --allow-use-as-root-and-accept-consequences --dry-run-short --rebuild --easystack ${easystack_file} | grep "^ \* \[R\]" | grep -o "module: .*[^)]" | awk '{print $2}') - for app in ${rebuild_apps}; do - app_dir=${EASYBUILD_INSTALLPATH}/software/${app} - app_module=${EASYBUILD_INSTALLPATH}/modules/all/${app}.lua - echo_yellow "Removing ${app_dir} and ${app_module}..." - rm -rf ${app_dir} - rm -rf ${app_module} - done - else - fatal_error "Easystack file ${easystack_file} not found!" - fi - done - fi - # now rerun the script with a regular user account to do the software installations - #exec su eessi $( readlink -f "$0" ) -- "$@" - exit -fi - # install any additional required scripts # order is important: these are needed to install a full CUDA SDK in host_injections # for now, this just reinstalls all scripts. Note the most elegant, but works diff --git a/EESSI-remove-software.sh b/EESSI-remove-software.sh new file mode 100755 index 0000000000..89e5be977e --- /dev/null +++ b/EESSI-remove-software.sh @@ -0,0 +1,189 @@ +#!/bin/bash +# +# Script to install EESSI software stack (version set through init/eessi_defaults) + +# see example parsing of command line arguments at +# https://wiki.bash-hackers.org/scripting/posparams#using_a_while_loop +# https://stackoverflow.com/questions/192249/how-do-i-parse-command-line-arguments-in-bash + +display_help() { + echo "usage: $0 [OPTIONS]" + echo " --build-logs-dir - location to copy EasyBuild logs to for failed builds" + echo " -g | --generic - instructs script to build for generic architecture target" + echo " -h | --help - display this usage information" + echo " -x | --http-proxy URL - provides URL for the environment variable http_proxy" + echo " -y | --https-proxy URL - provides URL for the environment variable https_proxy" + echo " --shared-fs-path - path to directory on shared filesystem that can be used" +} + +POSITIONAL_ARGS=() + +while [[ $# -gt 0 ]]; do + case $1 in + -g|--generic) + EASYBUILD_OPTARCH="GENERIC" + shift + ;; + -h|--help) + display_help # Call your function + # no shifting needed here, we're done. + exit 0 + ;; + -x|--http-proxy) + export http_proxy="$2" + shift 2 + ;; + -y|--https-proxy) + export https_proxy="$2" + shift 2 + ;; + --build-logs-dir) + export build_logs_dir="${2}" + shift 2 + ;; + --shared-fs-path) + export shared_fs_path="${2}" + shift 2 + ;; + -*|--*) + echo "Error: Unknown option: $1" >&2 + exit 1 + ;; + *) # No more options + POSITIONAL_ARGS+=("$1") # save positional arg + shift + ;; + esac +done + +set -- "${POSITIONAL_ARGS[@]}" + +TOPDIR=$(dirname $(realpath $0)) + +source $TOPDIR/scripts/utils.sh + +# honor $TMPDIR if it is already defined, use /tmp otherwise +if [ -z $TMPDIR ]; then + export WORKDIR=/tmp/$USER +else + export WORKDIR=$TMPDIR/$USER +fi + +TMPDIR=$(mktemp -d) + +echo ">> Setting up environment..." + +source $TOPDIR/init/minimal_eessi_env + +if [ -d $EESSI_CVMFS_REPO ]; then + echo_green "$EESSI_CVMFS_REPO available, OK!" +else + fatal_error "$EESSI_CVMFS_REPO is not available!" +fi + +# avoid that pyc files for EasyBuild are stored in EasyBuild installation directory +export PYTHONPYCACHEPREFIX=$TMPDIR/pycache + +DETECTION_PARAMETERS='' +GENERIC=0 +EB='eb' +if [[ "$EASYBUILD_OPTARCH" == "GENERIC" ]]; then + echo_yellow ">> GENERIC build requested, taking appropriate measures!" + DETECTION_PARAMETERS="$DETECTION_PARAMETERS --generic" + GENERIC=1 + EB='eb --optarch=GENERIC' +fi + +echo ">> Determining software subdirectory to use for current build host..." +if [ -z $EESSI_SOFTWARE_SUBDIR_OVERRIDE ]; then + export EESSI_SOFTWARE_SUBDIR_OVERRIDE=$(python3 $TOPDIR/eessi_software_subdir.py $DETECTION_PARAMETERS) + echo ">> Determined \$EESSI_SOFTWARE_SUBDIR_OVERRIDE via 'eessi_software_subdir.py $DETECTION_PARAMETERS' script" +else + echo ">> Picking up pre-defined \$EESSI_SOFTWARE_SUBDIR_OVERRIDE: ${EESSI_SOFTWARE_SUBDIR_OVERRIDE}" +fi + +# Set all the EESSI environment variables (respecting $EESSI_SOFTWARE_SUBDIR_OVERRIDE) +# $EESSI_SILENT - don't print any messages +# $EESSI_BASIC_ENV - give a basic set of environment variables +EESSI_SILENT=1 EESSI_BASIC_ENV=1 source $TOPDIR/init/eessi_environment_variables + +if [[ -z ${EESSI_SOFTWARE_SUBDIR} ]]; then + fatal_error "Failed to determine software subdirectory?!" +elif [[ "${EESSI_SOFTWARE_SUBDIR}" != "${EESSI_SOFTWARE_SUBDIR_OVERRIDE}" ]]; then + fatal_error "Values for EESSI_SOFTWARE_SUBDIR_OVERRIDE (${EESSI_SOFTWARE_SUBDIR_OVERRIDE}) and EESSI_SOFTWARE_SUBDIR (${EESSI_SOFTWARE_SUBDIR}) differ!" +else + echo_green ">> Using ${EESSI_SOFTWARE_SUBDIR} as software subdirectory!" +fi + +echo ">> Initializing Lmod..." +source $EPREFIX/usr/share/Lmod/init/bash +ml_version_out=$TMPDIR/ml.out +ml --version &> $ml_version_out +if [[ $? -eq 0 ]]; then + echo_green ">> Found Lmod ${LMOD_VERSION}" +else + fatal_error "Failed to initialize Lmod?! (see output in ${ml_version_out}" +fi + +echo ">> Configuring EasyBuild..." +source $TOPDIR/configure_easybuild + +if [ ! -z "${shared_fs_path}" ]; then + shared_eb_sourcepath=${shared_fs_path}/easybuild/sources + echo ">> Using ${shared_eb_sourcepath} as shared EasyBuild source path" + export EASYBUILD_SOURCEPATH=${shared_eb_sourcepath}:${EASYBUILD_SOURCEPATH} +fi + +echo ">> Setting up \$MODULEPATH..." +# make sure no modules are loaded +module --force purge +# ignore current $MODULEPATH entirely +module unuse $MODULEPATH +module use $EASYBUILD_INSTALLPATH/modules/all +if [[ -z ${MODULEPATH} ]]; then + fatal_error "Failed to set up \$MODULEPATH?!" +else + echo_green ">> MODULEPATH set up: ${MODULEPATH}" +fi + +# assume there's only one diff file that corresponds to the PR patch file +pr_diff=$(ls [0-9]*.diff | head -1) + +# if this script is run as root, use PR patch file to determine if software needs to be removed first +if [ $UID -eq 0 ]; then + changed_easystacks_rebuilds=$(cat ${pr_diff} | grep '^+++' | cut -f2 -d' ' | sed 's@^[a-z]/@@g' | grep '^easystacks/.*yml$' | egrep -v 'known-issues|missing' | grep "/rebuilds/") + if [ -z ${changed_easystacks_rebuilds} ]; then + echo "No software needs to be removed." + else + for easystack_file in ${changed_easystacks_rebuilds}; do + # determine version of EasyBuild module to load based on EasyBuild version included in name of easystack file + eb_version=$(echo ${easystack_file} | sed 's/.*eb-\([0-9.]*\).*/\1/g') + + # load EasyBuild module (will be installed if it's not available yet) + source ${TOPDIR}/load_easybuild_module.sh ${eb_version} + + if [ -f ${easystack_file} ]; then + echo_green "Software rebuild(s) requested in ${easystack_file}, so determining which existing installation have to be removed..." + # we need to remove existing installation directories first, + # so let's figure out which modules have to be rebuilt by doing a dry-run and grepping "someapp/someversion" for the relevant lines (with [R]) + # * [R] $CFGS/s/someapp/someapp-someversion.eb (module: someapp/someversion) + rebuild_apps=$(${EB} --allow-use-as-root-and-accept-consequences --dry-run-short --rebuild --easystack ${easystack_file} | grep "^ \* \[R\]" | grep -o "module: .*[^)]" | awk '{print $2}') + for app in ${rebuild_apps}; do + app_dir=${EASYBUILD_INSTALLPATH}/software/${app} + app_module=${EASYBUILD_INSTALLPATH}/modules/all/${app}.lua + echo_yellow "Removing ${app_dir} and ${app_module}..." + rm -rf ${app_dir} + rm -rf ${app_module} + done + else + fatal_error "Easystack file ${easystack_file} not found!" + fi + done + fi + # now rerun the script with a regular user account to do the software installations + #exec su eessi $( readlink -f "$0" ) -- "$@" + exit +fi + +echo ">> Cleaning up ${TMPDIR}..." +rm -r ${TMPDIR} diff --git a/install_software_layer.sh b/install_software_layer.sh index 85f856e86a..249140a503 100755 --- a/install_software_layer.sh +++ b/install_software_layer.sh @@ -2,7 +2,7 @@ base_dir=$(dirname $(realpath $0)) source ${base_dir}/init/eessi_defaults if [ $UID -eq 0 ]; then - ./EESSI-install-software.sh "$@" + ./EESSI-remove-software.sh "$@" exec runuser -u eessi $( readlink -f "$0" ) -- "$@" fi ./run_in_compat_layer_env.sh ./EESSI-install-software.sh "$@" From efbeb561740f8ef5c066e1b064c16f45087c668f Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Mon, 4 Mar 2024 16:59:00 +0100 Subject: [PATCH 543/698] Use LMOD_CONFIG_DIR instead of LMOD_RC to allow user overrides of what we specify in our RC file, see search order on https://lmod.readthedocs.io/en/latest/145_properties.html?highlight=lmod_rc#the-properties-file-lmodrc-lua . Also, prefix our hooks with eessi_ to avoid unintentional clashes in namespace between site lmod configuration and eessi lmod configuration --- create_lmodrc.py | 8 ++++---- init/eessi_environment_variables | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/create_lmodrc.py b/create_lmodrc.py index bc69dd4396..ff34906c0b 100755 --- a/create_lmodrc.py +++ b/create_lmodrc.py @@ -29,7 +29,7 @@ return content end -local function cuda_enabled_load_hook(t) +local function eessi_cuda_enabled_load_hook(t) local frameStk = require("FrameStk"):singleton() local mt = frameStk:mt() local simpleName = string.match(t.modFullName, "(.-)/") @@ -94,7 +94,7 @@ end end -local function openmpi_load_hook(t) +local function eessi_openmpi_load_hook(t) -- disable smcuda BTL when loading OpenMPI module for aarch64/neoverse_v1, -- to work around hang/crash due to bug in OpenMPI; -- see https://gitlab.com/eessi/support/-/issues/41 @@ -114,8 +114,8 @@ end end -hook.register("load", cuda_enabled_load_hook) -hook.register("load", openmpi_load_hook) +hook.register("load", eessi_cuda_enabled_load_hook) +hook.register("load", eessi_openmpi_load_hook) """ def error(msg): diff --git a/init/eessi_environment_variables b/init/eessi_environment_variables index af5222e7b9..d3a209630e 100644 --- a/init/eessi_environment_variables +++ b/init/eessi_environment_variables @@ -76,8 +76,8 @@ if [ -d $EESSI_PREFIX ]; then false fi - export LMOD_RC="$EESSI_SOFTWARE_PATH/.lmod/lmodrc.lua" - if [ -f $LMOD_RC ]; then + export LMOD_CONFIG_DIR="$EESSI_SOFTWARE_PATH/.lmod" + if [ -f $LMOD_CONFIG_DIR/lmodrc.lua ]; then show_msg "Found Lmod configuration file at $LMOD_RC" else error "Lmod configuration file not found at $LMOD_RC" From 590cabd7c068a9986f0eba33792005a7b9ce883a Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Tue, 5 Mar 2024 10:42:27 +0100 Subject: [PATCH 544/698] Combine functions into a single function, before registering this as a hook. Lmod only permits the registration of a single function, trying to register a second function will just overwrite the first, as can be seen from https://github.com/TACC/Lmod/blob/a97d68193a6f32ebca4b4bd70dac0f6ac8fddefe/src/Hook.lua#L87 --- create_lmodrc.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/create_lmodrc.py b/create_lmodrc.py index ff34906c0b..621c8e271a 100755 --- a/create_lmodrc.py +++ b/create_lmodrc.py @@ -114,8 +114,15 @@ end end -hook.register("load", eessi_cuda_enabled_load_hook) -hook.register("load", eessi_openmpi_load_hook) +-- Combine both functions into a single one, as we can only register one function as load hook in lmod +-- Also: make it non-local, so it can be imported and extended by other lmodrc files if needed +function eessi_load_hook(t) + eessi_cuda_enabled_load_hook(t) + eessi_openmpi_load_hook(t) +end + + +hook.register("load", eessi_load_hook) """ def error(msg): From 340b8332ffb858ba43613f38bd4ac23d260cc31e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Tue, 5 Mar 2024 14:55:32 +0100 Subject: [PATCH 545/698] remove su, add error message --- EESSI-remove-software.sh | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/EESSI-remove-software.sh b/EESSI-remove-software.sh index 89e5be977e..e55efe823e 100755 --- a/EESSI-remove-software.sh +++ b/EESSI-remove-software.sh @@ -180,10 +180,10 @@ if [ $UID -eq 0 ]; then fi done fi - # now rerun the script with a regular user account to do the software installations - #exec su eessi $( readlink -f "$0" ) -- "$@" - exit +else + fatal_error "This script can only be run by root!" fi -echo ">> Cleaning up ${TMPDIR}..." -rm -r ${TMPDIR} + +#echo ">> Cleaning up ${TMPDIR}..." +#rm -r ${TMPDIR} From 88d21d9487272abbe951477be8727165d1c01795 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Tue, 5 Mar 2024 15:13:27 +0100 Subject: [PATCH 546/698] first run the EESSI-remove-software.sh script in a separate container session --- eessi_container.sh | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/eessi_container.sh b/eessi_container.sh index bedb269cfd..09cec8964f 100755 --- a/eessi_container.sh +++ b/eessi_container.sh @@ -585,12 +585,12 @@ if [[ "${ACCESS}" == "ro" ]]; then fi if [[ "${ACCESS}" == "rw" ]]; then - if [[ ! -z ${JOB_CFG_FILE} ]]; then + #if [[ ! -z ${JOB_CFG_FILE} ]]; then # always launch build jobs triggered by the job with --fakeroot in order to be able to remove existing installations, see: # https://github.com/EESSI/software-layer/issues/312 # we drop back to a regular user in the build script - ADDITIONAL_CONTAINER_OPTIONS+=("--fakeroot") - fi + #ADDITIONAL_CONTAINER_OPTIONS+=("--fakeroot") + #fi mkdir -p ${EESSI_TMPDIR}/overlay-upper mkdir -p ${EESSI_TMPDIR}/overlay-work @@ -627,6 +627,12 @@ if [ ! -z ${EESSI_SOFTWARE_SUBDIR_OVERRIDE} ]; then export APPTAINERENV_EESSI_SOFTWARE_SUBDIR_OVERRIDE=${EESSI_SOFTWARE_SUBDIR_OVERRIDE} fi +if [[ ! -z ${JOB_CFG_FILE} ]]; then + echo "Removing software by launching container with command (next line):" + echo "singularity ${RUN_QUIET} exec --fakeroot ${ADDITIONAL_CONTAINER_OPTIONS[@]} ${EESSI_FUSE_MOUNTS[@]} ${CONTAINER} ./EESSI-remove-software.sh" + singularity ${RUN_QUIET} exec --fakeroot "${ADDITIONAL_CONTAINER_OPTIONS[@]}" "${EESSI_FUSE_MOUNTS[@]}" ${CONTAINER} ./EESSI-remove-software.sh +fi + echo "Launching container with command (next line):" echo "singularity ${RUN_QUIET} ${MODE} ${ADDITIONAL_CONTAINER_OPTIONS[@]} ${EESSI_FUSE_MOUNTS[@]} ${CONTAINER} $@" singularity ${RUN_QUIET} ${MODE} "${ADDITIONAL_CONTAINER_OPTIONS[@]}" "${EESSI_FUSE_MOUNTS[@]}" ${CONTAINER} "$@" From 499328d70e3c6275eec9dcaf717a34afaf75a6e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Tue, 5 Mar 2024 15:14:47 +0100 Subject: [PATCH 547/698] undo --- install_software_layer.sh | 4 ---- 1 file changed, 4 deletions(-) diff --git a/install_software_layer.sh b/install_software_layer.sh index 249140a503..82ca70b73f 100755 --- a/install_software_layer.sh +++ b/install_software_layer.sh @@ -1,8 +1,4 @@ #!/bin/bash base_dir=$(dirname $(realpath $0)) source ${base_dir}/init/eessi_defaults -if [ $UID -eq 0 ]; then - ./EESSI-remove-software.sh "$@" - exec runuser -u eessi $( readlink -f "$0" ) -- "$@" -fi ./run_in_compat_layer_env.sh ./EESSI-install-software.sh "$@" From 8100fed0e6a7105a4f1ffc08f6fca89f35145e0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Tue, 5 Mar 2024 15:32:27 +0100 Subject: [PATCH 548/698] dont use TMPDIR --- EESSI-remove-software.sh | 20 +++----------------- 1 file changed, 3 insertions(+), 17 deletions(-) diff --git a/EESSI-remove-software.sh b/EESSI-remove-software.sh index e55efe823e..91490507c6 100755 --- a/EESSI-remove-software.sh +++ b/EESSI-remove-software.sh @@ -62,15 +62,6 @@ TOPDIR=$(dirname $(realpath $0)) source $TOPDIR/scripts/utils.sh -# honor $TMPDIR if it is already defined, use /tmp otherwise -if [ -z $TMPDIR ]; then - export WORKDIR=/tmp/$USER -else - export WORKDIR=$TMPDIR/$USER -fi - -TMPDIR=$(mktemp -d) - echo ">> Setting up environment..." source $TOPDIR/init/minimal_eessi_env @@ -82,7 +73,7 @@ else fi # avoid that pyc files for EasyBuild are stored in EasyBuild installation directory -export PYTHONPYCACHEPREFIX=$TMPDIR/pycache +#export PYTHONPYCACHEPREFIX=$TMPDIR/pycache DETECTION_PARAMETERS='' GENERIC=0 @@ -117,12 +108,11 @@ fi echo ">> Initializing Lmod..." source $EPREFIX/usr/share/Lmod/init/bash -ml_version_out=$TMPDIR/ml.out -ml --version &> $ml_version_out +ml --version if [[ $? -eq 0 ]]; then echo_green ">> Found Lmod ${LMOD_VERSION}" else - fatal_error "Failed to initialize Lmod?! (see output in ${ml_version_out}" + fatal_error "Failed to initialize Lmod?!" fi echo ">> Configuring EasyBuild..." @@ -183,7 +173,3 @@ if [ $UID -eq 0 ]; then else fatal_error "This script can only be run by root!" fi - - -#echo ">> Cleaning up ${TMPDIR}..." -#rm -r ${TMPDIR} From c758d74bc70d386ea8c1134d5f9edf500b48db5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Tue, 5 Mar 2024 15:42:15 +0100 Subject: [PATCH 549/698] use EUID instead of UID --- EESSI-remove-software.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/EESSI-remove-software.sh b/EESSI-remove-software.sh index 91490507c6..4cbc27be98 100755 --- a/EESSI-remove-software.sh +++ b/EESSI-remove-software.sh @@ -140,7 +140,7 @@ fi pr_diff=$(ls [0-9]*.diff | head -1) # if this script is run as root, use PR patch file to determine if software needs to be removed first -if [ $UID -eq 0 ]; then +if [ $EUID -eq 0 ]; then changed_easystacks_rebuilds=$(cat ${pr_diff} | grep '^+++' | cut -f2 -d' ' | sed 's@^[a-z]/@@g' | grep '^easystacks/.*yml$' | egrep -v 'known-issues|missing' | grep "/rebuilds/") if [ -z ${changed_easystacks_rebuilds} ]; then echo "No software needs to be removed." From 78cc503e43cd4731fb5a8c10c4d3499613cb09f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Tue, 5 Mar 2024 15:48:15 +0100 Subject: [PATCH 550/698] do set/override TMPDIR --- EESSI-remove-software.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/EESSI-remove-software.sh b/EESSI-remove-software.sh index 4cbc27be98..819c08f8ce 100755 --- a/EESSI-remove-software.sh +++ b/EESSI-remove-software.sh @@ -60,6 +60,8 @@ set -- "${POSITIONAL_ARGS[@]}" TOPDIR=$(dirname $(realpath $0)) +export TMPDIR=$(mktemp -d /tmp/eessi-remove.XXXXXXXX) + source $TOPDIR/scripts/utils.sh echo ">> Setting up environment..." From 0de249e32f6cb2cd1cbb694cbddf37fb93987561 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Tue, 5 Mar 2024 18:15:10 +0100 Subject: [PATCH 551/698] Look for site-specific lmodrc file in host_injections. If present, set LMOD_RC --- init/eessi_environment_variables | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/init/eessi_environment_variables b/init/eessi_environment_variables index d3a209630e..1c8a68b1d5 100644 --- a/init/eessi_environment_variables +++ b/init/eessi_environment_variables @@ -82,6 +82,11 @@ if [ -d $EESSI_PREFIX ]; then else error "Lmod configuration file not found at $LMOD_RC" fi + # Allow for site-specific lmod configuration + host_lmod_rc="$EESSI_CVMFS_REPO"/host_injections/.lmod/lmodrc.lua + if [ -f $host_lmod_rc ]; then + export LMOD_RC="$host_lmod_rc" + fi else error "EESSI software layer at $EESSI_SOFTWARE_PATH not found!" From c1840dd55f306b20e6d26201990313ad4dc18a3a Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Wed, 6 Mar 2024 15:05:07 +0100 Subject: [PATCH 552/698] Next the local lmodrc within the versioned directory, e.g. /cvmfs/software.eessi.io/host_injections/2023.06/.lmod/lmodrc.lua --- init/eessi_environment_variables | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/init/eessi_environment_variables b/init/eessi_environment_variables index 1c8a68b1d5..5407034191 100644 --- a/init/eessi_environment_variables +++ b/init/eessi_environment_variables @@ -83,7 +83,7 @@ if [ -d $EESSI_PREFIX ]; then error "Lmod configuration file not found at $LMOD_RC" fi # Allow for site-specific lmod configuration - host_lmod_rc="$EESSI_CVMFS_REPO"/host_injections/.lmod/lmodrc.lua + host_lmod_rc="${EESSI_PREFIX/versions/host_injections}/.lmod/lmodrc.lua if [ -f $host_lmod_rc ]; then export LMOD_RC="$host_lmod_rc" fi From df4140a74bad2f0af022c10a2d8ada12fa1627df Mon Sep 17 00:00:00 2001 From: ocaisa Date: Wed, 6 Mar 2024 15:54:28 +0100 Subject: [PATCH 553/698] Update init/eessi_environment_variables --- init/eessi_environment_variables | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/init/eessi_environment_variables b/init/eessi_environment_variables index 5407034191..f9ca6de408 100644 --- a/init/eessi_environment_variables +++ b/init/eessi_environment_variables @@ -83,7 +83,7 @@ if [ -d $EESSI_PREFIX ]; then error "Lmod configuration file not found at $LMOD_RC" fi # Allow for site-specific lmod configuration - host_lmod_rc="${EESSI_PREFIX/versions/host_injections}/.lmod/lmodrc.lua + host_lmod_rc="${EESSI_PREFIX/versions/host_injections}"/.lmod/lmodrc.lua if [ -f $host_lmod_rc ]; then export LMOD_RC="$host_lmod_rc" fi From 78e582ba2c5fd5de813836151a3d256fc6ba5c94 Mon Sep 17 00:00:00 2001 From: ocaisa Date: Wed, 6 Mar 2024 15:59:31 +0100 Subject: [PATCH 554/698] Update init/eessi_environment_variables --- init/eessi_environment_variables | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/init/eessi_environment_variables b/init/eessi_environment_variables index f9ca6de408..b41dd60924 100644 --- a/init/eessi_environment_variables +++ b/init/eessi_environment_variables @@ -78,9 +78,9 @@ if [ -d $EESSI_PREFIX ]; then export LMOD_CONFIG_DIR="$EESSI_SOFTWARE_PATH/.lmod" if [ -f $LMOD_CONFIG_DIR/lmodrc.lua ]; then - show_msg "Found Lmod configuration file at $LMOD_RC" + show_msg "Found Lmod configuration file at $LMOD_CONFIG_DIR/lmodrc.lua" else - error "Lmod configuration file not found at $LMOD_RC" + error "Lmod configuration file not found at $LMOD_CONFIG_DIR/lmodrc.lua" fi # Allow for site-specific lmod configuration host_lmod_rc="${EESSI_PREFIX/versions/host_injections}"/.lmod/lmodrc.lua From 77c97235f0291dff7b98f2f1958e345a7afb48ee Mon Sep 17 00:00:00 2001 From: ocaisa Date: Wed, 6 Mar 2024 16:00:42 +0100 Subject: [PATCH 555/698] Update init/eessi_environment_variables --- init/eessi_environment_variables | 1 + 1 file changed, 1 insertion(+) diff --git a/init/eessi_environment_variables b/init/eessi_environment_variables index b41dd60924..d4c113c67a 100644 --- a/init/eessi_environment_variables +++ b/init/eessi_environment_variables @@ -85,6 +85,7 @@ if [ -d $EESSI_PREFIX ]; then # Allow for site-specific lmod configuration host_lmod_rc="${EESSI_PREFIX/versions/host_injections}"/.lmod/lmodrc.lua if [ -f $host_lmod_rc ]; then + show_msg "Found site Lmod configuration file at $LMOD_RC" export LMOD_RC="$host_lmod_rc" fi From 276a64c66347e24b94ace71914547cc0abd75381 Mon Sep 17 00:00:00 2001 From: Richard Top Date: Thu, 7 Mar 2024 07:54:23 +0000 Subject: [PATCH 556/698] {2023.06}[gompi/2023b] CDO v2.2.2 --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml index 4dd31dbd5d..2664d8f417 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml @@ -8,3 +8,6 @@ easyconfigs: - matplotlib-3.8.2-gfbf-2023b.eb: options: from-pr: 19552 + - CDO-2.2.2-gompi-2023b.eb: + options: + from-pr: 19792 From e33938f1a8424d28966827c4a8942f82b8043bed Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Thu, 7 Mar 2024 14:52:25 +0100 Subject: [PATCH 557/698] Revert changes in eessi_environment_variables. Limit this PR to the bug fix only. We can follow up properly using SitePackage.lua instead --- init/eessi_environment_variables | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/init/eessi_environment_variables b/init/eessi_environment_variables index d4c113c67a..af5222e7b9 100644 --- a/init/eessi_environment_variables +++ b/init/eessi_environment_variables @@ -76,17 +76,11 @@ if [ -d $EESSI_PREFIX ]; then false fi - export LMOD_CONFIG_DIR="$EESSI_SOFTWARE_PATH/.lmod" - if [ -f $LMOD_CONFIG_DIR/lmodrc.lua ]; then - show_msg "Found Lmod configuration file at $LMOD_CONFIG_DIR/lmodrc.lua" + export LMOD_RC="$EESSI_SOFTWARE_PATH/.lmod/lmodrc.lua" + if [ -f $LMOD_RC ]; then + show_msg "Found Lmod configuration file at $LMOD_RC" else - error "Lmod configuration file not found at $LMOD_CONFIG_DIR/lmodrc.lua" - fi - # Allow for site-specific lmod configuration - host_lmod_rc="${EESSI_PREFIX/versions/host_injections}"/.lmod/lmodrc.lua - if [ -f $host_lmod_rc ]; then - show_msg "Found site Lmod configuration file at $LMOD_RC" - export LMOD_RC="$host_lmod_rc" + error "Lmod configuration file not found at $LMOD_RC" fi else From c660a4259c7e391502167203e4a9bc31bbac692e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Fri, 8 Mar 2024 10:40:40 +0100 Subject: [PATCH 558/698] dont set fakeroot here --- eessi_container.sh | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/eessi_container.sh b/eessi_container.sh index 09cec8964f..ad6d68640c 100755 --- a/eessi_container.sh +++ b/eessi_container.sh @@ -627,11 +627,11 @@ if [ ! -z ${EESSI_SOFTWARE_SUBDIR_OVERRIDE} ]; then export APPTAINERENV_EESSI_SOFTWARE_SUBDIR_OVERRIDE=${EESSI_SOFTWARE_SUBDIR_OVERRIDE} fi -if [[ ! -z ${JOB_CFG_FILE} ]]; then - echo "Removing software by launching container with command (next line):" - echo "singularity ${RUN_QUIET} exec --fakeroot ${ADDITIONAL_CONTAINER_OPTIONS[@]} ${EESSI_FUSE_MOUNTS[@]} ${CONTAINER} ./EESSI-remove-software.sh" - singularity ${RUN_QUIET} exec --fakeroot "${ADDITIONAL_CONTAINER_OPTIONS[@]}" "${EESSI_FUSE_MOUNTS[@]}" ${CONTAINER} ./EESSI-remove-software.sh -fi +#if [[ ! -z ${JOB_CFG_FILE} ]]; then +# echo "Removing software by launching container with command (next line):" +# echo "singularity ${RUN_QUIET} exec --fakeroot ${ADDITIONAL_CONTAINER_OPTIONS[@]} ${EESSI_FUSE_MOUNTS[@]} ${CONTAINER} ./EESSI-remove-software.sh" +# singularity ${RUN_QUIET} exec --fakeroot "${ADDITIONAL_CONTAINER_OPTIONS[@]}" "${EESSI_FUSE_MOUNTS[@]}" ${CONTAINER} ./EESSI-remove-software.sh +#fi echo "Launching container with command (next line):" echo "singularity ${RUN_QUIET} ${MODE} ${ADDITIONAL_CONTAINER_OPTIONS[@]} ${EESSI_FUSE_MOUNTS[@]} ${CONTAINER} $@" From be5aa374e0aea043f97a709afae6fba58c556a59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Fri, 8 Mar 2024 10:40:51 +0100 Subject: [PATCH 559/698] run build step with fakeroot --- bot/build.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bot/build.sh b/bot/build.sh index 1622e757e2..ef9b34ab88 100755 --- a/bot/build.sh +++ b/bot/build.sh @@ -181,6 +181,8 @@ BUILD_STEP_ARGS+=("--nvidia" "all") if [[ ! -z ${SHARED_FS_PATH} ]]; then BUILD_STEP_ARGS+=("--host-injections" "${SHARED_FS_PATH}/host-injections") fi +# add fakeroot option in order to be able to remove software +BUILD_STEP_ARGS+=("--fakeroot") # prepare arguments to install_software_layer.sh (specific to build step) declare -a INSTALL_SCRIPT_ARGS=() From 4946b085eb6bff9515aa8e2257d3320f778ab6f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Fri, 8 Mar 2024 10:41:21 +0100 Subject: [PATCH 560/698] if run as root, run the removal script --- install_software_layer.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/install_software_layer.sh b/install_software_layer.sh index 82ca70b73f..8137ec78e3 100755 --- a/install_software_layer.sh +++ b/install_software_layer.sh @@ -1,4 +1,8 @@ #!/bin/bash base_dir=$(dirname $(realpath $0)) source ${base_dir}/init/eessi_defaults +if [ $EUID -eq 0 ]; then + ./EESSI-remove-software.sh "$@" + exec runuser -u eessi $( readlink -f "$0" ) -- "$@" +fi ./run_in_compat_layer_env.sh ./EESSI-install-software.sh "$@" From 123c47a84ff20e35c2fbe7dba6a7f371b9a1c694 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Fri, 8 Mar 2024 10:51:16 +0100 Subject: [PATCH 561/698] add fakeroot option --- eessi_container.sh | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/eessi_container.sh b/eessi_container.sh index ad6d68640c..af8618f4b8 100755 --- a/eessi_container.sh +++ b/eessi_container.sh @@ -73,6 +73,7 @@ display_help() { echo " -a | --access {ro,rw} - ro (read-only), rw (read & write) [default: ro]" echo " -c | --container IMG - image file or URL defining the container to use" echo " [default: docker://ghcr.io/eessi/build-node:debian11]" + echo " -f | --fakeroot - run the container with --fakeroot [default: false]" echo " -g | --storage DIR - directory space on host machine (used for" echo " temporary data) [default: 1. TMPDIR, 2. /tmp]" echo " -h | --help - display this usage information [default: false]" @@ -113,6 +114,7 @@ display_help() { ACCESS="ro" CONTAINER="docker://ghcr.io/eessi/build-node:debian11" #DRY_RUN=0 +FAKEROOT=0 VERBOSE=0 STORAGE= LIST_REPOS=0 @@ -140,6 +142,10 @@ while [[ $# -gt 0 ]]; do # DRY_RUN=1 # shift 1 # ;; + -f|--fakeroot) + FAKEROOT=1 + shift 1 + ;; -g|--storage) STORAGE="$2" shift 2 @@ -460,6 +466,11 @@ if [[ ${SETUP_NVIDIA} -eq 1 ]]; then fi fi +# Configure the fakeroot setting for the container +if [[ ${FAKEROOT} -eq 1 ]]; then + ADDITIONAL_CONTAINER_OPTIONS+=("--fakeroot") +fi + # set up repository config (always create directory repos_cfg and populate it with info when # arg -r|--repository is used) mkdir -p ${EESSI_TMPDIR}/repos_cfg From 93ccf68c0fcb5f48aeba2339f09bdf892d4547d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Fri, 8 Mar 2024 11:13:46 +0100 Subject: [PATCH 562/698] add echo --- install_software_layer.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/install_software_layer.sh b/install_software_layer.sh index 8137ec78e3..c5cf40bb5a 100755 --- a/install_software_layer.sh +++ b/install_software_layer.sh @@ -1,6 +1,9 @@ #!/bin/bash base_dir=$(dirname $(realpath $0)) source ${base_dir}/init/eessi_defaults + +echo "User ID: $EUID" + if [ $EUID -eq 0 ]; then ./EESSI-remove-software.sh "$@" exec runuser -u eessi $( readlink -f "$0" ) -- "$@" From 017803bbf1705045b84a4bf8c8b4e479fffada5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Fri, 8 Mar 2024 11:18:57 +0100 Subject: [PATCH 563/698] add echo --- EESSI-install-software.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/EESSI-install-software.sh b/EESSI-install-software.sh index ab91d2c6de..4d26b30b53 100755 --- a/EESSI-install-software.sh +++ b/EESSI-install-software.sh @@ -87,6 +87,8 @@ while [[ $# -gt 0 ]]; do esac done +echo "Software installation user: $EUID $UID" + set -- "${POSITIONAL_ARGS[@]}" TOPDIR=$(dirname $(realpath $0)) From c49240680190081b1e0cc6ac8b9e57bffde415c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Fri, 8 Mar 2024 11:51:42 +0100 Subject: [PATCH 564/698] add removal step --- bot/build.sh | 41 ++++++++++++++++++++++++++++++----------- 1 file changed, 30 insertions(+), 11 deletions(-) diff --git a/bot/build.sh b/bot/build.sh index ef9b34ab88..bc1cd27770 100755 --- a/bot/build.sh +++ b/bot/build.sh @@ -168,9 +168,34 @@ COMMON_ARGS+=("--mode" "run") # make sure to use the same parent dir for storing tarballs of tmp PREVIOUS_TMP_DIR=${PWD}/previous_tmp -# prepare directory to store tarball of tmp for build step +# prepare directory to store tarball of tmp for removal and build steps +TARBALL_TMP_REMOVE_STEP_DIR=${PREVIOUS_TMP_DIR}/remove_step TARBALL_TMP_BUILD_STEP_DIR=${PREVIOUS_TMP_DIR}/build_step -mkdir -p ${TARBALL_TMP_BUILD_STEP_DIR} +mkdir -p ${TARBALL_TMP_BUILD_STEP_DIR} ${TARBALL_TMP_REMOVE_STEP_DIR} + +# prepare arguments to install_software_layer.sh (specific to build step) +declare -a INSTALL_SCRIPT_ARGS=() +if [[ ${EESSI_SOFTWARE_SUBDIR_OVERRIDE} =~ .*/generic$ ]]; then + INSTALL_SCRIPT_ARGS+=("--generic") +fi +[[ ! -z ${BUILD_LOGS_DIR} ]] && INSTALL_SCRIPT_ARGS+=("--build-logs-dir" "${BUILD_LOGS_DIR}") +[[ ! -z ${SHARED_FS_PATH} ]] && INSTALL_SCRIPT_ARGS+=("--shared-fs-path" "${SHARED_FS_PATH}") + +# prepare arguments to eessi_container.sh specific to remove step +declare -a REMOVE_STEP_ARGS=() +REMOVE_STEP_ARGS+=("--save" "${TARBALL_TMP_BUILD_STEP_DIR}") +REMOVE_STEP_ARGS+=("--storage" "${STORAGE}") +# add fakeroot option in order to be able to remove software +REMOVE_STEP_ARGS+=("--fakeroot") + +# create tmp file for output of removal step +remove_outerr=$(mktemp remove.outerr.XXXX) + +echo "Executing command to remove software:" +echo "./eessi_container.sh ${COMMON_ARGS[@]} ${REMOVE_STEP_ARGS[@]}" +echo " -- ./install_software_layer.sh \"${INSTALL_SCRIPT_ARGS[@]}\" \"$@\" 2>&1 | tee -a ${remove_outerr}" +./eessi_container.sh "${COMMON_ARGS[@]}" "${REMOVE_STEP_ARGS[@]}" \ + -- ./install_software_layer.sh "${INSTALL_SCRIPT_ARGS[@]}" "$@" 2>&1 | tee -a ${remove_outerr} # prepare arguments to eessi_container.sh specific to build step declare -a BUILD_STEP_ARGS=() @@ -181,16 +206,10 @@ BUILD_STEP_ARGS+=("--nvidia" "all") if [[ ! -z ${SHARED_FS_PATH} ]]; then BUILD_STEP_ARGS+=("--host-injections" "${SHARED_FS_PATH}/host-injections") fi -# add fakeroot option in order to be able to remove software -BUILD_STEP_ARGS+=("--fakeroot") -# prepare arguments to install_software_layer.sh (specific to build step) -declare -a INSTALL_SCRIPT_ARGS=() -if [[ ${EESSI_SOFTWARE_SUBDIR_OVERRIDE} =~ .*/generic$ ]]; then - INSTALL_SCRIPT_ARGS+=("--generic") -fi -[[ ! -z ${BUILD_LOGS_DIR} ]] && INSTALL_SCRIPT_ARGS+=("--build-logs-dir" "${BUILD_LOGS_DIR}") -[[ ! -z ${SHARED_FS_PATH} ]] && INSTALL_SCRIPT_ARGS+=("--shared-fs-path" "${SHARED_FS_PATH}") +# determine temporary directory to resume from; this is important in case software was removed for a rebuild +REMOVE_TMPDIR=$(grep ' as tmp directory ' ${remove_outerr} | cut -d ' ' -f 2) +BUILD_STEP_ARGS+=("--resume" "${REMOVE_TMPDIR}") # create tmp file for output of build step build_outerr=$(mktemp build.outerr.XXXX) From 7b57e8130ca9a03cc2fab3a8b74bda0c59d1c6e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Fri, 8 Mar 2024 11:52:05 +0100 Subject: [PATCH 565/698] remove removal step --- install_software_layer.sh | 7 ------- 1 file changed, 7 deletions(-) diff --git a/install_software_layer.sh b/install_software_layer.sh index c5cf40bb5a..82ca70b73f 100755 --- a/install_software_layer.sh +++ b/install_software_layer.sh @@ -1,11 +1,4 @@ #!/bin/bash base_dir=$(dirname $(realpath $0)) source ${base_dir}/init/eessi_defaults - -echo "User ID: $EUID" - -if [ $EUID -eq 0 ]; then - ./EESSI-remove-software.sh "$@" - exec runuser -u eessi $( readlink -f "$0" ) -- "$@" -fi ./run_in_compat_layer_env.sh ./EESSI-install-software.sh "$@" From 485ff46bd4e87d2c9e35d1e42b12d8c884e782f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Fri, 8 Mar 2024 11:52:50 +0100 Subject: [PATCH 566/698] call EESSI-remove-software.sh for removal step --- bot/build.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bot/build.sh b/bot/build.sh index bc1cd27770..208209ab28 100755 --- a/bot/build.sh +++ b/bot/build.sh @@ -193,9 +193,9 @@ remove_outerr=$(mktemp remove.outerr.XXXX) echo "Executing command to remove software:" echo "./eessi_container.sh ${COMMON_ARGS[@]} ${REMOVE_STEP_ARGS[@]}" -echo " -- ./install_software_layer.sh \"${INSTALL_SCRIPT_ARGS[@]}\" \"$@\" 2>&1 | tee -a ${remove_outerr}" +echo " -- ./EESSI-remove-software.sh \"${INSTALL_SCRIPT_ARGS[@]}\" \"$@\" 2>&1 | tee -a ${remove_outerr}" ./eessi_container.sh "${COMMON_ARGS[@]}" "${REMOVE_STEP_ARGS[@]}" \ - -- ./install_software_layer.sh "${INSTALL_SCRIPT_ARGS[@]}" "$@" 2>&1 | tee -a ${remove_outerr} + -- ./EESSI-remove-software.sh "${INSTALL_SCRIPT_ARGS[@]}" "$@" 2>&1 | tee -a ${remove_outerr} # prepare arguments to eessi_container.sh specific to build step declare -a BUILD_STEP_ARGS=() From 8204a529b4d73aa082bcc0a785555a3f1119fe70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Fri, 8 Mar 2024 12:00:49 +0100 Subject: [PATCH 567/698] remove echo command --- EESSI-install-software.sh | 2 -- 1 file changed, 2 deletions(-) diff --git a/EESSI-install-software.sh b/EESSI-install-software.sh index 4d26b30b53..ab91d2c6de 100755 --- a/EESSI-install-software.sh +++ b/EESSI-install-software.sh @@ -87,8 +87,6 @@ while [[ $# -gt 0 ]]; do esac done -echo "Software installation user: $EUID $UID" - set -- "${POSITIONAL_ARGS[@]}" TOPDIR=$(dirname $(realpath $0)) From 15eb765405f65966f7c16c2756d7062bbcb4d4a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Fri, 8 Mar 2024 12:02:43 +0100 Subject: [PATCH 568/698] remove unused code --- eessi_container.sh | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/eessi_container.sh b/eessi_container.sh index af8618f4b8..d084fe5fab 100755 --- a/eessi_container.sh +++ b/eessi_container.sh @@ -596,12 +596,6 @@ if [[ "${ACCESS}" == "ro" ]]; then fi if [[ "${ACCESS}" == "rw" ]]; then - #if [[ ! -z ${JOB_CFG_FILE} ]]; then - # always launch build jobs triggered by the job with --fakeroot in order to be able to remove existing installations, see: - # https://github.com/EESSI/software-layer/issues/312 - # we drop back to a regular user in the build script - #ADDITIONAL_CONTAINER_OPTIONS+=("--fakeroot") - #fi mkdir -p ${EESSI_TMPDIR}/overlay-upper mkdir -p ${EESSI_TMPDIR}/overlay-work @@ -638,12 +632,6 @@ if [ ! -z ${EESSI_SOFTWARE_SUBDIR_OVERRIDE} ]; then export APPTAINERENV_EESSI_SOFTWARE_SUBDIR_OVERRIDE=${EESSI_SOFTWARE_SUBDIR_OVERRIDE} fi -#if [[ ! -z ${JOB_CFG_FILE} ]]; then -# echo "Removing software by launching container with command (next line):" -# echo "singularity ${RUN_QUIET} exec --fakeroot ${ADDITIONAL_CONTAINER_OPTIONS[@]} ${EESSI_FUSE_MOUNTS[@]} ${CONTAINER} ./EESSI-remove-software.sh" -# singularity ${RUN_QUIET} exec --fakeroot "${ADDITIONAL_CONTAINER_OPTIONS[@]}" "${EESSI_FUSE_MOUNTS[@]}" ${CONTAINER} ./EESSI-remove-software.sh -#fi - echo "Launching container with command (next line):" echo "singularity ${RUN_QUIET} ${MODE} ${ADDITIONAL_CONTAINER_OPTIONS[@]} ${EESSI_FUSE_MOUNTS[@]} ${CONTAINER} $@" singularity ${RUN_QUIET} ${MODE} "${ADDITIONAL_CONTAINER_OPTIONS[@]}" "${EESSI_FUSE_MOUNTS[@]}" ${CONTAINER} "$@" From 1f7501f2e1aad58abb5d85430d8fed95aaa55576 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Fri, 8 Mar 2024 13:02:14 +0100 Subject: [PATCH 569/698] rename remove to removal, resume tarball step from removal dir --- bot/build.sh | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/bot/build.sh b/bot/build.sh index 208209ab28..8f3439b3ad 100755 --- a/bot/build.sh +++ b/bot/build.sh @@ -169,9 +169,9 @@ COMMON_ARGS+=("--mode" "run") PREVIOUS_TMP_DIR=${PWD}/previous_tmp # prepare directory to store tarball of tmp for removal and build steps -TARBALL_TMP_REMOVE_STEP_DIR=${PREVIOUS_TMP_DIR}/remove_step +TARBALL_TMP_REMOVAL_STEP_DIR=${PREVIOUS_TMP_DIR}/removal_step TARBALL_TMP_BUILD_STEP_DIR=${PREVIOUS_TMP_DIR}/build_step -mkdir -p ${TARBALL_TMP_BUILD_STEP_DIR} ${TARBALL_TMP_REMOVE_STEP_DIR} +mkdir -p ${TARBALL_TMP_BUILD_STEP_DIR} ${TARBALL_TMP_REMOVAL_STEP_DIR} # prepare arguments to install_software_layer.sh (specific to build step) declare -a INSTALL_SCRIPT_ARGS=() @@ -182,20 +182,20 @@ fi [[ ! -z ${SHARED_FS_PATH} ]] && INSTALL_SCRIPT_ARGS+=("--shared-fs-path" "${SHARED_FS_PATH}") # prepare arguments to eessi_container.sh specific to remove step -declare -a REMOVE_STEP_ARGS=() -REMOVE_STEP_ARGS+=("--save" "${TARBALL_TMP_BUILD_STEP_DIR}") -REMOVE_STEP_ARGS+=("--storage" "${STORAGE}") +declare -a REMOVAL_STEP_ARGS=() +REMOVAL_STEP_ARGS+=("--save" "${TARBALL_TMP_BUILD_STEP_DIR}") +REMOVAL_STEP_ARGS+=("--storage" "${STORAGE}") # add fakeroot option in order to be able to remove software -REMOVE_STEP_ARGS+=("--fakeroot") +REMOVAL_STEP_ARGS+=("--fakeroot") # create tmp file for output of removal step -remove_outerr=$(mktemp remove.outerr.XXXX) +removal_outerr=$(mktemp remove.outerr.XXXX) echo "Executing command to remove software:" -echo "./eessi_container.sh ${COMMON_ARGS[@]} ${REMOVE_STEP_ARGS[@]}" -echo " -- ./EESSI-remove-software.sh \"${INSTALL_SCRIPT_ARGS[@]}\" \"$@\" 2>&1 | tee -a ${remove_outerr}" -./eessi_container.sh "${COMMON_ARGS[@]}" "${REMOVE_STEP_ARGS[@]}" \ - -- ./EESSI-remove-software.sh "${INSTALL_SCRIPT_ARGS[@]}" "$@" 2>&1 | tee -a ${remove_outerr} +echo "./eessi_container.sh ${COMMON_ARGS[@]} ${REMOVAL_STEP_ARGS[@]}" +echo " -- ./EESSI-remove-software.sh \"${INSTALL_SCRIPT_ARGS[@]}\" \"$@\" 2>&1 | tee -a ${removal_outerr}" +./eessi_container.sh "${COMMON_ARGS[@]}" "${REMOVAL_STEP_ARGS[@]}" \ + -- ./EESSI-remove-software.sh "${INSTALL_SCRIPT_ARGS[@]}" "$@" 2>&1 | tee -a ${removal_outerr} # prepare arguments to eessi_container.sh specific to build step declare -a BUILD_STEP_ARGS=() @@ -208,8 +208,8 @@ if [[ ! -z ${SHARED_FS_PATH} ]]; then fi # determine temporary directory to resume from; this is important in case software was removed for a rebuild -REMOVE_TMPDIR=$(grep ' as tmp directory ' ${remove_outerr} | cut -d ' ' -f 2) -BUILD_STEP_ARGS+=("--resume" "${REMOVE_TMPDIR}") +REMOVAL_TMPDIR=$(grep ' as tmp directory ' ${removal_outerr} | cut -d ' ' -f 2) +BUILD_STEP_ARGS+=("--resume" "${REMOVAL_TMPDIR}") # create tmp file for output of build step build_outerr=$(mktemp build.outerr.XXXX) @@ -232,8 +232,7 @@ declare -a TARBALL_STEP_ARGS=() TARBALL_STEP_ARGS+=("--save" "${TARBALL_TMP_TARBALL_STEP_DIR}") # determine temporary directory to resume from -BUILD_TMPDIR=$(grep ' as tmp directory ' ${build_outerr} | cut -d ' ' -f 2) -TARBALL_STEP_ARGS+=("--resume" "${BUILD_TMPDIR}") +TARBALL_STEP_ARGS+=("--resume" "${REMOVAL_TMPDIR}") timestamp=$(date +%s) # to set EESSI_VERSION we need to source init/eessi_defaults now From 45022b6b47c3046ea3e2d4033197fdd80dc63850 Mon Sep 17 00:00:00 2001 From: Alan O'Cais Date: Fri, 8 Mar 2024 17:30:55 +0100 Subject: [PATCH 570/698] Allow for open PRs when checking missing installations in build script --- EESSI-install-software.sh | 2 +- check_missing_installations.sh | 20 +++++++++++++++++--- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/EESSI-install-software.sh b/EESSI-install-software.sh index 69de9d1997..75b4f71178 100755 --- a/EESSI-install-software.sh +++ b/EESSI-install-software.sh @@ -237,7 +237,7 @@ else copy_build_log "${eb_last_log}" "${build_logs_dir}" fi - $TOPDIR/check_missing_installations.sh ${TOPDIR}/${easystack_file} + $TOPDIR/check_missing_installations.sh ${TOPDIR}/${easystack_file} ${TOPDIR}/${pr_diff} else fatal_error "Easystack file ${easystack_file} not found!" fi diff --git a/check_missing_installations.sh b/check_missing_installations.sh index c902fa8184..623c46c74f 100755 --- a/check_missing_installations.sh +++ b/check_missing_installations.sh @@ -10,8 +10,15 @@ TOPDIR=$(dirname $(realpath $0)) -if [ $# -ne 1 ]; then - echo "ERROR: Usage: $0 " >&2 +if [ "$#" -eq 1 ]; then + true +elif [ "$#" -eq 2 ]; then + echo "Using $2 to give create exceptions for PR filtering of easystack" + # Find lines that are added and use from-pr, make them unique, grab the + # PR numbers and use them to construct something we can use within awk + pr_exceptions=$(grep ^+ $2 | grep from-pr | uniq | awk '{print $3}' | xargs -i echo " || /'{}'/") +else + echo "ERROR: Usage: $0 ()" >&2 exit 1 fi easystack=$1 @@ -24,7 +31,10 @@ export EASYBUILD_ROBOT_PATHS=$LOCAL_TMPDIR/easyconfigs/easybuild/easyconfigs # All PRs used in EESSI are supposed to be merged, so we can strip out all cases of from-pr tmp_easystack=${LOCAL_TMPDIR}/$(basename ${easystack}) -grep -v from-pr ${easystack} > ${tmp_easystack} +# Let's use awk so we can allow for exceptions if we are given a PR diff file +awk_command="awk '\!/'from-pr'/ EXCEPTIONS' $easystack" +awk_command=${awk_command/\\/} # Strip out the backslash we needed for ! +eval ${awk_command/EXCEPTIONS/$pr_exceptions} > ${tmp_easystack} source $TOPDIR/scripts/utils.sh @@ -40,6 +50,10 @@ exit_code=${PIPESTATUS[0]} ok_msg="Command 'eb --missing ...' succeeded, analysing output..." fail_msg="Command 'eb --missing ...' failed, check log '${eb_missing_out}'" +if [ "$#" -eq 1 ]; then + fail_msg="$fail_msg (are you sure all PRs referenced have been merged in EasyBuild?)" +fi + check_exit_code ${exit_code} "${ok_msg}" "${fail_msg}" # the above assesses the installed software for each easyconfig provided in From 723fce82b272cccd75a1d1841ef301be419461e6 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Sat, 9 Mar 2024 11:39:33 +0100 Subject: [PATCH 571/698] Check for unmerged EasyConfig output pattern --- bot/check-build.sh | 143 ++++++++++++++++++++++++++++----------------- 1 file changed, 90 insertions(+), 53 deletions(-) diff --git a/bot/check-build.sh b/bot/check-build.sh index ec1ca56bba..e737363f35 100755 --- a/bot/check-build.sh +++ b/bot/check-build.sh @@ -98,15 +98,15 @@ job_dir=${PWD} job_out="slurm-${SLURM_JOB_ID}.out" [[ ${VERBOSE} -ne 0 ]] && echo ">> searching for job output file(s) matching '"${job_out}"'" if [[ -f ${job_out} ]]; then - SLURM=1 + SLURM_OUTPUT_FOUND=1 [[ ${VERBOSE} -ne 0 ]] && echo " found slurm output file '"${job_out}"'" else - SLURM=0 + SLURM_OUTPUT_FOUND=0 [[ ${VERBOSE} -ne 0 ]] && echo " Slurm output file '"${job_out}"' NOT found" fi ERROR=-1 -if [[ ${SLURM} -eq 1 ]]; then +if [[ ${SLURM_OUTPUT_FOUND} -eq 1 ]]; then GP_error='ERROR: ' grep_out=$(grep -v "^>> searching for " ${job_dir}/${job_out} | grep "${GP_error}") [[ $? -eq 0 ]] && ERROR=1 || ERROR=0 @@ -116,7 +116,7 @@ if [[ ${SLURM} -eq 1 ]]; then fi FAILED=-1 -if [[ ${SLURM} -eq 1 ]]; then +if [[ ${SLURM_OUTPUT_FOUND} -eq 1 ]]; then GP_failed='FAILED: ' grep_out=$(grep -v "^>> searching for " ${job_dir}/${job_out} | grep "${GP_failed}") [[ $? -eq 0 ]] && FAILED=1 || FAILED=0 @@ -126,7 +126,7 @@ if [[ ${SLURM} -eq 1 ]]; then fi MISSING=-1 -if [[ ${SLURM} -eq 1 ]]; then +if [[ ${SLURM_OUTPUT_FOUND} -eq 1 ]]; then GP_req_missing=' required modules missing:' grep_out=$(grep -v "^>> searching for " ${job_dir}/${job_out} | grep "${GP_req_missing}") [[ $? -eq 0 ]] && MISSING=1 || MISSING=0 @@ -136,7 +136,7 @@ if [[ ${SLURM} -eq 1 ]]; then fi NO_MISSING=-1 -if [[ ${SLURM} -eq 1 ]]; then +if [[ ${SLURM_OUTPUT_FOUND} -eq 1 ]]; then GP_no_missing='No missing installations' grep_out=$(grep -v "^>> searching for " ${job_dir}/${job_out} | grep "${GP_no_missing}") [[ $? -eq 0 ]] && NO_MISSING=1 || NO_MISSING=0 @@ -147,7 +147,7 @@ fi TGZ=-1 TARBALL= -if [[ ${SLURM} -eq 1 ]]; then +if [[ ${SLURM_OUTPUT_FOUND} -eq 1 ]]; then GP_tgz_created="\.tar\.gz created!" grep_out=$(grep -v "^>> searching for " ${job_dir}/${job_out} | grep "${GP_tgz_created}" | sort -u) if [[ $? -eq 0 ]]; then @@ -169,9 +169,27 @@ fi [[ ${VERBOSE} -ne 0 ]] && echo " NO_MISSING.: $([[ $NO_MISSING -eq 1 ]] && echo 'yes' || echo 'no') (yes)" [[ ${VERBOSE} -ne 0 ]] && echo " TGZ_CREATED: $([[ $TGZ -eq 1 ]] && echo 'yes' || echo 'no') (yes)" +# Here, we try to do some additional analysis on the output file +# to see if we can print a more clear 'reason' for the failure +# For now, we only analyse unmerged EasyConfigs as potential cause, but we can easily add checks for other +# specific scenarios below + +# Check for the pattern being added here https://github.com/EESSI/software-layer/pull/493 to the output to +# see if EasyConfigs might have been unmerged, and that's causing a failure +UNMERGED_EASYCONFIG=-1 +if [[ ${SLURM_OUTPUT_FOUND} -eq 1 ]]; then + gp_unmerged="are you sure all PRs referenced have been merged in EasyBuild" + grep_unmerged=$(grep -v "^>> searching for " ${job_dir}/${job_out} | grep "${gp_unmerged}") + [[ $? -eq 0 ]] && UNMERGED_EASYCONFIG=1 || UNMERGED_EASYCONFIG=0 + # have to be careful to not add searched for pattern into slurm out file + [[ ${VERBOSE} -ne 0 ]] && echo ">> searching for '"${gp_unmerged}"'" + [[ ${VERBOSE} -ne 0 ]] && echo "${grep_unmerged}" +fi + job_result_file=_bot_job${SLURM_JOB_ID}.result -if [[ ${SLURM} -eq 1 ]] && \ +# Default reason: +if [[ ${SLURM_OUTPUT_FOUND} -eq 1 ]] && \ [[ ${ERROR} -eq 0 ]] && \ [[ ${FAILED} -eq 0 ]] && \ [[ ${MISSING} -eq 0 ]] && \ @@ -180,7 +198,12 @@ if [[ ${SLURM} -eq 1 ]] && \ [[ ! -z ${TARBALL} ]]; then # SUCCESS status="SUCCESS" + reason="" summary=":grin: SUCCESS" +elif [[ ${UNMERGED_EASYCONFIG} -eq 1 ]]; then + status="FAILURE" + reason="EasyConfig not found during missing installation check. Are you sure all PRs referenced have been merged in EasyBuild?" + summary=":cry: FAILURE" else # FAILURE status="FAILURE" @@ -253,14 +276,6 @@ fi #
    ### -# construct and write complete PR comment details: implements third alternative -comment_template="
    __SUMMARY_FMT__
    __DETAILS_FMT____ARTEFACTS_FMT__
    " -comment_summary_fmt="__SUMMARY__ _(click triangle for details)_" -comment_details_fmt="
    _Details_
    __DETAILS_LIST__
    " -comment_success_item_fmt=":white_check_mark: __ITEM__" -comment_failure_item_fmt=":x: __ITEM__" -comment_artefacts_fmt="
    _Artefacts_
    __ARTEFACTS_LIST__
    " -comment_artefact_details_fmt="
    __ARTEFACT_SUMMARY____ARTEFACT_DETAILS__
    " function print_br_item() { format="${1}" @@ -332,42 +347,65 @@ echo -n "comment_description = " >> ${job_result_file} # - __DETAILS_FMT__ -> variable $comment_details # - __ARTEFACTS_FMT__ -> variable $comment_artefacts +# construct and write complete PR comment details: implements third alternative +comment_template="
    __SUMMARY_FMT__
    __REASON_FMT____DETAILS_FMT____ARTEFACTS_FMT__
    " +comment_success_item_fmt=":white_check_mark: __ITEM__" +comment_failure_item_fmt=":x: __ITEM__" + +# Initialize comment_description +comment_description=${comment_template} + +# Now, start replacing template items one by one +# Replace the summary template (__SUMMARY_FMT__) +comment_summary_fmt="__SUMMARY__ _(click triangle for details)_" comment_summary="${comment_summary_fmt/__SUMMARY__/${summary}}" +comment_description=${comment_template/__SUMMARY_FMT__/${comment_summary}} + +# Only add if there is a reason (e.g. no reason for successful runs) +if [[ ! -z ${reason} ]]; then + comment_reason_fmt="
    _Reason_
    __REASONS__
    " + reason_details="${comment_reason_fmt/__REASONS__/${reason}}" + comment_description=${comment_description/__REASON_FMT__/${reason_details}} +else + comment_description=${comment_description/__REASON_FMT__/""} +fi -# first construct comment_details_list, abbreviated CoDeList +# Replace the details template (__DETAILS_FMT__) +# first construct comment_details_list, abbreviated comment_details_list # then use it to set comment_details -CoDeList="" +comment_details_list="" success_msg="job output file ${job_out}" failure_msg="no job output file ${job_out}" -CoDeList=${CoDeList}$(add_detail ${SLURM} 1 "${success_msg}" "${failure_msg}") +comment_details_list=${comment_details_list}$(add_detail ${SLURM_OUTPUT_FOUND} 1 "${success_msg}" "${failure_msg}") success_msg="no message matching ${GP_error}" failure_msg="found message matching ${GP_error}" -CoDeList=${CoDeList}$(add_detail ${ERROR} 0 "${success_msg}" "${failure_msg}") +comment_details_list=${comment_details_list}$(add_detail ${ERROR} 0 "${success_msg}" "${failure_msg}") success_msg="no message matching ${GP_failed}" failure_msg="found message matching ${GP_failed}" -CoDeList=${CoDeList}$(add_detail ${FAILED} 0 "${success_msg}" "${failure_msg}") +comment_details_list=${comment_details_list}$(add_detail ${FAILED} 0 "${success_msg}" "${failure_msg}") success_msg="no message matching ${GP_req_missing}" failure_msg="found message matching ${GP_req_missing}" -CoDeList=${CoDeList}$(add_detail ${MISSING} 0 "${success_msg}" "${failure_msg}") +comment_details_list=${comment_details_list}$(add_detail ${MISSING} 0 "${success_msg}" "${failure_msg}") success_msg="found message(s) matching ${GP_no_missing}" failure_msg="no message matching ${GP_no_missing}" -CoDeList=${CoDeList}$(add_detail ${NO_MISSING} 1 "${success_msg}" "${failure_msg}") +comment_details_list=${comment_details_list}$(add_detail ${NO_MISSING} 1 "${success_msg}" "${failure_msg}") success_msg="found message matching ${GP_tgz_created}" failure_msg="no message matching ${GP_tgz_created}" -CoDeList=${CoDeList}$(add_detail ${TGZ} 1 "${success_msg}" "${failure_msg}") - -comment_details="${comment_details_fmt/__DETAILS_LIST__/${CoDeList}}" - +comment_details_list=${comment_details_list}$(add_detail ${TGZ} 1 "${success_msg}" "${failure_msg}") +# Now, do the actual repalcement of __DETAILS_FMT__ +comment_details_fmt="
    _Details_
    __DETAILS_LIST__
    " +comment_details="${comment_details_fmt/__DETAILS_LIST__/${comment_details_list}}" +comment_description=${comment_description/__DETAILS_FMT__/${comment_details}} -# first construct comment_artefacts_list, abbreviated CoArList +# first construct comment_artefacts_list # then use it to set comment_artefacts -CoArList="" +comment_artifacts_list="" # TARBALL should only contain a single tarball if [[ ! -z ${TARBALL} ]]; then @@ -427,50 +465,49 @@ if [[ ! -z ${TARBALL} ]]; then software_pkgs=$(echo "${software_entries}" | sed -e "s@${prefix}/software/@@" | awk -F/ '{if (NR >= 2) {print $1 "/" $2}}' | sort -u) artefact_summary="$(print_code_item '__ITEM__' ${TARBALL})" - CoArList="" - CoArList="${CoArList}$(print_br_item2 'size: __ITEM__ MiB (__ITEM2__ bytes)' ${size_mib} ${size})" - CoArList="${CoArList}$(print_br_item 'entries: __ITEM__' ${entries})" - CoArList="${CoArList}$(print_br_item 'modules under ___ITEM___' ${prefix}/modules/all)" - CoArList="${CoArList}
    "
    +    comment_artifacts_list=""
    +    comment_artifacts_list="${comment_artifacts_list}$(print_br_item2 'size: __ITEM__ MiB (__ITEM2__ bytes)' ${size_mib} ${size})"
    +    comment_artifacts_list="${comment_artifacts_list}$(print_br_item 'entries: __ITEM__' ${entries})"
    +    comment_artifacts_list="${comment_artifacts_list}$(print_br_item 'modules under ___ITEM___' ${prefix}/modules/all)"
    +    comment_artifacts_list="${comment_artifacts_list}
    "
         if [[ ! -z ${modules} ]]; then
             while IFS= read -r mod ; do
    -            CoArList="${CoArList}$(print_br_item '__ITEM__' ${mod})"
    +            comment_artifacts_list="${comment_artifacts_list}$(print_br_item '__ITEM__' ${mod})"
             done <<< "${modules}"
         else
    -        CoArList="${CoArList}$(print_br_item '__ITEM__' 'no module files in tarball')"
    +        comment_artifacts_list="${comment_artifacts_list}$(print_br_item '__ITEM__' 'no module files in tarball')"
         fi
    -    CoArList="${CoArList}
    " - CoArList="${CoArList}$(print_br_item 'software under ___ITEM___' ${prefix}/software)" - CoArList="${CoArList}
    "
    +    comment_artifacts_list="${comment_artifacts_list}
    " + comment_artifacts_list="${comment_artifacts_list}$(print_br_item 'software under ___ITEM___' ${prefix}/software)" + comment_artifacts_list="${comment_artifacts_list}
    "
         if [[ ! -z ${software_pkgs} ]]; then
             while IFS= read -r sw_pkg ; do
    -            CoArList="${CoArList}$(print_br_item '__ITEM__' ${sw_pkg})"
    +            comment_artifacts_list="${comment_artifacts_list}$(print_br_item '__ITEM__' ${sw_pkg})"
             done <<< "${software_pkgs}"
         else
    -        CoArList="${CoArList}$(print_br_item '__ITEM__' 'no software packages in tarball')"
    +        comment_artifacts_list="${comment_artifacts_list}$(print_br_item '__ITEM__' 'no software packages in tarball')"
         fi
    -    CoArList="${CoArList}
    " - CoArList="${CoArList}$(print_br_item 'other under ___ITEM___' ${prefix})" - CoArList="${CoArList}
    "
    +    comment_artifacts_list="${comment_artifacts_list}
    " + comment_artifacts_list="${comment_artifacts_list}$(print_br_item 'other under ___ITEM___' ${prefix})" + comment_artifacts_list="${comment_artifacts_list}
    "
         if [[ ! -z ${other_shortened} ]]; then
             while IFS= read -r other ; do
    -            CoArList="${CoArList}$(print_br_item '__ITEM__' ${other})"
    +            comment_artifacts_list="${comment_artifacts_list}$(print_br_item '__ITEM__' ${other})"
             done <<< "${other_shortened}"
         else
    -        CoArList="${CoArList}$(print_br_item '__ITEM__' 'no other files in tarball')"
    +        comment_artifacts_list="${comment_artifacts_list}$(print_br_item '__ITEM__' 'no other files in tarball')"
         fi
    -    CoArList="${CoArList}
    " + comment_artifacts_list="${comment_artifacts_list}
    " else - CoArList="${CoArList}$(print_dd_item 'No artefacts were created or found.' '')" + comment_artifacts_list="${comment_artifacts_list}$(print_dd_item 'No artefacts were created or found.' '')" fi +comment_artefact_details_fmt="
    __ARTEFACT_SUMMARY____ARTEFACT_DETAILS__
    " comment_artefacts_details="${comment_artefact_details_fmt/__ARTEFACT_SUMMARY__/${artefact_summary}}" -comment_artefacts_details="${comment_artefacts_details/__ARTEFACT_DETAILS__/${CoArList}}" -comment_artefacts="${comment_artefacts_fmt/__ARTEFACTS_LIST__/${comment_artefacts_details}}" +comment_artefacts_details="${comment_artefacts_details/__ARTEFACT_DETAILS__/${comment_artifacts_list}}" -# now put all pieces together creating comment_details from comment_template -comment_description=${comment_template/__SUMMARY_FMT__/${comment_summary}} -comment_description=${comment_description/__DETAILS_FMT__/${comment_details}} +comment_artefacts_fmt="
    _Artefacts_
    __ARTEFACTS_LIST__
    " +comment_artefacts="${comment_artefacts_fmt/__ARTEFACTS_LIST__/${comment_artefacts_details}}" comment_description=${comment_description/__ARTEFACTS_FMT__/${comment_artefacts}} echo "${comment_description}" >> ${job_result_file} From f4f277605a17aea824f940ae1de0727b190be47d Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Sat, 9 Mar 2024 13:22:18 +0100 Subject: [PATCH 572/698] First, try without --from-pr. If that fails, try with --from-pr, but only for items added to the EasyStack file in _this_ PR to software-layer. If that succeeds, the reason must be that one of the EasyBuild PRs wasn't merged yet, and we can add that information to the fail_msg to make it more explicit --- check_missing_installations.sh | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/check_missing_installations.sh b/check_missing_installations.sh index 623c46c74f..fd2c0d34bb 100755 --- a/check_missing_installations.sh +++ b/check_missing_installations.sh @@ -31,6 +31,8 @@ export EASYBUILD_ROBOT_PATHS=$LOCAL_TMPDIR/easyconfigs/easybuild/easyconfigs # All PRs used in EESSI are supposed to be merged, so we can strip out all cases of from-pr tmp_easystack=${LOCAL_TMPDIR}/$(basename ${easystack}) +grep -v from-pr ${easystack} > ${tmp_easystack} + # Let's use awk so we can allow for exceptions if we are given a PR diff file awk_command="awk '\!/'from-pr'/ EXCEPTIONS' $easystack" awk_command=${awk_command/\\/} # Strip out the backslash we needed for ! @@ -51,7 +53,25 @@ exit_code=${PIPESTATUS[0]} ok_msg="Command 'eb --missing ...' succeeded, analysing output..." fail_msg="Command 'eb --missing ...' failed, check log '${eb_missing_out}'" if [ "$#" -eq 1 ]; then - fail_msg="$fail_msg (are you sure all PRs referenced have been merged in EasyBuild?)" + # We might have failed due to unmerged PRs. Try to make exceptions for --from-pr added in this PR + # to software-layer, and see if then it passes. If so, we can report a more specific fail_msg + + # Let's use awk so we can allow for exceptions if we are given a PR diff file + awk_command="awk '\!/'from-pr'/ EXCEPTIONS' $easystack" + awk_command=${awk_command/\\/} # Strip out the backslash we needed for ! + eval ${awk_command/EXCEPTIONS/$pr_exceptions} > ${tmp_easystack} + + msg=">> Checking for missing installations in ${EASYBUILD_INSTALLPATH}," + msg="${msg} allowing for --from-pr's that were added in this PR..." + echo ${msg} + eb_missing_out=$LOCAL_TMPDIR/eb_missing_with_from_pr.out + ${EB:-eb} --easystack ${tmp_easystack} --missing 2>&1 | tee ${eb_missing_out} + exit_code=${PIPESTATUS[0]} + + # If now we succeeded, the reason must be that we originally stripped the --from-pr's + if [ "$#" -eq 0 ]; then + fail_msg="$fail_msg (are you sure all PRs referenced have been merged in EasyBuild?)" + fi fi check_exit_code ${exit_code} "${ok_msg}" "${fail_msg}" From b7891087072ab05b50d93295b0f8990e27b50edf Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Sat, 9 Mar 2024 13:24:08 +0100 Subject: [PATCH 573/698] Add CFITSIO as a test example, see if we can get a clear error message printed on a build failure here --- .../2023.06/eessi-2023.06-eb-4.9.0-2023b.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml index 2664d8f417..51e96f1fac 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml @@ -10,4 +10,7 @@ easyconfigs: from-pr: 19552 - CDO-2.2.2-gompi-2023b.eb: options: - from-pr: 19792 + from-pr: 19792 + - CFITSIO-4.3.1-GCCcore-13.2.0.eb: + options: + from-pr: 19840 From d178a8f14d6e16f5bcddcd7af0bb7978f647d823 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Sat, 9 Mar 2024 13:34:33 +0100 Subject: [PATCH 574/698] Added clarifying comment --- bot/check-build.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bot/check-build.sh b/bot/check-build.sh index e737363f35..24c608b04a 100755 --- a/bot/check-build.sh +++ b/bot/check-build.sh @@ -207,6 +207,8 @@ elif [[ ${UNMERGED_EASYCONFIG} -eq 1 ]]; then else # FAILURE status="FAILURE" + # General failure, we don't know a more specific reason + reason="" summary=":cry: FAILURE" fi From 9123c9c8f483cf5f6b1e931cfe5a4484fc978faa Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Sat, 9 Mar 2024 13:37:08 +0100 Subject: [PATCH 575/698] Correct mistake: I meant to _move_ the awk part, not duplicate it --- check_missing_installations.sh | 5 ----- 1 file changed, 5 deletions(-) diff --git a/check_missing_installations.sh b/check_missing_installations.sh index fd2c0d34bb..4781ecc72a 100755 --- a/check_missing_installations.sh +++ b/check_missing_installations.sh @@ -33,11 +33,6 @@ export EASYBUILD_ROBOT_PATHS=$LOCAL_TMPDIR/easyconfigs/easybuild/easyconfigs tmp_easystack=${LOCAL_TMPDIR}/$(basename ${easystack}) grep -v from-pr ${easystack} > ${tmp_easystack} -# Let's use awk so we can allow for exceptions if we are given a PR diff file -awk_command="awk '\!/'from-pr'/ EXCEPTIONS' $easystack" -awk_command=${awk_command/\\/} # Strip out the backslash we needed for ! -eval ${awk_command/EXCEPTIONS/$pr_exceptions} > ${tmp_easystack} - source $TOPDIR/scripts/utils.sh source $TOPDIR/configure_easybuild From 7e4422335f1c2f3ad682362a060906866b9b90f4 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Sat, 9 Mar 2024 13:54:07 +0100 Subject: [PATCH 576/698] Now actually check against the exit code of the pipe... --- check_missing_installations.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/check_missing_installations.sh b/check_missing_installations.sh index 4781ecc72a..51a328b50c 100755 --- a/check_missing_installations.sh +++ b/check_missing_installations.sh @@ -47,7 +47,7 @@ exit_code=${PIPESTATUS[0]} ok_msg="Command 'eb --missing ...' succeeded, analysing output..." fail_msg="Command 'eb --missing ...' failed, check log '${eb_missing_out}'" -if [ "$#" -eq 1 ]; then +if [ "$exit_code" -eq 1 ]; then # We might have failed due to unmerged PRs. Try to make exceptions for --from-pr added in this PR # to software-layer, and see if then it passes. If so, we can report a more specific fail_msg From da749a111320720773d648d4a55caa2ba1a826e3 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Sat, 9 Mar 2024 14:08:27 +0100 Subject: [PATCH 577/698] Make seperate exit code for the run that allows --from-pr --- check_missing_installations.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/check_missing_installations.sh b/check_missing_installations.sh index 51a328b50c..6d84384fd7 100755 --- a/check_missing_installations.sh +++ b/check_missing_installations.sh @@ -61,10 +61,10 @@ if [ "$exit_code" -eq 1 ]; then echo ${msg} eb_missing_out=$LOCAL_TMPDIR/eb_missing_with_from_pr.out ${EB:-eb} --easystack ${tmp_easystack} --missing 2>&1 | tee ${eb_missing_out} - exit_code=${PIPESTATUS[0]} + exit_code_with_from_pr=${PIPESTATUS[0]} # If now we succeeded, the reason must be that we originally stripped the --from-pr's - if [ "$#" -eq 0 ]; then + if [ "$exit_code_with_from_pr" -eq 0 ]; then fail_msg="$fail_msg (are you sure all PRs referenced have been merged in EasyBuild?)" fi fi From 86d8a36c52a9a3dfe9af25662bc6c95968804024 Mon Sep 17 00:00:00 2001 From: Tim Kok Date: Mon, 11 Mar 2024 11:46:32 +0100 Subject: [PATCH 578/698] Remove ineffective DP3 hook --- eb_hooks.py | 27 --------------------------- 1 file changed, 27 deletions(-) diff --git a/eb_hooks.py b/eb_hooks.py index 1478f1a508..d93ee37067 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -186,32 +186,6 @@ def parse_hook_casacore_disable_vectorize(ec, eprefix): raise EasyBuildError("casacore-specific hook triggered for non-casacore easyconfig?!") -def parse_hook_dp3_enable_relaxed_vector_conversions(ec, eprefix): - """ - Enable lax vector conversion for DP3 on aarch64/neoverse_v1 - Compiling DP3 6.0 with GCC 13.2.0 (foss-2023b) gives a conversion error when building for aarch64/neoverse_v1. - See also, https://github.com/EESSI/software-layer/pull/479 - """ - if ec.name == 'DP3': - tcname, tcversion = ec['toolchain']['name'], ec['toolchain']['version'] - if ( - LooseVersion(ec.version) == LooseVersion('6.0') and - tcname == 'foss' and tcversion == '2023b' - ): - cpu_target = get_eessi_envvar('EESSI_SOFTWARE_SUBDIR') - if cpu_target == CPU_TARGET_NEOVERSE_V1: - if not hasattr(ec, 'configopts'): - ec['configopts'] = "" - ec['configopts'] += ' -DCMAKE_CXX_FLAGS="$CXXFLAGS -flax-vector-conversions" ' - print_msg("Changed configopts for %s: %s", ec.name, ec['configopts']) - else: - print_msg("Not changing configopts for %s on non-neoverse_v1", ec.name) - else: - print_msg("Not changing configopts for %s %s %s", ec.name, ec.version, ec.toolchain) - else: - raise EasyBuildError("DP3-specific hook triggered for non-DP3 easyconfig?!") - - def parse_hook_cgal_toolchainopts_precise(ec, eprefix): """Enable 'precise' rather than 'strict' toolchain option for CGAL on POWER.""" if ec.name == 'CGAL': @@ -633,7 +607,6 @@ def inject_gpu_property(ec): PARSE_HOOKS = { 'casacore': parse_hook_casacore_disable_vectorize, 'CGAL': parse_hook_cgal_toolchainopts_precise, - 'DP3': parse_hook_dp3_enable_relaxed_vector_conversions, 'fontconfig': parse_hook_fontconfig_add_fonts, 'OpenBLAS': parse_hook_openblas_relax_lapack_tests_num_errors, 'pybind11': parse_hook_pybind11_replace_catch2, From f8816acf3c0c0022bbba3e123f6d0239469728d3 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Mon, 11 Mar 2024 14:19:15 +0100 Subject: [PATCH 579/698] {2023.06}[2023a] JupyterNotebook v7.0.2 --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml index 0d8e71e86c..cb207e50ea 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml @@ -36,3 +36,4 @@ easyconfigs: - dask-2023.9.2-foss-2023a.eb - OSU-Micro-Benchmarks-7.2-gompi-2023a-CUDA-12.1.1.eb - OSU-Micro-Benchmarks-7.2-gompi-2023b.eb + - JupyterNotebook-7.0.2-GCCcore-12.3.0.eb From 310e1e3a36df67c5d51b9bb0dbe80fc97abf1fa7 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Mon, 11 Mar 2024 15:34:50 +0100 Subject: [PATCH 580/698] Initial attempt at splitting off the LMOD hooks into a seperate SitePackage.lua file --- EESSI-install-software.sh | 15 +++- create_lmodrc.py | 108 ----------------------- create_lmodsitepackage.py | 141 +++++++++++++++++++++++++++++++ init/eessi_environment_variables | 17 +++- 4 files changed, 166 insertions(+), 115 deletions(-) create mode 100755 create_lmodsitepackage.py diff --git a/EESSI-install-software.sh b/EESSI-install-software.sh index 69de9d1997..ed137c522d 100755 --- a/EESSI-install-software.sh +++ b/EESSI-install-software.sh @@ -248,11 +248,20 @@ fi ### add packages here echo ">> Creating/updating Lmod cache..." -export LMOD_RC="${EASYBUILD_INSTALLPATH}/.lmod/lmodrc.lua" +export LMOD_CONFIG_DIR="${EASYBUILD_INSTALLPATH}/.lmod" +lmod_rc_file="$LMOD_CONFIG_DIR/lmodrc.lua" lmodrc_changed=$(cat ${pr_diff} | grep '^+++' | cut -f2 -d' ' | sed 's@^[a-z]/@@g' | grep '^create_lmodrc.py$' > /dev/null; echo $?) -if [ ! -f $LMOD_RC ] || [ ${lmodrc_changed} == '0' ]; then +if [ ! -f $lmod_rc_file ] || [ ${lmodrc_changed} == '0' ]; then python3 $TOPDIR/create_lmodrc.py ${EASYBUILD_INSTALLPATH} - check_exit_code $? "$LMOD_RC created" "Failed to create $LMOD_RC" + check_exit_code $? "$lmod_rc_file created" "Failed to create $lmod_rc_file" +fi + +echo ">> Creating/updating Lmod SitePackage.lua ..." +export LMOD_PACKAGE_PATH=${EASYBUILD_INSTALLPATH}/.lmod" +lmod_sitepackage_file="$LMOD_PACKAGE_PATH/SitePackage.lua" +if [ ! -f $lmod_sitepackage_file ] || [ ${sitepackage_changed} == '0' ]; then + python3 $TOPDIR/create_lmodsitepackage.py ${EASYBUILD_INSTALLPATH} + check_exit_code $? "$lmod_sitepackage_file created" "Failed to create $lmod_sitepackage_file" fi $TOPDIR/update_lmod_cache.sh ${EPREFIX} ${EASYBUILD_INSTALLPATH} diff --git a/create_lmodrc.py b/create_lmodrc.py index 621c8e271a..ae65153a20 100755 --- a/create_lmodrc.py +++ b/create_lmodrc.py @@ -17,113 +17,6 @@ } """ -GPU_LMOD_RC ="""require("strict") -local hook = require("Hook") -local open = io.open - -local function read_file(path) - local file = open(path, "rb") -- r read mode and b binary mode - if not file then return nil end - local content = file:read "*a" -- *a or *all reads the whole file - file:close() - return content -end - -local function eessi_cuda_enabled_load_hook(t) - local frameStk = require("FrameStk"):singleton() - local mt = frameStk:mt() - local simpleName = string.match(t.modFullName, "(.-)/") - -- If we try to load CUDA itself, check if the full CUDA SDK was installed on the host in host_injections. - -- This is required for end users to build additional CUDA software. If the full SDK isn't present, refuse - -- to load the CUDA module and print an informative message on how to set up GPU support for EESSI - local refer_to_docs = "For more information on how to do this, see https://www.eessi.io/docs/gpu/.\\n" - if simpleName == 'CUDA' then - -- get the full host_injections path - local hostInjections = string.gsub(os.getenv('EESSI_SOFTWARE_PATH') or "", 'versions', 'host_injections') - -- build final path where the CUDA software should be installed - local cudaEasyBuildDir = hostInjections .. "/software/" .. t.modFullName .. "/easybuild" - local cudaDirExists = isDir(cudaEasyBuildDir) - if not cudaDirExists then - local advice = "but while the module file exists, the actual software is not entirely shipped with EESSI " - advice = advice .. "due to licencing. You will need to install a full copy of the CUDA SDK where EESSI " - advice = advice .. "can find it.\\n" - advice = advice .. refer_to_docs - LmodError("\\nYou requested to load ", simpleName, " ", advice) - end - end - -- when loading CUDA enabled modules check if the necessary driver libraries are accessible to the EESSI linker, - -- otherwise, refuse to load the requested module and print error message - local haveGpu = mt:haveProperty(simpleName,"arch","gpu") - if haveGpu then - local arch = os.getenv("EESSI_CPU_FAMILY") or "" - local cudaVersionFile = "/cvmfs/software.eessi.io/host_injections/nvidia/" .. arch .. "/latest/cuda_version.txt" - local cudaDriverFile = "/cvmfs/software.eessi.io/host_injections/nvidia/" .. arch .. "/latest/libcuda.so" - local cudaDriverExists = isFile(cudaDriverFile) - local singularityCudaExists = isFile("/.singularity.d/libs/libcuda.so") - if not (cudaDriverExists or singularityCudaExists) then - local advice = "which relies on the CUDA runtime environment and driver libraries. " - advice = advice .. "In order to be able to use the module, you will need " - advice = advice .. "to make sure EESSI can find the GPU driver libraries on your host system.\\n" - advice = advice .. refer_to_docs - LmodError("\\nYou requested to load ", simpleName, " ", advice) - else - -- CUDA driver exists, now we check its version to see if an update is needed - if cudaDriverExists then - local cudaVersion = read_file(cudaVersionFile) - local cudaVersion_req = os.getenv("EESSICUDAVERSION") - -- driver CUDA versions don't give a patch version for CUDA - local major, minor = string.match(cudaVersion, "(%d+)%.(%d+)") - local major_req, minor_req, patch_req = string.match(cudaVersion_req, "(%d+)%.(%d+)%.(%d+)") - local driver_libs_need_update = false - if major < major_req then - driver_libs_need_update = true - elseif major == major_req then - if minor < minor_req then - driver_libs_need_update = true - end - end - if driver_libs_need_update == true then - local advice = "but the module you want to load requires CUDA " .. cudaVersion_req .. ". " - advice = advice .. "Please update your CUDA driver libraries and then " - advice = advice .. "let EESSI know about the update.\\n" - advice = advice .. refer_to_docs - LmodError("\\nYour driver CUDA version is ", cudaVersion, " ", advice) - end - end - end - end -end - -local function eessi_openmpi_load_hook(t) - -- disable smcuda BTL when loading OpenMPI module for aarch64/neoverse_v1, - -- to work around hang/crash due to bug in OpenMPI; - -- see https://gitlab.com/eessi/support/-/issues/41 - local frameStk = require("FrameStk"):singleton() - local mt = frameStk:mt() - local moduleName = string.match(t.modFullName, "(.-)/") - local cpuTarget = os.getenv("EESSI_SOFTWARE_SUBDIR") or "" - if (moduleName == "OpenMPI") and (cpuTarget == "aarch64/neoverse_v1") then - local msg = "Adding '^smcuda' to $OMPI_MCA_btl to work around bug in OpenMPI" - LmodMessage(msg .. " (see https://gitlab.com/eessi/support/-/issues/41)") - local ompiMcaBtl = os.getenv("OMPI_MCA_btl") - if ompiMcaBtl == nil then - setenv("OMPI_MCA_btl", "^smcuda") - else - setenv("OMPI_MCA_btl", ompiMcaBtl .. ",^smcuda") - end - end -end - --- Combine both functions into a single one, as we can only register one function as load hook in lmod --- Also: make it non-local, so it can be imported and extended by other lmodrc files if needed -function eessi_load_hook(t) - eessi_cuda_enabled_load_hook(t) - eessi_openmpi_load_hook(t) -end - - -hook.register("load", eessi_load_hook) -""" def error(msg): sys.stderr.write("ERROR: %s\n" % msg) @@ -143,7 +36,6 @@ def error(msg): 'dot_lmod': DOT_LMOD, 'prefix': prefix, } -lmodrc_txt += '\n' + GPU_LMOD_RC try: os.makedirs(os.path.dirname(lmodrc_path), exist_ok=True) with open(lmodrc_path, 'w') as fp: diff --git a/create_lmodsitepackage.py b/create_lmodsitepackage.py new file mode 100755 index 0000000000..9e77eafecf --- /dev/null +++ b/create_lmodsitepackage.py @@ -0,0 +1,141 @@ +#!/usr/bin/env python3 +# +# Create SitePackage.lua configuration file for Lmod. +# +import os +import sys + +DOT_LMOD = '.lmod' + +hook_txt ="""require("strict") +local hook = require("Hook") +local open = io.open + +local function read_file(path) + local file = open(path, "rb") -- r read mode and b binary mode + if not file then return nil end + local content = file:read "*a" -- *a or *all reads the whole file + file:close() + return content +end + +local function eessi_cuda_enabled_load_hook(t) + local frameStk = require("FrameStk"):singleton() + local mt = frameStk:mt() + local simpleName = string.match(t.modFullName, "(.-)/") + -- If we try to load CUDA itself, check if the full CUDA SDK was installed on the host in host_injections. + -- This is required for end users to build additional CUDA software. If the full SDK isn't present, refuse + -- to load the CUDA module and print an informative message on how to set up GPU support for EESSI + local refer_to_docs = "For more information on how to do this, see https://www.eessi.io/docs/gpu/.\\n" + if simpleName == 'CUDA' then + -- get the full host_injections path + local hostInjections = string.gsub(os.getenv('EESSI_SOFTWARE_PATH') or "", 'versions', 'host_injections') + -- build final path where the CUDA software should be installed + local cudaEasyBuildDir = hostInjections .. "/software/" .. t.modFullName .. "/easybuild" + local cudaDirExists = isDir(cudaEasyBuildDir) + if not cudaDirExists then + local advice = "but while the module file exists, the actual software is not entirely shipped with EESSI " + advice = advice .. "due to licencing. You will need to install a full copy of the CUDA SDK where EESSI " + advice = advice .. "can find it.\\n" + advice = advice .. refer_to_docs + LmodError("\\nYou requested to load ", simpleName, " ", advice) + end + end + -- when loading CUDA enabled modules check if the necessary driver libraries are accessible to the EESSI linker, + -- otherwise, refuse to load the requested module and print error message + local haveGpu = mt:haveProperty(simpleName,"arch","gpu") + if haveGpu then + local arch = os.getenv("EESSI_CPU_FAMILY") or "" + local cudaVersionFile = "/cvmfs/software.eessi.io/host_injections/nvidia/" .. arch .. "/latest/cuda_version.txt" + local cudaDriverFile = "/cvmfs/software.eessi.io/host_injections/nvidia/" .. arch .. "/latest/libcuda.so" + local cudaDriverExists = isFile(cudaDriverFile) + local singularityCudaExists = isFile("/.singularity.d/libs/libcuda.so") + if not (cudaDriverExists or singularityCudaExists) then + local advice = "which relies on the CUDA runtime environment and driver libraries. " + advice = advice .. "In order to be able to use the module, you will need " + advice = advice .. "to make sure EESSI can find the GPU driver libraries on your host system.\\n" + advice = advice .. refer_to_docs + LmodError("\\nYou requested to load ", simpleName, " ", advice) + else + -- CUDA driver exists, now we check its version to see if an update is needed + if cudaDriverExists then + local cudaVersion = read_file(cudaVersionFile) + local cudaVersion_req = os.getenv("EESSICUDAVERSION") + -- driver CUDA versions don't give a patch version for CUDA + local major, minor = string.match(cudaVersion, "(%d+)%.(%d+)") + local major_req, minor_req, patch_req = string.match(cudaVersion_req, "(%d+)%.(%d+)%.(%d+)") + local driver_libs_need_update = false + if major < major_req then + driver_libs_need_update = true + elseif major == major_req then + if minor < minor_req then + driver_libs_need_update = true + end + end + if driver_libs_need_update == true then + local advice = "but the module you want to load requires CUDA " .. cudaVersion_req .. ". " + advice = advice .. "Please update your CUDA driver libraries and then " + advice = advice .. "let EESSI know about the update.\\n" + advice = advice .. refer_to_docs + LmodError("\\nYour driver CUDA version is ", cudaVersion, " ", advice) + end + end + end + end +end + +local function eessi_openmpi_load_hook(t) + -- disable smcuda BTL when loading OpenMPI module for aarch64/neoverse_v1, + -- to work around hang/crash due to bug in OpenMPI; + -- see https://gitlab.com/eessi/support/-/issues/41 + local frameStk = require("FrameStk"):singleton() + local mt = frameStk:mt() + local moduleName = string.match(t.modFullName, "(.-)/") + local cpuTarget = os.getenv("EESSI_SOFTWARE_SUBDIR") or "" + if (moduleName == "OpenMPI") and (cpuTarget == "aarch64/neoverse_v1") then + local msg = "Adding '^smcuda' to $OMPI_MCA_btl to work around bug in OpenMPI" + LmodMessage(msg .. " (see https://gitlab.com/eessi/support/-/issues/41)") + local ompiMcaBtl = os.getenv("OMPI_MCA_btl") + if ompiMcaBtl == nil then + setenv("OMPI_MCA_btl", "^smcuda") + else + setenv("OMPI_MCA_btl", ompiMcaBtl .. ",^smcuda") + end + end +end + +-- Combine both functions into a single one, as we can only register one function as load hook in lmod +-- Also: make it non-local, so it can be imported and extended by other lmodrc files if needed +function eessi_load_hook(t) + eessi_cuda_enabled_load_hook(t) + eessi_openmpi_load_hook(t) +end + + +hook.register("load", eessi_load_hook) +""" + +def error(msg): + sys.stderr.write("ERROR: %s\n" % msg) + sys.exit(1) + + +if len(sys.argv) != 2: + error("Usage: %s " % sys.argv[0]) + +prefix = sys.argv[1] + +if not os.path.exists(prefix): + error("Prefix directory %s does not exist!" % prefix) + +sitepackage_path = os.path.join(prefix, DOT_LMOD, 'SitePackage.lua') +sitepackage_txt += hook_txt +try: + os.makedirs(os.path.dirname(sitepackage_path), exist_ok=True) + with open(sitepackage_path, 'w') as fp: + fp.write(sitepackage_txt) + +except (IOError, OSError) as err: + error("Failed to create %s: %s" % (sitepackage_path, err)) + +print(sitepackage_path) diff --git a/init/eessi_environment_variables b/init/eessi_environment_variables index af5222e7b9..78f01b1921 100644 --- a/init/eessi_environment_variables +++ b/init/eessi_environment_variables @@ -76,11 +76,20 @@ if [ -d $EESSI_PREFIX ]; then false fi - export LMOD_RC="$EESSI_SOFTWARE_PATH/.lmod/lmodrc.lua" - if [ -f $LMOD_RC ]; then - show_msg "Found Lmod configuration file at $LMOD_RC" + export LMOD_CONFIG_DIR="$EESSI_SOFTWARE_PATH/.lmod" + lmod_rc_file="$LMOD_CONFIG_DIR/lmodrc.lua" + if [ -f $lmod_rc_file ]; then + show_msg "Found Lmod configuration file at $lmod_rc_file" else - error "Lmod configuration file not found at $LMOD_RC" + error "Lmod configuration file not found at $lmod_rc_file" + fi + + export LMOD_PACKAGE_PATH="$EESSI_SOFTWARE_PATH/.lmod" + lmod_sitepackage_file="$LMOD_PACKAGE_PATH/SitePackage.lua" + if [ -f $lmod_sitepackage_file ]; then + show_msg "Found Lmod SitePackage.lua file at $lmod_sitepackage_file" + else + error "Lmod SitePackage.lua file not found at $lmod_sitepackage_file" fi else From a8c2883f0c73af0537a834221c3ae439f44c1b2f Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen <33718780+casparvl@users.noreply.github.com> Date: Mon, 11 Mar 2024 15:59:32 +0100 Subject: [PATCH 581/698] Correct typo Co-authored-by: ocaisa --- bot/check-build.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bot/check-build.sh b/bot/check-build.sh index 24c608b04a..10b1ed6a11 100755 --- a/bot/check-build.sh +++ b/bot/check-build.sh @@ -400,7 +400,7 @@ comment_details_list=${comment_details_list}$(add_detail ${NO_MISSING} 1 "${succ success_msg="found message matching ${GP_tgz_created}" failure_msg="no message matching ${GP_tgz_created}" comment_details_list=${comment_details_list}$(add_detail ${TGZ} 1 "${success_msg}" "${failure_msg}") -# Now, do the actual repalcement of __DETAILS_FMT__ +# Now, do the actual replacement of __DETAILS_FMT__ comment_details_fmt="
    _Details_
    __DETAILS_LIST__
    " comment_details="${comment_details_fmt/__DETAILS_LIST__/${comment_details_list}}" comment_description=${comment_description/__DETAILS_FMT__/${comment_details}} From 6553e294163fb9e117803a2433acba3c14e135f2 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Mon, 11 Mar 2024 16:05:16 +0100 Subject: [PATCH 582/698] Skip the if-condition also if pr_exceptions is empty. There is no point in running the eb --missing again in that case, since there were no --from-pr's in this PR to begin with, so unmerged PRs cannot be the reason for failing --- check_missing_installations.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/check_missing_installations.sh b/check_missing_installations.sh index 6d84384fd7..0ee6ec4385 100755 --- a/check_missing_installations.sh +++ b/check_missing_installations.sh @@ -47,9 +47,11 @@ exit_code=${PIPESTATUS[0]} ok_msg="Command 'eb --missing ...' succeeded, analysing output..." fail_msg="Command 'eb --missing ...' failed, check log '${eb_missing_out}'" -if [ "$exit_code" -eq 1 ]; then +if [ "$exit_code" -eq 1 ] && [ ! -z $pr_exceptions ]; then # We might have failed due to unmerged PRs. Try to make exceptions for --from-pr added in this PR # to software-layer, and see if then it passes. If so, we can report a more specific fail_msg + # Note that if no --from-pr's were used in this PR, $pr_exceptions will be empty and we might as + # well skip this check - unmerged PRs can not be the reason for the non-zero exit code in that scenario # Let's use awk so we can allow for exceptions if we are given a PR diff file awk_command="awk '\!/'from-pr'/ EXCEPTIONS' $easystack" From 27a12bd2e4a88c486f3dd5b5be57ac16eefd2650 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Mon, 11 Mar 2024 16:09:46 +0100 Subject: [PATCH 583/698] Added missing quote --- EESSI-install-software.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/EESSI-install-software.sh b/EESSI-install-software.sh index ed137c522d..219fa8680a 100755 --- a/EESSI-install-software.sh +++ b/EESSI-install-software.sh @@ -257,7 +257,7 @@ if [ ! -f $lmod_rc_file ] || [ ${lmodrc_changed} == '0' ]; then fi echo ">> Creating/updating Lmod SitePackage.lua ..." -export LMOD_PACKAGE_PATH=${EASYBUILD_INSTALLPATH}/.lmod" +export LMOD_PACKAGE_PATH="${EASYBUILD_INSTALLPATH}/.lmod" lmod_sitepackage_file="$LMOD_PACKAGE_PATH/SitePackage.lua" if [ ! -f $lmod_sitepackage_file ] || [ ${sitepackage_changed} == '0' ]; then python3 $TOPDIR/create_lmodsitepackage.py ${EASYBUILD_INSTALLPATH} From 81e544f15333b3d3b3ed70f4954f414f262ba6cd Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Mon, 11 Mar 2024 16:11:31 +0100 Subject: [PATCH 584/698] Cant add to a variable that doesnt exist... We don't need this intermediate assignment anyway --- create_lmodsitepackage.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/create_lmodsitepackage.py b/create_lmodsitepackage.py index 9e77eafecf..9a4a232863 100755 --- a/create_lmodsitepackage.py +++ b/create_lmodsitepackage.py @@ -129,11 +129,10 @@ def error(msg): error("Prefix directory %s does not exist!" % prefix) sitepackage_path = os.path.join(prefix, DOT_LMOD, 'SitePackage.lua') -sitepackage_txt += hook_txt try: os.makedirs(os.path.dirname(sitepackage_path), exist_ok=True) with open(sitepackage_path, 'w') as fp: - fp.write(sitepackage_txt) + fp.write(hook_txt) except (IOError, OSError) as err: error("Failed to create %s: %s" % (sitepackage_path, err)) From 333762b9c1ddab70721826b70a1d432f6d043c49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Mon, 11 Mar 2024 16:41:19 +0100 Subject: [PATCH 585/698] determine whether or not the removal step has to be run --- bot/build.sh | 60 +++++++++++++++++++++++++++++++--------------------- 1 file changed, 36 insertions(+), 24 deletions(-) diff --git a/bot/build.sh b/bot/build.sh index 8f3439b3ad..31d9b576fe 100755 --- a/bot/build.sh +++ b/bot/build.sh @@ -168,12 +168,8 @@ COMMON_ARGS+=("--mode" "run") # make sure to use the same parent dir for storing tarballs of tmp PREVIOUS_TMP_DIR=${PWD}/previous_tmp -# prepare directory to store tarball of tmp for removal and build steps -TARBALL_TMP_REMOVAL_STEP_DIR=${PREVIOUS_TMP_DIR}/removal_step -TARBALL_TMP_BUILD_STEP_DIR=${PREVIOUS_TMP_DIR}/build_step -mkdir -p ${TARBALL_TMP_BUILD_STEP_DIR} ${TARBALL_TMP_REMOVAL_STEP_DIR} - # prepare arguments to install_software_layer.sh (specific to build step) +declare -a BUILD_STEP_ARGS=() declare -a INSTALL_SCRIPT_ARGS=() if [[ ${EESSI_SOFTWARE_SUBDIR_OVERRIDE} =~ .*/generic$ ]]; then INSTALL_SCRIPT_ARGS+=("--generic") @@ -181,24 +177,44 @@ fi [[ ! -z ${BUILD_LOGS_DIR} ]] && INSTALL_SCRIPT_ARGS+=("--build-logs-dir" "${BUILD_LOGS_DIR}") [[ ! -z ${SHARED_FS_PATH} ]] && INSTALL_SCRIPT_ARGS+=("--shared-fs-path" "${SHARED_FS_PATH}") -# prepare arguments to eessi_container.sh specific to remove step -declare -a REMOVAL_STEP_ARGS=() -REMOVAL_STEP_ARGS+=("--save" "${TARBALL_TMP_BUILD_STEP_DIR}") -REMOVAL_STEP_ARGS+=("--storage" "${STORAGE}") -# add fakeroot option in order to be able to remove software -REMOVAL_STEP_ARGS+=("--fakeroot") - -# create tmp file for output of removal step -removal_outerr=$(mktemp remove.outerr.XXXX) +# determine if the removal step has to be run +# assume there's only one diff file that corresponds to the PR patch file +pr_diff=$(ls [0-9]*.diff | head -1) +changed_easystacks_rebuilds=$(cat ${pr_diff} | grep '^+++' | cut -f2 -d' ' | sed 's@^[a-z]/@@g' | grep '^easystacks/.*yml$' | grep "/rebuilds/") +if [[ -z ${changed_easystacks_rebuilds} ]]; then + echo "This PR does not add any easystack files in a rebuilds subdirectory, so let's skip the removal step." +else + # prepare directory to store tarball of tmp for removal and build steps + TARBALL_TMP_REMOVAL_STEP_DIR=${PREVIOUS_TMP_DIR}/removal_step + mkdir -p ${TARBALL_TMP_REMOVAL_STEP_DIR} + + # prepare arguments to eessi_container.sh specific to remove step + declare -a REMOVAL_STEP_ARGS=() + REMOVAL_STEP_ARGS+=("--save" "${TARBALL_TMP_BUILD_STEP_DIR}") + REMOVAL_STEP_ARGS+=("--storage" "${STORAGE}") + # add fakeroot option in order to be able to remove software + REMOVAL_STEP_ARGS+=("--fakeroot") + + # create tmp file for output of removal step + removal_outerr=$(mktemp remove.outerr.XXXX) + + echo "Executing command to remove software:" + echo "./eessi_container.sh ${COMMON_ARGS[@]} ${REMOVAL_STEP_ARGS[@]}" + echo " -- ./EESSI-remove-software.sh \"${INSTALL_SCRIPT_ARGS[@]}\" \"$@\" 2>&1 | tee -a ${removal_outerr}" + ./eessi_container.sh "${COMMON_ARGS[@]}" "${REMOVAL_STEP_ARGS[@]}" \ + -- ./EESSI-remove-software.sh "${INSTALL_SCRIPT_ARGS[@]}" "$@" 2>&1 | tee -a ${removal_outerr} + + # make sure that the build step resumes from the same temporary directory + # this is important, as otherwise the removed software will still be there + REMOVAL_TMPDIR=$(grep ' as tmp directory ' ${removal_outerr} | cut -d ' ' -f 2) + BUILD_STEP_ARGS+=("--resume" "${REMOVAL_TMPDIR}") +fi -echo "Executing command to remove software:" -echo "./eessi_container.sh ${COMMON_ARGS[@]} ${REMOVAL_STEP_ARGS[@]}" -echo " -- ./EESSI-remove-software.sh \"${INSTALL_SCRIPT_ARGS[@]}\" \"$@\" 2>&1 | tee -a ${removal_outerr}" -./eessi_container.sh "${COMMON_ARGS[@]}" "${REMOVAL_STEP_ARGS[@]}" \ - -- ./EESSI-remove-software.sh "${INSTALL_SCRIPT_ARGS[@]}" "$@" 2>&1 | tee -a ${removal_outerr} +# prepare directory to store tarball of tmp for build step +TARBALL_TMP_BUILD_STEP_DIR=${PREVIOUS_TMP_DIR}/build_step +mkdir -p ${TARBALL_TMP_BUILD_STEP_DIR} # prepare arguments to eessi_container.sh specific to build step -declare -a BUILD_STEP_ARGS=() BUILD_STEP_ARGS+=("--save" "${TARBALL_TMP_BUILD_STEP_DIR}") BUILD_STEP_ARGS+=("--storage" "${STORAGE}") # add options required to handle NVIDIA support @@ -207,10 +223,6 @@ if [[ ! -z ${SHARED_FS_PATH} ]]; then BUILD_STEP_ARGS+=("--host-injections" "${SHARED_FS_PATH}/host-injections") fi -# determine temporary directory to resume from; this is important in case software was removed for a rebuild -REMOVAL_TMPDIR=$(grep ' as tmp directory ' ${removal_outerr} | cut -d ' ' -f 2) -BUILD_STEP_ARGS+=("--resume" "${REMOVAL_TMPDIR}") - # create tmp file for output of build step build_outerr=$(mktemp build.outerr.XXXX) From 0343684cc8e7b73fc25e160007dc458c2c54e6d0 Mon Sep 17 00:00:00 2001 From: Tim Kok Date: Tue, 12 Mar 2024 10:19:33 +0100 Subject: [PATCH 586/698] {2023.06}[foss/2023b] python-casacore 3.5.2 + libspatialindex 1.9.3 --- .../2023.06/eessi-2023.06-eb-4.9.0-2023b.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml index 54011c262e..186f4f86b3 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml @@ -43,3 +43,9 @@ easyconfigs: - CDO-2.2.2-gompi-2023b.eb: options: from-pr: 19792 + - python-casacore-3.5.2-foss-2023b.eb: + options: + from-pr: 20084 + - libspatialindex-1.9.3-GCCcore-13.2.0.eb: + options: + from-pr: 19922 From 3e43b061314bdde685b585804a047802cb95f81a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Tue, 12 Mar 2024 14:00:38 +0100 Subject: [PATCH 587/698] add ImageMagick-7.1.1-15-GCCcore-12.3.0.eb --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml index cb207e50ea..8165755865 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml @@ -37,3 +37,6 @@ easyconfigs: - OSU-Micro-Benchmarks-7.2-gompi-2023a-CUDA-12.1.1.eb - OSU-Micro-Benchmarks-7.2-gompi-2023b.eb - JupyterNotebook-7.0.2-GCCcore-12.3.0.eb + - ImageMagick-7.1.1-15-GCCcore-12.3.0.eb: + options: + from-pr: 20086 From 0b826ae64a31e0b2463c6ea65c9c12e1701922ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Tue, 12 Mar 2024 16:53:26 +0100 Subject: [PATCH 588/698] remove proxy arguments Co-authored-by: Kenneth Hoste --- EESSI-remove-software.sh | 2 -- 1 file changed, 2 deletions(-) diff --git a/EESSI-remove-software.sh b/EESSI-remove-software.sh index 819c08f8ce..4786d60fc0 100755 --- a/EESSI-remove-software.sh +++ b/EESSI-remove-software.sh @@ -11,8 +11,6 @@ display_help() { echo " --build-logs-dir - location to copy EasyBuild logs to for failed builds" echo " -g | --generic - instructs script to build for generic architecture target" echo " -h | --help - display this usage information" - echo " -x | --http-proxy URL - provides URL for the environment variable http_proxy" - echo " -y | --https-proxy URL - provides URL for the environment variable https_proxy" echo " --shared-fs-path - path to directory on shared filesystem that can be used" } From 0ed12492ed91e0ada5dd142536927a5edc4a817f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Tue, 12 Mar 2024 16:58:17 +0100 Subject: [PATCH 589/698] remove code for setting http(s)_proxy Co-authored-by: Kenneth Hoste --- EESSI-remove-software.sh | 8 -------- 1 file changed, 8 deletions(-) diff --git a/EESSI-remove-software.sh b/EESSI-remove-software.sh index 4786d60fc0..e995f55a45 100755 --- a/EESSI-remove-software.sh +++ b/EESSI-remove-software.sh @@ -27,14 +27,6 @@ while [[ $# -gt 0 ]]; do # no shifting needed here, we're done. exit 0 ;; - -x|--http-proxy) - export http_proxy="$2" - shift 2 - ;; - -y|--https-proxy) - export https_proxy="$2" - shift 2 - ;; --build-logs-dir) export build_logs_dir="${2}" shift 2 From bc4fd890f9ae68b094b164dc85ed217eef420622 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Tue, 12 Mar 2024 16:58:42 +0100 Subject: [PATCH 590/698] no need to set build logs dir Co-authored-by: Kenneth Hoste --- EESSI-remove-software.sh | 4 ---- 1 file changed, 4 deletions(-) diff --git a/EESSI-remove-software.sh b/EESSI-remove-software.sh index e995f55a45..d3823c7036 100755 --- a/EESSI-remove-software.sh +++ b/EESSI-remove-software.sh @@ -27,10 +27,6 @@ while [[ $# -gt 0 ]]; do # no shifting needed here, we're done. exit 0 ;; - --build-logs-dir) - export build_logs_dir="${2}" - shift 2 - ;; --shared-fs-path) export shared_fs_path="${2}" shift 2 From fd7a9eadd21fd386beaceb0af211dd2f523a6669 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Tue, 12 Mar 2024 16:59:52 +0100 Subject: [PATCH 591/698] remove commented code Co-authored-by: ocaisa --- EESSI-remove-software.sh | 3 --- 1 file changed, 3 deletions(-) diff --git a/EESSI-remove-software.sh b/EESSI-remove-software.sh index d3823c7036..02e91a43d1 100755 --- a/EESSI-remove-software.sh +++ b/EESSI-remove-software.sh @@ -60,9 +60,6 @@ else fatal_error "$EESSI_CVMFS_REPO is not available!" fi -# avoid that pyc files for EasyBuild are stored in EasyBuild installation directory -#export PYTHONPYCACHEPREFIX=$TMPDIR/pycache - DETECTION_PARAMETERS='' GENERIC=0 EB='eb' From 994d573759c1c7707952a9d9a125cc6e1d3df47b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Tue, 12 Mar 2024 17:00:27 +0100 Subject: [PATCH 592/698] fix comment about purpose of script Co-authored-by: ocaisa --- EESSI-remove-software.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/EESSI-remove-software.sh b/EESSI-remove-software.sh index 02e91a43d1..f111be339e 100755 --- a/EESSI-remove-software.sh +++ b/EESSI-remove-software.sh @@ -1,6 +1,6 @@ #!/bin/bash # -# Script to install EESSI software stack (version set through init/eessi_defaults) +# Script to remove part of the EESSI software stack (version set through init/eessi_defaults) # see example parsing of command line arguments at # https://wiki.bash-hackers.org/scripting/posparams#using_a_while_loop From 3d7a959d0a1e62eb4c29c7b6742b82d5eaff4321 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Tue, 12 Mar 2024 17:02:10 +0100 Subject: [PATCH 593/698] remove code and parameter for setting shared fs path --- EESSI-remove-software.sh | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/EESSI-remove-software.sh b/EESSI-remove-software.sh index f111be339e..1779a7ed58 100755 --- a/EESSI-remove-software.sh +++ b/EESSI-remove-software.sh @@ -11,7 +11,6 @@ display_help() { echo " --build-logs-dir - location to copy EasyBuild logs to for failed builds" echo " -g | --generic - instructs script to build for generic architecture target" echo " -h | --help - display this usage information" - echo " --shared-fs-path - path to directory on shared filesystem that can be used" } POSITIONAL_ARGS=() @@ -27,10 +26,6 @@ while [[ $# -gt 0 ]]; do # no shifting needed here, we're done. exit 0 ;; - --shared-fs-path) - export shared_fs_path="${2}" - shift 2 - ;; -*|--*) echo "Error: Unknown option: $1" >&2 exit 1 @@ -103,12 +98,6 @@ fi echo ">> Configuring EasyBuild..." source $TOPDIR/configure_easybuild -if [ ! -z "${shared_fs_path}" ]; then - shared_eb_sourcepath=${shared_fs_path}/easybuild/sources - echo ">> Using ${shared_eb_sourcepath} as shared EasyBuild source path" - export EASYBUILD_SOURCEPATH=${shared_eb_sourcepath}:${EASYBUILD_SOURCEPATH} -fi - echo ">> Setting up \$MODULEPATH..." # make sure no modules are loaded module --force purge From 02955711c5600305d8feedece3e85978626ff962 Mon Sep 17 00:00:00 2001 From: Tim Kok Date: Tue, 12 Mar 2024 18:33:07 +0100 Subject: [PATCH 594/698] Use PR that sets LD_LIBRARY_PATH for python-casacore --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml index 186f4f86b3..e2d35276df 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml @@ -45,7 +45,7 @@ easyconfigs: from-pr: 19792 - python-casacore-3.5.2-foss-2023b.eb: options: - from-pr: 20084 + from-pr: 20089 - libspatialindex-1.9.3-GCCcore-13.2.0.eb: options: from-pr: 19922 From dab1ac0f66c6164c9ea9bc3798be7a0673465ac5 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Tue, 12 Mar 2024 19:12:15 +0100 Subject: [PATCH 595/698] Create generic function to compare (and if needed copy) files based on an explicit list from one dir to another. Use that generic function to replace the existing code copying the scripts dir, and the scripts/gpu_support/nvidia dir. Add to that a copy of the init dir and the current subdirs, again listing the files to copy explicitely for safety. --- install_scripts.sh | 80 +++++++++++++++++++++++++++++++++------------- 1 file changed, 57 insertions(+), 23 deletions(-) diff --git a/install_scripts.sh b/install_scripts.sh index 6e6cd825ac..ac1741428e 100755 --- a/install_scripts.sh +++ b/install_scripts.sh @@ -25,6 +25,35 @@ compare_and_copy() { fi } +copy_files_by_list() { +# Compares and copies listed files from a source to a target directory + if [ "$#" -ne 3 ]; then + echo "Usage of function: copy_files_by_list " + echo "Here, file_list is an (expanded) bash array" + echo "Example:" + echo "my_files=(file1 file2)" + echo 'copy_files_by_list /my/source /my/target "${my_files[@]}"' + return 1 + fi + source_dir="$1" + target_dir="$2" + # Need to shift all arguments to the left twice. Then, rebuild the array with the rest of the arguments + shift + shift + file_list=("$@") + + # Create target dir + mkdir -p ${target_dir} + + # Copy from source to target + echo "Copying files: ${file_list[@]}" + echo "From directory: ${source_dir}" + echo "To directory: ${target_dir}" + + for file in ${file_list[@]}; do + compare_and_copy ${source_dir}/${file} ${target_dir}/${file} + done +} POSITIONAL_ARGS=() @@ -54,28 +83,33 @@ set -- "${POSITIONAL_ARGS[@]}" TOPDIR=$(dirname $(realpath $0)) -# Subdirs for generic scripts -SCRIPTS_DIR_SOURCE=${TOPDIR}/scripts # Source dir -SCRIPTS_DIR_TARGET=${INSTALL_PREFIX}/scripts # Target dir +# Copy for init directory +init_files=( + bash eessi_archdetect.sh eessi_defaults eessi_environment_variables eessi_software_subdir_for_host.py + minimal_eessi_env README.md test.py +) +copy_files_by_list ${TOPDIR}/init ${INSTALL_PREFIX}/init "${init_files[@]}" -# Create target dir -mkdir -p ${SCRIPTS_DIR_TARGET} +# Copy for the init/arch_specs directory +arch_specs_files=( + eessi_arch_arm.spec eessi_arch_ppc.spec eessi_arch_x86.spec +) +copy_files_by_list ${TOPDIR}/init/arch_specs ${INSTALL_PREFIX}/init/arch_specs "${arch_specs_files[@]}" -# Copy scripts into this prefix -echo "copying scripts from ${SCRIPTS_DIR_SOURCE} to ${SCRIPTS_DIR_TARGET}" -for file in utils.sh; do - compare_and_copy ${SCRIPTS_DIR_SOURCE}/${file} ${SCRIPTS_DIR_TARGET}/${file} -done -# Subdirs for GPU support -NVIDIA_GPU_SUPPORT_DIR_SOURCE=${SCRIPTS_DIR_SOURCE}/gpu_support/nvidia # Source dir -NVIDIA_GPU_SUPPORT_DIR_TARGET=${SCRIPTS_DIR_TARGET}/gpu_support/nvidia # Target dir - -# Create target dir -mkdir -p ${NVIDIA_GPU_SUPPORT_DIR_TARGET} - -# Copy files from this directory into the prefix -# To be on the safe side, we dont do recursive copies, but we are explicitely copying each individual file we want to add -echo "copying scripts from ${NVIDIA_GPU_SUPPORT_DIR_SOURCE} to ${NVIDIA_GPU_SUPPORT_DIR_TARGET}" -for file in install_cuda_host_injections.sh link_nvidia_host_libraries.sh; do - compare_and_copy ${NVIDIA_GPU_SUPPORT_DIR_SOURCE}/${file} ${NVIDIA_GPU_SUPPORT_DIR_TARGET}/${file} -done +# Copy for init/Magic_castle directory +mc_files=( + bash eessi_python3 +) +copy_files_by_list ${TOPDIR}/init/Magic_Castle ${INSTALL_PREFIX}/init/Magic_Castle "${mc_files[@]}" + +# Copy for the scripts directory +script_files=( + utils.sh +) +copy_files_by_list ${TOPDIR}/scripts ${INSTALL_PREFIX}/scripts "${script_files[@]}" + +# Copy files for the scripts/gpu_support/nvidia directory +nvidia_files=( + install_cuda_host_injections.sh link_nvidia_host_libraries.sh +) +copy_files_by_list ${TOPDIR}/gpu_support/nvidia ${INSTALL_PREFIX}/gpu_support/nvidia "${nvidia_files[@]}" From 0abedef29ffceb22a5cafa88869bf48b38f3fbb3 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Tue, 12 Mar 2024 19:17:47 +0100 Subject: [PATCH 596/698] An expanded bash array counts as extra arguments. Thus, we cannot check for three arguments, it can be anything greater than 2 --- install_scripts.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install_scripts.sh b/install_scripts.sh index ac1741428e..e8077aa242 100755 --- a/install_scripts.sh +++ b/install_scripts.sh @@ -27,7 +27,7 @@ compare_and_copy() { copy_files_by_list() { # Compares and copies listed files from a source to a target directory - if [ "$#" -ne 3 ]; then + if [ ! "$#" -ge 3 ]; then echo "Usage of function: copy_files_by_list " echo "Here, file_list is an (expanded) bash array" echo "Example:" From 11c7525e03069c0a5aa85d36a9cca5a1aeaff381 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Tue, 12 Mar 2024 19:21:06 +0100 Subject: [PATCH 597/698] Forgot to check the diff if the create_lmodsitepackage.py actually changed --- EESSI-install-software.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/EESSI-install-software.sh b/EESSI-install-software.sh index 219fa8680a..2d5912736b 100755 --- a/EESSI-install-software.sh +++ b/EESSI-install-software.sh @@ -259,6 +259,7 @@ fi echo ">> Creating/updating Lmod SitePackage.lua ..." export LMOD_PACKAGE_PATH="${EASYBUILD_INSTALLPATH}/.lmod" lmod_sitepackage_file="$LMOD_PACKAGE_PATH/SitePackage.lua" +sitepackage_changed=$(cat ${pr_diff} | grep '^+++' | cut -f2 -d' ' | sed 's@^[a-z]/@@g' | grep '^create_lmodsitepackage.py$' > /dev/null; echo $?) if [ ! -f $lmod_sitepackage_file ] || [ ${sitepackage_changed} == '0' ]; then python3 $TOPDIR/create_lmodsitepackage.py ${EASYBUILD_INSTALLPATH} check_exit_code $? "$lmod_sitepackage_file created" "Failed to create $lmod_sitepackage_file" From a07b8a8accc23666be71f36ce0d09e82e9ffdc30 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Tue, 12 Mar 2024 19:22:01 +0100 Subject: [PATCH 598/698] Is quoting the problem --- EESSI-install-software.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/EESSI-install-software.sh b/EESSI-install-software.sh index 2d5912736b..c51459967d 100755 --- a/EESSI-install-software.sh +++ b/EESSI-install-software.sh @@ -260,7 +260,7 @@ echo ">> Creating/updating Lmod SitePackage.lua ..." export LMOD_PACKAGE_PATH="${EASYBUILD_INSTALLPATH}/.lmod" lmod_sitepackage_file="$LMOD_PACKAGE_PATH/SitePackage.lua" sitepackage_changed=$(cat ${pr_diff} | grep '^+++' | cut -f2 -d' ' | sed 's@^[a-z]/@@g' | grep '^create_lmodsitepackage.py$' > /dev/null; echo $?) -if [ ! -f $lmod_sitepackage_file ] || [ ${sitepackage_changed} == '0' ]; then +if [ ! -f $lmod_sitepackage_file ] || [ "${sitepackage_changed}" == '0' ]; then python3 $TOPDIR/create_lmodsitepackage.py ${EASYBUILD_INSTALLPATH} check_exit_code $? "$lmod_sitepackage_file created" "Failed to create $lmod_sitepackage_file" fi From 90b3ce068aa787715d82a20656c99f656f561a44 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Tue, 12 Mar 2024 19:23:57 +0100 Subject: [PATCH 599/698] Try quoting --- EESSI-install-software.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/EESSI-install-software.sh b/EESSI-install-software.sh index c51459967d..2a4f7182cd 100755 --- a/EESSI-install-software.sh +++ b/EESSI-install-software.sh @@ -260,7 +260,7 @@ echo ">> Creating/updating Lmod SitePackage.lua ..." export LMOD_PACKAGE_PATH="${EASYBUILD_INSTALLPATH}/.lmod" lmod_sitepackage_file="$LMOD_PACKAGE_PATH/SitePackage.lua" sitepackage_changed=$(cat ${pr_diff} | grep '^+++' | cut -f2 -d' ' | sed 's@^[a-z]/@@g' | grep '^create_lmodsitepackage.py$' > /dev/null; echo $?) -if [ ! -f $lmod_sitepackage_file ] || [ "${sitepackage_changed}" == '0' ]; then +if [ ! -f "$lmod_sitepackage_file" ] || [ "${sitepackage_changed}" == '0' ]; then python3 $TOPDIR/create_lmodsitepackage.py ${EASYBUILD_INSTALLPATH} check_exit_code $? "$lmod_sitepackage_file created" "Failed to create $lmod_sitepackage_file" fi From 9c707e4a69ad385474067f2adee599632ffda882 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Tue, 12 Mar 2024 19:25:30 +0100 Subject: [PATCH 600/698] Correct prefix for the gpu_support scripts --- install_scripts.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install_scripts.sh b/install_scripts.sh index e8077aa242..508735975c 100755 --- a/install_scripts.sh +++ b/install_scripts.sh @@ -112,4 +112,4 @@ copy_files_by_list ${TOPDIR}/scripts ${INSTALL_PREFIX}/scripts "${script_files[@ nvidia_files=( install_cuda_host_injections.sh link_nvidia_host_libraries.sh ) -copy_files_by_list ${TOPDIR}/gpu_support/nvidia ${INSTALL_PREFIX}/gpu_support/nvidia "${nvidia_files[@]}" +copy_files_by_list ${TOPDIR}/scripts/gpu_support/nvidia ${INSTALL_PREFIX}/scripts/gpu_support/nvidia "${nvidia_files[@]}" From c08831ee060d153bb1da466cfaa00e4103c37e31 Mon Sep 17 00:00:00 2001 From: ocaisa Date: Wed, 13 Mar 2024 15:46:24 +0100 Subject: [PATCH 601/698] Update bot/check-build.sh Co-authored-by: Kenneth Hoste --- bot/check-build.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bot/check-build.sh b/bot/check-build.sh index 10b1ed6a11..e075518421 100755 --- a/bot/check-build.sh +++ b/bot/check-build.sh @@ -174,7 +174,7 @@ fi # For now, we only analyse unmerged EasyConfigs as potential cause, but we can easily add checks for other # specific scenarios below -# Check for the pattern being added here https://github.com/EESSI/software-layer/pull/493 to the output to +# Check for the pattern being added here by check_missing_installations.sh to the output to # see if EasyConfigs might have been unmerged, and that's causing a failure UNMERGED_EASYCONFIG=-1 if [[ ${SLURM_OUTPUT_FOUND} -eq 1 ]]; then From 992b11dc782d391899862f80033f08b1efba4634 Mon Sep 17 00:00:00 2001 From: ocaisa Date: Wed, 13 Mar 2024 15:47:37 +0100 Subject: [PATCH 602/698] Remove PR to trigger comment Co-authored-by: Kenneth Hoste --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml index 2b5844289d..e2d35276df 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml @@ -49,6 +49,3 @@ easyconfigs: - libspatialindex-1.9.3-GCCcore-13.2.0.eb: options: from-pr: 19922 - - CFITSIO-4.3.1-GCCcore-13.2.0.eb: - options: - from-pr: 19840 From 8d6493ea05422ee443f10bc9230c3ff3884af998 Mon Sep 17 00:00:00 2001 From: ocaisa Date: Wed, 13 Mar 2024 15:48:08 +0100 Subject: [PATCH 603/698] Trigger on any non-zero exit code Co-authored-by: Kenneth Hoste --- check_missing_installations.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/check_missing_installations.sh b/check_missing_installations.sh index 0ee6ec4385..7c29228416 100755 --- a/check_missing_installations.sh +++ b/check_missing_installations.sh @@ -47,7 +47,7 @@ exit_code=${PIPESTATUS[0]} ok_msg="Command 'eb --missing ...' succeeded, analysing output..." fail_msg="Command 'eb --missing ...' failed, check log '${eb_missing_out}'" -if [ "$exit_code" -eq 1 ] && [ ! -z $pr_exceptions ]; then +if [ "$exit_code" -ne 0 ] && [ ! -z $pr_exceptions ]; then # We might have failed due to unmerged PRs. Try to make exceptions for --from-pr added in this PR # to software-layer, and see if then it passes. If so, we can report a more specific fail_msg # Note that if no --from-pr's were used in this PR, $pr_exceptions will be empty and we might as From a148920b35a4a70d03ce5f0175b3c730ae279db0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Wed, 13 Mar 2024 22:35:09 +0100 Subject: [PATCH 604/698] remove openmpi hook that provided a temporary workaround --- create_lmodrc.py | 21 --------------------- 1 file changed, 21 deletions(-) diff --git a/create_lmodrc.py b/create_lmodrc.py index bc69dd4396..0e738a530e 100755 --- a/create_lmodrc.py +++ b/create_lmodrc.py @@ -94,28 +94,7 @@ end end -local function openmpi_load_hook(t) - -- disable smcuda BTL when loading OpenMPI module for aarch64/neoverse_v1, - -- to work around hang/crash due to bug in OpenMPI; - -- see https://gitlab.com/eessi/support/-/issues/41 - local frameStk = require("FrameStk"):singleton() - local mt = frameStk:mt() - local moduleName = string.match(t.modFullName, "(.-)/") - local cpuTarget = os.getenv("EESSI_SOFTWARE_SUBDIR") or "" - if (moduleName == "OpenMPI") and (cpuTarget == "aarch64/neoverse_v1") then - local msg = "Adding '^smcuda' to $OMPI_MCA_btl to work around bug in OpenMPI" - LmodMessage(msg .. " (see https://gitlab.com/eessi/support/-/issues/41)") - local ompiMcaBtl = os.getenv("OMPI_MCA_btl") - if ompiMcaBtl == nil then - setenv("OMPI_MCA_btl", "^smcuda") - else - setenv("OMPI_MCA_btl", ompiMcaBtl .. ",^smcuda") - end - end -end - hook.register("load", cuda_enabled_load_hook) -hook.register("load", openmpi_load_hook) """ def error(msg): From 5d4542e5a73962da0032427bba7ee7ed19b79ef0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Wed, 13 Mar 2024 22:38:33 +0100 Subject: [PATCH 605/698] remove hook.register for cuda hook --- create_lmodrc.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/create_lmodrc.py b/create_lmodrc.py index 2175f885d2..133743c844 100755 --- a/create_lmodrc.py +++ b/create_lmodrc.py @@ -94,8 +94,6 @@ end end -hook.register("load", cuda_enabled_load_hook) - -- Combine both functions into a single one, as we can only register one function as load hook in lmod -- Also: make it non-local, so it can be imported and extended by other lmodrc files if needed function eessi_load_hook(t) From 54bb3ec1cdd6cae823068a67cdfdb5d443d4e69b Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Thu, 14 Mar 2024 09:38:29 +0100 Subject: [PATCH 606/698] Make sure the changed init scripts also end up in the tarball --- create_tarball.sh | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/create_tarball.sh b/create_tarball.sh index a619df9439..5bd8eeb110 100755 --- a/create_tarball.sh +++ b/create_tarball.sh @@ -51,6 +51,13 @@ if [ -d ${eessi_version}/scripts ]; then find ${eessi_version}/scripts -type f | grep -v '/\.wh\.' >> ${files_list} fi +# also include init, which is also copied by install_scripts.sh +if [ -d ${eessi_version}/init ]; then + find ${eessi_version}/init -type f | grep -v '/\.wh\.' >> ${files_list} +fi + + + if [ -d ${eessi_version}/software/${os}/${cpu_arch_subdir}/modules ]; then # module files find ${eessi_version}/software/${os}/${cpu_arch_subdir}/modules -type f | grep -v '/\.wh\.' >> ${files_list} From 0fdbd3a3be714c116b76f72c694406ea03e513fe Mon Sep 17 00:00:00 2001 From: ocaisa Date: Thu, 14 Mar 2024 11:35:35 +0100 Subject: [PATCH 607/698] Add Z3 with new module name Via https://github.com/easybuilders/easybuild-easyconfigs/pull/20050 , the different Z3 easyconfigs have been consolidated. This means the version used as a dependency for PyTorch has been "corrected" so we need to dance around that for our CI purposes --- .../2023.06/eessi-2023.06-eb-4.9.0-2023a.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml index 8165755865..5a46cf5fb2 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml @@ -40,3 +40,9 @@ easyconfigs: - ImageMagick-7.1.1-15-GCCcore-12.3.0.eb: options: from-pr: 20086 + - Z3-4.12.2-GCCcore-12.3.0.eb: + options: + # The Z3 dependency of PyTorch had it's versionsuffix removed + # and we need to workaround the problem this creates, + # see https://github.com/EESSI/software-layer/pull/501 for details + from-pr: 20050 From 5a6bfd149bd59894e51adec5b2e8e9dc00873977 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Thu, 14 Mar 2024 17:47:18 +0100 Subject: [PATCH 608/698] Remove whitspace --- create_tarball.sh | 2 -- 1 file changed, 2 deletions(-) diff --git a/create_tarball.sh b/create_tarball.sh index 5bd8eeb110..2d77acfc43 100755 --- a/create_tarball.sh +++ b/create_tarball.sh @@ -56,8 +56,6 @@ if [ -d ${eessi_version}/init ]; then find ${eessi_version}/init -type f | grep -v '/\.wh\.' >> ${files_list} fi - - if [ -d ${eessi_version}/software/${os}/${cpu_arch_subdir}/modules ]; then # module files find ${eessi_version}/software/${os}/${cpu_arch_subdir}/modules -type f | grep -v '/\.wh\.' >> ${files_list} From d097189aa07f2d323779212e4451a2df2466193d Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 14 Mar 2024 22:55:43 +0100 Subject: [PATCH 609/698] {2023.06}[2023a] PyOpenGL 3.1.7 --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml index 5a46cf5fb2..1d3119e5c2 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml @@ -46,3 +46,4 @@ easyconfigs: # and we need to workaround the problem this creates, # see https://github.com/EESSI/software-layer/pull/501 for details from-pr: 20050 + - PyOpenGL-3.1.7-GCCcore-12.3.0.eb From 8245aff4b7f4dd178924cd42eda76c21eed146fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Fri, 15 Mar 2024 00:02:09 +0100 Subject: [PATCH 610/698] add from-pr=20007 --- .../2023.06/eessi-2023.06-eb-4.9.0-2023a.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml index 1d3119e5c2..65b4265ff7 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml @@ -46,4 +46,6 @@ easyconfigs: # and we need to workaround the problem this creates, # see https://github.com/EESSI/software-layer/pull/501 for details from-pr: 20050 - - PyOpenGL-3.1.7-GCCcore-12.3.0.eb + - PyOpenGL-3.1.7-GCCcore-12.3.0.eb: + options: + from-pr: 20007 From af58e1a5fc00ab311eab185a91302d0c735c8978 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 15 Mar 2024 20:48:12 +0100 Subject: [PATCH 611/698] {2023.06}[2023a] ipympl 0.9.3 --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml index 65b4265ff7..384aa04a9c 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml @@ -49,3 +49,6 @@ easyconfigs: - PyOpenGL-3.1.7-GCCcore-12.3.0.eb: options: from-pr: 20007 + - ipympl-0.9.3-foss-2023a.eb: + options: + from-pr: 20126 From a12b9a340e17953a8e6fe741245663c69ece813b Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Fri, 15 Mar 2024 21:13:32 +0100 Subject: [PATCH 612/698] fix check_missing_installations.sh when unmerged PR is used --- check_missing_installations.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/check_missing_installations.sh b/check_missing_installations.sh index 7c29228416..d8135ea3cb 100755 --- a/check_missing_installations.sh +++ b/check_missing_installations.sh @@ -47,7 +47,7 @@ exit_code=${PIPESTATUS[0]} ok_msg="Command 'eb --missing ...' succeeded, analysing output..." fail_msg="Command 'eb --missing ...' failed, check log '${eb_missing_out}'" -if [ "$exit_code" -ne 0 ] && [ ! -z $pr_exceptions ]; then +if [ "$exit_code" -ne 0 ] && [ ! -z "$pr_exceptions" ]; then # We might have failed due to unmerged PRs. Try to make exceptions for --from-pr added in this PR # to software-layer, and see if then it passes. If so, we can report a more specific fail_msg # Note that if no --from-pr's were used in this PR, $pr_exceptions will be empty and we might as From 54e30859248035fb70694f68a6b6c6c695b196c9 Mon Sep 17 00:00:00 2001 From: Alan O'Cais Date: Wed, 20 Mar 2024 23:27:16 +0100 Subject: [PATCH 613/698] Add libxc and ELPA --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml index 384aa04a9c..4fa3d8a29e 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml @@ -52,3 +52,5 @@ easyconfigs: - ipympl-0.9.3-foss-2023a.eb: options: from-pr: 20126 + - ELPA-2023.05.001-foss-2023a.eb + - libxc-6.2.2-GCC-12.3.0.eb From 9d62787eb90dcd6a42e5c9e8b9f51f87c4d84d31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Tue, 26 Mar 2024 09:19:44 +0100 Subject: [PATCH 614/698] source init/bash instead of minimal eessi env --- EESSI-remove-software.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/EESSI-remove-software.sh b/EESSI-remove-software.sh index 1779a7ed58..010ee365af 100755 --- a/EESSI-remove-software.sh +++ b/EESSI-remove-software.sh @@ -47,7 +47,7 @@ source $TOPDIR/scripts/utils.sh echo ">> Setting up environment..." -source $TOPDIR/init/minimal_eessi_env +source $TOPDIR/init/bash if [ -d $EESSI_CVMFS_REPO ]; then echo_green "$EESSI_CVMFS_REPO available, OK!" From 229ce93ac4c2db86b8fbd29da38f1e78f2d5c167 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Tue, 26 Mar 2024 09:20:35 +0100 Subject: [PATCH 615/698] remove GENERIC variable --- EESSI-remove-software.sh | 2 -- 1 file changed, 2 deletions(-) diff --git a/EESSI-remove-software.sh b/EESSI-remove-software.sh index 010ee365af..6d0c9e3800 100755 --- a/EESSI-remove-software.sh +++ b/EESSI-remove-software.sh @@ -56,12 +56,10 @@ else fi DETECTION_PARAMETERS='' -GENERIC=0 EB='eb' if [[ "$EASYBUILD_OPTARCH" == "GENERIC" ]]; then echo_yellow ">> GENERIC build requested, taking appropriate measures!" DETECTION_PARAMETERS="$DETECTION_PARAMETERS --generic" - GENERIC=1 EB='eb --optarch=GENERIC' fi From 977bcaad3f5ba29d5d38ef95dc5f2acc782c573b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Tue, 26 Mar 2024 09:26:41 +0100 Subject: [PATCH 616/698] clean up eb optarch=generic settings --- EESSI-remove-software.sh | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/EESSI-remove-software.sh b/EESSI-remove-software.sh index 6d0c9e3800..cdf4ae3b7b 100755 --- a/EESSI-remove-software.sh +++ b/EESSI-remove-software.sh @@ -18,7 +18,9 @@ POSITIONAL_ARGS=() while [[ $# -gt 0 ]]; do case $1 in -g|--generic) + echo_yellow ">> GENERIC build requested, taking appropriate measures!" EASYBUILD_OPTARCH="GENERIC" + DETECTION_PARAMETERS="--generic" shift ;; -h|--help) @@ -55,14 +57,6 @@ else fatal_error "$EESSI_CVMFS_REPO is not available!" fi -DETECTION_PARAMETERS='' -EB='eb' -if [[ "$EASYBUILD_OPTARCH" == "GENERIC" ]]; then - echo_yellow ">> GENERIC build requested, taking appropriate measures!" - DETECTION_PARAMETERS="$DETECTION_PARAMETERS --generic" - EB='eb --optarch=GENERIC' -fi - echo ">> Determining software subdirectory to use for current build host..." if [ -z $EESSI_SOFTWARE_SUBDIR_OVERRIDE ]; then export EESSI_SOFTWARE_SUBDIR_OVERRIDE=$(python3 $TOPDIR/eessi_software_subdir.py $DETECTION_PARAMETERS) @@ -129,7 +123,7 @@ if [ $EUID -eq 0 ]; then # we need to remove existing installation directories first, # so let's figure out which modules have to be rebuilt by doing a dry-run and grepping "someapp/someversion" for the relevant lines (with [R]) # * [R] $CFGS/s/someapp/someapp-someversion.eb (module: someapp/someversion) - rebuild_apps=$(${EB} --allow-use-as-root-and-accept-consequences --dry-run-short --rebuild --easystack ${easystack_file} | grep "^ \* \[R\]" | grep -o "module: .*[^)]" | awk '{print $2}') + rebuild_apps=$(eb --allow-use-as-root-and-accept-consequences --dry-run-short --rebuild --easystack ${easystack_file} | grep "^ \* \[R\]" | grep -o "module: .*[^)]" | awk '{print $2}') for app in ${rebuild_apps}; do app_dir=${EASYBUILD_INSTALLPATH}/software/${app} app_module=${EASYBUILD_INSTALLPATH}/modules/all/${app}.lua From f1cfc1b1f4f9f32d3669b46af781b2ab648d9c52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Tue, 26 Mar 2024 09:38:48 +0100 Subject: [PATCH 617/698] source init/bash and clean up redundant code --- EESSI-remove-software.sh | 30 ++++++++---------------------- 1 file changed, 8 insertions(+), 22 deletions(-) diff --git a/EESSI-remove-software.sh b/EESSI-remove-software.sh index cdf4ae3b7b..c1f0bcb3d0 100755 --- a/EESSI-remove-software.sh +++ b/EESSI-remove-software.sh @@ -47,6 +47,14 @@ export TMPDIR=$(mktemp -d /tmp/eessi-remove.XXXXXXXX) source $TOPDIR/scripts/utils.sh +echo ">> Determining software subdirectory to use for current build host..." +if [ -z $EESSI_SOFTWARE_SUBDIR_OVERRIDE ]; then + export EESSI_SOFTWARE_SUBDIR_OVERRIDE=$(python3 $TOPDIR/eessi_software_subdir.py $DETECTION_PARAMETERS) + echo ">> Determined \$EESSI_SOFTWARE_SUBDIR_OVERRIDE via 'eessi_software_subdir.py $DETECTION_PARAMETERS' script" +else + echo ">> Picking up pre-defined \$EESSI_SOFTWARE_SUBDIR_OVERRIDE: ${EESSI_SOFTWARE_SUBDIR_OVERRIDE}" +fi + echo ">> Setting up environment..." source $TOPDIR/init/bash @@ -57,19 +65,6 @@ else fatal_error "$EESSI_CVMFS_REPO is not available!" fi -echo ">> Determining software subdirectory to use for current build host..." -if [ -z $EESSI_SOFTWARE_SUBDIR_OVERRIDE ]; then - export EESSI_SOFTWARE_SUBDIR_OVERRIDE=$(python3 $TOPDIR/eessi_software_subdir.py $DETECTION_PARAMETERS) - echo ">> Determined \$EESSI_SOFTWARE_SUBDIR_OVERRIDE via 'eessi_software_subdir.py $DETECTION_PARAMETERS' script" -else - echo ">> Picking up pre-defined \$EESSI_SOFTWARE_SUBDIR_OVERRIDE: ${EESSI_SOFTWARE_SUBDIR_OVERRIDE}" -fi - -# Set all the EESSI environment variables (respecting $EESSI_SOFTWARE_SUBDIR_OVERRIDE) -# $EESSI_SILENT - don't print any messages -# $EESSI_BASIC_ENV - give a basic set of environment variables -EESSI_SILENT=1 EESSI_BASIC_ENV=1 source $TOPDIR/init/eessi_environment_variables - if [[ -z ${EESSI_SOFTWARE_SUBDIR} ]]; then fatal_error "Failed to determine software subdirectory?!" elif [[ "${EESSI_SOFTWARE_SUBDIR}" != "${EESSI_SOFTWARE_SUBDIR_OVERRIDE}" ]]; then @@ -78,15 +73,6 @@ else echo_green ">> Using ${EESSI_SOFTWARE_SUBDIR} as software subdirectory!" fi -echo ">> Initializing Lmod..." -source $EPREFIX/usr/share/Lmod/init/bash -ml --version -if [[ $? -eq 0 ]]; then - echo_green ">> Found Lmod ${LMOD_VERSION}" -else - fatal_error "Failed to initialize Lmod?!" -fi - echo ">> Configuring EasyBuild..." source $TOPDIR/configure_easybuild From aa4a82dd3c87eccf155715eee9797532f9ed8dd0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Tue, 26 Mar 2024 09:48:48 +0100 Subject: [PATCH 618/698] set EB variable --- EESSI-remove-software.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/EESSI-remove-software.sh b/EESSI-remove-software.sh index c1f0bcb3d0..9993986904 100755 --- a/EESSI-remove-software.sh +++ b/EESSI-remove-software.sh @@ -74,6 +74,7 @@ else fi echo ">> Configuring EasyBuild..." +EB="eb" source $TOPDIR/configure_easybuild echo ">> Setting up \$MODULEPATH..." From 6ca6a70671a019db0e83f54cb74e6049cba2a0f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Tue, 26 Mar 2024 09:57:32 +0100 Subject: [PATCH 619/698] remove build-dir argument from display_help --- EESSI-remove-software.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/EESSI-remove-software.sh b/EESSI-remove-software.sh index 9993986904..10cea933db 100755 --- a/EESSI-remove-software.sh +++ b/EESSI-remove-software.sh @@ -8,7 +8,6 @@ display_help() { echo "usage: $0 [OPTIONS]" - echo " --build-logs-dir - location to copy EasyBuild logs to for failed builds" echo " -g | --generic - instructs script to build for generic architecture target" echo " -h | --help - display this usage information" } From e89cb05d3bdcdb8df9c16cfdcea24afa81f8abf1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Tue, 26 Mar 2024 10:08:12 +0100 Subject: [PATCH 620/698] export the EASYBUILD_OPTARCH variable Co-authored-by: Kenneth Hoste --- EESSI-remove-software.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/EESSI-remove-software.sh b/EESSI-remove-software.sh index 10cea933db..f465aff304 100755 --- a/EESSI-remove-software.sh +++ b/EESSI-remove-software.sh @@ -18,7 +18,7 @@ while [[ $# -gt 0 ]]; do case $1 in -g|--generic) echo_yellow ">> GENERIC build requested, taking appropriate measures!" - EASYBUILD_OPTARCH="GENERIC" + export EASYBUILD_OPTARCH="GENERIC" DETECTION_PARAMETERS="--generic" shift ;; From 502c02311cae893ef7983b340481c47684716997 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Tue, 26 Mar 2024 10:19:46 +0100 Subject: [PATCH 621/698] remove EASYBUILD_OPTARCH --- EESSI-remove-software.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/EESSI-remove-software.sh b/EESSI-remove-software.sh index f465aff304..1cd291b16c 100755 --- a/EESSI-remove-software.sh +++ b/EESSI-remove-software.sh @@ -18,7 +18,6 @@ while [[ $# -gt 0 ]]; do case $1 in -g|--generic) echo_yellow ">> GENERIC build requested, taking appropriate measures!" - export EASYBUILD_OPTARCH="GENERIC" DETECTION_PARAMETERS="--generic" shift ;; From 3206a0ffa0b8759d8db5d67b5c3525d8b25ed674 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Tue, 26 Mar 2024 10:24:19 +0100 Subject: [PATCH 622/698] remove echo_yellow call for generic builds --- EESSI-remove-software.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/EESSI-remove-software.sh b/EESSI-remove-software.sh index 1cd291b16c..446a156cb8 100755 --- a/EESSI-remove-software.sh +++ b/EESSI-remove-software.sh @@ -17,7 +17,6 @@ POSITIONAL_ARGS=() while [[ $# -gt 0 ]]; do case $1 in -g|--generic) - echo_yellow ">> GENERIC build requested, taking appropriate measures!" DETECTION_PARAMETERS="--generic" shift ;; From ee1c2cefd1b6461aa675288bef0cd2faa1163d31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Tue, 26 Mar 2024 10:27:20 +0100 Subject: [PATCH 623/698] use separate variable for removal script arguments --- bot/build.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/bot/build.sh b/bot/build.sh index 31d9b576fe..c76285faf4 100755 --- a/bot/build.sh +++ b/bot/build.sh @@ -171,8 +171,10 @@ PREVIOUS_TMP_DIR=${PWD}/previous_tmp # prepare arguments to install_software_layer.sh (specific to build step) declare -a BUILD_STEP_ARGS=() declare -a INSTALL_SCRIPT_ARGS=() +declare -a REMOVAL_SCRIPT_ARGS=() if [[ ${EESSI_SOFTWARE_SUBDIR_OVERRIDE} =~ .*/generic$ ]]; then INSTALL_SCRIPT_ARGS+=("--generic") + REMOVAL_SCRIPT_ARGS+=("--generic") fi [[ ! -z ${BUILD_LOGS_DIR} ]] && INSTALL_SCRIPT_ARGS+=("--build-logs-dir" "${BUILD_LOGS_DIR}") [[ ! -z ${SHARED_FS_PATH} ]] && INSTALL_SCRIPT_ARGS+=("--shared-fs-path" "${SHARED_FS_PATH}") @@ -200,9 +202,9 @@ else echo "Executing command to remove software:" echo "./eessi_container.sh ${COMMON_ARGS[@]} ${REMOVAL_STEP_ARGS[@]}" - echo " -- ./EESSI-remove-software.sh \"${INSTALL_SCRIPT_ARGS[@]}\" \"$@\" 2>&1 | tee -a ${removal_outerr}" + echo " -- ./EESSI-remove-software.sh \"${REMOVAL_SCRIPT_ARGS[@]}\" \"$@\" 2>&1 | tee -a ${removal_outerr}" ./eessi_container.sh "${COMMON_ARGS[@]}" "${REMOVAL_STEP_ARGS[@]}" \ - -- ./EESSI-remove-software.sh "${INSTALL_SCRIPT_ARGS[@]}" "$@" 2>&1 | tee -a ${removal_outerr} + -- ./EESSI-remove-software.sh "${REMOVAL_SCRIPT_ARGS[@]}" "$@" 2>&1 | tee -a ${removal_outerr} # make sure that the build step resumes from the same temporary directory # this is important, as otherwise the removed software will still be there From 330db7a02cf011c2115babf598991217f87bd022 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 26 Mar 2024 10:32:49 +0100 Subject: [PATCH 624/698] also dump status to test result file --- bot/check-test.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/bot/check-test.sh b/bot/check-test.sh index 4b5f7575e5..f045b9500a 100755 --- a/bot/check-test.sh +++ b/bot/check-test.sh @@ -200,5 +200,6 @@ comment_description=${comment_description/__DETAILS_FMT__/${comment_details}} # Actually writing the comment description to the result file echo "${comment_description}" >> ${job_test_result_file} +echo "status = ${status}" >> ${job_test_result_file} exit 0 From f3c62077c40e299bb6a3f157adfd2c1f5a32d067 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 26 Mar 2024 10:33:24 +0100 Subject: [PATCH 625/698] add Caspar as author in `bot/test.sh` script --- bot/test.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/bot/test.sh b/bot/test.sh index 89c1a6a8bf..66c2cef129 100755 --- a/bot/test.sh +++ b/bot/test.sh @@ -8,6 +8,7 @@ # https://github.com/EESSI/software-layer.git # # author: Thomas Roeblitz (@trz42) +# author: Caspar van Leeuwen (@casparvl) # # license: GPLv2 # From c55ee6b6075786fd0dfd657ba3e2e667a215b9da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Tue, 26 Mar 2024 10:33:44 +0100 Subject: [PATCH 626/698] clarify why we need fakeroot, add link to issue --- bot/build.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/bot/build.sh b/bot/build.sh index c76285faf4..b007b80172 100755 --- a/bot/build.sh +++ b/bot/build.sh @@ -194,7 +194,8 @@ else declare -a REMOVAL_STEP_ARGS=() REMOVAL_STEP_ARGS+=("--save" "${TARBALL_TMP_BUILD_STEP_DIR}") REMOVAL_STEP_ARGS+=("--storage" "${STORAGE}") - # add fakeroot option in order to be able to remove software + # add fakeroot option in order to be able to remove software, see: + # https://github.com/EESSI/software-layer/issues/312 REMOVAL_STEP_ARGS+=("--fakeroot") # create tmp file for output of removal step From 13072df707b96cad40b4d21cbedd6666af756b0d Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 26 Mar 2024 10:34:09 +0100 Subject: [PATCH 627/698] use read-only mode to access software installations via container --- bot/test.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bot/test.sh b/bot/test.sh index 66c2cef129..925b91d49a 100755 --- a/bot/test.sh +++ b/bot/test.sh @@ -180,7 +180,7 @@ echo "bot/test.sh: EESSI_OS_TYPE='${EESSI_OS_TYPE}'" # prepare arguments to eessi_container.sh common to build and tarball steps declare -a COMMON_ARGS=() COMMON_ARGS+=("--verbose") -COMMON_ARGS+=("--access" "rw") +COMMON_ARGS+=("--access" "ro") COMMON_ARGS+=("--mode" "run") [[ ! -z ${CONTAINER} ]] && COMMON_ARGS+=("--container" "${CONTAINER}") [[ ! -z ${HTTP_PROXY} ]] && COMMON_ARGS+=("--http-proxy" "${HTTP_PROXY}") From 1fa323ada6d0fddc312ad102cba8619d073f9fb0 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 26 Mar 2024 10:34:53 +0100 Subject: [PATCH 628/698] fix typo: build -> test --- bot/test.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bot/test.sh b/bot/test.sh index 925b91d49a..4984340e6e 100755 --- a/bot/test.sh +++ b/bot/test.sh @@ -190,7 +190,7 @@ COMMON_ARGS+=("--mode" "run") # make sure to use the same parent dir for storing tarballs of tmp PREVIOUS_TMP_DIR=${PWD}/previous_tmp -# prepare directory to store tarball of tmp for build step +# prepare directory to store tarball of tmp for test step TARBALL_TMP_TEST_STEP_DIR=${PREVIOUS_TMP_DIR}/test_step mkdir -p ${TARBALL_TMP_TEST_STEP_DIR} @@ -216,7 +216,7 @@ fi # create tmp file for output of build step test_outerr=$(mktemp test.outerr.XXXX) -echo "Executing command to build software:" +echo "Executing command to test software:" echo "./eessi_container.sh ${COMMON_ARGS[@]} ${TEST_STEP_ARGS[@]}" echo " -- ./run_tests.sh \"${TEST_SUITE_ARGS[@]}\" \"$@\" 2>&1 | tee -a ${test_outerr}" ./eessi_container.sh "${COMMON_ARGS[@]}" "${TEST_STEP_ARGS[@]}" \ From 8d05473eb5eedf0cdaba75f6b4d4a40f38a3182d Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 26 Mar 2024 10:35:30 +0100 Subject: [PATCH 629/698] disable CPU auto-detection in template ReFrame configuration script used for running test suite --- reframe_config_bot.py.tmpl | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/reframe_config_bot.py.tmpl b/reframe_config_bot.py.tmpl index b2f7916e79..0cc3e9f530 100644 --- a/reframe_config_bot.py.tmpl +++ b/reframe_config_bot.py.tmpl @@ -51,9 +51,8 @@ site_configuration = { { 'purge_environment': True, 'resolve_module_conflicts': False, # avoid loading the module before submitting the job - # Enable automatic detection of CPU architecture - # See https://reframe-hpc.readthedocs.io/en/stable/configure.html#auto-detecting-processor-information - 'remote_detect': True, + # disable automatic detection of CPU architecture (since we're using local scheduler) + 'remote_detect': False, } ], 'logging': common_logging_config(), From c53f578687e43ae0c7876c3a9d5c48fc2432ad49 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 26 Mar 2024 10:37:09 +0100 Subject: [PATCH 630/698] pass down --generic to script used for running test suite, so tests are run with generic software installations when intended --- run_tests.sh | 2 +- test_suite.sh | 9 ++++----- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/run_tests.sh b/run_tests.sh index de7fd8c2e1..1dbb47db9d 100755 --- a/run_tests.sh +++ b/run_tests.sh @@ -21,4 +21,4 @@ source ${base_dir}/init/eessi_defaults ./run_in_compat_layer_env.sh "git clone https://github.com/EESSI/test-suite EESSI-test-suite" # Run the test suite -./test_suite.sh +./test_suite.sh "$@" diff --git a/test_suite.sh b/test_suite.sh index e3bab04aec..95eb9daa2a 100755 --- a/test_suite.sh +++ b/test_suite.sh @@ -23,7 +23,7 @@ POSITIONAL_ARGS=() while [[ $# -gt 0 ]]; do case $1 in -g|--generic) - EASYBUILD_OPTARCH="GENERIC" + DETECTION_PARAMETERS="--generic" shift ;; -h|--help) @@ -75,10 +75,9 @@ TMPDIR=$(mktemp -d) echo ">> Setting up environment..." module --force purge -# Make sure defaults are set for EESSI_CVMFS_REPO and EESSI_VERSION, before initializing EESSI -source $TOPDIR/init/eessi_defaults -# Initialize EESSI -source ${EESSI_CVMFS_REPO}/versions/${EESSI_VERSION}/init/bash +export EESSI_SOFTWARE_SUBDIR_OVERRIDE=$(python3 $TOPDIR/eessi_software_subdir.py $DETECTION_PARAMETERS) + +source $TOPDIR/init/bash # Load the ReFrame module # Currently, we load the default version. Maybe we should somehow make this configurable in the future? From 57d8b6fd4eceaf951c69cac9f325d5aa5eb113ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Tue, 26 Mar 2024 10:54:13 +0100 Subject: [PATCH 631/698] remove openmpi hook for smcuda workaround --- create_lmodsitepackage.py | 21 --------------------- 1 file changed, 21 deletions(-) diff --git a/create_lmodsitepackage.py b/create_lmodsitepackage.py index 9a4a232863..5a7a915494 100755 --- a/create_lmodsitepackage.py +++ b/create_lmodsitepackage.py @@ -84,31 +84,10 @@ end end -local function eessi_openmpi_load_hook(t) - -- disable smcuda BTL when loading OpenMPI module for aarch64/neoverse_v1, - -- to work around hang/crash due to bug in OpenMPI; - -- see https://gitlab.com/eessi/support/-/issues/41 - local frameStk = require("FrameStk"):singleton() - local mt = frameStk:mt() - local moduleName = string.match(t.modFullName, "(.-)/") - local cpuTarget = os.getenv("EESSI_SOFTWARE_SUBDIR") or "" - if (moduleName == "OpenMPI") and (cpuTarget == "aarch64/neoverse_v1") then - local msg = "Adding '^smcuda' to $OMPI_MCA_btl to work around bug in OpenMPI" - LmodMessage(msg .. " (see https://gitlab.com/eessi/support/-/issues/41)") - local ompiMcaBtl = os.getenv("OMPI_MCA_btl") - if ompiMcaBtl == nil then - setenv("OMPI_MCA_btl", "^smcuda") - else - setenv("OMPI_MCA_btl", ompiMcaBtl .. ",^smcuda") - end - end -end - -- Combine both functions into a single one, as we can only register one function as load hook in lmod -- Also: make it non-local, so it can be imported and extended by other lmodrc files if needed function eessi_load_hook(t) eessi_cuda_enabled_load_hook(t) - eessi_openmpi_load_hook(t) end From bef38bafea82a15300e6c9ded9d2dd2843c3dadf Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 26 Mar 2024 10:55:57 +0100 Subject: [PATCH 632/698] {2023.06}[2023a] OpenJPEG 2.5.0 --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml index 384aa04a9c..0a1343295e 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml @@ -52,3 +52,4 @@ easyconfigs: - ipympl-0.9.3-foss-2023a.eb: options: from-pr: 20126 + - OpenJPEG-2.5.0-GCCcore-12.3.0.eb From a0dc2815c4f45162aed56bf2c5e7bfcdc8b0eaf3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Tue, 26 Mar 2024 11:03:33 +0100 Subject: [PATCH 633/698] fix comment for creating lmod rc code block --- EESSI-install-software.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/EESSI-install-software.sh b/EESSI-install-software.sh index 31ce30d4fc..b2984af856 100755 --- a/EESSI-install-software.sh +++ b/EESSI-install-software.sh @@ -247,7 +247,7 @@ fi ### add packages here -echo ">> Creating/updating Lmod cache..." +echo ">> Creating/updating Lmod RC file..." export LMOD_CONFIG_DIR="${EASYBUILD_INSTALLPATH}/.lmod" lmod_rc_file="$LMOD_CONFIG_DIR/lmodrc.lua" lmodrc_changed=$(cat ${pr_diff} | grep '^+++' | cut -f2 -d' ' | sed 's@^[a-z]/@@g' | grep '^create_lmodrc.py$' > /dev/null; echo $?) From b2570ed8cca9d7f87d3c506ec33d7b0c7b033671 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Tue, 26 Mar 2024 11:03:50 +0100 Subject: [PATCH 634/698] don't update lmod cache here anymore --- EESSI-install-software.sh | 2 -- 1 file changed, 2 deletions(-) diff --git a/EESSI-install-software.sh b/EESSI-install-software.sh index b2984af856..7b7a60686c 100755 --- a/EESSI-install-software.sh +++ b/EESSI-install-software.sh @@ -265,7 +265,5 @@ if [ ! -f "$lmod_sitepackage_file" ] || [ "${sitepackage_changed}" == '0' ]; the check_exit_code $? "$lmod_sitepackage_file created" "Failed to create $lmod_sitepackage_file" fi -$TOPDIR/update_lmod_cache.sh ${EPREFIX} ${EASYBUILD_INSTALLPATH} - echo ">> Cleaning up ${TMPDIR}..." rm -r ${TMPDIR} From 56e4b87d1c0de54f374ca77d7c316be173d8bb9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Tue, 26 Mar 2024 14:56:15 +0100 Subject: [PATCH 635/698] add LittleCMS, giflib, OpenJPEG to fix check_missing CI --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml index e2d35276df..380c0107c6 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml @@ -49,3 +49,6 @@ easyconfigs: - libspatialindex-1.9.3-GCCcore-13.2.0.eb: options: from-pr: 19922 + - LittleCMS-2.15-GCCcore-13.2.0.eb + - giflib-5.2.1-GCCcore-13.2.0.eb + - OpenJPEG-2.5.0-GCCcore-13.2.0.eb From 32f04020a1b3e3c7061107d221dc4faf155c7fb0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Tue, 26 Mar 2024 15:38:05 +0100 Subject: [PATCH 636/698] also add libwebp-1.3.2-GCCcore-13.2.0.eb --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml index 380c0107c6..25cdde27e6 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml @@ -52,3 +52,5 @@ easyconfigs: - LittleCMS-2.15-GCCcore-13.2.0.eb - giflib-5.2.1-GCCcore-13.2.0.eb - OpenJPEG-2.5.0-GCCcore-13.2.0.eb + - libwebp-1.3.2-GCCcore-13.2.0.eb + From f2844fb210aa865155989811c88d85b7d8b3c1a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Tue, 26 Mar 2024 17:09:49 +0100 Subject: [PATCH 637/698] remove OpenMPI, which has been rebuilt in #488 --- .../2023.06/eessi-2023.06-eb-4.8.2-2023a.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml index b971c5adad..1c3ea8fd78 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml @@ -55,8 +55,4 @@ easyconfigs: - gnuplot-5.4.8-GCCcore-12.3.0.eb: options: from-pr: 19261 - - OpenMPI-4.1.5-GCC-12.3.0.eb: - options: - from-pr: 19940 - rebuild: True - OpenFOAM-10-foss-2023a.eb From 5a43f9ef8d8d66dfa2bd0226f28a8bdf7521892b Mon Sep 17 00:00:00 2001 From: Neves-P Date: Tue, 26 Mar 2024 19:16:00 +0100 Subject: [PATCH 638/698] Don't need gnuplot, install with EasyBuild 4.9.0 --- .../2023.06/eessi-2023.06-eb-4.8.2-2023a.yml | 4 ---- .../2023.06/eessi-2023.06-eb-4.9.0-2023a.yml | 1 + 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml index 1c3ea8fd78..7244219dc3 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.8.2-2023a.yml @@ -52,7 +52,3 @@ easyconfigs: - BWA-0.7.17-20220923-GCCcore-12.3.0.eb: options: from-pr: 19820 - - gnuplot-5.4.8-GCCcore-12.3.0.eb: - options: - from-pr: 19261 - - OpenFOAM-10-foss-2023a.eb diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml index 157a47a49e..13d7ebdc02 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml @@ -29,3 +29,4 @@ easyconfigs: # see https://github.com/easybuilders/easybuild-easyconfigs/pull/19554 options: from-pr: 19554 + - OpenFOAM-10-foss-2023a.eb From 7c7e1b1ff18c960db5f1233438295d9c60dd6431 Mon Sep 17 00:00:00 2001 From: Thomas Roeblitz Date: Tue, 26 Mar 2024 20:18:03 +0100 Subject: [PATCH 639/698] use older apptainer (1.2.4) --- install_apptainer_ubuntu.sh | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/install_apptainer_ubuntu.sh b/install_apptainer_ubuntu.sh index c35c34cda6..6cf9a6f48e 100755 --- a/install_apptainer_ubuntu.sh +++ b/install_apptainer_ubuntu.sh @@ -5,8 +5,11 @@ set -e # see https://github.com/apptainer/singularity/issues/5390#issuecomment-899111181 sudo apt-get install alien alien --version -apptainer_rpm=$(curl --silent -L https://dl.fedoraproject.org/pub/epel/8/Everything/x86_64/Packages/a/ | grep 'apptainer-[0-9]' | sed 's/.*\(apptainer[0-9._a-z-]*.rpm\).*/\1/g') -curl -OL https://dl.fedoraproject.org/pub/epel/8/Everything/x86_64/Packages/a/${apptainer_rpm} +#apptainer_rpm=$(curl --silent -L https://dl.fedoraproject.org/pub/epel/8/Everything/x86_64/Packages/a/ | grep 'apptainer-[0-9]' | sed 's/.*\(apptainer[0-9._a-z-]*.rpm\).*/\1/g') +#curl -OL https://dl.fedoraproject.org/pub/epel/8/Everything/x86_64/Packages/a/${apptainer_rpm} +#/pub/archive/epel/8.8/Everything/x86_64/Packages/a +apptainer_rpm=$(curl --silent -L https://dl.fedoraproject.org/pub/archive/epel/8.8/Everything/x86_64/Packages/a/ | grep 'apptainer-[0-9]' | sed 's/.*\(apptainer[0-9._a-z-]*.rpm\).*/\1/g') +curl -OL https://dl.fedoraproject.org/pub/archive/epel/8.8/Everything/x86_64/Packages/a/${apptainer_rpm} sudo alien -d ${apptainer_rpm} sudo apt install ./apptainer*.deb apptainer --version From deb12e9fef3103b8c07504e745b14fe366ed618d Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 26 Mar 2024 20:35:40 +0100 Subject: [PATCH 640/698] clean up downloading RPM for Apptainer < 1.3.0 RPM from EPEL 8.8 archive, for now --- install_apptainer_ubuntu.sh | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/install_apptainer_ubuntu.sh b/install_apptainer_ubuntu.sh index 6cf9a6f48e..5eb513db2c 100755 --- a/install_apptainer_ubuntu.sh +++ b/install_apptainer_ubuntu.sh @@ -5,11 +5,13 @@ set -e # see https://github.com/apptainer/singularity/issues/5390#issuecomment-899111181 sudo apt-get install alien alien --version -#apptainer_rpm=$(curl --silent -L https://dl.fedoraproject.org/pub/epel/8/Everything/x86_64/Packages/a/ | grep 'apptainer-[0-9]' | sed 's/.*\(apptainer[0-9._a-z-]*.rpm\).*/\1/g') -#curl -OL https://dl.fedoraproject.org/pub/epel/8/Everything/x86_64/Packages/a/${apptainer_rpm} -#/pub/archive/epel/8.8/Everything/x86_64/Packages/a -apptainer_rpm=$(curl --silent -L https://dl.fedoraproject.org/pub/archive/epel/8.8/Everything/x86_64/Packages/a/ | grep 'apptainer-[0-9]' | sed 's/.*\(apptainer[0-9._a-z-]*.rpm\).*/\1/g') -curl -OL https://dl.fedoraproject.org/pub/archive/epel/8.8/Everything/x86_64/Packages/a/${apptainer_rpm} +# stick to Apptainer < 1.3.0 by downloading from EPEL 8.8 archive, +# since CI workflow for testing scripts hangs/fails when using Apptainer 1.3.0 +# cfr. https://github.com/EESSI/software-layer/pull/514 +epel_subdir="pub/epel/8" +epel_subdir="pub/archive/epel/8.8" +apptainer_rpm=$(curl --silent -L https://dl.fedoraproject.org/${epel_subdir}/Everything/x86_64/Packages/a/ | grep 'apptainer-[0-9]' | sed 's/.*\(apptainer[0-9._a-z-]*.rpm\).*/\1/g') +curl -OL https://dl.fedoraproject.org/${epel_subdir}/Everything/x86_64/Packages/a/${apptainer_rpm} sudo alien -d ${apptainer_rpm} sudo apt install ./apptainer*.deb apptainer --version From 547386f9180687627ce506cab0cacc91ed808025 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Wed, 27 Mar 2024 10:08:14 +0100 Subject: [PATCH 641/698] dont fail if grep doesnt find rebuild easystack files --- bot/build.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bot/build.sh b/bot/build.sh index b007b80172..2438adbcd9 100755 --- a/bot/build.sh +++ b/bot/build.sh @@ -182,7 +182,7 @@ fi # determine if the removal step has to be run # assume there's only one diff file that corresponds to the PR patch file pr_diff=$(ls [0-9]*.diff | head -1) -changed_easystacks_rebuilds=$(cat ${pr_diff} | grep '^+++' | cut -f2 -d' ' | sed 's@^[a-z]/@@g' | grep '^easystacks/.*yml$' | grep "/rebuilds/") +changed_easystacks_rebuilds=$(cat ${pr_diff} | grep '^+++' | cut -f2 -d' ' | sed 's@^[a-z]/@@g' | grep '^easystacks/.*yml$' | grep "/rebuilds/" || true) if [[ -z ${changed_easystacks_rebuilds} ]]; then echo "This PR does not add any easystack files in a rebuilds subdirectory, so let's skip the removal step." else From c2fad0032008d0ca73f6603ad7fbae6c2391a6a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Wed, 27 Mar 2024 10:08:32 +0100 Subject: [PATCH 642/698] add quotes around variable in if statement --- bot/build.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bot/build.sh b/bot/build.sh index 2438adbcd9..e9f8ecfbb9 100755 --- a/bot/build.sh +++ b/bot/build.sh @@ -183,7 +183,7 @@ fi # assume there's only one diff file that corresponds to the PR patch file pr_diff=$(ls [0-9]*.diff | head -1) changed_easystacks_rebuilds=$(cat ${pr_diff} | grep '^+++' | cut -f2 -d' ' | sed 's@^[a-z]/@@g' | grep '^easystacks/.*yml$' | grep "/rebuilds/" || true) -if [[ -z ${changed_easystacks_rebuilds} ]]; then +if [[ -z "${changed_easystacks_rebuilds}" ]]; then echo "This PR does not add any easystack files in a rebuilds subdirectory, so let's skip the removal step." else # prepare directory to store tarball of tmp for removal and build steps From bce1067e0b9962c591804c87ea150e38123822be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Wed, 27 Mar 2024 10:13:32 +0100 Subject: [PATCH 643/698] use proper tmp dir for removal step --- bot/build.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bot/build.sh b/bot/build.sh index e9f8ecfbb9..0ebd55692e 100755 --- a/bot/build.sh +++ b/bot/build.sh @@ -192,7 +192,7 @@ else # prepare arguments to eessi_container.sh specific to remove step declare -a REMOVAL_STEP_ARGS=() - REMOVAL_STEP_ARGS+=("--save" "${TARBALL_TMP_BUILD_STEP_DIR}") + REMOVAL_STEP_ARGS+=("--save" "${TARBALL_TMP_REMOVAL_STEP_DIR}") REMOVAL_STEP_ARGS+=("--storage" "${STORAGE}") # add fakeroot option in order to be able to remove software, see: # https://github.com/EESSI/software-layer/issues/312 From 4a9d9aeedd5fc7dc719bbc9612c6b5e2213a673b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Wed, 27 Mar 2024 10:20:16 +0100 Subject: [PATCH 644/698] let the tarball step resume from the right directory --- bot/build.sh | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/bot/build.sh b/bot/build.sh index 0ebd55692e..0d23f59b66 100755 --- a/bot/build.sh +++ b/bot/build.sh @@ -247,7 +247,14 @@ declare -a TARBALL_STEP_ARGS=() TARBALL_STEP_ARGS+=("--save" "${TARBALL_TMP_TARBALL_STEP_DIR}") # determine temporary directory to resume from -TARBALL_STEP_ARGS+=("--resume" "${REMOVAL_TMPDIR}") +if [[ -z ${REMOVAL_TMPDIR} ]]; then + # no rebuild step was done, so the tarball step should resume from the build directory + BUILD_TMPDIR=$(grep ' as tmp directory ' ${build_outerr} | cut -d ' ' -f 2) + TARBALL_STEP_ARGS+=("--resume" "${BUILD_TMPDIR}") +else + # a removal step was done, so resume from its temporary directory (which was also used for the build step) + TARBALL_STEP_ARGS+=("--resume" "${REMOVAL_TMPDIR}") +fi timestamp=$(date +%s) # to set EESSI_VERSION we need to source init/eessi_defaults now From 2ba8513f770f2f23961a05bc64b98488e4aaaa8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Wed, 27 Mar 2024 11:14:05 +0100 Subject: [PATCH 645/698] group grep and true commands Co-authored-by: Kenneth Hoste --- bot/build.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bot/build.sh b/bot/build.sh index 0d23f59b66..ff933a447d 100755 --- a/bot/build.sh +++ b/bot/build.sh @@ -182,7 +182,7 @@ fi # determine if the removal step has to be run # assume there's only one diff file that corresponds to the PR patch file pr_diff=$(ls [0-9]*.diff | head -1) -changed_easystacks_rebuilds=$(cat ${pr_diff} | grep '^+++' | cut -f2 -d' ' | sed 's@^[a-z]/@@g' | grep '^easystacks/.*yml$' | grep "/rebuilds/" || true) +changed_easystacks_rebuilds=$(cat ${pr_diff} | grep '^+++' | cut -f2 -d' ' | sed 's@^[a-z]/@@g' | grep '^easystacks/.*yml$' | (grep "/rebuilds/" || true)) if [[ -z "${changed_easystacks_rebuilds}" ]]; then echo "This PR does not add any easystack files in a rebuilds subdirectory, so let's skip the removal step." else From 0e38a4769d7db0e893f9a4eb058ec9333a0e648e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Wed, 27 Mar 2024 11:16:35 +0100 Subject: [PATCH 646/698] add comment about true command --- bot/build.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bot/build.sh b/bot/build.sh index ff933a447d..dcc61c19d4 100755 --- a/bot/build.sh +++ b/bot/build.sh @@ -182,6 +182,8 @@ fi # determine if the removal step has to be run # assume there's only one diff file that corresponds to the PR patch file pr_diff=$(ls [0-9]*.diff | head -1) +# the true at the end of the next command is important: grep will expectedly return 1 if there is no easystack file being added under rebuilds, +# but due to "set -e" the entire script would otherwise fail changed_easystacks_rebuilds=$(cat ${pr_diff} | grep '^+++' | cut -f2 -d' ' | sed 's@^[a-z]/@@g' | grep '^easystacks/.*yml$' | (grep "/rebuilds/" || true)) if [[ -z "${changed_easystacks_rebuilds}" ]]; then echo "This PR does not add any easystack files in a rebuilds subdirectory, so let's skip the removal step." From e9bb5b8da5e7634396fca503bdafbe11861c0f42 Mon Sep 17 00:00:00 2001 From: Richard Top Date: Wed, 27 Mar 2024 14:25:47 +0000 Subject: [PATCH 647/698] {2023.06}[GCCcore/13.2.0] Wayland v1.22.0 --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml index 25cdde27e6..6710c07b49 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml @@ -53,4 +53,5 @@ easyconfigs: - giflib-5.2.1-GCCcore-13.2.0.eb - OpenJPEG-2.5.0-GCCcore-13.2.0.eb - libwebp-1.3.2-GCCcore-13.2.0.eb + - Wayland-1.22.0-GCCcore-13.2.0.eb From 80609663bf16cf013df9922c2229976c19e821df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Wed, 27 Mar 2024 16:08:52 +0100 Subject: [PATCH 648/698] add quotes around changed_easystacks variable --- EESSI-install-software.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/EESSI-install-software.sh b/EESSI-install-software.sh index 470663e45a..e2d7cf8c51 100755 --- a/EESSI-install-software.sh +++ b/EESSI-install-software.sh @@ -204,7 +204,7 @@ ${EESSI_PREFIX}/scripts/gpu_support/nvidia/install_cuda_host_injections.sh -c 12 # use PR patch file to determine in which easystack files stuff was added changed_easystacks=$(cat ${pr_diff} | grep '^+++' | cut -f2 -d' ' | sed 's@^[a-z]/@@g' | grep '^easystacks/.*yml$' | egrep -v 'known-issues|missing') -if [ -z ${changed_easystacks} ]; then +if [ -z "${changed_easystacks}" ]; then echo "No missing installations, party time!" # Ensure the bot report success, as there was nothing to be build here else From 70935ea4293d0e7a94b99f573a77fe74b4f68fbe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Wed, 27 Mar 2024 16:13:07 +0100 Subject: [PATCH 649/698] first process rebuilds, then new installations --- EESSI-install-software.sh | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/EESSI-install-software.sh b/EESSI-install-software.sh index e2d7cf8c51..a905d966f6 100755 --- a/EESSI-install-software.sh +++ b/EESSI-install-software.sh @@ -208,7 +208,11 @@ if [ -z "${changed_easystacks}" ]; then echo "No missing installations, party time!" # Ensure the bot report success, as there was nothing to be build here else - for easystack_file in ${changed_easystacks}; do + # first process rebuilds, if any, then easystack files for new installations + # "|| true" is used to make sure that the grep command always returns success + rebuild_easystacks=$(echo "${changed_easystacks}" | (grep "/rebuilds/" || true)) + new_easystacks=$(echo "${changed_easystacks}" | (grep -v "/rebuilds/" || true)) + for easystack_file in ${rebuild_easystacks} ${new_easystacks}; do echo -e "Processing easystack file ${easystack_file}...\n\n" From 005c02c4341f02aedb5a0dc7cf3a3c1e96ca2b56 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Thu, 28 Mar 2024 00:18:12 +0100 Subject: [PATCH 650/698] Rebuild GCCcore-12.3.0 and 13.2.0 to fix aarch64 vectorization issue --- ...eb-4.9.0-GCCcore-fix-aarch64-vectorization.yml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 easystacks/software.eessi.io/2023.06/rebuilds/20240328-eb-4.9.0-GCCcore-fix-aarch64-vectorization.yml diff --git a/easystacks/software.eessi.io/2023.06/rebuilds/20240328-eb-4.9.0-GCCcore-fix-aarch64-vectorization.yml b/easystacks/software.eessi.io/2023.06/rebuilds/20240328-eb-4.9.0-GCCcore-fix-aarch64-vectorization.yml new file mode 100644 index 0000000000..f63aa421f5 --- /dev/null +++ b/easystacks/software.eessi.io/2023.06/rebuilds/20240328-eb-4.9.0-GCCcore-fix-aarch64-vectorization.yml @@ -0,0 +1,15 @@ +# 2024-03-28 +# Rebuild GCCcore to fix a compiler bug in the tree-vectorizer +# We encountered it in https://github.com/EESSI/software-layer/pull/479#issuecomment-1957091774 +# and https://github.com/EESSI/software-layer/pull/507#issuecomment-2011724613 +# Upstream issue: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111478 +# Upstream fix: https://gcc.gnu.org/git/gitweb.cgi?p=gcc.git;h=e5f1956498251a4973d52c8aad3faf34d0443169 +# Fix in EasyBuild https://github.com/easybuilders/easybuild-easyconfigs/pull/19974 +# https://github.com/easybuilders/easybuild-easyconfigs/pull/20218 +easyconfigs: + - GCCcore-12.3.0.eb: + options: + from-pr: 20218 + - GCCcore-13.2.0.eb: + options: + from-pr: 19974 From 1c1dd06db1a9b52b827b7adc87f412db586714cd Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Thu, 28 Mar 2024 10:27:33 +0100 Subject: [PATCH 651/698] Added Modflow and deps --- .../2023.06/eessi-2023.06-eb-4.9.0-2023b.yml | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml index 6710c07b49..d0f1f33914 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml @@ -54,4 +54,13 @@ easyconfigs: - OpenJPEG-2.5.0-GCCcore-13.2.0.eb - libwebp-1.3.2-GCCcore-13.2.0.eb - Wayland-1.22.0-GCCcore-13.2.0.eb - + - SuperLU_DIST-8.1.2-foss-2023a.eb: + options: + from-pr: 20162 + - PETSc-3.20.3-foss-2023a.eb: + options: + include-easyblocks-from-pr: 3086 + from-pr: 19686 + - MODFLOW-6.4.4-foss-2023a.eb: + options: + from-pr: 20142 From 1489742eae3de68def89474d40945177cc331cff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Thu, 28 Mar 2024 11:11:07 +0100 Subject: [PATCH 652/698] use easyconfigs PR #20238 for R 4.2.2 --- .../2023.06/eessi-2023.06-eb-4.9.0-2022b.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2022b.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2022b.yml index 629023a1cd..3962f63bda 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2022b.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2022b.yml @@ -8,4 +8,6 @@ easyconfigs: - ImageMagick-7.1.0-53-GCCcore-12.2.0.eb: options: from-pr: 20086 - - R-4.2.2-foss-2022b.eb + - R-4.2.2-foss-2022b.eb: + options: + from-pr: 20238 From 6e806faef8879bad179c852aa9ec8dc76eca4a1a Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Fri, 29 Mar 2024 15:12:06 +0100 Subject: [PATCH 653/698] Make sure EESSI's SitePackage.lua loads host's SitePackage.lua's if they exist --- create_lmodsitepackage.py | 68 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) diff --git a/create_lmodsitepackage.py b/create_lmodsitepackage.py index 5a7a915494..4f99f1a614 100755 --- a/create_lmodsitepackage.py +++ b/create_lmodsitepackage.py @@ -19,6 +19,71 @@ return content end +local function load_sitespecific_hooks() + -- This function will be run after the EESSI hooks are registered + -- It will load a local SitePackage.lua that is architecture independent (if it exists) from e.g. + -- /cvmfs/software.eessi.io/host_injections/2023.06/.lmod/SitePackage.lua + -- That can define a new hook + -- + -- function site_specific_load_hook(t) + -- + -- end + -- + -- And the either append to the existing hook: + -- + -- local function final_load_hook(t) + -- eessi_load_hook(t) + -- site_specific_load_hook(t) + -- end + -- + -- Over overwrite the EESSI hook entirely: + -- + -- hook.register("load", final_load_hook) + -- + -- Note that the appending procedure can be simplified once we have an lmod >= 8.7.36 + -- See https://github.com/TACC/Lmod/pull/696#issuecomment-1998765722 + -- + -- Subsequently, this function will look for an architecture-specific SitePackage.lua, e.g. from + -- /cvmfs/software.eessi.io/host_injections/2023.06/software/linux/x86_64/amd/zen2/.lmod/SitePackage.lua + -- This can then register an additional hook, e.g. + -- + -- function arch_specific_load_hook(t) + -- + -- end + -- + -- local function final_load_hook(t) + -- eessi_load_hook(t) + -- site_specific_load_hook(t) + -- arch_specific_load_hook(t) + -- end + -- + -- hook.register("load", final_load_hook) + -- + -- Again, the host site could also decide to overwrite by simply doing + -- + -- hook.register("load", arch_specific_load_hook) + + -- get path to to architecture independent SitePackage.lua + local prefixHostInjections = string.gsub(os.getenv('EESSI_PREFIX'), 'versions', 'host_injections') + local hostSitePackage = prefixHostInjections .. "/.lmod/SitePackage.lua" + + -- If the file exists, run it + if isDir(hostSitePackage) then + dofile(hostSitePackage) + end + + -- build the full architecture specific path in host_injections + local archHostInjections = string.gsub(os.getenv('EESSI_SOFTWARE_PATH') or "", 'versions', 'host_injections') + local archSitePackage = archHostInjections .. "/.lmod/SitePackage.lua" + + -- If the file exists, run it + if isDir(archSitePackage) + dofile(archSitePackage) + end + +end + + local function eessi_cuda_enabled_load_hook(t) local frameStk = require("FrameStk"):singleton() local mt = frameStk:mt() @@ -92,6 +157,9 @@ hook.register("load", eessi_load_hook) + +-- Note that this needs to happen at the end, so that any EESSI specific hooks can be overwritten by the site +load_site_specific_hooks() """ def error(msg): From 4bc0369d3505347441167436fb2f8de1a005b6b1 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Fri, 29 Mar 2024 15:14:17 +0100 Subject: [PATCH 654/698] Forgot 'then' --- create_lmodsitepackage.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/create_lmodsitepackage.py b/create_lmodsitepackage.py index 4f99f1a614..6b67b4beca 100755 --- a/create_lmodsitepackage.py +++ b/create_lmodsitepackage.py @@ -77,7 +77,7 @@ local archSitePackage = archHostInjections .. "/.lmod/SitePackage.lua" -- If the file exists, run it - if isDir(archSitePackage) + if isDir(archSitePackage) then dofile(archSitePackage) end From cd9b2061a2d83669bf42a3c8d4f64de97afae3cc Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Fri, 29 Mar 2024 15:49:51 +0100 Subject: [PATCH 655/698] Don't set LMOD_RC any longer, we set LMOD_CONFIG_DIR now, so that sites can add their own properties via LMOD_RC if they want. See https://lmod.readthedocs.io/en/latest/145_properties.html --- init/eessi_environment_variables | 34 +++++++++++++------------------- 1 file changed, 14 insertions(+), 20 deletions(-) diff --git a/init/eessi_environment_variables b/init/eessi_environment_variables index a3ff265e77..5450b2bfb4 100644 --- a/init/eessi_environment_variables +++ b/init/eessi_environment_variables @@ -51,14 +51,23 @@ if [ -d $EESSI_PREFIX ]; then show_msg "Using ${EESSI_SOFTWARE_SUBDIR} as software subdirectory." export EESSI_SOFTWARE_PATH=$EESSI_PREFIX/software/$EESSI_OS_TYPE/$EESSI_SOFTWARE_SUBDIR - # Configure our LMOD_RC file - export LMOD_RC="$EESSI_SOFTWARE_PATH/.lmod/lmodrc.lua" - if [ -f $LMOD_RC ]; then - show_msg "Found Lmod configuration file at $LMOD_RC" + # Configure our LMOD + export LMOD_CONFIG_DIR="$EESSI_SOFTWARE_PATH/.lmod" + lmod_rc_file="$LMOD_CONFIG_DIR/lmodrc.lua" + if [ -f $lmod_rc_file ]; then + show_msg "Found Lmod configuration file at $lmod_rc_file" else - error "Lmod configuration file not found at $LMOD_RC" + error "Lmod configuration file not found at $lmod_rc_file" fi + export LMOD_PACKAGE_PATH="$EESSI_SOFTWARE_PATH/.lmod" + lmod_sitepackage_file="$LMOD_PACKAGE_PATH/SitePackage.lua" + if [ -f $lmod_sitepackage_file ]; then + show_msg "Found Lmod SitePackage.lua file at $lmod_sitepackage_file" + else + error "Lmod SitePackage.lua file not found at $lmod_sitepackage_file" + fi + if [ ! -z $EESSI_BASIC_ENV ]; then show_msg "Only setting up basic environment, so we're done" elif [ -d $EESSI_SOFTWARE_PATH ]; then @@ -85,21 +94,6 @@ if [ -d $EESSI_PREFIX ]; then false fi - export LMOD_CONFIG_DIR="$EESSI_SOFTWARE_PATH/.lmod" - lmod_rc_file="$LMOD_CONFIG_DIR/lmodrc.lua" - if [ -f $lmod_rc_file ]; then - show_msg "Found Lmod configuration file at $lmod_rc_file" - else - error "Lmod configuration file not found at $lmod_rc_file" - fi - - export LMOD_PACKAGE_PATH="$EESSI_SOFTWARE_PATH/.lmod" - lmod_sitepackage_file="$LMOD_PACKAGE_PATH/SitePackage.lua" - if [ -f $lmod_sitepackage_file ]; then - show_msg "Found Lmod SitePackage.lua file at $lmod_sitepackage_file" - else - error "Lmod SitePackage.lua file not found at $lmod_sitepackage_file" - fi else error "EESSI software layer at $EESSI_SOFTWARE_PATH not found!" From d2c5dabb735709ef4ab50c3643d5620a7ea97f12 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Fri, 29 Mar 2024 15:52:44 +0100 Subject: [PATCH 656/698] Add some comment, the lmodrc file did not get properly deployed in https://github.com/EESSI/software-layer/pull/496 . We need to have a change to redeploy it --- create_lmodrc.py | 1 + 1 file changed, 1 insertion(+) diff --git a/create_lmodrc.py b/create_lmodrc.py index ae65153a20..28ad2a1915 100755 --- a/create_lmodrc.py +++ b/create_lmodrc.py @@ -7,6 +7,7 @@ DOT_LMOD = '.lmod' +# LMOD_RC file is the place to define properties, see https://lmod.readthedocs.io/en/latest/145_properties.html TEMPLATE_LMOD_RC = """propT = { } scDescriptT = { From 173332f479d74cd220cb25976a17035317e613ae Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Tue, 2 Apr 2024 13:02:46 +0200 Subject: [PATCH 657/698] Try to retrigger issue 517 --- install_apptainer_ubuntu.sh | 6 ++---- scripts/gpu_support/nvidia/install_cuda_host_injections.sh | 3 +++ 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/install_apptainer_ubuntu.sh b/install_apptainer_ubuntu.sh index 5eb513db2c..8642d62999 100755 --- a/install_apptainer_ubuntu.sh +++ b/install_apptainer_ubuntu.sh @@ -5,11 +5,9 @@ set -e # see https://github.com/apptainer/singularity/issues/5390#issuecomment-899111181 sudo apt-get install alien alien --version -# stick to Apptainer < 1.3.0 by downloading from EPEL 8.8 archive, -# since CI workflow for testing scripts hangs/fails when using Apptainer 1.3.0 -# cfr. https://github.com/EESSI/software-layer/pull/514 +# Switch back to Apptainer >= 1.3.0 to retrigger +# https://github.com/EESSI/software-layer/pull/514 epel_subdir="pub/epel/8" -epel_subdir="pub/archive/epel/8.8" apptainer_rpm=$(curl --silent -L https://dl.fedoraproject.org/${epel_subdir}/Everything/x86_64/Packages/a/ | grep 'apptainer-[0-9]' | sed 's/.*\(apptainer[0-9._a-z-]*.rpm\).*/\1/g') curl -OL https://dl.fedoraproject.org/${epel_subdir}/Everything/x86_64/Packages/a/${apptainer_rpm} sudo alien -d ${apptainer_rpm} diff --git a/scripts/gpu_support/nvidia/install_cuda_host_injections.sh b/scripts/gpu_support/nvidia/install_cuda_host_injections.sh index a9310d817a..1f1548f7dd 100755 --- a/scripts/gpu_support/nvidia/install_cuda_host_injections.sh +++ b/scripts/gpu_support/nvidia/install_cuda_host_injections.sh @@ -12,6 +12,9 @@ # installation to be successful, this directory needs to be writeable by the user # executing this script. +# TRIGGER SCRIPT CHANGE TO REPRODUCE https://github.com/EESSI/software-layer/issues/517 +# THIS COMMENT SHOULD NEVER BE MERGED! + # Initialise our bash functions TOPDIR=$(dirname $(realpath $BASH_SOURCE)) source "$TOPDIR"/../../utils.sh From 2ace856380267a9e35c44326d5ad2dd2bc61c9a2 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Tue, 2 Apr 2024 13:10:28 +0200 Subject: [PATCH 658/698] Undo change --- scripts/gpu_support/nvidia/install_cuda_host_injections.sh | 3 --- 1 file changed, 3 deletions(-) diff --git a/scripts/gpu_support/nvidia/install_cuda_host_injections.sh b/scripts/gpu_support/nvidia/install_cuda_host_injections.sh index 1f1548f7dd..a9310d817a 100755 --- a/scripts/gpu_support/nvidia/install_cuda_host_injections.sh +++ b/scripts/gpu_support/nvidia/install_cuda_host_injections.sh @@ -12,9 +12,6 @@ # installation to be successful, this directory needs to be writeable by the user # executing this script. -# TRIGGER SCRIPT CHANGE TO REPRODUCE https://github.com/EESSI/software-layer/issues/517 -# THIS COMMENT SHOULD NEVER BE MERGED! - # Initialise our bash functions TOPDIR=$(dirname $(realpath $BASH_SOURCE)) source "$TOPDIR"/../../utils.sh From dc986adc8b46f622d2d4d899922f5ef4731c305b Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Tue, 2 Apr 2024 13:11:11 +0200 Subject: [PATCH 659/698] Retrigger 517 --- scripts/utils.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/scripts/utils.sh b/scripts/utils.sh index b2be3f6221..bbe17584b8 100644 --- a/scripts/utils.sh +++ b/scripts/utils.sh @@ -1,3 +1,6 @@ +## THIS COMMENT IS ONLY TO RETRIGGER #517 +## IT SHOULD NEVER BE MERGED + function echo_green() { echo -e "\e[32m$1\e[0m" } From 6d5a6ae36e86253b4811e9a9f2ec2ca028558e77 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Tue, 2 Apr 2024 14:05:30 +0200 Subject: [PATCH 660/698] Add option to skip CUDA SDK installation, e.g. for CI environments --- EESSI-install-software.sh | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/EESSI-install-software.sh b/EESSI-install-software.sh index a905d966f6..2fff281ff5 100755 --- a/EESSI-install-software.sh +++ b/EESSI-install-software.sh @@ -14,6 +14,7 @@ display_help() { echo " -x | --http-proxy URL - provides URL for the environment variable http_proxy" echo " -y | --https-proxy URL - provides URL for the environment variable https_proxy" echo " --shared-fs-path - path to directory on shared filesystem that can be used" + echo " --skip-cuda-install - disable installing a full CUDA SDK in the host_injections prefix (e.g. in CI)" } function copy_build_log() { @@ -76,6 +77,10 @@ while [[ $# -gt 0 ]]; do export shared_fs_path="${2}" shift 2 ;; + --skip-cuda-install) + export skip_cuda_install=True + shift 1 + ;; -*|--*) echo "Error: Unknown option: $1" >&2 exit 1 @@ -195,7 +200,10 @@ ${TOPDIR}/install_scripts.sh --prefix ${EESSI_PREFIX} # Install full CUDA SDK in host_injections # Hardcode this for now, see if it works # TODO: We should make a nice yaml and loop over all CUDA versions in that yaml to figure out what to install -${EESSI_PREFIX}/scripts/gpu_support/nvidia/install_cuda_host_injections.sh -c 12.1.1 --accept-cuda-eula +# Allow skipping CUDA SDK install in e.g. CI environments +if [ ! -z "${skip_cuda_install}" ] && [ ! "${skip_cuda_install}" ]; then + ${EESSI_PREFIX}/scripts/gpu_support/nvidia/install_cuda_host_injections.sh -c 12.1.1 --accept-cuda-eula +fi # Install drivers in host_injections # TODO: this is commented out for now, because the script assumes that nvidia-smi is available and works; From 6155e02b317624f287f5bccb694c7b4285d7e388 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Tue, 2 Apr 2024 14:18:40 +0200 Subject: [PATCH 661/698] Make sure the install_software_layer.sh test skips installing the CUDA SDK - that is simply too heave for CI --- .github/workflows/tests_scripts.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/tests_scripts.yml b/.github/workflows/tests_scripts.yml index df1884dd8c..b1d2426774 100644 --- a/.github/workflows/tests_scripts.yml +++ b/.github/workflows/tests_scripts.yml @@ -83,6 +83,8 @@ jobs: export SINGULARITY_BIND="${PWD}:/software-layer" # force using x86_64/generic, to avoid triggering an installation from scratch sed -i "s@./EESSI-install-software.sh@\"export EESSI_SOFTWARE_SUBDIR_OVERRIDE='x86_64/generic'; ./EESSI-install-software.sh\"@g" install_software_layer.sh + # skip installation of CUDA SDKs, since this is too heavy for CI + sed -i "s@./EESSI-install-software.sh@./EESSI-install-software.sh --skip-cuda-install@g" install_software_layer.sh ./eessi_container.sh --mode run --verbose /software-layer/install_software_layer.sh - name: test create_directory_tarballs.sh script From 877f364e677a31f8218a973640269d003f95fa4b Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Tue, 2 Apr 2024 14:23:23 +0200 Subject: [PATCH 662/698] Fix logic in EESSI-install-software.sh and prove that logic is ok by now first retriggering the issue --- .github/workflows/tests_scripts.yml | 2 +- EESSI-install-software.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/tests_scripts.yml b/.github/workflows/tests_scripts.yml index b1d2426774..a245ee1ad5 100644 --- a/.github/workflows/tests_scripts.yml +++ b/.github/workflows/tests_scripts.yml @@ -84,7 +84,7 @@ jobs: # force using x86_64/generic, to avoid triggering an installation from scratch sed -i "s@./EESSI-install-software.sh@\"export EESSI_SOFTWARE_SUBDIR_OVERRIDE='x86_64/generic'; ./EESSI-install-software.sh\"@g" install_software_layer.sh # skip installation of CUDA SDKs, since this is too heavy for CI - sed -i "s@./EESSI-install-software.sh@./EESSI-install-software.sh --skip-cuda-install@g" install_software_layer.sh + # sed -i "s@./EESSI-install-software.sh@./EESSI-install-software.sh --skip-cuda-install@g" install_software_layer.sh ./eessi_container.sh --mode run --verbose /software-layer/install_software_layer.sh - name: test create_directory_tarballs.sh script diff --git a/EESSI-install-software.sh b/EESSI-install-software.sh index 2fff281ff5..0374d8e758 100755 --- a/EESSI-install-software.sh +++ b/EESSI-install-software.sh @@ -201,7 +201,7 @@ ${TOPDIR}/install_scripts.sh --prefix ${EESSI_PREFIX} # Hardcode this for now, see if it works # TODO: We should make a nice yaml and loop over all CUDA versions in that yaml to figure out what to install # Allow skipping CUDA SDK install in e.g. CI environments -if [ ! -z "${skip_cuda_install}" ] && [ ! "${skip_cuda_install}" ]; then +if [ -z "${skip_cuda_install}" ] || [ ! "${skip_cuda_install}" ]; then ${EESSI_PREFIX}/scripts/gpu_support/nvidia/install_cuda_host_injections.sh -c 12.1.1 --accept-cuda-eula fi From ba142caeea7d6223354b3aa7554f605ef4468fe4 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Tue, 2 Apr 2024 14:28:16 +0200 Subject: [PATCH 663/698] Now make sure CI skips CUDA SDK installation, to prove that this fixes the CI run --- .github/workflows/tests_scripts.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/tests_scripts.yml b/.github/workflows/tests_scripts.yml index a245ee1ad5..b1d2426774 100644 --- a/.github/workflows/tests_scripts.yml +++ b/.github/workflows/tests_scripts.yml @@ -84,7 +84,7 @@ jobs: # force using x86_64/generic, to avoid triggering an installation from scratch sed -i "s@./EESSI-install-software.sh@\"export EESSI_SOFTWARE_SUBDIR_OVERRIDE='x86_64/generic'; ./EESSI-install-software.sh\"@g" install_software_layer.sh # skip installation of CUDA SDKs, since this is too heavy for CI - # sed -i "s@./EESSI-install-software.sh@./EESSI-install-software.sh --skip-cuda-install@g" install_software_layer.sh + sed -i "s@./EESSI-install-software.sh@./EESSI-install-software.sh --skip-cuda-install@g" install_software_layer.sh ./eessi_container.sh --mode run --verbose /software-layer/install_software_layer.sh - name: test create_directory_tarballs.sh script From dc915fb0b9ec5577787fa58cd618a44a77ff1ff3 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Tue, 2 Apr 2024 16:01:39 +0200 Subject: [PATCH 664/698] Print sensible message to log when the cuda installation is skipped --- EESSI-install-software.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/EESSI-install-software.sh b/EESSI-install-software.sh index 0374d8e758..567fed8e79 100755 --- a/EESSI-install-software.sh +++ b/EESSI-install-software.sh @@ -203,6 +203,8 @@ ${TOPDIR}/install_scripts.sh --prefix ${EESSI_PREFIX} # Allow skipping CUDA SDK install in e.g. CI environments if [ -z "${skip_cuda_install}" ] || [ ! "${skip_cuda_install}" ]; then ${EESSI_PREFIX}/scripts/gpu_support/nvidia/install_cuda_host_injections.sh -c 12.1.1 --accept-cuda-eula +else + echo "Skipping installation of CUDA SDK in host_injections, since the --skip-cuda-install flag was passed" fi # Install drivers in host_injections From 4cf4d76cc80ef5e5aa5df73cef628fca3ad56b99 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Tue, 2 Apr 2024 16:03:14 +0200 Subject: [PATCH 665/698] Issue is resolved, so we can use Apptainer 1.3.0 --- install_apptainer_ubuntu.sh | 2 -- 1 file changed, 2 deletions(-) diff --git a/install_apptainer_ubuntu.sh b/install_apptainer_ubuntu.sh index 8642d62999..5c4f37ac2d 100755 --- a/install_apptainer_ubuntu.sh +++ b/install_apptainer_ubuntu.sh @@ -5,8 +5,6 @@ set -e # see https://github.com/apptainer/singularity/issues/5390#issuecomment-899111181 sudo apt-get install alien alien --version -# Switch back to Apptainer >= 1.3.0 to retrigger -# https://github.com/EESSI/software-layer/pull/514 epel_subdir="pub/epel/8" apptainer_rpm=$(curl --silent -L https://dl.fedoraproject.org/${epel_subdir}/Everything/x86_64/Packages/a/ | grep 'apptainer-[0-9]' | sed 's/.*\(apptainer[0-9._a-z-]*.rpm\).*/\1/g') curl -OL https://dl.fedoraproject.org/${epel_subdir}/Everything/x86_64/Packages/a/${apptainer_rpm} From c92ceb2e07ddf37fc12ec86b0f6d90ded0423482 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Tue, 2 Apr 2024 16:04:12 +0200 Subject: [PATCH 666/698] Revert changes to utils.sh --- scripts/utils.sh | 3 --- 1 file changed, 3 deletions(-) diff --git a/scripts/utils.sh b/scripts/utils.sh index bbe17584b8..b2be3f6221 100644 --- a/scripts/utils.sh +++ b/scripts/utils.sh @@ -1,6 +1,3 @@ -## THIS COMMENT IS ONLY TO RETRIGGER #517 -## IT SHOULD NEVER BE MERGED - function echo_green() { echo -e "\e[32m$1\e[0m" } From b59d327ecce05ad1e5904fe2581c45c3e0b68d10 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Tue, 2 Apr 2024 17:19:14 +0200 Subject: [PATCH 667/698] Changed isDir to isFile --- create_lmodsitepackage.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/create_lmodsitepackage.py b/create_lmodsitepackage.py index 6b67b4beca..cddb40da5c 100755 --- a/create_lmodsitepackage.py +++ b/create_lmodsitepackage.py @@ -68,7 +68,7 @@ local hostSitePackage = prefixHostInjections .. "/.lmod/SitePackage.lua" -- If the file exists, run it - if isDir(hostSitePackage) then + if isFile(hostSitePackage) then dofile(hostSitePackage) end @@ -77,7 +77,7 @@ local archSitePackage = archHostInjections .. "/.lmod/SitePackage.lua" -- If the file exists, run it - if isDir(archSitePackage) then + if isFile(archSitePackage) then dofile(archSitePackage) end From 9ff3cfab728cf66177b903aaa0e9d63099da2c2d Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Tue, 2 Apr 2024 17:20:23 +0200 Subject: [PATCH 668/698] Account for the possibility that EESSI_PREFIX isn't set --- create_lmodsitepackage.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/create_lmodsitepackage.py b/create_lmodsitepackage.py index cddb40da5c..30f11c9c6f 100755 --- a/create_lmodsitepackage.py +++ b/create_lmodsitepackage.py @@ -64,7 +64,7 @@ -- hook.register("load", arch_specific_load_hook) -- get path to to architecture independent SitePackage.lua - local prefixHostInjections = string.gsub(os.getenv('EESSI_PREFIX'), 'versions', 'host_injections') + local prefixHostInjections = string.gsub(os.getenv('EESSI_PREFIX') or "", 'versions', 'host_injections') local hostSitePackage = prefixHostInjections .. "/.lmod/SitePackage.lua" -- If the file exists, run it From f25bfe09cf46f15d1869c32019640005aab2006b Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Tue, 2 Apr 2024 17:31:17 +0200 Subject: [PATCH 669/698] Corrected function name --- create_lmodsitepackage.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/create_lmodsitepackage.py b/create_lmodsitepackage.py index 30f11c9c6f..29b2d39bd7 100755 --- a/create_lmodsitepackage.py +++ b/create_lmodsitepackage.py @@ -19,7 +19,7 @@ return content end -local function load_sitespecific_hooks() +local function load_site_specific_hooks() -- This function will be run after the EESSI hooks are registered -- It will load a local SitePackage.lua that is architecture independent (if it exists) from e.g. -- /cvmfs/software.eessi.io/host_injections/2023.06/.lmod/SitePackage.lua From 12d17a4777b2e2aa4f9ddaa1433d75d9c0012c59 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Tue, 2 Apr 2024 17:43:01 +0200 Subject: [PATCH 670/698] also test create_lmodsitepackage.py in CI --- .github/workflows/tests_scripts.yml | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/.github/workflows/tests_scripts.yml b/.github/workflows/tests_scripts.yml index df1884dd8c..476be3dc4d 100644 --- a/.github/workflows/tests_scripts.yml +++ b/.github/workflows/tests_scripts.yml @@ -5,6 +5,7 @@ on: paths: - build_container.sh - create_directory_tarballs.sh + - create_lmodsitepackage.py - EESSI-install-software.sh - install_software_layer.sh - load_easybuild_module.sh @@ -16,6 +17,7 @@ on: paths: - build_container.sh - create_directory_tarballs.sh + - create_lmodsitepackage.py - EESSI-install-software.sh - install_software_layer.sh - load_easybuild_module.sh @@ -94,3 +96,22 @@ jobs: ./eessi_container.sh --mode run --verbose /software-layer/create_directory_tarballs.sh 2023.06 # check if tarballs have been produced ls -l *.tar.gz + + - name: test create_lmodsitepackage.py script + run: | + # bind current directory into container as /software-layer + export SINGULARITY_BIND="${PWD}:/software-layer" + + python3 create_lmodsitepackage.py . + export LMOD_PACKAGE_PATH="$PWD/.lmod" + # run some commands to make sure that generated Lmod SitePackage file works + test_script="${PWD}/test_lmod_sitepackage.sh" + echo '#!/bin/bash' > ${test_script} + echo 'ml --config' >> ${test_script} + + chmod u+x ${test_script} + + ./eessi_container.sh --mode run --verbose /software-layer/run_in_compat_layer_env.sh /software-layer/test_lmod_sitepackage.sh 2>&1 | tee ${out} + for pattern in "^Site Pkg location.*$PWD/.lmod/SitePackage.lua" "LMOD_SITEPACKAGE_LOCATION.*${PWD}/.lmod/SitePackage.lua"; do + grep "${pattern}" ${out} || (echo "Pattern '${pattern}' not found in output!" && exit 1) + done From 60c46ce702948e3c97e1dc432f5651f837efb39c Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Tue, 2 Apr 2024 18:38:23 +0200 Subject: [PATCH 671/698] Make sure export is done inside test script, as environment is lost when running in compat layer env --- .github/workflows/tests_scripts.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/tests_scripts.yml b/.github/workflows/tests_scripts.yml index 476be3dc4d..95baedac08 100644 --- a/.github/workflows/tests_scripts.yml +++ b/.github/workflows/tests_scripts.yml @@ -102,11 +102,12 @@ jobs: # bind current directory into container as /software-layer export SINGULARITY_BIND="${PWD}:/software-layer" + # Creates .lmod/SitePackage.lua in current dir, which then gets bind-mounted into /software-layer python3 create_lmodsitepackage.py . - export LMOD_PACKAGE_PATH="$PWD/.lmod" # run some commands to make sure that generated Lmod SitePackage file works test_script="${PWD}/test_lmod_sitepackage.sh" echo '#!/bin/bash' > ${test_script} + echo 'export LMOD_PACKAGE_PATH="/software-layer/.lmod"' > ${test_script} echo 'ml --config' >> ${test_script} chmod u+x ${test_script} From d59238b9643de5d34a301122afef133c231747fa Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Tue, 2 Apr 2024 18:46:58 +0200 Subject: [PATCH 672/698] Change expected output - we need to account for the fact that this is a bind-mounted location --- .github/workflows/tests_scripts.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/tests_scripts.yml b/.github/workflows/tests_scripts.yml index 95baedac08..96838b99df 100644 --- a/.github/workflows/tests_scripts.yml +++ b/.github/workflows/tests_scripts.yml @@ -113,6 +113,6 @@ jobs: chmod u+x ${test_script} ./eessi_container.sh --mode run --verbose /software-layer/run_in_compat_layer_env.sh /software-layer/test_lmod_sitepackage.sh 2>&1 | tee ${out} - for pattern in "^Site Pkg location.*$PWD/.lmod/SitePackage.lua" "LMOD_SITEPACKAGE_LOCATION.*${PWD}/.lmod/SitePackage.lua"; do + for pattern in "^Site Pkg location.*/software-layer/.lmod/SitePackage.lua" "LMOD_SITEPACKAGE_LOCATION.*/software-layer/.lmod/SitePackage.lua"; do grep "${pattern}" ${out} || (echo "Pattern '${pattern}' not found in output!" && exit 1) done From 1e8eb6eac7a040cf16d2f97d4126b93300da05c7 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Tue, 2 Apr 2024 19:12:20 +0200 Subject: [PATCH 673/698] Output variable was undefined --- .github/workflows/tests_scripts.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/tests_scripts.yml b/.github/workflows/tests_scripts.yml index 96838b99df..ac55231bf0 100644 --- a/.github/workflows/tests_scripts.yml +++ b/.github/workflows/tests_scripts.yml @@ -112,6 +112,7 @@ jobs: chmod u+x ${test_script} + out="${PWD}/test_create_lmodsitepackage.out" ./eessi_container.sh --mode run --verbose /software-layer/run_in_compat_layer_env.sh /software-layer/test_lmod_sitepackage.sh 2>&1 | tee ${out} for pattern in "^Site Pkg location.*/software-layer/.lmod/SitePackage.lua" "LMOD_SITEPACKAGE_LOCATION.*/software-layer/.lmod/SitePackage.lua"; do grep "${pattern}" ${out} || (echo "Pattern '${pattern}' not found in output!" && exit 1) From 542022c9e5a4e2109416c4476c621e1b7bb6ed82 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Wed, 3 Apr 2024 10:12:50 +0200 Subject: [PATCH 674/698] add hook that disables tests for Highway 1.0.4 on neoverse_v1 --- eb_hooks.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/eb_hooks.py b/eb_hooks.py index d93ee37067..94591ca91f 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -376,6 +376,18 @@ def pre_configure_hook_atspi2core_filter_ld_library_path(self, *args, **kwargs): raise EasyBuildError("at-spi2-core-specific hook triggered for non-at-spi2-core easyconfig?!") +def pre_configure_hook_highway_disable_tests((self, *args, **kwargs): + """ + pre-configure hook for Highway: disable tests on neoverse_v1 + cfr. https://github.com/EESSI/software-layer/issues/469 + """ + cpu_target = get_eessi_envvar('EESSI_SOFTWARE_SUBDIR') + if self.name == 'Highway ' and cpu_target == CPU_TARGET_NEOVERSE_V1: + self.cfg.update('configopts', '-DHWY_ENABLE_TESTS=OFF') + else: + raise EasyBuildError("Highway-specific hook triggered for non-Highway easyconfig?!") + + def pre_test_hook(self,*args, **kwargs): """Main pre-test hook: trigger custom functions based on software name.""" if self.name in PRE_TEST_HOOKS: @@ -625,6 +637,7 @@ def inject_gpu_property(ec): 'OpenBLAS': pre_configure_hook_openblas_optarch_generic, 'WRF': pre_configure_hook_wrf_aarch64, 'at-spi2-core': pre_configure_hook_atspi2core_filter_ld_library_path, + 'Highway': pre_configure_hook_highway_disable_tests, } PRE_TEST_HOOKS = { From a770536d7122c0bf9da89573082c180988798d93 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Wed, 3 Apr 2024 10:12:59 +0200 Subject: [PATCH 675/698] add Highway-1.0.4-GCCcore-12.3.0.eb --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml index 9b0de81b35..ac9c36fe82 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml @@ -54,3 +54,4 @@ easyconfigs: from-pr: 20126 - OpenJPEG-2.5.0-GCCcore-12.3.0.eb - OpenFOAM-10-foss-2023a.eb + - Highway-1.0.4-GCCcore-12.3.0.eb From 3cc125d7996b04cea0bcd71e1fff767113666310 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Wed, 3 Apr 2024 10:15:40 +0200 Subject: [PATCH 676/698] add known issue about Highway 1.0.4 on neoverse_v1 --- eessi-2023.06-known-issues.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/eessi-2023.06-known-issues.yml b/eessi-2023.06-known-issues.yml index 875757559e..d818c85952 100644 --- a/eessi-2023.06-known-issues.yml +++ b/eessi-2023.06-known-issues.yml @@ -19,6 +19,9 @@ - Highway-1.0.3-GCCcore-12.2.0.eb: - issue: https://github.com/EESSI/software-layer/issues/469 - info: "failing SVE test due to wrong expected value" + - Highway-1.0.4-GCCcore-12.3.0.eb: + - issue: https://github.com/EESSI/software-layer/issues/469 + - info: "failing to build the tests" - netCDF-4.9.2-gompi-2023a.eb: - issue: https://github.com/EESSI/software-layer/issues/425 - info: "netCDF intermittent test failures" From 098d5253901c4e32e2c5f9f4e331be29efcc04ea Mon Sep 17 00:00:00 2001 From: ocaisa Date: Wed, 3 Apr 2024 10:46:16 +0200 Subject: [PATCH 677/698] Update eb_hooks.py --- eb_hooks.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eb_hooks.py b/eb_hooks.py index 94591ca91f..4b29c84eb2 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -382,7 +382,7 @@ def pre_configure_hook_highway_disable_tests((self, *args, **kwargs): cfr. https://github.com/EESSI/software-layer/issues/469 """ cpu_target = get_eessi_envvar('EESSI_SOFTWARE_SUBDIR') - if self.name == 'Highway ' and cpu_target == CPU_TARGET_NEOVERSE_V1: + if self.name == 'Highway' and cpu_target == CPU_TARGET_NEOVERSE_V1: self.cfg.update('configopts', '-DHWY_ENABLE_TESTS=OFF') else: raise EasyBuildError("Highway-specific hook triggered for non-Highway easyconfig?!") From 10e1d00ebce2fe8753b2e638e12a8b0f01a33b5f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Wed, 3 Apr 2024 10:47:41 +0200 Subject: [PATCH 678/698] fix syntax, remove ( --- eb_hooks.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eb_hooks.py b/eb_hooks.py index 94591ca91f..78432c7a00 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -376,7 +376,7 @@ def pre_configure_hook_atspi2core_filter_ld_library_path(self, *args, **kwargs): raise EasyBuildError("at-spi2-core-specific hook triggered for non-at-spi2-core easyconfig?!") -def pre_configure_hook_highway_disable_tests((self, *args, **kwargs): +def pre_configure_hook_highway_disable_tests(self, *args, **kwargs): """ pre-configure hook for Highway: disable tests on neoverse_v1 cfr. https://github.com/EESSI/software-layer/issues/469 From 24d5bcfe80061958699ea8376f8ed08780c630a1 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Wed, 3 Apr 2024 11:33:10 +0200 Subject: [PATCH 679/698] Move software builds to the easystack file for the right toolchain... --- .../2023.06/eessi-2023.06-eb-4.9.0-2023a.yml | 10 ++++++++++ .../2023.06/eessi-2023.06-eb-4.9.0-2023b.yml | 11 +---------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml index 9b0de81b35..0c260cea5c 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml @@ -54,3 +54,13 @@ easyconfigs: from-pr: 20126 - OpenJPEG-2.5.0-GCCcore-12.3.0.eb - OpenFOAM-10-foss-2023a.eb + - SuperLU_DIST-8.1.2-foss-2023a.eb: + options: + from-pr: 20162 + - PETSc-3.20.3-foss-2023a.eb: + options: + include-easyblocks-from-pr: 3086 + from-pr: 19686 + - MODFLOW-6.4.4-foss-2023a.eb: + options: + from-pr: 20142 diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml index 94303fd2b4..1e94f7be78 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml @@ -57,13 +57,4 @@ easyconfigs: - Qt5-5.15.13-GCCcore-13.2.0.eb: options: from-pr: 20201 - - SuperLU_DIST-8.1.2-foss-2023a.eb: - options: - from-pr: 20162 - - PETSc-3.20.3-foss-2023a.eb: - options: - include-easyblocks-from-pr: 3086 - from-pr: 19686 - - MODFLOW-6.4.4-foss-2023a.eb: - options: - from-pr: 20142 + From 5509f6c33fd15c6f7b6dfdf7f182fe839a44c758 Mon Sep 17 00:00:00 2001 From: Caspar van Leeuwen Date: Wed, 3 Apr 2024 11:36:19 +0200 Subject: [PATCH 680/698] Remove stray blank line --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml index 1e94f7be78..86c5106c85 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023b.yml @@ -57,4 +57,3 @@ easyconfigs: - Qt5-5.15.13-GCCcore-13.2.0.eb: options: from-pr: 20201 - From abfe1bf536e91938b4fba50c33585962e8d07042 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Wed, 3 Apr 2024 12:04:33 +0200 Subject: [PATCH 681/698] add toolchain and version check to Highway hook that disables the tests --- eb_hooks.py | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/eb_hooks.py b/eb_hooks.py index eee2a4dfde..9ccd984de4 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -289,6 +289,21 @@ def parse_hook_lammps_remove_deps_for_CI_aarch64(ec, *args, **kwargs): raise EasyBuildError("LAMMPS-specific hook triggered for non-LAMMPS easyconfig?!") +def parse_hook_highway_disable_tests(ec, eprefix):): + """ + pre-configure hook for Highway: disable tests on neoverse_v1 for Highway 1.0.4 and GCC 12.3.0 + cfr. https://github.com/EESSI/software-layer/issues/469 + """ + if ec.name == 'Highway': + tcname, tcversion = ec['toolchain']['name'], ec['toolchain']['version'] + cpu_target = get_eessi_envvar('EESSI_SOFTWARE_SUBDIR') + if ec.version in ['1.0.4'] and tcname == 'GCCcore' and tcversion == '12.3.0': + if cpu_target == CPU_TARGET_NEOVERSE_V1: + ec.update('configopts', '-DHWY_ENABLE_TESTS=OFF') + else: + raise EasyBuildError("Highway-specific hook triggered for non-Highway easyconfig?!") + + def pre_configure_hook(self, *args, **kwargs): """Main pre-configure hook: trigger custom functions based on software name.""" if self.name in PRE_CONFIGURE_HOOKS: @@ -376,18 +391,6 @@ def pre_configure_hook_atspi2core_filter_ld_library_path(self, *args, **kwargs): raise EasyBuildError("at-spi2-core-specific hook triggered for non-at-spi2-core easyconfig?!") -def pre_configure_hook_highway_disable_tests(self, *args, **kwargs): - """ - pre-configure hook for Highway: disable tests on neoverse_v1 - cfr. https://github.com/EESSI/software-layer/issues/469 - """ - cpu_target = get_eessi_envvar('EESSI_SOFTWARE_SUBDIR') - if self.name == 'Highway' and cpu_target == CPU_TARGET_NEOVERSE_V1: - self.cfg.update('configopts', '-DHWY_ENABLE_TESTS=OFF') - else: - raise EasyBuildError("Highway-specific hook triggered for non-Highway easyconfig?!") - - def pre_test_hook(self,*args, **kwargs): """Main pre-test hook: trigger custom functions based on software name.""" if self.name in PRE_TEST_HOOKS: @@ -620,11 +623,12 @@ def inject_gpu_property(ec): 'casacore': parse_hook_casacore_disable_vectorize, 'CGAL': parse_hook_cgal_toolchainopts_precise, 'fontconfig': parse_hook_fontconfig_add_fonts, + 'Highway': parse_hook_highway_disable_tests, + 'LAMMPS': parse_hook_lammps_remove_deps_for_CI_aarch64, 'OpenBLAS': parse_hook_openblas_relax_lapack_tests_num_errors, 'pybind11': parse_hook_pybind11_replace_catch2, 'Qt5': parse_hook_qt5_check_qtwebengine_disable, 'UCX': parse_hook_ucx_eprefix, - 'LAMMPS': parse_hook_lammps_remove_deps_for_CI_aarch64, } POST_PREPARE_HOOKS = { @@ -637,7 +641,6 @@ def inject_gpu_property(ec): 'OpenBLAS': pre_configure_hook_openblas_optarch_generic, 'WRF': pre_configure_hook_wrf_aarch64, 'at-spi2-core': pre_configure_hook_atspi2core_filter_ld_library_path, - 'Highway': pre_configure_hook_highway_disable_tests, } PRE_TEST_HOOKS = { From ae74707573fea4f1f210955e311c391f982c1f88 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Wed, 3 Apr 2024 12:15:49 +0200 Subject: [PATCH 682/698] syntax fix --- eb_hooks.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eb_hooks.py b/eb_hooks.py index 9ccd984de4..902a37a599 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -289,7 +289,7 @@ def parse_hook_lammps_remove_deps_for_CI_aarch64(ec, *args, **kwargs): raise EasyBuildError("LAMMPS-specific hook triggered for non-LAMMPS easyconfig?!") -def parse_hook_highway_disable_tests(ec, eprefix):): +def parse_hook_highway_disable_tests(ec, eprefix): """ pre-configure hook for Highway: disable tests on neoverse_v1 for Highway 1.0.4 and GCC 12.3.0 cfr. https://github.com/EESSI/software-layer/issues/469 From 92aad04bfa1810d313e476be5d89e13217cce9d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Wed, 3 Apr 2024 13:02:33 +0200 Subject: [PATCH 683/698] also disable Highway 1.0.4 tests for neoverse_n1 --- eb_hooks.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/eb_hooks.py b/eb_hooks.py index 902a37a599..64671a5889 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -20,6 +20,7 @@ from distutils.version import LooseVersion +CPU_TARGET_NEOVERSE_N1 = 'aarch64/neoverse_n1' CPU_TARGET_NEOVERSE_V1 = 'aarch64/neoverse_v1' CPU_TARGET_AARCH64_GENERIC = 'aarch64/generic' @@ -173,7 +174,7 @@ def parse_hook_casacore_disable_vectorize(ec, eprefix): tcname == 'foss' and tcversion == '2023b' ): cpu_target = get_eessi_envvar('EESSI_SOFTWARE_SUBDIR') - if cpu_target == CPU_TARGET_NEOVERSE_V1: + if cpu_target in [CPU_TARGET_NEOVERSE_V1, CPU_TARGET_NEOVERSE_N1]: if not hasattr(ec, 'toolchainopts'): ec['toolchainopts'] = {} ec['toolchainopts']['vectorize'] = False From f2954ef909353b8c0a782b745324b523a612a1cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Wed, 3 Apr 2024 13:26:11 +0200 Subject: [PATCH 684/698] oops, changed the wrong hook... fixed --- eb_hooks.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/eb_hooks.py b/eb_hooks.py index 64671a5889..7b1eb5cec2 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -174,7 +174,7 @@ def parse_hook_casacore_disable_vectorize(ec, eprefix): tcname == 'foss' and tcversion == '2023b' ): cpu_target = get_eessi_envvar('EESSI_SOFTWARE_SUBDIR') - if cpu_target in [CPU_TARGET_NEOVERSE_V1, CPU_TARGET_NEOVERSE_N1]: + if cpu_target == CPU_TARGET_NEOVERSE_V1: if not hasattr(ec, 'toolchainopts'): ec['toolchainopts'] = {} ec['toolchainopts']['vectorize'] = False @@ -299,7 +299,7 @@ def parse_hook_highway_disable_tests(ec, eprefix): tcname, tcversion = ec['toolchain']['name'], ec['toolchain']['version'] cpu_target = get_eessi_envvar('EESSI_SOFTWARE_SUBDIR') if ec.version in ['1.0.4'] and tcname == 'GCCcore' and tcversion == '12.3.0': - if cpu_target == CPU_TARGET_NEOVERSE_V1: + if cpu_target in [CPU_TARGET_NEOVERSE_V1, CPU_TARGET_NEOVERSE_N1]: ec.update('configopts', '-DHWY_ENABLE_TESTS=OFF') else: raise EasyBuildError("Highway-specific hook triggered for non-Highway easyconfig?!") From 11b7bc2a41d228079f238e361683f2c9da1b28fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Wed, 3 Apr 2024 17:38:06 +0200 Subject: [PATCH 685/698] different actions for neoverse_n1 and _v1 in highway hook --- eb_hooks.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/eb_hooks.py b/eb_hooks.py index 7b1eb5cec2..8bf66427a9 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -290,17 +290,20 @@ def parse_hook_lammps_remove_deps_for_CI_aarch64(ec, *args, **kwargs): raise EasyBuildError("LAMMPS-specific hook triggered for non-LAMMPS easyconfig?!") -def parse_hook_highway_disable_tests(ec, eprefix): +def parse_hook_highway_handle_test_compilation_issues(ec, eprefix): """ - pre-configure hook for Highway: disable tests on neoverse_v1 for Highway 1.0.4 and GCC 12.3.0 + pre-configure hook for Highway that solves issue that arise during the compilation of the tests + on both neoverse_n1 and neoverse_v1 with Highway 1.0.4 and GCC 12.3.0 cfr. https://github.com/EESSI/software-layer/issues/469 """ if ec.name == 'Highway': tcname, tcversion = ec['toolchain']['name'], ec['toolchain']['version'] cpu_target = get_eessi_envvar('EESSI_SOFTWARE_SUBDIR') if ec.version in ['1.0.4'] and tcname == 'GCCcore' and tcversion == '12.3.0': - if cpu_target in [CPU_TARGET_NEOVERSE_V1, CPU_TARGET_NEOVERSE_N1]: + if cpu_target == CPU_TARGET_NEOVERSE_V1: ec.update('configopts', '-DHWY_ENABLE_TESTS=OFF') + if cpu_target == CPU_TARGET_NEOVERSE_N1: + update_build_option('optarch', OPTARCH_GENERIC) else: raise EasyBuildError("Highway-specific hook triggered for non-Highway easyconfig?!") @@ -624,7 +627,7 @@ def inject_gpu_property(ec): 'casacore': parse_hook_casacore_disable_vectorize, 'CGAL': parse_hook_cgal_toolchainopts_precise, 'fontconfig': parse_hook_fontconfig_add_fonts, - 'Highway': parse_hook_highway_disable_tests, + 'Highway': parse_hook_highway_handle_test_compilation_issues, 'LAMMPS': parse_hook_lammps_remove_deps_for_CI_aarch64, 'OpenBLAS': parse_hook_openblas_relax_lapack_tests_num_errors, 'pybind11': parse_hook_pybind11_replace_catch2, From 69d0e9d132dcb6123ca000ead3580fd8f59da8a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Thu, 4 Apr 2024 13:51:08 +0200 Subject: [PATCH 686/698] update docstring of parse_hook_highway_handle_test_compilation_issues --- eb_hooks.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/eb_hooks.py b/eb_hooks.py index 8bf66427a9..0221e98b2a 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -292,8 +292,10 @@ def parse_hook_lammps_remove_deps_for_CI_aarch64(ec, *args, **kwargs): def parse_hook_highway_handle_test_compilation_issues(ec, eprefix): """ - pre-configure hook for Highway that solves issue that arise during the compilation of the tests - on both neoverse_n1 and neoverse_v1 with Highway 1.0.4 and GCC 12.3.0 + Solve issues with compiling or running the tests on both + neoverse_n1 and neoverse_v1 with Highway 1.0.4 and GCC 12.3.0: + - for neoverse_n1 we set optarch to GENERIC + - for neoverse_v1 we completely disable the tests cfr. https://github.com/EESSI/software-layer/issues/469 """ if ec.name == 'Highway': From 7dba052cfee0996a1bce79984e79c37d4caeac64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Thu, 4 Apr 2024 13:52:06 +0200 Subject: [PATCH 687/698] add issue with Highway 1.0.4 on neoverse_n1 --- eessi-2023.06-known-issues.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/eessi-2023.06-known-issues.yml b/eessi-2023.06-known-issues.yml index d818c85952..011cb2dc08 100644 --- a/eessi-2023.06-known-issues.yml +++ b/eessi-2023.06-known-issues.yml @@ -3,6 +3,9 @@ - issue: https://github.com/EESSI/software-layer/issues/461 - info: "8 failing tests (out of 209539) on aarch64/*" - aarch64/neoverse_n1: + - Highway-1.0.4-GCCcore-12.3.0.eb: + - issue: https://github.com/EESSI/software-layer/issues/469 + - info: "failing to build the tests" - PyTorch-2.1.2-foss-2023a: - issue: https://github.com/EESSI/software-layer/issues/461 - info: "8 failing tests (out of 209539) on aarch64/*" From 6fa335b3868a79dc6fda347b841b2bfe9192509f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Thu, 4 Apr 2024 19:58:57 +0200 Subject: [PATCH 688/698] change Highway hook in pre_prepare hook, and reset optarch in a post-prepare hook --- eb_hooks.py | 31 +++++++++++++++++++++++++------ 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/eb_hooks.py b/eb_hooks.py index 0221e98b2a..e8b890a954 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -116,6 +116,9 @@ def pre_prepare_hook(self, *args, **kwargs): print_msg("Updated rpath_override_dirs (to allow overriding MPI family %s): %s", mpi_family, rpath_override_dirs) + if self.name in PRE_PREPARE_HOOKS: + PRE_PREPARE_HOOKS[self.name](self, *args, **kwargs) + def post_prepare_hook_gcc_prefixed_ld_rpath_wrapper(self, *args, **kwargs): """ @@ -290,7 +293,7 @@ def parse_hook_lammps_remove_deps_for_CI_aarch64(ec, *args, **kwargs): raise EasyBuildError("LAMMPS-specific hook triggered for non-LAMMPS easyconfig?!") -def parse_hook_highway_handle_test_compilation_issues(ec, eprefix): +def pre_prepare_hook_highway_handle_test_compilation_issues(self, *args, **kwargs): """ Solve issues with compiling or running the tests on both neoverse_n1 and neoverse_v1 with Highway 1.0.4 and GCC 12.3.0: @@ -298,18 +301,30 @@ def parse_hook_highway_handle_test_compilation_issues(ec, eprefix): - for neoverse_v1 we completely disable the tests cfr. https://github.com/EESSI/software-layer/issues/469 """ - if ec.name == 'Highway': - tcname, tcversion = ec['toolchain']['name'], ec['toolchain']['version'] + if self.name == 'Highway': + tcname, tcversion = self.toolchain.name, self.toolchain.version cpu_target = get_eessi_envvar('EESSI_SOFTWARE_SUBDIR') - if ec.version in ['1.0.4'] and tcname == 'GCCcore' and tcversion == '12.3.0': + if self.version in ['1.0.4'] and tcname == 'GCCcore' and tcversion == '12.3.0': if cpu_target == CPU_TARGET_NEOVERSE_V1: - ec.update('configopts', '-DHWY_ENABLE_TESTS=OFF') + self.cfg.update('configopts', '-DHWY_ENABLE_TESTS=OFF') if cpu_target == CPU_TARGET_NEOVERSE_N1: + self.orig_optarch = build_option('optarch') update_build_option('optarch', OPTARCH_GENERIC) else: raise EasyBuildError("Highway-specific hook triggered for non-Highway easyconfig?!") +def post_prepare_hook_highway_handle_test_compilation_issues(self, *args, **kwargs): + """ + Post-prepare hook for Highway to reset optarch build option. + """ + if self.name == 'Highway': + tcname, tcversion = self.toolchain.name, self.toolchain.version + cpu_target = get_eessi_envvar('EESSI_SOFTWARE_SUBDIR') + if self.version in ['1.0.4'] and tcname == 'GCCcore' and tcversion == '12.3.0': + if cpu_target == CPU_TARGET_NEOVERSE_N1: + update_build_option('optarch', self.orig_optarch) + def pre_configure_hook(self, *args, **kwargs): """Main pre-configure hook: trigger custom functions based on software name.""" if self.name in PRE_CONFIGURE_HOOKS: @@ -629,7 +644,6 @@ def inject_gpu_property(ec): 'casacore': parse_hook_casacore_disable_vectorize, 'CGAL': parse_hook_cgal_toolchainopts_precise, 'fontconfig': parse_hook_fontconfig_add_fonts, - 'Highway': parse_hook_highway_handle_test_compilation_issues, 'LAMMPS': parse_hook_lammps_remove_deps_for_CI_aarch64, 'OpenBLAS': parse_hook_openblas_relax_lapack_tests_num_errors, 'pybind11': parse_hook_pybind11_replace_catch2, @@ -637,8 +651,13 @@ def inject_gpu_property(ec): 'UCX': parse_hook_ucx_eprefix, } +PRE_PREPARE_HOOKS = { + 'Highway': pre_prepare_hook_highway_handle_test_compilation_issues, +} + POST_PREPARE_HOOKS = { 'GCCcore': post_prepare_hook_gcc_prefixed_ld_rpath_wrapper, + 'Highway': post_prepare_hook_highway_handle_test_compilation_issues, } PRE_CONFIGURE_HOOKS = { From 42e580bf17d24b6a3736dd620dd5206d1d7507a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Thu, 4 Apr 2024 20:33:49 +0200 Subject: [PATCH 689/698] Update eb_hooks.py Co-authored-by: Kenneth Hoste --- eb_hooks.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/eb_hooks.py b/eb_hooks.py index e8b890a954..c2075c8574 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -304,6 +304,8 @@ def pre_prepare_hook_highway_handle_test_compilation_issues(self, *args, **kwarg if self.name == 'Highway': tcname, tcversion = self.toolchain.name, self.toolchain.version cpu_target = get_eessi_envvar('EESSI_SOFTWARE_SUBDIR') + # note: keep condition in sync with the one used in + # post_prepare_hook_highway_handle_test_compilation_issues if self.version in ['1.0.4'] and tcname == 'GCCcore' and tcversion == '12.3.0': if cpu_target == CPU_TARGET_NEOVERSE_V1: self.cfg.update('configopts', '-DHWY_ENABLE_TESTS=OFF') From 3c4572cb03c5d5dde7df1a16282c8bb70286918c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Thu, 4 Apr 2024 20:33:54 +0200 Subject: [PATCH 690/698] Update eb_hooks.py Co-authored-by: Kenneth Hoste --- eb_hooks.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/eb_hooks.py b/eb_hooks.py index c2075c8574..20b5f76cfc 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -323,6 +323,8 @@ def post_prepare_hook_highway_handle_test_compilation_issues(self, *args, **kwar if self.name == 'Highway': tcname, tcversion = self.toolchain.name, self.toolchain.version cpu_target = get_eessi_envvar('EESSI_SOFTWARE_SUBDIR') + # note: keep condition in sync with the one used in + # pre_prepare_hook_highway_handle_test_compilation_issues if self.version in ['1.0.4'] and tcname == 'GCCcore' and tcversion == '12.3.0': if cpu_target == CPU_TARGET_NEOVERSE_N1: update_build_option('optarch', self.orig_optarch) From 7283d086780b7dc9ae224a70bb4f6236a52e94d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Thu, 4 Apr 2024 22:52:41 +0200 Subject: [PATCH 691/698] add from-pr 20238 for R-bundle-CRAN --- .../2023.06/eessi-2023.06-eb-4.9.0-2023a.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml index 1674bd76d9..a7cabc110a 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml @@ -55,4 +55,6 @@ easyconfigs: - OpenJPEG-2.5.0-GCCcore-12.3.0.eb - OpenFOAM-10-foss-2023a.eb - Highway-1.0.4-GCCcore-12.3.0.eb - - R-bundle-CRAN-2023.12-foss-2023a.eb + - R-bundle-CRAN-2023.12-foss-2023a.eb: + options: + from-pr: 20238 From f6012f7ae91bfdf862f46e93cf6942067c8b580d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Fri, 5 Apr 2024 11:42:40 +0200 Subject: [PATCH 692/698] add comment, retrigger CI --- .../software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml index 7ab9cf7c9b..44952e2765 100644 --- a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.0-2023a.yml @@ -69,4 +69,5 @@ easyconfigs: from-pr: 20142 - R-bundle-CRAN-2023.12-foss-2023a.eb: options: + # see https://github.com/easybuilders/easybuild-easyconfigs/pull/20238 from-pr: 20238 From 1998a7cfe2904e1b8dacdba4d6eca1fe67eb6354 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bob=20Dr=C3=B6ge?= Date: Mon, 8 Apr 2024 15:16:08 +0200 Subject: [PATCH 693/698] add EB 4.9.1 --- .../2023.06/eessi-2023.06-eb-4.9.1-001-system.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.1-001-system.yml diff --git a/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.1-001-system.yml b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.1-001-system.yml new file mode 100644 index 0000000000..c5a08b5209 --- /dev/null +++ b/easystacks/software.eessi.io/2023.06/eessi-2023.06-eb-4.9.1-001-system.yml @@ -0,0 +1,4 @@ +easyconfigs: + - EasyBuild-4.9.1.eb: + options: + from-pr: 20299 From 68632f3d8e886879e4f66c91e68c2f9e586f87fd Mon Sep 17 00:00:00 2001 From: ocaisa Date: Fri, 12 Apr 2024 08:02:05 +0200 Subject: [PATCH 694/698] Update eessi_arch_arm_part.spec --- init/arch_specs/eessi_arch_arm_part.spec | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/init/arch_specs/eessi_arch_arm_part.spec b/init/arch_specs/eessi_arch_arm_part.spec index 1dee340771..a4870b2e06 100755 --- a/init/arch_specs/eessi_arch_arm_part.spec +++ b/init/arch_specs/eessi_arch_arm_part.spec @@ -1,5 +1,5 @@ # ARM CPU architecture specifications # Software path in EESSI | Vendor ID | CPU part (ARM uarch identification) -"aarch64/arm/cortex-a72" "" "0xd08" # Raspberry Pi 4 -"aarch64/arm/neoverse-n1" "" "0xd0c" # AWS Graviton2 -"aarch64/arm/neoverse-v1" "" "0xd40" # AWS Graviton3 +"aarch64/cortex-a72" "" "0xd08" # Raspberry Pi 4 +"aarch64/neoverse-n1" "" "0xd0c" # AWS Graviton2 +"aarch64/neoverse-v1" "" "0xd40" # AWS Graviton3 From 31ad1343c90e0237e29e026dee9ef3ddad0433d9 Mon Sep 17 00:00:00 2001 From: ocaisa Date: Fri, 12 Apr 2024 08:04:19 +0200 Subject: [PATCH 695/698] Update debian-rpi4.output --- tests/archdetect/aarch64/arm/cortex-a72/debian-rpi4.output | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/archdetect/aarch64/arm/cortex-a72/debian-rpi4.output b/tests/archdetect/aarch64/arm/cortex-a72/debian-rpi4.output index 4fe0bd1183..e4e20ccd43 100644 --- a/tests/archdetect/aarch64/arm/cortex-a72/debian-rpi4.output +++ b/tests/archdetect/aarch64/arm/cortex-a72/debian-rpi4.output @@ -1 +1 @@ -aarch64/arm/cortex-a72 +aarch64/cortex-a72 From 576738f1626a99f8a5cc25b74f07b65b30acc48a Mon Sep 17 00:00:00 2001 From: Alan O'Cais Date: Fri, 12 Apr 2024 11:45:13 +0200 Subject: [PATCH 696/698] Sync with upstream and add missing output file --- tests/archdetect/aarch64/cortex-a72/debian-rpi4.all.output | 1 + .../archdetect/aarch64/{arm => }/cortex-a72/debian-rpi4.cpuinfo | 0 tests/archdetect/aarch64/{arm => }/cortex-a72/debian-rpi4.output | 0 3 files changed, 1 insertion(+) create mode 100644 tests/archdetect/aarch64/cortex-a72/debian-rpi4.all.output rename tests/archdetect/aarch64/{arm => }/cortex-a72/debian-rpi4.cpuinfo (100%) rename tests/archdetect/aarch64/{arm => }/cortex-a72/debian-rpi4.output (100%) diff --git a/tests/archdetect/aarch64/cortex-a72/debian-rpi4.all.output b/tests/archdetect/aarch64/cortex-a72/debian-rpi4.all.output new file mode 100644 index 0000000000..bf3e5620ff --- /dev/null +++ b/tests/archdetect/aarch64/cortex-a72/debian-rpi4.all.output @@ -0,0 +1 @@ +aarch64/cortex-a72:aarch64/generic diff --git a/tests/archdetect/aarch64/arm/cortex-a72/debian-rpi4.cpuinfo b/tests/archdetect/aarch64/cortex-a72/debian-rpi4.cpuinfo similarity index 100% rename from tests/archdetect/aarch64/arm/cortex-a72/debian-rpi4.cpuinfo rename to tests/archdetect/aarch64/cortex-a72/debian-rpi4.cpuinfo diff --git a/tests/archdetect/aarch64/arm/cortex-a72/debian-rpi4.output b/tests/archdetect/aarch64/cortex-a72/debian-rpi4.output similarity index 100% rename from tests/archdetect/aarch64/arm/cortex-a72/debian-rpi4.output rename to tests/archdetect/aarch64/cortex-a72/debian-rpi4.output From e0421c11243bb7a4266dfee6a1c97e75e97f74e2 Mon Sep 17 00:00:00 2001 From: Alan O'Cais Date: Fri, 12 Apr 2024 11:59:24 +0200 Subject: [PATCH 697/698] Use _ instead of - --- init/arch_specs/eessi_arch_arm_part.spec | 6 +++--- tests/archdetect/aarch64/cortex-a72/debian-rpi4.all.output | 1 - tests/archdetect/aarch64/cortex-a72/debian-rpi4.output | 1 - tests/archdetect/aarch64/cortex_a72/debian-rpi4.all.output | 1 + .../aarch64/{cortex-a72 => cortex_a72}/debian-rpi4.cpuinfo | 0 tests/archdetect/aarch64/cortex_a72/debian-rpi4.output | 1 + 6 files changed, 5 insertions(+), 5 deletions(-) delete mode 100644 tests/archdetect/aarch64/cortex-a72/debian-rpi4.all.output delete mode 100644 tests/archdetect/aarch64/cortex-a72/debian-rpi4.output create mode 100644 tests/archdetect/aarch64/cortex_a72/debian-rpi4.all.output rename tests/archdetect/aarch64/{cortex-a72 => cortex_a72}/debian-rpi4.cpuinfo (100%) create mode 100644 tests/archdetect/aarch64/cortex_a72/debian-rpi4.output diff --git a/init/arch_specs/eessi_arch_arm_part.spec b/init/arch_specs/eessi_arch_arm_part.spec index a4870b2e06..e059f5206f 100755 --- a/init/arch_specs/eessi_arch_arm_part.spec +++ b/init/arch_specs/eessi_arch_arm_part.spec @@ -1,5 +1,5 @@ # ARM CPU architecture specifications # Software path in EESSI | Vendor ID | CPU part (ARM uarch identification) -"aarch64/cortex-a72" "" "0xd08" # Raspberry Pi 4 -"aarch64/neoverse-n1" "" "0xd0c" # AWS Graviton2 -"aarch64/neoverse-v1" "" "0xd40" # AWS Graviton3 +"aarch64/cortex_a72" "" "0xd08" # Raspberry Pi 4 +"aarch64/neoverse_n1" "" "0xd0c" # AWS Graviton2 +"aarch64/neoverse_v1" "" "0xd40" # AWS Graviton3 diff --git a/tests/archdetect/aarch64/cortex-a72/debian-rpi4.all.output b/tests/archdetect/aarch64/cortex-a72/debian-rpi4.all.output deleted file mode 100644 index bf3e5620ff..0000000000 --- a/tests/archdetect/aarch64/cortex-a72/debian-rpi4.all.output +++ /dev/null @@ -1 +0,0 @@ -aarch64/cortex-a72:aarch64/generic diff --git a/tests/archdetect/aarch64/cortex-a72/debian-rpi4.output b/tests/archdetect/aarch64/cortex-a72/debian-rpi4.output deleted file mode 100644 index e4e20ccd43..0000000000 --- a/tests/archdetect/aarch64/cortex-a72/debian-rpi4.output +++ /dev/null @@ -1 +0,0 @@ -aarch64/cortex-a72 diff --git a/tests/archdetect/aarch64/cortex_a72/debian-rpi4.all.output b/tests/archdetect/aarch64/cortex_a72/debian-rpi4.all.output new file mode 100644 index 0000000000..fff57f72ef --- /dev/null +++ b/tests/archdetect/aarch64/cortex_a72/debian-rpi4.all.output @@ -0,0 +1 @@ +aarch64/cortex_a72:aarch64/generic diff --git a/tests/archdetect/aarch64/cortex-a72/debian-rpi4.cpuinfo b/tests/archdetect/aarch64/cortex_a72/debian-rpi4.cpuinfo similarity index 100% rename from tests/archdetect/aarch64/cortex-a72/debian-rpi4.cpuinfo rename to tests/archdetect/aarch64/cortex_a72/debian-rpi4.cpuinfo diff --git a/tests/archdetect/aarch64/cortex_a72/debian-rpi4.output b/tests/archdetect/aarch64/cortex_a72/debian-rpi4.output new file mode 100644 index 0000000000..1282f7c0c2 --- /dev/null +++ b/tests/archdetect/aarch64/cortex_a72/debian-rpi4.output @@ -0,0 +1 @@ +aarch64/cortex_a72 From d687be520344a220f2709284c467895c16756457 Mon Sep 17 00:00:00 2001 From: Alan O'Cais Date: Fri, 12 Apr 2024 12:03:16 +0200 Subject: [PATCH 698/698] Reference updated file in tests --- .github/workflows/tests_archdetect.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/tests_archdetect.yml b/.github/workflows/tests_archdetect.yml index da6f2105ba..47f77cc589 100644 --- a/.github/workflows/tests_archdetect.yml +++ b/.github/workflows/tests_archdetect.yml @@ -16,7 +16,7 @@ jobs: - aarch64/neoverse_n1/Azure-Ubuntu20-Altra - aarch64/neoverse_n1/AWS-awslinux-graviton2 - aarch64/neoverse_v1/AWS-awslinux-graviton3 - - aarch64/cortex-a72/debian-rpi4 + - aarch64/cortex_a72/debian-rpi4 # commented out since these targets are currently not supported in software.eessi.io repo # (and some tests assume that the corresponding subdirectory in software layer is there) # - ppc64le/power9le/unknown-power9le