From a6ded7834df850cbbc310f607153e25999793a4d Mon Sep 17 00:00:00 2001 From: Richard Top Date: Thu, 22 Jun 2023 10:54:47 +0000 Subject: [PATCH 1/3] Adding GROMACS/2021.3 with foss/2021a to NESSI/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 aaf5004fd0..891b09692c 100644 --- a/eessi-2023.06-eb-4.7.2-2021a.yml +++ b/eessi-2023.06-eb-4.7.2-2021a.yml @@ -8,3 +8,4 @@ easyconfigs: include-easyblocks-from-pr: 2248 - Rust-1.52.1-GCCcore-10.3.0.eb - foss-2021a.eb + - GROMACS-2021.3-foss-2021a.eb From 31d43a0f68f8e57b1f307496b46a94db1d491d09 Mon Sep 17 00:00:00 2001 From: Richard Top Date: Fri, 7 Jul 2023 09:59:31 +0000 Subject: [PATCH 2/3] {2023.06}[foss/2021a] libGLU V9.0.1 --- 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 993086f20e..be811bed14 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: - Rust-1.52.1-GCCcore-10.3.0.eb - foss-2021a.eb - QuantumESPRESSO-6.7-foss-2021a.eb + - libGLU-9.0.1-GCCcore-10.3.0.eb From 412a5c2fed39b1adb8b91f874bc4decdf255bd43 Mon Sep 17 00:00:00 2001 From: Richard Top Date: Wed, 26 Jul 2023 13:15:06 +0000 Subject: [PATCH 3/3] Added timeout options --- .github/workflows/test_eessi.yml | 39 +++--- .github/workflows/tests_readme.yml | 2 - .github/workflows/tests_scripts.yml | 7 +- EESSI-pilot-install-software.sh | 62 +++++----- README.md | 12 +- bot/bot-eessi-aws-citc.cfg | 156 ++++++++++++++++++------ bot/{check-result.sh => check-build.sh} | 139 +++++++++++---------- configure_easybuild | 1 + create_directory_tarballs.sh | 2 +- eb_hooks.py | 60 +++++---- eessi-2023.06-eb-4.7.2-2021a.yml | 21 ++-- eessi-2023.06-eb-4.7.2-2021b.yml | 15 +++ eessi-2023.06-eb-4.7.2-2022a.yml | 11 ++ eessi-2023.06-eb-4.7.2-2022b.yml | 11 ++ init/eessi_defaults | 2 +- load_easybuild_module.sh | 4 +- 16 files changed, 346 insertions(+), 198 deletions(-) rename bot/{check-result.sh => check-build.sh} (78%) create mode 100644 eessi-2023.06-eb-4.7.2-2021b.yml create mode 100644 eessi-2023.06-eb-4.7.2-2022a.yml 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 d3906a0f9f..cf1395f199 100644 --- a/.github/workflows/test_eessi.yml +++ b/.github/workflows/test_eessi.yml @@ -13,15 +13,16 @@ jobs: - 2023.06 EESSI_SOFTWARE_SUBDIR: - aarch64/generic - - aarch64/graviton2 - - aarch64/graviton3 - x86_64/amd/zen2 - - x86_64/amd/zen3 - - x86_64/intel/haswell + - x86_64/intel/broadwell + - x86_64/intel/cascadelake - 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 steps: - name: Check out software-layer repository uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # v3.1.0 @@ -29,28 +30,28 @@ jobs: - 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_config_package: https://github.com/NorESSI/filesystem-layer/releases/download/latest/cvmfs-config-nessi_latest_all.deb cvmfs_http_proxy: DIRECT - cvmfs_repositories: pilot.eessi-hpc.org + cvmfs_repositories: pilot.nessi.no -# - name: Test check_missing_installations.sh script -# run: | -# source /cvmfs/pilot.eessi-hpc.org/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_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)" -# ./check_missing_installations.sh ${{matrix.EASYSTACK_FILE}} + - name: Test check_missing_installations.sh script + run: | + source /cvmfs/pilot.nessi.no/versions/${{matrix.EESSI_VERSION}}/init/bash + module load EasyBuild + eb --version + export EESSI_PREFIX=/cvmfs/pilot.nessi.no/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)" + ./check_missing_installations.sh ${{matrix.EASYSTACK_FILE}} - 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/pilot.nessi.no/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/pilot.nessi.no/versions/${{matrix.EESSI_VERSION}} export EESSI_OS_TYPE=linux export EESSI_SOFTWARE_SUBDIR=${{matrix.EESSI_SOFTWARE_SUBDIR}} env | grep ^EESSI | sort 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 8ad4928993..74e2ebcffe 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 @@ -42,7 +40,10 @@ 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; + # 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; diff --git a/EESSI-pilot-install-software.sh b/EESSI-pilot-install-software.sh index c3ee228a56..979156830a 100755 --- a/EESSI-pilot-install-software.sh +++ b/EESSI-pilot-install-software.sh @@ -50,28 +50,28 @@ set -- "${POSITIONAL_ARGS[@]}" TOPDIR=$(dirname $(realpath $0)) -source ${TOPDIR}/scripts/utils.sh +source $TOPDIR/scripts/utils.sh -# honor ${TMPDIR} if it is already defined, use /tmp otherwise -if [ -z ${TMPDIR} ]; then - export WORKDIR=/tmp/${USER} +# honor $TMPDIR if it is already defined, use /tmp otherwise +if [ -z $TMPDIR ]; then + export WORKDIR=/tmp/$USER else - export WORKDIR=${TMPDIR}/${USER} + export WORKDIR=$TMPDIR/$USER fi TMPDIR=$(mktemp -d) echo ">> Setting up environment..." -source ${TOPDIR}/init/minimal_eessi_env +source $TOPDIR/init/minimal_eessi_env -if [ -d ${EESSI_CVMFS_REPO} ]; then - echo_green "${EESSI_CVMFS_REPO} available, OK!" +if [ -d $EESSI_CVMFS_REPO ]; then + echo_green "$EESSI_CVMFS_REPO available, OK!" else - fatal_error "${EESSI_CVMFS_REPO} is not available!" + fatal_error "$EESSI_CVMFS_REPO is not available!" fi -# make sure we're in Prefix environment by checking ${SHELL} +# 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 @@ -79,22 +79,22 @@ 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 EB='eb' -if [[ "${EASYBUILD_OPTARCH}" == "GENERIC" ]]; then +if [[ "$EASYBUILD_OPTARCH" == "GENERIC" ]]; then echo_yellow ">> GENERIC build requested, taking appropriate measures!" - DETECTION_PARAMETERS="${DETECTION_PARAMETERS} --generic" + 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" +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 @@ -102,7 +102,7 @@ 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 +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?!" @@ -113,9 +113,9 @@ else fi echo ">> Initializing Lmod..." -source ${EPREFIX}/usr/share/Lmod/init/bash -ml_version_out=${TMPDIR}/ml.out -ml --version &> ${ml_version_out} +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 @@ -123,14 +123,14 @@ else fi echo ">> Configuring EasyBuild..." -source ${TOPDIR}/configure_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 +module unuse $MODULEPATH +module use $EASYBUILD_INSTALLPATH/modules/all if [[ -z ${MODULEPATH} ]]; then fatal_error "Failed to set up \$MODULEPATH?!" else @@ -138,14 +138,13 @@ else 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 ${eb_version} 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..." @@ -157,16 +156,19 @@ for eb_version in '4.7.2'; do fatal_error "Easystack file ${es} not found!" fi done + done +### add packages here + echo ">> Creating/updating Lmod cache..." export LMOD_RC="${EASYBUILD_INSTALLPATH}/.lmod/lmodrc.lua" -if [ ! -f ${LMOD_RC} ]; then - python3 ${TOPDIR}/create_lmodrc.py ${EASYBUILD_INSTALLPATH} - check_exit_code $? "${LMOD_RC} created" "Failed to create ${LMOD_RC}" +if [ ! -f $LMOD_RC ]; then + python3 $TOPDIR/create_lmodrc.py ${EASYBUILD_INSTALLPATH} + check_exit_code $? "$LMOD_RC created" "Failed to create $LMOD_RC" fi -${TOPDIR}/update_lmod_cache.sh ${EPREFIX} ${EASYBUILD_INSTALLPATH} +$TOPDIR/update_lmod_cache.sh ${EPREFIX} ${EASYBUILD_INSTALLPATH} echo ">> Cleaning up ${TMPDIR}..." rm -r ${TMPDIR} diff --git a/README.md b/README.md index daf02eebc2..af83bb16fd 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! -Derived subdirectory for software layer: x86_64/intel/haswell -Using x86_64/intel/haswell subdirectory for software layer (HARDCODED) +$ source /cvmfs/pilot.nessi.no/versions/2023.06/init/bash +Found EESSI pilot repo @ /cvmfs/pilot.nessi.no/versions/2023.06! +Derived subdirectory for software layer: x86_64/intel/broadwell +Using x86_64/intel/broadwell 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.nessi.no/versions/2023.06/software/x86_64/intel/broadwell/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 diff --git a/bot/bot-eessi-aws-citc.cfg b/bot/bot-eessi-aws-citc.cfg index 5b3ad34612..71a674a0db 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 laraPPr ocaisa casparvl satishskamath maxim-masterov TopRichard xinan1911 + +# 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 @@ -67,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 @@ -76,24 +93,93 @@ 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 + + +[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 = 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 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 -# 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"} +# 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-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.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/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 +204,28 @@ 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_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.
diff --git a/bot/check-result.sh b/bot/check-build.sh similarity index 78% rename from bot/check-result.sh rename to bot/check-build.sh index 04a23962e2..ec1ca56bba 100755 --- a/bot/check-result.sh +++ b/bot/check-build.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 @@ -45,10 +45,10 @@ export JOB_CFG_FILE="${JOB_CFG_FILE_OVERRIDE:=./cfg/job.cfg}" 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" + echo "bot/check-build.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}'" + echo "bot/check-build.sh: obtaining configuration settings from '${JOB_CFG_FILE}'" cfg_load ${JOB_CFG_FILE} fi @@ -95,12 +95,15 @@ 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}"'" +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 '"${job_out}"'" +else + SLURM=0 + [[ ${VERBOSE} -ne 0 ]] && echo " Slurm output file '"${job_out}"' NOT found" +fi ERROR=-1 if [[ ${SLURM} -eq 1 ]]; then @@ -149,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 @@ -159,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)" @@ -185,65 +188,41 @@ else fi ### 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
  • -#
    -# +# 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 :x: #
    -# :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_
    #
    -# :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_
    #
    #
    -# 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
    @@ -254,14 +233,32 @@ fi #
    #
    # +#
    +# :cry: FAILURE _(click triangle for details)_ +#
    +#
    _Details_
    +#
    +# :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_
    +#
    +# No artefacts were created or found. +#
    +#
    +#
    ### # 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_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__
    " @@ -342,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}" @@ -374,25 +371,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
    @@ -406,23 +406,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="" @@ -480,4 +482,11 @@ echo "status = ${status}" >> ${job_result_file} echo "artefacts = " >> ${job_result_file} echo "${TARBALL}" | sed -e 's/^/ /g' >> ${job_result_file} -exit 0 +# 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 $? diff --git a/configure_easybuild b/configure_easybuild index 8e79f3a35a..23f3920154 100644 --- a/configure_easybuild +++ b/configure_easybuild @@ -13,6 +13,7 @@ export EASYBUILD_ZIP_LOGS=bzip2 export EASYBUILD_RPATH=1 export EASYBUILD_FILTER_ENV_VARS=LD_LIBRARY_PATH +export EASYBUILD_READ_ONLY_INSTALLDIR=1 # assume that eb_hooks.py is located in same directory as this script (configure_easybuild) TOPDIR=$(dirname $(realpath $BASH_SOURCE)) diff --git a/create_directory_tarballs.sh b/create_directory_tarballs.sh index 70e666f871..23b0d6190b 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/NorESSI/software-layer/tarball/nessi.no-2023.06 set -eo pipefail diff --git a/eb_hooks.py b/eb_hooks.py index 8df5e076e0..1c18fdf274 100644 --- a/eb_hooks.py +++ b/eb_hooks.py @@ -11,8 +11,7 @@ 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 distutils -# in case EasyBuild <= 4.7.0 is used +# 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: @@ -54,6 +53,16 @@ def get_rpath_override_dirs(software_name): return rpath_injection_dirs +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') + + if ec.name in PARSE_HOOKS: + PARSE_HOOKS[ec.name](ec, eprefix) + + def pre_prepare_hook(self, *args, **kwargs): """Main pre-prepare hook: trigger custom functions.""" @@ -82,24 +91,10 @@ def pre_prepare_hook(self, *args, **kwargs): mpi_family, rpath_override_dirs) -def post_prepare_hook(self, *args, **kwargs): - """Main post-prepare hook: trigger custom functions.""" - - if hasattr(self, EESSI_RPATH_OVERRIDE_ATTR): - # Reset the value of 'rpath_override_dirs' now that we are finished with it - update_build_option('rpath_override_dirs', getattr(self, EESSI_RPATH_OVERRIDE_ATTR)) - print_msg("Resetting rpath_override_dirs to original value: %s", getattr(self, EESSI_RPATH_OVERRIDE_ATTR)) - delattr(self, EESSI_RPATH_OVERRIDE_ATTR) - - if self.name in POST_PREPARE_HOOKS: - POST_PREPARE_HOOKS[self.name](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' + - copy RPATH wrapper script for linker commands to also have a wrapper in place with system type prefix like 'x86_64-pc-linux-gnu' """ if self.name == 'GCCcore': config_guess = obtain_config_guess() @@ -127,14 +122,17 @@ def post_prepare_hook_gcc_prefixed_ld_rpath_wrapper(self, *args, **kwargs): raise EasyBuildError("GCCcore-specific hook triggered for non-GCCcore easyconfig?!") -def parse_hook(ec, *args, **kwargs): - """Main parse hook: trigger custom functions based on software name.""" +def post_prepare_hook(self, *args, **kwargs): + """Main post-prepare hook: trigger custom functions.""" - # determine path to Prefix installation in compat layer via $EPREFIX - eprefix = get_eessi_envvar('EPREFIX') + if hasattr(self, EESSI_RPATH_OVERRIDE_ATTR): + # Reset the value of 'rpath_override_dirs' now that we are finished with it + update_build_option('rpath_override_dirs', getattr(self, EESSI_RPATH_OVERRIDE_ATTR)) + print_msg("Resetting rpath_override_dirs to original value: %s", getattr(self, EESSI_RPATH_OVERRIDE_ATTR)) + delattr(self, EESSI_RPATH_OVERRIDE_ATTR) - if ec.name in PARSE_HOOKS: - PARSE_HOOKS[ec.name](ec, eprefix) + if self.name in POST_PREPARE_HOOKS: + POST_PREPARE_HOOKS[self.name](self, *args, **kwargs) def parse_hook_cgal_toolchainopts_precise(ec, eprefix): @@ -161,6 +159,21 @@ 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.""" + if ec.name == 'OpenBLAS': + cfg_option = 'max_failing_lapack_tests_num_errors' + num_errors = 302 + if get_cpu_architecture() == AARCH64: + # relax number of failed numerical LAPACK tests + ec[cfg_option] = num_errors + print_msg("Set '%s = %d' in easyconfig for %s on AARCH64", cfg_option, num_errors, ec.name) + 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': @@ -234,6 +247,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, } diff --git a/eessi-2023.06-eb-4.7.2-2021a.yml b/eessi-2023.06-eb-4.7.2-2021a.yml index 891b09692c..12a65db19a 100644 --- a/eessi-2023.06-eb-4.7.2-2021a.yml +++ b/eessi-2023.06-eb-4.7.2-2021a.yml @@ -1,11 +1,16 @@ easyconfigs: - - OpenSSL-1.1.eb: - options: - include-easyblocks-from-pr: 2922 - - GCC-10.3.0.eb - - CMake-3.20.1-GCCcore-10.3.0.eb: - options: - include-easyblocks-from-pr: 2248 + - OpenSSL-1.1.eb + # - OpenSSL-1.1.eb: + # options: + # include-easyblocks-from-pr: 2922 + - GCC-10.3.0 + - CMake-3.20.1-GCCcore-10.3.0.eb + # - CMake-3.20.1-GCCcore-10.3.0.eb: + # options: + # include-easyblocks-from-pr: 2248 - Rust-1.52.1-GCCcore-10.3.0.eb - foss-2021a.eb - - GROMACS-2021.3-foss-2021a.eb + - QuantumESPRESSO-6.7-foss-2021a.eb + - GROMACS-2021.3-foss-2021a.eb: + options: + download-timeout: 1000 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..d6e2fb67ba --- /dev/null +++ b/eessi-2023.06-eb-4.7.2-2021b.yml @@ -0,0 +1,15 @@ +easyconfigs: + - GCC-11.2.0 + - CMake-3.21.1-GCCcore-11.2.0.eb + # - CMake-3.21.1-GCCcore-11.2.0.eb: + # options: + # include-easyblocks-from-pr: 2248 + - OpenMPI-4.1.1-GCC-11.2.0.eb + - FFTW-3.3.10-gompi-2021b.eb + - BLIS-0.8.1-GCC-11.2.0.eb + - foss-2021b.eb + # - CMake-3.22.1-GCCcore-11.2.0.eb: + # options: + # include-easyblocks-from-pr: 2248 + # - zlib-1.2.11-GCCcore-11.2.0 + - QuantumESPRESSO-6.8-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 new file mode 100644 index 0000000000..786f873999 --- /dev/null +++ b/eessi-2023.06-eb-4.7.2-2022a.yml @@ -0,0 +1,11 @@ +easyconfigs: + - GCC-11.3.0 + - CMake-3.23.1-GCCcore-11.3.0.eb + # - CMake-3.23.1-GCCcore-11.3.0.eb: + # options: + # include-easyblocks-from-pr: 2248 + - BLIS-0.9.0-GCC-11.3.0.eb + - OpenMPI-4.1.4-GCC-11.3.0.eb + - FFTW.MPI-3.3.10-gompi-2022a.eb + - foss-2022a.eb + - Python-3.10.4-GCCcore-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 new file mode 100644 index 0000000000..d691317ede --- /dev/null +++ b/eessi-2023.06-eb-4.7.2-2022b.yml @@ -0,0 +1,11 @@ +easyconfigs: + - GCC-12.2.0 + - CMake-3.24.3-GCCcore-12.2.0.eb + # - CMake-3.24.3-GCCcore-12.2.0.eb: + # options: + # include-easyblocks-from-pr: 2248 + - BLIS-0.9.0-GCC-12.2.0.eb + - OpenMPI-4.1.4-GCC-12.2.0.eb + - FFTW.MPI-3.3.10-gompi-2022b.eb + - Python-3.10.8-GCCcore-12.2.0.eb + - foss-2022b.eb diff --git a/init/eessi_defaults b/init/eessi_defaults index 0143dc38ab..a4ccaf054e 100644 --- a/init/eessi_defaults +++ b/init/eessi_defaults @@ -8,5 +8,5 @@ # license: GPLv2 # -export EESSI_CVMFS_REPO="${EESSI_CVMFS_REPO_OVERRIDE:=/cvmfs/pilot.eessi-hpc.org}" +export EESSI_CVMFS_REPO="${EESSI_CVMFS_REPO_OVERRIDE:=/cvmfs/pilot.nessi.no}" export EESSI_PILOT_VERSION="${EESSI_PILOT_VERSION_OVERRIDE:=2023.06}" diff --git a/load_easybuild_module.sh b/load_easybuild_module.sh index 9897059f82..4ff2a3c37c 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