Skip to content

Commit

Permalink
Merge branch '2023.06' of https://github.com/EESSI/software-layer int…
Browse files Browse the repository at this point in the history
…o espresso_2021a
  • Loading branch information
maxim-masterov committed Oct 4, 2023
2 parents d3d62c3 + 8514c36 commit 54f0d39
Show file tree
Hide file tree
Showing 12 changed files with 184 additions and 34 deletions.
5 changes: 5 additions & 0 deletions .github/workflows/test_eessi.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,11 @@ 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
- 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
Expand Down
61 changes: 39 additions & 22 deletions EESSI-pilot-install-software.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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() {
Expand Down Expand Up @@ -39,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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand All @@ -172,36 +186,39 @@ else
echo_green ">> MODULEPATH set up: ${MODULEPATH}"
fi

for eb_version in '4.7.2' '4.8.0'; 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"

# 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..."

${EB} --easystack ${TOPDIR}/${es} --robot
ec=$?
if [ -f ${easystack_file} ]; then
echo_green "Feeding easystack file ${easystack_file} to EasyBuild..."

# 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
${EB} --easystack ${TOPDIR}/${easystack_file} --robot
ec=$?

$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

Expand Down
8 changes: 6 additions & 2 deletions bot/bot-eessi-aws-citc.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -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 =
Expand All @@ -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

Expand Down Expand Up @@ -96,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
Expand Down
27 changes: 22 additions & 5 deletions bot/build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -57,11 +57,27 @@ 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,
# 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
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")
Expand Down Expand Up @@ -167,6 +183,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)
Expand Down
55 changes: 50 additions & 5 deletions eb_hooks.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@
from distutils.version import LooseVersion


CPU_TARGET_NEOVERSE_V1 = 'aarch64/neoverse_v1'

EESSI_RPATH_OVERRIDE_ATTR = 'orig_rpath_override_dirs'


Expand Down Expand Up @@ -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 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 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 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)",
Expand Down Expand Up @@ -270,10 +273,46 @@ 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"


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 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.
"""
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 && "


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,
Expand All @@ -295,4 +334,10 @@ 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,
}

PRE_SINGLE_EXTENSION_HOOKS = {
'isoband': pre_single_extension_isoband,
'testthat': pre_single_extension_testthat,
}
3 changes: 3 additions & 0 deletions eessi-2023.06-eb-4.8.0-system.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
7 changes: 7 additions & 0 deletions eessi-2023.06-eb-4.8.1-2021a.yml
Original file line number Diff line number Diff line change
@@ -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
7 changes: 7 additions & 0 deletions eessi-2023.06-eb-4.8.1-2021b.yml
Original file line number Diff line number Diff line change
@@ -0,0 +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
7 changes: 7 additions & 0 deletions eessi-2023.06-eb-4.8.1-2022a.yml
Original file line number Diff line number Diff line change
@@ -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
10 changes: 10 additions & 0 deletions eessi-2023.06-eb-4.8.1-2023a.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
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
6 changes: 6 additions & 0 deletions eessi-2023.06-eb-4.8.1-system.yml
Original file line number Diff line number Diff line change
@@ -0,0 +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
22 changes: 22 additions & 0 deletions eessi-2023.06-known-issues.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
- 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 (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/*)"
- 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:
- 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"

0 comments on commit 54f0d39

Please sign in to comment.