Skip to content

Commit

Permalink
adding easyconfigs: ReFrame-4.7.2.eb, ReFrame-4.7.2-Python-3.6.eb, Re…
Browse files Browse the repository at this point in the history
…Frame-4.7.2-GCCcore-13.2.0.eb, ReFrame-4.7.2-GCCcore-13.3.0.eb
  • Loading branch information
gkaf89 committed Dec 21, 2024
1 parent ef644ae commit 0243b94
Show file tree
Hide file tree
Showing 4 changed files with 298 additions and 0 deletions.
58 changes: 58 additions & 0 deletions easybuild/easyconfigs/r/ReFrame/ReFrame-4.7.2-GCCcore-13.2.0.eb
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
easyblock = 'PythonBundle'

name = 'ReFrame'
version = '4.7.2'

homepage = 'https://github.com/reframe-hpc/reframe'
description = '''ReFrame is a framework for writing regression tests for HPC systems.'''

toolchain = {'name': 'GCCcore', 'version': '13.2.0'}

builddependencies = [
('binutils', '2.40'),
('cURL', '8.3.0'), # Used by ReFrame to download pip in the bootstrap
]

# Note that for ReFrame's CPU autodetect to work
# the system also needs to provide (new enough versions of) these dependencies
dependencies = [
('Python', '3.11.5'),
('libxslt', '1.1.38'), # Required by lxml, which is installed by ReFrame's bootstrap installer
('libxml2', '2.11.5'), # Required by lxml, which is installed by ReFrame's bootstrap installer
]

exts_list = [
('reframe', version, {
'download_dep_fail': False,
'modulename': False,
'preinstallopts': "export PATH=%(installdir)s/bin:$PATH && ./bootstrap.sh +docs +pygelf && cp --recursive external %(installdir)s && ",
'sanity_pip_check': False,
'source_tmpl': 'v%(version)s.tar.gz',
'source_urls': ['https://github.com/reframe-hpc/reframe/archive/'],
'checksums': ['90e04eaaa21afd5c29a9c6218204c3df4503f624f21f2fe773f90e148d30c152'],
}),
]

postinstallcmds = [
"cp --archive tools examples %(installdir)s",
"mkdir --parents %(installdir)s/share && cp --archive share/completions %(installdir)s/share/completions",
r"sed -i 's@/\(python[0-9.]*\)$@/\1 -S@g' %(installdir)s/bin/reframe",
]

sanity_check_paths = {
'files': ['bin/reframe',
'share/completions/reframe.bash',
'share/completions/reframe.fish',
'share/completions/reframe.tcsh'],
'dirs': ['external', 'lib', 'tools', 'examples']
}

sanity_check_commands = ['reframe --version']

# Since this is at the GCCcore toolchain level, make sure ReFrame is configured to purge modules before running
# any tests by default
modextravars = {
'RFM_PURGE_ENVIRONMENT': '1',
}

moduleclass = 'devel'
58 changes: 58 additions & 0 deletions easybuild/easyconfigs/r/ReFrame/ReFrame-4.7.2-GCCcore-13.3.0.eb
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
easyblock = 'PythonBundle'

name = 'ReFrame'
version = '4.7.2'

homepage = 'https://github.com/reframe-hpc/reframe'
description = '''ReFrame is a framework for writing regression tests for HPC systems.'''

toolchain = {'name': 'GCCcore', 'version': '13.3.0'}

builddependencies = [
('binutils', '2.42'),
('cURL', '8.7.1'), # Used by ReFrame to download pip in the bootstrap
]

# Note that for ReFrame's CPU autodetect to work
# the system also needs to provide (new enough versions of) these dependencies
dependencies = [
('Python', '3.12.3'),
('libxslt', '1.1.42'), # Required by lxml, which is installed by ReFrame's bootstrap installer
('libxml2', '2.12.7'), # Required by lxml, which is installed by ReFrame's bootstrap installer
]

exts_list = [
('reframe', version, {
'download_dep_fail': False,
'modulename': False,
'preinstallopts': "export PATH=%(installdir)s/bin:$PATH && ./bootstrap.sh +docs +pygelf && cp --recursive external %(installdir)s && ",
'sanity_pip_check': False,
'source_tmpl': 'v%(version)s.tar.gz',
'source_urls': ['https://github.com/reframe-hpc/reframe/archive/'],
'checksums': ['90e04eaaa21afd5c29a9c6218204c3df4503f624f21f2fe773f90e148d30c152'],
}),
]

postinstallcmds = [
"cp --archive tools examples %(installdir)s",
"mkdir --parents %(installdir)s/share && cp --archive share/completions %(installdir)s/share/completions",
r"sed -i 's@/\(python[0-9.]*\)$@/\1 -S@g' %(installdir)s/bin/reframe",
]

sanity_check_paths = {
'files': ['bin/reframe',
'share/completions/reframe.bash',
'share/completions/reframe.fish',
'share/completions/reframe.tcsh'],
'dirs': ['external', 'lib', 'tools', 'examples']
}

sanity_check_commands = ['reframe --version']

# Since this is at the GCCcore toolchain level, make sure ReFrame is configured to purge modules before running
# any tests by default
modextravars = {
'RFM_PURGE_ENVIRONMENT': '1',
}

moduleclass = 'devel'
93 changes: 93 additions & 0 deletions easybuild/easyconfigs/r/ReFrame/ReFrame-4.7.2-Python-3.6.eb
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
# This EasyConfig is made with older setuptools and wheel versions, so that it still works with Python-3.6.X
# For newer python versions, we suggest to use ReFrame-4.6.2.eb (without suffix)
easyblock = 'PythonBundle'

name = 'ReFrame'
version = '4.7.2'
versionsuffix = '-Python-3.6'

homepage = 'https://github.com/reframe-hpc/reframe'
description = '''ReFrame is a framework for writing regression tests for HPC systems.'''

toolchain = SYSTEM

allow_system_deps = [('Python', SYS_PYTHON_VERSION)]

# Required by lxml, which is installed by ReFrame's bootstrap installer
osdependencies = [
('libxml2'),
('libxslt', 'libxslt1.1'),
]

# Listed as python_requires in https://github.com/reframe-hpc/reframe/blob/v4.6.2/setup.cfg
req_py_majver = 3
req_py_minver = 6

# The setuptools in this EasyConfig is the latest that works for Python 3.6, but is too old for Python 3.12
# See https://github.com/easybuilders/easybuild-easyconfigs/pull/21269#discussion_r1741570244
max_py_majver = 3
max_py_minver = 11

exts_list = [
# stick to pip 21.3.1, which is compatible with Python 3.6
# we still need pip outside of ReFrame's external dependencies, since the install cmd uses pip
('pip', '21.3.1', {
'use_pip': False,
'checksums': ['fd11ba3d0fdb4c07fbc5ecbba0b1b719809420f25038f8ee3cd913d3faa3033a'],
}),
# Require new enough setuptools to install with e.g. pyproject.toml
# 59.6.0 is the latest compatible with Python 3.6
('setuptools', '59.6.0', {
'use_pip': False,
'source_urls': ['https://pypi.python.org/packages/source/s/setuptools/'],
'checksums': ['22c7348c6d2976a52632c67f7ab0cdf40147db7789f9aed18734643fe9cf3373'],
}),
# stick to wheel 0.37.1, which is compatible with Python 3.6
('wheel', '0.37.1', {
'source_tmpl': 'wheel-%(version)s-py2.py3-none-any.whl',
'checksums': ['4bdcd7d840138086126cd09254dc6195fb4fc6f01c050a1d7236f2630db1d22a'],
}),
# ReFrame's bootstrap script is intended to run with zero dependencies. It downloads all python deps for ReFrame
# into a %(installdir)/external directory. ReFrame's main executable (reframe) adds this dir to python's sys.path
# so that ReFrame (and only ReFrame) will find & use all of these dependencies.
# In EasyBuild, we should adhere to this installation method because a) it is how ReFrame is meant to be used and
# b) it isolates all of ReFrame dependencies from any other python code you run. Thus, there is no chance that
# a test will pick up on any python deps from ReFrame itself.
# For this to work, we need to disable download_dep_fail and sanity_pip_check, as both are _expected_ to fail
# for this setup.
('reframe', version, {
# Deps are downloaded to %(installdir)/external, which won't polute the PYTHONPATH, so is ok
'download_dep_fail': False,
# ReFrame uses its custom sys.path to find necessary packages, they are not on PYTYHONPATH
# Thus, the regular pip sanity check is expected to fail, even if ReFrame would run just fine
'sanity_pip_check': False,
# Set modulename to False, as to skip the sanity_check-step from extension.py (python -c "import reframe")
# This step would fail, since the regular python interpreter wouldn't find the additional packages in
# %(installdir)/external. That's fine, as ReFrame should never be imported directly, only through the
# reframe command.
'modulename': False,
'preinstallopts': "export PATH=%(installdir)s/bin:$PATH && "
"./bootstrap.sh +docs +pygelf && cp --recursive external %(installdir)s && ",
'source_tmpl': 'v%(version)s.tar.gz',
'source_urls': ['https://github.com/reframe-hpc/reframe/archive/'],
'checksums': ['90e04eaaa21afd5c29a9c6218204c3df4503f624f21f2fe773f90e148d30c152'],
}),
]

postinstallcmds = [
"cp --archive tools examples %(installdir)s",
"mkdir --parents %(installdir)s/share && cp --archive share/completions %(installdir)s/share/completions",
r"sed -i 's@/\(python[0-9.]*\)$@/\1 -S@g' %(installdir)s/bin/reframe",
]

sanity_check_paths = {
'files': ['bin/reframe',
'share/completions/reframe.bash',
'share/completions/reframe.fish',
'share/completions/reframe.tcsh'],
'dirs': ['external', 'lib', 'tools', 'examples']
}

sanity_check_commands = ['reframe --version']

moduleclass = 'devel'
89 changes: 89 additions & 0 deletions easybuild/easyconfigs/r/ReFrame/ReFrame-4.7.2.eb
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
easyblock = 'PythonBundle'

name = 'ReFrame'
version = '4.7.2'

homepage = 'https://github.com/reframe-hpc/reframe'
description = '''ReFrame is a framework for writing regression tests for HPC systems.'''

toolchain = SYSTEM

allow_system_deps = [('Python', SYS_PYTHON_VERSION)]

# Required by lxml, which is installed by ReFrame's bootstrap installer
osdependencies = [
('libxml2'),
('libxslt', 'libxslt1.1'),
]

# We use pip, setuptools and wheel compatible with Python 3.7 and above
# Note that ReFrame itself is compatible also with Python 3.6
# As listed in the python_requires in https://github.com/reframe-hpc/reframe/blob/v4.7.1/setup.cfg
# To use with Python 3.6, please install ReFrame-4.7.1-Python-3.6.eb instead
req_py_majver = 3
req_py_minver = 7

exts_list = [
# stick to pip 24.0, which is compatible with Python 3.7
# we still need pip outside of ReFrame's external dependencies, since the install cmd uses pip
('pip', '24.0', {
'use_pip': False,
'checksums': ['ea9bd1a847e8c5774a5777bb398c19e80bcd4e2aa16a4b301b718fe6f593aba2'],
}),
# Require new enough setuptools to work with Python 3.12, which doesn't have pkgutil.ImpImporter anymore
# See https://github.com/pypa/setuptools/commit/6653e747c3815b140156249205397ef3719581ee
# 68.0.0 is the latest compatible with Python 3.7
('setuptools', '68.0.0', {
'use_pip': False,
'source_urls': ['https://pypi.python.org/packages/source/s/setuptools/'],
'checksums': ['baf1fdb41c6da4cd2eae722e135500da913332ab3f2f5c7d33af9b492acb5235'],
}),
# stick to wheel 0.42.0, which is compatible with Python 3.7
('wheel', '0.42.0', {
'source_tmpl': 'wheel-%(version)s-py3-none-any.whl',
'checksums': ['177f9c9b0d45c47873b619f5b650346d632cdc35fb5e4d25058e09c9e581433d'],
}),
# ReFrame's bootstrap script is intended to run with zero dependencies. It downloads all python deps for ReFrame
# into a %(installdir)/external directory. ReFrame's main executable (reframe) adds this dir to python's sys.path
# so that ReFrame (and only ReFrame) will find & use all of these dependencies.
# In EasyBuild, we should adhere to this installation method because a) it is how ReFrame is meant to be used and
# b) it isolates all of ReFrame dependencies from any other python code you run. Thus, there is no chance that
# a test will pick up on any python deps from ReFrame itself.
# For this to work, we need to disable download_dep_fail and sanity_pip_check, as both are _expected_ to fail
# for this setup.
('reframe', version, {
# Deps are downloaded to %(installdir)/external, which won't polute the PYTHONPATH, so is ok
'download_dep_fail': False,
# ReFrame uses its custom sys.path to find necessary packages, they are not on PYTYHONPATH
# Thus, the regular pip sanity check is expected to fail, even if ReFrame would run just fine
'sanity_pip_check': False,
# Set modulename to False, as to skip the sanity_check-step from extension.py (python -c "import reframe")
# This step would fail, since the regular python interpreter wouldn't find the additional packages in
# %(installdir)/external. That's fine, as ReFrame should never be imported directly, only through the
# reframe command.
'modulename': False,
'preinstallopts': "export PATH=%(installdir)s/bin:$PATH && "
"./bootstrap.sh +docs +pygelf && cp --recursive external %(installdir)s && ",
'source_tmpl': 'v%(version)s.tar.gz',
'source_urls': ['https://github.com/reframe-hpc/reframe/archive/'],
'checksums': ['90e04eaaa21afd5c29a9c6218204c3df4503f624f21f2fe773f90e148d30c152'],
}),
]

postinstallcmds = [
"cp --archive tools examples %(installdir)s",
"mkdir --parents %(installdir)s/share && cp --archive share/completions %(installdir)s/share/completions",
r"sed -i 's@/\(python[0-9.]*\)$@/\1 -S@g' %(installdir)s/bin/reframe",
]

sanity_check_paths = {
'files': ['bin/reframe',
'share/completions/reframe.bash',
'share/completions/reframe.fish',
'share/completions/reframe.tcsh'],
'dirs': ['external', 'lib', 'tools', 'examples']
}

sanity_check_commands = ['reframe --version']

moduleclass = 'devel'

0 comments on commit 0243b94

Please sign in to comment.