Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

{devel}[system/system] ReFrame v4.7.1 w/ Python 3.6 #22058

Open
wants to merge 1 commit into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
58 changes: 58 additions & 0 deletions easybuild/easyconfigs/r/ReFrame/ReFrame-4.7.1-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.1'

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': ['ed693368d8b47327981a0db2b984c88d7dd703add1ffe736c95f9193ef727baf'],
}),
]

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.1-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.1'

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': ['ed693368d8b47327981a0db2b984c88d7dd703add1ffe736c95f9193ef727baf'],
}),
]

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.1-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.1'
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': ['ed693368d8b47327981a0db2b984c88d7dd703add1ffe736c95f9193ef727baf'],
}),
]

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.1.eb
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
easyblock = 'PythonBundle'

name = 'ReFrame'
version = '4.7.1'

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': ['ed693368d8b47327981a0db2b984c88d7dd703add1ffe736c95f9193ef727baf'],
}),
]

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'