diff --git a/test/framework/docs.py b/test/framework/docs.py index 6a5e069ed0..4b281df14a 100644 --- a/test/framework/docs.py +++ b/test/framework/docs.py @@ -43,19 +43,35 @@ LIST_EASYBLOCKS_SIMPLE_TXT = """EasyBlock |-- bar +|-- Bundle +|-- CMakeMake +|-- CmdCp |-- ConfigureMake | |-- MakeCp +|-- EB_binutils +|-- EB_bzip2 +|-- EB_CMake |-- EB_EasyBuildMeta |-- EB_FFTW +|-- EB_FFTW_period_MPI +|-- EB_flex |-- EB_foo | |-- EB_foofoo +|-- EB_freetype |-- EB_GCC |-- EB_HPL |-- EB_libtoy +|-- EB_libxml2 +|-- EB_LLVM +|-- EB_Mesa |-- EB_OpenBLAS |-- EB_OpenMPI +|-- EB_OpenSSL_wrapper +|-- EB_Perl +|-- EB_Python |-- EB_ScaLAPACK |-- EB_toy_buggy +|-- EB_XCrySDen |-- ExtensionEasyBlock | |-- DummyExtension | | |-- CustomDummyExtension @@ -67,8 +83,12 @@ | | |-- EB_toy_eula | | |-- EB_toytoy | |-- Toy_Extension +|-- MesonNinja |-- ModuleRC +|-- PerlBundle |-- PythonBundle +|-- PythonPackage +|-- Tarball |-- Toolchain Extension |-- ExtensionEasyBlock @@ -85,19 +105,35 @@ LIST_EASYBLOCKS_DETAILED_TXT = """EasyBlock (easybuild.framework.easyblock) |-- bar (easybuild.easyblocks.generic.bar @ %(topdir)s/generic/bar.py) +|-- Bundle (easybuild.easyblocks.generic.bundle @ %(topdir)s/generic/bundle.py) +|-- CMakeMake (easybuild.easyblocks.generic.cmakemake @ %(topdir)s/generic/cmakemake.py) +|-- CmdCp (easybuild.easyblocks.generic.cmdcp @ %(topdir)s/generic/cmdcp.py) |-- ConfigureMake (easybuild.easyblocks.generic.configuremake @ %(topdir)s/generic/configuremake.py) | |-- MakeCp (easybuild.easyblocks.generic.makecp @ %(topdir)s/generic/makecp.py) +|-- EB_binutils (easybuild.easyblocks.binutils @ %(topdir)s/b/binutils.py) +|-- EB_bzip2 (easybuild.easyblocks.bzip2 @ %(topdir)s/b/bzip2.py) +|-- EB_CMake (easybuild.easyblocks.cmake @ %(topdir)s/c/cmake.py) |-- EB_EasyBuildMeta (easybuild.easyblocks.easybuildmeta @ %(topdir)s/e/easybuildmeta.py) |-- EB_FFTW (easybuild.easyblocks.fftw @ %(topdir)s/f/fftw.py) +|-- EB_FFTW_period_MPI (easybuild.easyblocks.fftwmpi @ %(topdir)s/f/fftwmpi.py) +|-- EB_flex (easybuild.easyblocks.flex @ %(topdir)s/f/flex.py) |-- EB_foo (easybuild.easyblocks.foo @ %(topdir)s/f/foo.py) | |-- EB_foofoo (easybuild.easyblocks.foofoo @ %(topdir)s/f/foofoo.py) +|-- EB_freetype (easybuild.easyblocks.freetype @ %(topdir)s/f/freetype.py) |-- EB_GCC (easybuild.easyblocks.gcc @ %(topdir)s/g/gcc.py) |-- EB_HPL (easybuild.easyblocks.hpl @ %(topdir)s/h/hpl.py) |-- EB_libtoy (easybuild.easyblocks.libtoy @ %(topdir)s/l/libtoy.py) +|-- EB_libxml2 (easybuild.easyblocks.libxml2 @ %(topdir)s/l/libxml2.py) +|-- EB_LLVM (easybuild.easyblocks.llvm @ %(topdir)s/l/llvm.py) +|-- EB_Mesa (easybuild.easyblocks.mesa @ %(topdir)s/m/mesa.py) |-- EB_OpenBLAS (easybuild.easyblocks.openblas @ %(topdir)s/o/openblas.py) |-- EB_OpenMPI (easybuild.easyblocks.openmpi @ %(topdir)s/o/openmpi.py) +|-- EB_OpenSSL_wrapper (easybuild.easyblocks.openssl_wrapper @ %(topdir)s/o/openssl_wrapper.py) +|-- EB_Perl (easybuild.easyblocks.perl @ %(topdir)s/p/perl.py) +|-- EB_Python (easybuild.easyblocks.python @ %(topdir)s/p/python.py) |-- EB_ScaLAPACK (easybuild.easyblocks.scalapack @ %(topdir)s/s/scalapack.py) |-- EB_toy_buggy (easybuild.easyblocks.toy_buggy @ %(topdir)s/t/toy_buggy.py) +|-- EB_XCrySDen (easybuild.easyblocks.xcrysden @ %(topdir)s/x/xcrysden.py) |-- ExtensionEasyBlock (easybuild.framework.extensioneasyblock ) | |-- DummyExtension (easybuild.easyblocks.generic.dummyextension @ %(topdir)s/generic/dummyextension.py) | | |-- CustomDummyExtension (easybuild.easyblocks.generic.customdummyextension @ %(topdir)s/generic/customdummyextension.py) @@ -109,8 +145,12 @@ | | |-- EB_toy_eula (easybuild.easyblocks.toy_eula @ %(topdir)s/t/toy_eula.py) | | |-- EB_toytoy (easybuild.easyblocks.toytoy @ %(topdir)s/t/toytoy.py) | |-- Toy_Extension (easybuild.easyblocks.generic.toy_extension @ %(topdir)s/generic/toy_extension.py) +|-- MesonNinja (easybuild.easyblocks.generic.mesonninja @ %(topdir)s/generic/mesonninja.py) |-- ModuleRC (easybuild.easyblocks.generic.modulerc @ %(topdir)s/generic/modulerc.py) +|-- PerlBundle (easybuild.easyblocks.generic.perlbundle @ %(topdir)s/generic/perlbundle.py) |-- PythonBundle (easybuild.easyblocks.generic.pythonbundle @ %(topdir)s/generic/pythonbundle.py) +|-- PythonPackage (easybuild.easyblocks.generic.pythonpackage @ %(topdir)s/generic/pythonpackage.py) +|-- Tarball (easybuild.easyblocks.generic.tarball @ %(topdir)s/generic/tarball.py) |-- Toolchain (easybuild.easyblocks.generic.toolchain @ %(topdir)s/generic/toolchain.py) Extension (easybuild.framework.extension) |-- ExtensionEasyBlock (easybuild.framework.extensioneasyblock ) @@ -128,23 +168,39 @@ LIST_EASYBLOCKS_SIMPLE_RST = """* **EasyBlock** * bar + * Bundle + * CMakeMake + * CmdCp * ConfigureMake * MakeCp + * EB_binutils + * EB_bzip2 + * EB_CMake * EB_EasyBuildMeta * EB_FFTW + * EB_FFTW_period_MPI + * EB_flex * EB_foo * EB_foofoo + * EB_freetype * EB_GCC * EB_HPL * EB_libtoy + * EB_libxml2 + * EB_LLVM + * EB_Mesa * EB_OpenBLAS * EB_OpenMPI + * EB_OpenSSL_wrapper + * EB_Perl + * EB_Python * EB_ScaLAPACK * EB_toy_buggy + * EB_XCrySDen * ExtensionEasyBlock * DummyExtension @@ -166,8 +222,12 @@ * Toy_Extension + * MesonNinja * ModuleRC + * PerlBundle * PythonBundle + * PythonPackage + * Tarball * Toolchain * **Extension** @@ -198,23 +258,39 @@ LIST_EASYBLOCKS_DETAILED_RST = """* **EasyBlock** (easybuild.framework.easyblock) * bar (easybuild.easyblocks.generic.bar @ %(topdir)s/generic/bar.py) + * Bundle (easybuild.easyblocks.generic.bundle @ %(topdir)s/generic/bundle.py) + * CMakeMake (easybuild.easyblocks.generic.cmakemake @ %(topdir)s/generic/cmakemake.py) + * CmdCp (easybuild.easyblocks.generic.cmdcp @ %(topdir)s/generic/cmdcp.py) * ConfigureMake (easybuild.easyblocks.generic.configuremake @ %(topdir)s/generic/configuremake.py) * MakeCp (easybuild.easyblocks.generic.makecp @ %(topdir)s/generic/makecp.py) + * EB_binutils (easybuild.easyblocks.binutils @ %(topdir)s/b/binutils.py) + * EB_bzip2 (easybuild.easyblocks.bzip2 @ %(topdir)s/b/bzip2.py) + * EB_CMake (easybuild.easyblocks.cmake @ %(topdir)s/c/cmake.py) * EB_EasyBuildMeta (easybuild.easyblocks.easybuildmeta @ %(topdir)s/e/easybuildmeta.py) * EB_FFTW (easybuild.easyblocks.fftw @ %(topdir)s/f/fftw.py) + * EB_FFTW_period_MPI (easybuild.easyblocks.fftwmpi @ %(topdir)s/f/fftwmpi.py) + * EB_flex (easybuild.easyblocks.flex @ %(topdir)s/f/flex.py) * EB_foo (easybuild.easyblocks.foo @ %(topdir)s/f/foo.py) * EB_foofoo (easybuild.easyblocks.foofoo @ %(topdir)s/f/foofoo.py) + * EB_freetype (easybuild.easyblocks.freetype @ %(topdir)s/f/freetype.py) * EB_GCC (easybuild.easyblocks.gcc @ %(topdir)s/g/gcc.py) * EB_HPL (easybuild.easyblocks.hpl @ %(topdir)s/h/hpl.py) * EB_libtoy (easybuild.easyblocks.libtoy @ %(topdir)s/l/libtoy.py) + * EB_libxml2 (easybuild.easyblocks.libxml2 @ %(topdir)s/l/libxml2.py) + * EB_LLVM (easybuild.easyblocks.llvm @ %(topdir)s/l/llvm.py) + * EB_Mesa (easybuild.easyblocks.mesa @ %(topdir)s/m/mesa.py) * EB_OpenBLAS (easybuild.easyblocks.openblas @ %(topdir)s/o/openblas.py) * EB_OpenMPI (easybuild.easyblocks.openmpi @ %(topdir)s/o/openmpi.py) + * EB_OpenSSL_wrapper (easybuild.easyblocks.openssl_wrapper @ %(topdir)s/o/openssl_wrapper.py) + * EB_Perl (easybuild.easyblocks.perl @ %(topdir)s/p/perl.py) + * EB_Python (easybuild.easyblocks.python @ %(topdir)s/p/python.py) * EB_ScaLAPACK (easybuild.easyblocks.scalapack @ %(topdir)s/s/scalapack.py) * EB_toy_buggy (easybuild.easyblocks.toy_buggy @ %(topdir)s/t/toy_buggy.py) + * EB_XCrySDen (easybuild.easyblocks.xcrysden @ %(topdir)s/x/xcrysden.py) * ExtensionEasyBlock (easybuild.framework.extensioneasyblock ) * DummyExtension (easybuild.easyblocks.generic.dummyextension @ %(topdir)s/generic/dummyextension.py) @@ -236,8 +312,12 @@ * Toy_Extension (easybuild.easyblocks.generic.toy_extension @ %(topdir)s/generic/toy_extension.py) + * MesonNinja (easybuild.easyblocks.generic.mesonninja @ %(topdir)s/generic/mesonninja.py) * ModuleRC (easybuild.easyblocks.generic.modulerc @ %(topdir)s/generic/modulerc.py) + * PerlBundle (easybuild.easyblocks.generic.perlbundle @ %(topdir)s/generic/perlbundle.py) * PythonBundle (easybuild.easyblocks.generic.pythonbundle @ %(topdir)s/generic/pythonbundle.py) + * PythonPackage (easybuild.easyblocks.generic.pythonpackage @ %(topdir)s/generic/pythonpackage.py) + * Tarball (easybuild.easyblocks.generic.tarball @ %(topdir)s/generic/tarball.py) * Toolchain (easybuild.easyblocks.generic.toolchain @ %(topdir)s/generic/toolchain.py) * **Extension** (easybuild.framework.extension) @@ -267,19 +347,35 @@ LIST_EASYBLOCKS_SIMPLE_MD = """- **EasyBlock** - bar + - Bundle + - CMakeMake + - CmdCp - ConfigureMake - MakeCp + - EB_binutils + - EB_bzip2 + - EB_CMake - EB_EasyBuildMeta - EB_FFTW + - EB_FFTW_period_MPI + - EB_flex - EB_foo - EB_foofoo + - EB_freetype - EB_GCC - EB_HPL - EB_libtoy + - EB_libxml2 + - EB_LLVM + - EB_Mesa - EB_OpenBLAS - EB_OpenMPI + - EB_OpenSSL_wrapper + - EB_Perl + - EB_Python - EB_ScaLAPACK - EB_toy_buggy + - EB_XCrySDen - ExtensionEasyBlock - DummyExtension - CustomDummyExtension @@ -291,8 +387,12 @@ - EB_toy_eula - EB_toytoy - Toy_Extension + - MesonNinja - ModuleRC + - PerlBundle - PythonBundle + - PythonPackage + - Tarball - Toolchain - **Extension** - ExtensionEasyBlock @@ -309,19 +409,35 @@ LIST_EASYBLOCKS_DETAILED_MD = """- **EasyBlock** (easybuild.framework.easyblock) - bar (easybuild.easyblocks.generic.bar @ %(topdir)s/generic/bar.py) + - Bundle (easybuild.easyblocks.generic.bundle @ %(topdir)s/generic/bundle.py) + - CMakeMake (easybuild.easyblocks.generic.cmakemake @ %(topdir)s/generic/cmakemake.py) + - CmdCp (easybuild.easyblocks.generic.cmdcp @ %(topdir)s/generic/cmdcp.py) - ConfigureMake (easybuild.easyblocks.generic.configuremake @ %(topdir)s/generic/configuremake.py) - MakeCp (easybuild.easyblocks.generic.makecp @ %(topdir)s/generic/makecp.py) + - EB_binutils (easybuild.easyblocks.binutils @ %(topdir)s/b/binutils.py) + - EB_bzip2 (easybuild.easyblocks.bzip2 @ %(topdir)s/b/bzip2.py) + - EB_CMake (easybuild.easyblocks.cmake @ %(topdir)s/c/cmake.py) - EB_EasyBuildMeta (easybuild.easyblocks.easybuildmeta @ %(topdir)s/e/easybuildmeta.py) - EB_FFTW (easybuild.easyblocks.fftw @ %(topdir)s/f/fftw.py) + - EB_FFTW_period_MPI (easybuild.easyblocks.fftwmpi @ %(topdir)s/f/fftwmpi.py) + - EB_flex (easybuild.easyblocks.flex @ %(topdir)s/f/flex.py) - EB_foo (easybuild.easyblocks.foo @ %(topdir)s/f/foo.py) - EB_foofoo (easybuild.easyblocks.foofoo @ %(topdir)s/f/foofoo.py) + - EB_freetype (easybuild.easyblocks.freetype @ %(topdir)s/f/freetype.py) - EB_GCC (easybuild.easyblocks.gcc @ %(topdir)s/g/gcc.py) - EB_HPL (easybuild.easyblocks.hpl @ %(topdir)s/h/hpl.py) - EB_libtoy (easybuild.easyblocks.libtoy @ %(topdir)s/l/libtoy.py) + - EB_libxml2 (easybuild.easyblocks.libxml2 @ %(topdir)s/l/libxml2.py) + - EB_LLVM (easybuild.easyblocks.llvm @ %(topdir)s/l/llvm.py) + - EB_Mesa (easybuild.easyblocks.mesa @ %(topdir)s/m/mesa.py) - EB_OpenBLAS (easybuild.easyblocks.openblas @ %(topdir)s/o/openblas.py) - EB_OpenMPI (easybuild.easyblocks.openmpi @ %(topdir)s/o/openmpi.py) + - EB_OpenSSL_wrapper (easybuild.easyblocks.openssl_wrapper @ %(topdir)s/o/openssl_wrapper.py) + - EB_Perl (easybuild.easyblocks.perl @ %(topdir)s/p/perl.py) + - EB_Python (easybuild.easyblocks.python @ %(topdir)s/p/python.py) - EB_ScaLAPACK (easybuild.easyblocks.scalapack @ %(topdir)s/s/scalapack.py) - EB_toy_buggy (easybuild.easyblocks.toy_buggy @ %(topdir)s/t/toy_buggy.py) + - EB_XCrySDen (easybuild.easyblocks.xcrysden @ %(topdir)s/x/xcrysden.py) - ExtensionEasyBlock (easybuild.framework.extensioneasyblock ) - DummyExtension (easybuild.easyblocks.generic.dummyextension @ %(topdir)s/generic/dummyextension.py) - CustomDummyExtension (easybuild.easyblocks.generic.customdummyextension @ %(topdir)s/generic/customdummyextension.py) @@ -333,8 +449,12 @@ - EB_toy_eula (easybuild.easyblocks.toy_eula @ %(topdir)s/t/toy_eula.py) - EB_toytoy (easybuild.easyblocks.toytoy @ %(topdir)s/t/toytoy.py) - Toy_Extension (easybuild.easyblocks.generic.toy_extension @ %(topdir)s/generic/toy_extension.py) + - MesonNinja (easybuild.easyblocks.generic.mesonninja @ %(topdir)s/generic/mesonninja.py) - ModuleRC (easybuild.easyblocks.generic.modulerc @ %(topdir)s/generic/modulerc.py) + - PerlBundle (easybuild.easyblocks.generic.perlbundle @ %(topdir)s/generic/perlbundle.py) - PythonBundle (easybuild.easyblocks.generic.pythonbundle @ %(topdir)s/generic/pythonbundle.py) + - PythonPackage (easybuild.easyblocks.generic.pythonpackage @ %(topdir)s/generic/pythonpackage.py) + - Tarball (easybuild.easyblocks.generic.tarball @ %(topdir)s/generic/tarball.py) - Toolchain (easybuild.easyblocks.generic.toolchain @ %(topdir)s/generic/toolchain.py) - **Extension** (easybuild.framework.extension) - ExtensionEasyBlock (easybuild.framework.extensioneasyblock ) @@ -597,15 +717,22 @@ def test_get_easyblock_classes(self): eb_classes = get_easyblock_classes('easybuild.easyblocks.generic') eb_names = [x.__name__ for x in eb_classes] expected = [ + 'Bundle', + 'CMakeMake', 'ChildCustomDummyExtension', 'ChildDeprecatedDummyExtension', + 'CmdCp', 'ConfigureMake', 'CustomDummyExtension', 'DeprecatedDummyExtension', 'DummyExtension', 'MakeCp', + 'MesonNinja', 'ModuleRC', + 'PerlBundle', 'PythonBundle', + 'PythonPackage', + 'Tarball', 'Toolchain', 'Toy_Extension', 'bar', diff --git a/test/framework/easyconfig.py b/test/framework/easyconfig.py index ebd0e8d40e..21a6066557 100644 --- a/test/framework/easyconfig.py +++ b/test/framework/easyconfig.py @@ -4824,60 +4824,51 @@ def test_det_copy_ec_specs(self): return # use fixed PR (speeds up the test due to caching in fetch_files_from_pr; - # see https://github.com/easybuilders/easybuild-easyconfigs/pull/8007 - from_pr = 8007 - arrow_ec_fn = 'Arrow-0.7.1-intel-2017b-Python-3.6.3.eb' - bat_ec_fn = 'bat-0.3.3-intel-2017b-Python-3.6.3.eb' - bat_patch_fn = 'bat-0.3.3-fix-pyspark.patch' + # see https://github.com/easybuilders/easybuild-easyconfigs/pull/22345 + from_pr = 22345 + ec_fn = 'QuantumESPRESSO-7.4-foss-2024a.eb' + patch_fn = 'QuantumESPRESSO-7.4-parallel-symmetrization.patch' pr_files = [ - arrow_ec_fn, - bat_ec_fn, - bat_patch_fn, + ec_fn, + patch_fn, ] # if no paths are specified, default is to copy all files touched by PR to current working directory paths, target_path = det_copy_ec_specs([], from_pr) - self.assertEqual(len(paths), 3) + self.assertEqual(len(paths), 2) filenames = sorted([os.path.basename(x) for x in paths]) self.assertEqual(filenames, sorted(pr_files)) self.assertTrue(os.path.samefile(target_path, cwd)) # last argument is used as target directory, # unless it corresponds to a file touched by PR - args = [bat_ec_fn, 'target_dir'] + args = [ec_fn, 'target_dir'] paths, target_path = det_copy_ec_specs(args, from_pr) self.assertEqual(len(paths), 1) - self.assertEqual(os.path.basename(paths[0]), bat_ec_fn) + self.assertEqual(os.path.basename(paths[0]), ec_fn) self.assertEqual(target_path, 'target_dir') - args = [bat_ec_fn] + args = [ec_fn] paths, target_path = det_copy_ec_specs(args, from_pr) self.assertEqual(len(paths), 1) - self.assertEqual(os.path.basename(paths[0]), bat_ec_fn) - self.assertTrue(os.path.samefile(target_path, cwd)) - - args = [arrow_ec_fn, bat_ec_fn] - paths, target_path = det_copy_ec_specs(args, from_pr) - self.assertEqual(len(paths), 2) - self.assertEqual(os.path.basename(paths[0]), arrow_ec_fn) - self.assertEqual(os.path.basename(paths[1]), bat_ec_fn) + self.assertEqual(os.path.basename(paths[0]), ec_fn) self.assertTrue(os.path.samefile(target_path, cwd)) - args = [bat_ec_fn, bat_patch_fn] + args = [ec_fn, patch_fn] paths, target_path = det_copy_ec_specs(args, from_pr) self.assertEqual(len(paths), 2) - self.assertEqual(os.path.basename(paths[0]), bat_ec_fn) - self.assertEqual(os.path.basename(paths[1]), bat_patch_fn) + self.assertEqual(os.path.basename(paths[0]), ec_fn) + self.assertEqual(os.path.basename(paths[1]), patch_fn) self.assertTrue(os.path.samefile(target_path, cwd)) # also test with combination of local files and files from PR - args = [arrow_ec_fn, 'test.eb', 'test.patch', bat_patch_fn] + args = [ec_fn, 'test.eb', 'test.patch', patch_fn] paths, target_path = det_copy_ec_specs(args, from_pr) self.assertEqual(len(paths), 4) - self.assertEqual(os.path.basename(paths[0]), arrow_ec_fn) + self.assertEqual(os.path.basename(paths[0]), ec_fn) self.assertEqual(paths[1], 'test.eb') self.assertEqual(paths[2], 'test.patch') - self.assertEqual(os.path.basename(paths[3]), bat_patch_fn) + self.assertEqual(os.path.basename(paths[3]), patch_fn) self.assertTrue(os.path.samefile(target_path, cwd)) def test_recursive_module_unload(self): diff --git a/test/framework/github.py b/test/framework/github.py index d8bacfdcf6..ea862afb05 100644 --- a/test/framework/github.py +++ b/test/framework/github.py @@ -252,25 +252,21 @@ def test_github_add_pr_labels(self): build_options['pr_target_repo'] = GITHUB_EASYCONFIGS_REPO init_config(build_options=build_options) - # PR #11262 includes easyconfigs that use 'dummy' toolchain, - # so we need to allow triggering deprecated behaviour - self.allow_deprecated_behaviour() - self.mock_stdout(True) self.mock_stderr(True) - gh.add_pr_labels(11262) + gh.add_pr_labels(22380) stdout = self.get_stdout() self.mock_stdout(False) self.mock_stderr(False) - self.assertIn("Could not determine any missing labels for PR #11262", stdout) + self.assertIn("Could not determine any missing labels for PR #22380", stdout) self.mock_stdout(True) self.mock_stderr(True) - gh.add_pr_labels(8006) # closed, unmerged, unlabeled PR + gh.add_pr_labels(22088) # closed, unmerged, unlabeled PR stdout = self.get_stdout() self.mock_stdout(False) self.mock_stderr(False) - self.assertIn("PR #8006 should be labelled 'update'", stdout) + self.assertIn("Could not determine any missing labels for PR #22088", stdout) def test_github_fetch_pr_data(self): """Test fetch_pr_data function.""" @@ -410,16 +406,17 @@ def test_github_fetch_easyblocks_from_pr(self): 'pr_target_account': gh.GITHUB_EB_MAIN, }) + # TODO: no 5.x PRs for new easyblocks # PR with new easyblock plus non-easyblock file - all_ebs_pr1964 = ['lammps.py'] + # all_ebs_pr1964 = ['lammps.py'] # PR with changed easyblock - all_ebs_pr1967 = ['siesta.py'] + all_ebs_pr3631 = ['root.py'] # PR with more than one easyblock - all_ebs_pr1949 = ['configuremake.py', 'rpackage.py'] + all_ebs_pr3596 = ['wps.py', 'wrf.py'] - for pr, all_ebs in [(1964, all_ebs_pr1964), (1967, all_ebs_pr1967), (1949, all_ebs_pr1949)]: + for pr, all_ebs in [(3631, all_ebs_pr3631), (3596, all_ebs_pr3596)]: try: tmpdir = os.path.join(self.test_prefix, 'pr%s' % pr) with self.mocked_stdout_stderr(): @@ -438,40 +435,26 @@ def test_github_fetch_easyconfigs_from_pr(self): 'pr_target_account': gh.GITHUB_EB_MAIN, }) - # PR for rename of arrow to Arrow, - # see https://github.com/easybuilders/easybuild-easyconfigs/pull/8007/files - all_ecs_pr8007 = [ - 'Arrow-0.7.1-intel-2017b-Python-3.6.3.eb', - 'bat-0.3.3-fix-pyspark.patch', - 'bat-0.3.3-intel-2017b-Python-3.6.3.eb', + # PR for XCrySDen, + # see https://github.com/easybuilders/easybuild-easyconfigs/pull/22227/files + all_ecs_pr22227 = [ + 'bwidget-1.10.1-GCCcore-13.3.0.eb', + 'quarto-1.5.57-x64.eb', + 'Sabre-2013-09-28-GCC-13.3.0.eb', + 'Togl-2.0-GCCcore-13.3.0.eb', + 'XCrySDen-1.6.2-foss-2024a.eb', ] - # PR where also files are patched in test/ - # see https://github.com/easybuilders/easybuild-easyconfigs/pull/6587/files - all_ecs_pr6587 = [ - 'WIEN2k-18.1-foss-2018a.eb', - 'WIEN2k-18.1-gimkl-2017a.eb', - 'WIEN2k-18.1-intel-2018a.eb', - 'libxc-4.2.3-foss-2018a.eb', - 'libxc-4.2.3-gimkl-2017a.eb', - 'libxc-4.2.3-intel-2018a.eb', + # PR where only files are patched in test/ + # see https://github.com/easybuilders/easybuild-easyconfigs/pull/22061/files + all_ecs_pr22061 = [ ] - # PR where files are renamed - # see https://github.com/easybuilders/easybuild-easyconfigs/pull/7159/files - all_ecs_pr7159 = [ - 'DOLFIN-2018.1.0.post1-foss-2018a-Python-3.6.4.eb', - 'OpenFOAM-5.0-20180108-foss-2018a.eb', - 'OpenFOAM-5.0-20180108-intel-2018a.eb', - 'OpenFOAM-6-foss-2018b.eb', - 'OpenFOAM-6-intel-2018a.eb', - 'OpenFOAM-v1806-foss-2018b.eb', - 'PETSc-3.9.3-foss-2018a.eb', - 'SCOTCH-6.0.6-foss-2018a.eb', - 'SCOTCH-6.0.6-foss-2018b.eb', - 'SCOTCH-6.0.6-intel-2018a.eb', - 'Trilinos-12.12.1-foss-2018a-Python-3.6.4.eb' + # PR where files are unarchived + # see https://github.com/easybuilders/easybuild-easyconfigs/pull/19834/files + all_ecs_pr19834 = [ + 'Gblocks-0.91b.eb', ] - for pr, all_ecs in [(8007, all_ecs_pr8007), (6587, all_ecs_pr6587), (7159, all_ecs_pr7159)]: + for pr, all_ecs in [(22227, all_ecs_pr22227), (22061, all_ecs_pr22061), (19834, all_ecs_pr19834)]: try: tmpdir = os.path.join(self.test_prefix, 'pr%s' % pr) with self.mocked_stdout_stderr(): @@ -494,36 +477,30 @@ def test_github_fetch_files_from_pr_cache(self): gh.fetch_files_from_pr.clear_cache() self.assertFalse(gh.fetch_files_from_pr._cache) - pr7159_filenames = [ - 'DOLFIN-2018.1.0.post1-foss-2018a-Python-3.6.4.eb', - 'OpenFOAM-5.0-20180108-foss-2018a.eb', - 'OpenFOAM-5.0-20180108-intel-2018a.eb', - 'OpenFOAM-6-foss-2018b.eb', - 'OpenFOAM-6-intel-2018a.eb', - 'OpenFOAM-v1806-foss-2018b.eb', - 'PETSc-3.9.3-foss-2018a.eb', - 'SCOTCH-6.0.6-foss-2018a.eb', - 'SCOTCH-6.0.6-foss-2018b.eb', - 'SCOTCH-6.0.6-intel-2018a.eb', - 'Trilinos-12.12.1-foss-2018a-Python-3.6.4.eb' + pr22227_filenames = [ + 'bwidget-1.10.1-GCCcore-13.3.0.eb', + 'quarto-1.5.57-x64.eb', + 'Sabre-2013-09-28-GCC-13.3.0.eb', + 'Togl-2.0-GCCcore-13.3.0.eb', + 'XCrySDen-1.6.2-foss-2024a.eb', ] with self.mocked_stdout_stderr(): - pr7159_files = gh.fetch_easyconfigs_from_pr(7159, path=self.test_prefix, github_user=GITHUB_TEST_ACCOUNT) - self.assertEqual(sorted(pr7159_filenames), sorted(os.path.basename(f) for f in pr7159_files)) + pr22227_files = gh.fetch_easyconfigs_from_pr(22227, path=self.test_prefix, github_user=GITHUB_TEST_ACCOUNT) + self.assertEqual(sorted(pr22227_filenames), sorted(os.path.basename(f) for f in pr22227_files)) - # check that cache has been populated for PR 7159 + # check that cache has been populated for PR 22227 self.assertEqual(len(gh.fetch_files_from_pr._cache.keys()), 1) # github_account value is None (results in using default 'easybuilders') - cache_key = (7159, None, 'easybuild-easyconfigs', self.test_prefix) + cache_key = (22227, None, 'easybuild-easyconfigs', self.test_prefix) self.assertIn(cache_key, gh.fetch_files_from_pr._cache.keys()) cache_entry = gh.fetch_files_from_pr._cache[cache_key] - self.assertEqual(sorted([os.path.basename(f) for f in cache_entry]), sorted(pr7159_filenames)) + self.assertEqual(sorted([os.path.basename(f) for f in cache_entry]), sorted(pr22227_filenames)) # same query should return result from cache entry - res = gh.fetch_easyconfigs_from_pr(7159, path=self.test_prefix, github_user=GITHUB_TEST_ACCOUNT) - self.assertEqual(res, pr7159_files) + res = gh.fetch_easyconfigs_from_pr(22227, path=self.test_prefix, github_user=GITHUB_TEST_ACCOUNT) + self.assertEqual(res, pr22227_files) # inject entry in cache and check result of matching query pr_id = 12345 diff --git a/test/framework/options.py b/test/framework/options.py index d425cb3412..4b561d9b2f 100644 --- a/test/framework/options.py +++ b/test/framework/options.py @@ -1443,60 +1443,59 @@ def test_github_copy_ec_from_pr(self): # Make sure the test target directory doesn't exist remove_dir(test_target_dir) - all_files_pr8007 = [ - 'Arrow-0.7.1-intel-2017b-Python-3.6.3.eb', - 'bat-0.3.3-fix-pyspark.patch', - 'bat-0.3.3-intel-2017b-Python-3.6.3.eb', + all_files_pr22345 = [ + 'QuantumESPRESSO-7.4-foss-2024a.eb', + 'QuantumESPRESSO-7.4-parallel-symmetrization.patch', ] # test use of --copy-ec with --from-pr to the current working directory cwd = change_dir(test_working_dir) - args = ['--copy-ec', '--from-pr', '8007'] + args = ['--copy-ec', '--from-pr', '22345'] stdout = self.mocked_main(args) - regex = re.compile(r"3 file\(s\) copied to .*/%s" % os.path.basename(test_working_dir)) + regex = re.compile(r"2 file\(s\) copied to .*/%s" % os.path.basename(test_working_dir)) self.assertTrue(regex.search(stdout), "Pattern '%s' should be found in: %s" % (regex.pattern, stdout)) # check that the files exist - for pr_file in all_files_pr8007: + for pr_file in all_files_pr22345: self.assertExists(os.path.join(test_working_dir, pr_file)) remove_file(os.path.join(test_working_dir, pr_file)) # copying all files touched by PR to a non-existing target directory (which is created automatically) self.assertNotExists(test_target_dir) - args = ['--copy-ec', '--from-pr', '8007', test_target_dir] + args = ['--copy-ec', '--from-pr', '22345', test_target_dir] stdout = self.mocked_main(args) - regex = re.compile(r"3 file\(s\) copied to .*/%s" % os.path.basename(test_target_dir)) + regex = re.compile(r"2 file\(s\) copied to .*/%s" % os.path.basename(test_target_dir)) self.assertTrue(regex.search(stdout), "Pattern '%s' should be found in: %s" % (regex.pattern, stdout)) - for pr_file in all_files_pr8007: + for pr_file in all_files_pr22345: self.assertExists(os.path.join(test_target_dir, pr_file)) remove_dir(test_target_dir) # test where we select a single easyconfig file from a PR mkdir(test_target_dir) - ec_filename = 'bat-0.3.3-intel-2017b-Python-3.6.3.eb' - args = ['--copy-ec', '--from-pr', '8007', ec_filename, test_target_dir] + ec_filename = 'QuantumESPRESSO-7.4-foss-2024a.eb' + args = ['--copy-ec', '--from-pr', '22345', ec_filename, test_target_dir] stdout = self.mocked_main(args) regex = re.compile(r"%s copied to .*/%s" % (ec_filename, os.path.basename(test_target_dir))) self.assertTrue(regex.search(stdout), "Pattern '%s' should be found in: %s" % (regex.pattern, stdout)) self.assertEqual(os.listdir(test_target_dir), [ec_filename]) - self.assertIn("name = 'bat'", read_file(os.path.join(test_target_dir, ec_filename))) + self.assertIn("name = 'QuantumESPRESSO'", read_file(os.path.join(test_target_dir, ec_filename))) remove_dir(test_target_dir) # test copying of a single easyconfig file from a PR to a non-existing path - bat_ec = os.path.join(self.test_prefix, 'bat.eb') - args[-1] = bat_ec + environ_ec = os.path.join(self.test_prefix, 'QuantumESPRESSO.eb') + args[-1] = environ_ec stdout = self.mocked_main(args) - regex = re.compile(r"%s copied to .*/bat.eb" % ec_filename) + regex = re.compile(r"%s copied to .*/QuantumESPRESSO.eb" % ec_filename) self.assertTrue(regex.search(stdout), "Pattern '%s' should be found in: %s" % (regex.pattern, stdout)) - self.assertExists(bat_ec) - self.assertIn("name = 'bat'", read_file(bat_ec)) + self.assertExists(environ_ec) + self.assertIn("name = 'QuantumESPRESSO'", read_file(environ_ec)) change_dir(cwd) remove_dir(test_working_dir) @@ -1504,8 +1503,8 @@ def test_github_copy_ec_from_pr(self): change_dir(test_working_dir) # test copying of a patch file from a PR via --copy-ec to current directory - patch_fn = 'bat-0.3.3-fix-pyspark.patch' - args = ['--copy-ec', '--from-pr', '8007', patch_fn, '.'] + patch_fn = 'QuantumESPRESSO-7.4-parallel-symmetrization.patch' + args = ['--copy-ec', '--from-pr', '22345', patch_fn, '.'] stdout = self.mocked_main(args) self.assertEqual(os.listdir(test_working_dir), [patch_fn]) @@ -1516,18 +1515,18 @@ def test_github_copy_ec_from_pr(self): # test the same thing but where we don't provide a target location change_dir(test_working_dir) - args = ['--copy-ec', '--from-pr', '8007', ec_filename] + args = ['--copy-ec', '--from-pr', '22345', ec_filename] stdout = self.mocked_main(args) regex = re.compile(r"%s copied to .*/%s" % (ec_filename, os.path.basename(test_working_dir))) self.assertTrue(regex.search(stdout), "Pattern '%s' should be found in: %s" % (regex.pattern, stdout)) self.assertEqual(os.listdir(test_working_dir), [ec_filename]) - self.assertIn("name = 'bat'", read_file(os.path.join(test_working_dir, ec_filename))) + self.assertIn("name = 'QuantumESPRESSO'", read_file(os.path.join(test_working_dir, ec_filename))) # also test copying of patch file to current directory (without specifying target location) change_dir(test_working_dir) - args = ['--copy-ec', '--from-pr', '8007', patch_fn] + args = ['--copy-ec', '--from-pr', '22345', patch_fn] stdout = self.mocked_main(args) regex = re.compile(r"%s copied to .*/%s" % (patch_fn, os.path.basename(test_working_dir))) @@ -1541,13 +1540,13 @@ def test_github_copy_ec_from_pr(self): # test with only one ec in the PR (final argument is taken as a filename) test_ec = os.path.join(self.test_prefix, 'test.eb') - args = ['--copy-ec', '--from-pr', '11521', test_ec] - ec_pr11521 = "ExifTool-12.00-GCCcore-9.3.0.eb" + args = ['--copy-ec', '--from-pr', '22380', test_ec] + ec_pr22380 = "PySide2-5.14.2.3-GCCcore-10.2.0.eb" stdout = self.mocked_main(args) - regex = re.compile(r'.*/%s copied to %s' % (ec_pr11521, test_ec)) + regex = re.compile(r'.*/%s copied to %s' % (ec_pr22380, test_ec)) self.assertTrue(regex.search(stdout), "Pattern '%s' found in: %s" % (regex.pattern, stdout)) self.assertExists(test_ec) - self.assertIn("name = 'ExifTool'", read_file(test_ec)) + self.assertIn("name = 'PySide2'", read_file(test_ec)) remove_file(test_ec) def test_copy_ec_from_commit(self): @@ -2084,8 +2083,8 @@ def test_github_from_pr(self): tmpdir = tempfile.mkdtemp() args = [ - # PR for foss/2018b, see https://github.com/easybuilders/easybuild-easyconfigs/pull/6424/files - '--from-pr=6424', + # PR for XCrySDen/1.6.2-foss-2024a, see https://github.com/easybuilders/easybuild-easyconfigs/pull/22227 + '--from-pr=22227', '--dry-run', # an argument must be specified to --robot, since easybuild-easyconfigs may not be installed '--robot=%s' % os.path.join(os.path.dirname(__file__), 'easyconfigs'), @@ -2097,15 +2096,7 @@ def test_github_from_pr(self): with self.mocked_stdout_stderr(): outtxt = self.eb_main(args, logfile=dummylogfn, raise_error=True) modules = [ - (tmpdir, 'FFTW/3.3.8-gompi-2018b'), - (tmpdir, 'foss/2018b'), - ('.*', 'GCC/7.3.0-2.30'), # not included in PR - (tmpdir, 'gompi/2018b'), - (tmpdir, 'HPL/2.2-foss-2018b'), - ('.*', 'hwloc/1.11.8-GCC-7.3.0-2.30'), - ('.*', 'OpenBLAS/0.3.1-GCC-7.3.0-2.30'), - ('.*', 'OpenMPI/3.1.1-GCC-7.3.0-2.30'), - (tmpdir, 'ScaLAPACK/2.0.2-gompi-2018b-OpenBLAS-0.3.1'), + (tmpdir, 'XCrySDen/1.6.2-foss-2024a'), ] for path_prefix, module in modules: ec_fn = "%s.eb" % '-'.join(module.split('/')) @@ -2113,11 +2104,7 @@ def test_github_from_pr(self): regex = re.compile(r"^ \* \[.\] %s.*%s \(module: %s\)$" % (path, ec_fn, module), re.M) self.assertTrue(regex.search(outtxt), "Found pattern %s in %s" % (regex.pattern, outtxt)) - # make sure that *only* these modules are listed, no others - regex = re.compile(r"^ \* \[.\] .*/(?P.*) \(module: (?P.*)\)$", re.M) - self.assertEqual(sorted(x[1] for x in regex.findall(outtxt)), sorted(x[1] for x in modules)) - - pr_tmpdir = os.path.join(tmpdir, r'eb-\S{6,8}', 'files_pr6424') + pr_tmpdir = os.path.join(tmpdir, r'eb-\S{6,8}', 'files_pr22227') regex = re.compile(r"Extended list of robot search paths with \['%s'\]:" % pr_tmpdir, re.M) self.assertTrue(regex.search(outtxt), "Found pattern %s in %s" % (regex.pattern, outtxt)) except URLError as err: @@ -2127,8 +2114,8 @@ def test_github_from_pr(self): # test with multiple prs tmpdir = tempfile.mkdtemp() args = [ - # PRs for ReFrame 3.4.1 and 3.5.0 - '--from-pr=12150,12366', + # PRs for various easyconfigs + '--from-pr=22227,19834', '--dry-run', # an argument must be specified to --robot, since easybuild-easyconfigs may not be installed '--robot=%s' % os.path.join(os.path.dirname(__file__), 'easyconfigs'), @@ -2140,8 +2127,8 @@ def test_github_from_pr(self): with self.mocked_stdout_stderr(): outtxt = self.eb_main(args, logfile=dummylogfn, raise_error=True) modules = [ - (tmpdir, 'ReFrame/3.4.1'), - (tmpdir, 'ReFrame/3.5.0'), + (tmpdir, 'quarto/1.5.57-x64'), + (tmpdir, 'Gblocks/0.91b'), ] for path_prefix, module in modules: ec_fn = "%s.eb" % '-'.join(module.split('/')) @@ -2149,11 +2136,7 @@ def test_github_from_pr(self): regex = re.compile(r"^ \* \[.\] %s.*%s \(module: %s\)$" % (path, ec_fn, module), re.M) self.assertTrue(regex.search(outtxt), "Found pattern %s in %s" % (regex.pattern, outtxt)) - # make sure that *only* these modules are listed, no others - regex = re.compile(r"^ \* \[.\] .*/(?P.*) \(module: (?P.*)\)$", re.M) - self.assertEqual(sorted(x[1] for x in regex.findall(outtxt)), sorted(x[1] for x in modules)) - - for pr in ('12150', '12366'): + for pr in ('22227', '19834'): pr_tmpdir = os.path.join(tmpdir, r'eb-\S{6,8}', 'files_pr%s' % pr) regex = re.compile(r"Extended list of robot search paths with .*%s.*:" % pr_tmpdir, re.M) self.assertTrue(regex.search(outtxt), "Found pattern '%s' in: %s" % (regex.pattern, outtxt)) @@ -2172,8 +2155,8 @@ def test_github_from_pr_token_log(self): os.close(fd) args = [ - # PR for foss/2018b, see https://github.com/easybuilders/easybuild-easyconfigs/pull/6424/files - '--from-pr=6424', + # PR for XCrySDen/1.6.2-foss-2024a, see https://github.com/easybuilders/easybuild-easyconfigs/pull/22227 + '--from-pr=22227', '--dry-run', '--debug', # an argument must be specified to --robot, since easybuild-easyconfigs may not be installed @@ -2216,10 +2199,10 @@ def test_github_from_pr_listed_ecs(self): tmpdir = tempfile.mkdtemp() args = [ 'toy-0.0.eb', - 'gompi-2018b.eb', # also pulls in GCC, OpenMPI (which pulls in hwloc) + 'XCrySDen-1.6.2-foss-2024a.eb', 'GCC-4.6.3.eb', - # PR for foss/2018b, see https://github.com/easybuilders/easybuild-easyconfigs/pull/6424/files - '--from-pr=6424', + # PR for XCrySDen/1.6.2-foss-2024a, see https://github.com/easybuilders/easybuild-easyconfigs/pull/22227 + '--from-pr=22227', '--dry-run', # an argument must be specified to --robot, since easybuild-easyconfigs may not be installed '--robot=%s' % test_ecs_path, @@ -2232,10 +2215,8 @@ def test_github_from_pr_listed_ecs(self): outtxt = self.eb_main(args, logfile=dummylogfn, raise_error=True) modules = [ (test_ecs_path, 'toy/0.0'), # not included in PR - (test_ecs_path, 'GCC/7.3.0-2.30'), # not included in PR, available locally - (test_ecs_path, 'hwloc/1.11.8-GCC-7.3.0-2.30'), - (test_ecs_path, 'OpenMPI/3.1.1-GCC-7.3.0-2.30'), - ('.*%s' % os.path.dirname(tmpdir), 'gompi/2018b'), + ('.*%s' % os.path.dirname(tmpdir), 'XCrySDen/1.6.2-foss-2024a'), + ('.*%s' % os.path.dirname(tmpdir), 'Togl/2.0-GCCcore-13.3.0'), (test_ecs_path, 'GCC/4.6.3'), # not included in PR, available locally ] for path_prefix, module in modules: @@ -2261,19 +2242,15 @@ def test_github_from_pr_x(self): os.close(fd) args = [ - # PR for foss/2018b, see https://github.com/easybuilders/easybuild-easyconfigs/pull/6424/files - '--from-pr=6424', - 'FFTW-3.3.8-gompi-2018b.eb', + # PR for XCrySDen/1.6.2-foss-2024a, see https://github.com/easybuilders/easybuild-easyconfigs/pull/22227 + '--from-pr=22227', + 'XCrySDen-1.6.2-foss-2024a.eb', # an argument must be specified to --robot, since easybuild-easyconfigs may not be installed '--github-user=%s' % GITHUB_TEST_ACCOUNT, # a GitHub token should be available for this user '--tmpdir=%s' % self.test_prefix, '--extended-dry-run', ] try: - # PR #6424 includes easyconfigs that use 'dummy' toolchain, - # so we need to allow triggering deprecated behaviour - self.allow_deprecated_behaviour() - self.mock_stderr(True) # just to capture deprecation warning self.mock_stdout(True) self.mock_stderr(True) @@ -2284,8 +2261,8 @@ def test_github_from_pr_x(self): msg_regexs = [ re.compile(r"^== Build succeeded for 1 out of 1", re.M), - re.compile(r"^\*\*\* DRY RUN using 'EB_FFTW' easyblock", re.M), - re.compile(r"^== building and installing FFTW/3.3.8-gompi-2018b\.\.\.", re.M), + re.compile(r"^\*\*\* DRY RUN using 'EB_XCrySDen' easyblock", re.M), + re.compile(r"^== building and installing XCrySDen/1.6.2-foss-2024a\.\.\.", re.M), re.compile(r"^building... \[DRY RUN\]", re.M), re.compile(r"^== COMPLETED: Installation ended successfully \(took .* secs?\)", re.M), ] @@ -3956,7 +3933,7 @@ def test_github_xxx_include_easyblocks_from_pr(self): args = [ '--include-easyblocks=%s/*.py' % self.test_prefix, # this shouldn't interfere - '--include-easyblocks-from-pr=1915', # a PR for CMakeMake easyblock + '--include-easyblocks-from-pr=3399', # a PR for CMakeMake easyblock '--list-easyblocks=detailed', '--unittest-file=%s' % self.logfile, '--github-user=%s' % GITHUB_TEST_ACCOUNT, @@ -3970,7 +3947,7 @@ def test_github_xxx_include_easyblocks_from_pr(self): logtxt = read_file(self.logfile) self.assertFalse(stderr) - self.assertEqual(stdout, "== easyblock cmakemake.py included from PR #1915\n") + self.assertEqual(stdout, "== easyblock cmakemake.py included from PR #3399\n") # easyblock included from pr is found path_pattern = os.path.join(self.test_prefix, '.*', 'included-easyblocks-.*', 'easybuild', 'easyblocks') @@ -4000,7 +3977,7 @@ def test_github_xxx_include_easyblocks_from_pr(self): # including the same easyblock twice should work and give priority to the one from the PR args = [ '--include-easyblocks=%s/*.py' % self.test_prefix, - '--include-easyblocks-from-pr=1915', + '--include-easyblocks-from-pr=3399', '--list-easyblocks=detailed', '--unittest-file=%s' % self.logfile, '--github-user=%s' % GITHUB_TEST_ACCOUNT, @@ -4014,9 +3991,9 @@ def test_github_xxx_include_easyblocks_from_pr(self): logtxt = read_file(self.logfile) expected = "WARNING: One or more easyblocks included from multiple locations: " - expected += "cmakemake.py (the one(s) from PR #1915 will be used)" + expected += "cmakemake.py (the one(s) from PR #3399 will be used)" self.assertEqual(stderr.strip(), expected) - self.assertEqual(stdout, "== easyblock cmakemake.py included from PR #1915\n") + self.assertEqual(stdout, "== easyblock cmakemake.py included from PR #3399\n") # easyblock included from pr is found path_pattern = os.path.join(self.test_prefix, '.*', 'included-easyblocks-.*', 'easybuild', 'easyblocks') @@ -4050,8 +4027,8 @@ def test_github_xxx_include_easyblocks_from_pr(self): write_file(self.logfile, '') args = [ - '--from-pr=10487', # PR for CMake easyconfig - '--include-easyblocks-from-pr=1936,2204', # PRs for EB_CMake and Siesta easyblock + '--from-pr=22227', # PR for Togl easyconfig + '--include-easyblocks-from-pr=3563,3634', # PRs for ConfigureMake and GROMACS easyblock '--unittest-file=%s' % self.logfile, '--github-user=%s' % GITHUB_TEST_ACCOUNT, '--extended-dry-run', @@ -4065,25 +4042,26 @@ def test_github_xxx_include_easyblocks_from_pr(self): logtxt = read_file(self.logfile) self.assertFalse(stderr) - self.assertEqual(stdout, "== easyblock cmake.py included from PR #1936\n" + - "== easyblock siesta.py included from PR #2204\n") + self.assertEqual(stdout, "== easyblock configuremake.py included from PR #3563\n" + + "== easyblock gromacs.py included from PR #3634\n") # easyconfig from pr is found - ec_pattern = os.path.join(self.test_prefix, '.*', 'files_pr10487', 'c', 'CMake', - 'CMake-3.16.4-GCCcore-9.3.0.eb') + ec_pattern = os.path.join(self.test_prefix, '.*', 'files_pr22227', 't', 'Togl', + 'Togl-2.0-GCCcore-13.3.0.eb') ec_regex = re.compile(r"Parsing easyconfig file %s" % ec_pattern, re.M) self.assertTrue(ec_regex.search(logtxt), "Pattern '%s' found in: %s" % (ec_regex.pattern, logtxt)) # easyblock included from pr is found - eb_regex = re.compile(r"Successfully obtained EB_CMake class instance from easybuild.easyblocks.cmake", re.M) + eb_regex = re.compile( + r"Derived full easyblock module path for ConfigureMake: easybuild.easyblocks.generic.configuremake", re.M) self.assertTrue(eb_regex.search(logtxt), "Pattern '%s' found in: %s" % (eb_regex.pattern, logtxt)) # easyblock is found via get_easyblock_class - klass = get_easyblock_class('EB_CMake') + klass = get_easyblock_class('ConfigureMake') self.assertTrue(issubclass(klass, EasyBlock), "%s is an EasyBlock derivative class" % klass) # 'undo' import of easyblocks - del sys.modules['easybuild.easyblocks.cmake'] + del sys.modules['easybuild.easyblocks.xcrysden'] def mk_eb_test_cmd(self, args): """Construct test command for 'eb' with given options.""" @@ -4315,17 +4293,17 @@ def test_github_review_pr(self): self.mock_stdout(True) self.mock_stderr(True) - # PR for gzip 1.10 easyconfig, see https://github.com/easybuilders/easybuild-easyconfigs/pull/9921 + # PR for bwidget 1.10.1 easyconfig, see https://github.com/easybuilders/easybuild-easyconfigs/pull/22227 args = [ '--color=never', '--github-user=%s' % GITHUB_TEST_ACCOUNT, - '--review-pr=9921', + '--review-pr=22227', ] self.eb_main(args, raise_error=True) txt = self.get_stdout() self.mock_stdout(False) self.mock_stderr(False) - regex = re.compile(r"^Comparing gzip-1.10-\S* with gzip-1.10-") + regex = re.compile(r"^Comparing bwidget-1.10.1-\S* with bwidget-") self.assertTrue(regex.search(txt), "Pattern '%s' not found in: %s" % (regex.pattern, txt)) self.mock_stdout(True) @@ -5263,25 +5241,25 @@ def test_github_merge_pr(self): # note: we frequently need to change to a more recent PR here, # to avoid that this test starts failing because commit status is set to None for old commits del args[-1] - # easyconfig PR for EasyBuild v4.8.2 - args[1] = '19105' + # easyconfig PR for EasyBuild v5.0.0 + args[1] = '22405' stdout, stderr = self._run_mock_eb(args, do_build=True, raise_error=True, testing=False) expected_stdout = '\n'.join([ - "Checking eligibility of easybuilders/easybuild-easyconfigs PR #19105 for merging...", + "Checking eligibility of easybuilders/easybuild-easyconfigs PR #22405 for merging...", "* targets develop branch: OK", "* test suite passes: OK", "* last test report is successful: OK", "* no pending change requests: OK", - "* approved review: OK (by SebastianAchilles)", - "* milestone is set: OK (4.9.0)", + "* approved review: OK (by verdurin)", + "* milestone is set: OK (release after 4.9.4)", "* mergeable state is clean: PR is already merged", '', "Review OK, merging pull request!", '', - "[DRY RUN] Adding comment to easybuild-easyconfigs issue #19105: 'Going in, thanks @boegel!'", - "[DRY RUN] Merged easybuilders/easybuild-easyconfigs pull request #19105", + "[DRY RUN] Adding comment to easybuild-easyconfigs issue #22405: 'Going in, thanks @PetrKralCZ!'", + "[DRY RUN] Merged easybuilders/easybuild-easyconfigs pull request #22405", ]) expected_stderr = '' self.assertEqual(stderr.strip(), expected_stderr) @@ -5290,7 +5268,7 @@ def test_github_merge_pr(self): # --merge-pr also works on easyblocks (& framework) PRs args = [ '--merge-pr', - '2995', + '3582', '--pr-target-repo=easybuild-easyblocks', '-D', '--github-user=%s' % GITHUB_TEST_ACCOUNT, @@ -5298,12 +5276,12 @@ def test_github_merge_pr(self): stdout, stderr = self._run_mock_eb(args, do_build=True, raise_error=True, testing=False) self.assertEqual(stderr.strip(), '') expected_stdout = '\n'.join([ - "Checking eligibility of easybuilders/easybuild-easyblocks PR #2995 for merging...", + "Checking eligibility of easybuilders/easybuild-easyblocks PR #3582 for merging...", "* targets develop branch: OK", "* test suite passes: OK", "* no pending change requests: OK", - "* approved review: OK (by boegel)", - "* milestone is set: OK (4.8.1)", + "* approved review: OK (by hajgato)", + "* milestone is set: OK (release after 4.9.4)", "* mergeable state is clean: PR is already merged", '', "Review OK, merging pull request!", diff --git a/test/framework/robot.py b/test/framework/robot.py index 3abbc642a6..746d71639e 100644 --- a/test/framework/robot.py +++ b/test/framework/robot.py @@ -783,9 +783,9 @@ def test_github_det_easyconfig_paths_from_pr(self): args = [ os.path.join(test_ecs_path, 't', 'toy', 'toy-0.0.eb'), test_ec, # relative path, should be resolved via robot search path - # PR for foss/2018b, see https://github.com/easybuilders/easybuild-easyconfigs/pull/6424/files - '--from-pr=6424', - 'FFTW-3.3.8-gompi-2018b.eb', + # PR for XCrySDen/1.6.2-foss-2024a, see https://github.com/easybuilders/easybuild-easyconfigs/pull/22227 + '--from-pr=22227', + 'XCrySDen-1.6.2-foss-2024a.eb', 'gompi-2018b-test.eb', # relative path, available in robot search path '--dry-run', '--robot', @@ -809,9 +809,9 @@ def test_github_det_easyconfig_paths_from_pr(self): (self.test_prefix, 'intel/2018a'), # dependency, found in robot search path (self.test_prefix, 'toy/0.0-deps'), # specified easyconfig, found in robot search path (self.test_prefix, 'gompi/2018b-test'), # specified easyconfig, found in robot search path - ('.*/files_pr6424', 'FFTW/3.3.8-gompi-2018b'), # specified easyconfig - (test_ecs_path, 'gompi/2018b'), # part of PR easyconfigs, found in robot search path - (test_ecs_path, 'GCC/7.3.0-2.30'), # dependency for PR easyconfigs, found in robot search path + ('.*/files_pr22227', 'XCrySDen/1.6.2-foss-2024a'), # specified easyconfig + ('.*/files_pr22227', 'Togl/2.0-GCCcore-13.3.0'), # part of PR easyconfigs, found in robot search path + ('.*/files_pr22227', 'GCC/13.3.0'), # dependency for PR easyconfigs, found in robot search path ] for path_prefix, module in modules: ec_fn = "%s.eb" % '-'.join(module.split('/')) diff --git a/test/framework/sandbox/easybuild/easyblocks/b/binutils.py b/test/framework/sandbox/easybuild/easyblocks/b/binutils.py new file mode 100644 index 0000000000..abae626602 --- /dev/null +++ b/test/framework/sandbox/easybuild/easyblocks/b/binutils.py @@ -0,0 +1,32 @@ +## +# Copyright 2009-2025 Ghent University +# +# This file is part of EasyBuild, +# originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), +# with support of Ghent University (http://ugent.be/hpc), +# the Flemish Supercomputer Centre (VSC) (https://www.vscentrum.be), +# Flemish Research Foundation (FWO) (http://www.fwo.be/en) +# and the Department of Economy, Science and Innovation (EWI) (http://www.ewi-vlaanderen.be/en). +# +# https://github.com/easybuilders/easybuild +# +# EasyBuild is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation v2. +# +# EasyBuild is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with EasyBuild. If not, see . +## +""" +Dummy easyblock for binutils +""" +from easybuild.framework.easyblock import EasyBlock + + +class EB_binutils(EasyBlock): + pass diff --git a/test/framework/sandbox/easybuild/easyblocks/b/bzip2.py b/test/framework/sandbox/easybuild/easyblocks/b/bzip2.py new file mode 100644 index 0000000000..246da8f9d9 --- /dev/null +++ b/test/framework/sandbox/easybuild/easyblocks/b/bzip2.py @@ -0,0 +1,32 @@ +## +# Copyright 2009-2025 Ghent University +# +# This file is part of EasyBuild, +# originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), +# with support of Ghent University (http://ugent.be/hpc), +# the Flemish Supercomputer Centre (VSC) (https://www.vscentrum.be), +# Flemish Research Foundation (FWO) (http://www.fwo.be/en) +# and the Department of Economy, Science and Innovation (EWI) (http://www.ewi-vlaanderen.be/en). +# +# https://github.com/easybuilders/easybuild +# +# EasyBuild is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation v2. +# +# EasyBuild is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with EasyBuild. If not, see . +## +""" +Dummy easyblock for bzip2 +""" +from easybuild.framework.easyblock import EasyBlock + + +class EB_bzip2(EasyBlock): + pass diff --git a/test/framework/sandbox/easybuild/easyblocks/c/cmake.py b/test/framework/sandbox/easybuild/easyblocks/c/cmake.py new file mode 100644 index 0000000000..3bf181b3ac --- /dev/null +++ b/test/framework/sandbox/easybuild/easyblocks/c/cmake.py @@ -0,0 +1,32 @@ +## +# Copyright 2009-2025 Ghent University +# +# This file is part of EasyBuild, +# originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), +# with support of Ghent University (http://ugent.be/hpc), +# the Flemish Supercomputer Centre (VSC) (https://www.vscentrum.be), +# Flemish Research Foundation (FWO) (http://www.fwo.be/en) +# and the Department of Economy, Science and Innovation (EWI) (http://www.ewi-vlaanderen.be/en). +# +# https://github.com/easybuilders/easybuild +# +# EasyBuild is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation v2. +# +# EasyBuild is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with EasyBuild. If not, see . +## +""" +Dummy easyblock for CMake +""" +from easybuild.framework.easyblock import EasyBlock + + +class EB_CMake(EasyBlock): + pass diff --git a/test/framework/sandbox/easybuild/easyblocks/f/fftwmpi.py b/test/framework/sandbox/easybuild/easyblocks/f/fftwmpi.py new file mode 100644 index 0000000000..d7c468a8a9 --- /dev/null +++ b/test/framework/sandbox/easybuild/easyblocks/f/fftwmpi.py @@ -0,0 +1,32 @@ +## +# Copyright 2009-2025 Ghent University +# +# This file is part of EasyBuild, +# originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), +# with support of Ghent University (http://ugent.be/hpc), +# the Flemish Supercomputer Centre (VSC) (https://www.vscentrum.be), +# Flemish Research Foundation (FWO) (http://www.fwo.be/en) +# and the Department of Economy, Science and Innovation (EWI) (http://www.ewi-vlaanderen.be/en). +# +# https://github.com/easybuilders/easybuild +# +# EasyBuild is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation v2. +# +# EasyBuild is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with EasyBuild. If not, see . +## +""" +Dummy easyblock for FFTW.MPI +""" +from easybuild.framework.easyblock import EasyBlock + + +class EB_FFTW_period_MPI(EasyBlock): + pass diff --git a/test/framework/sandbox/easybuild/easyblocks/f/flex.py b/test/framework/sandbox/easybuild/easyblocks/f/flex.py new file mode 100644 index 0000000000..d06874c3d4 --- /dev/null +++ b/test/framework/sandbox/easybuild/easyblocks/f/flex.py @@ -0,0 +1,32 @@ +## +# Copyright 2009-2025 Ghent University +# +# This file is part of EasyBuild, +# originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), +# with support of Ghent University (http://ugent.be/hpc), +# the Flemish Supercomputer Centre (VSC) (https://www.vscentrum.be), +# Flemish Research Foundation (FWO) (http://www.fwo.be/en) +# and the Department of Economy, Science and Innovation (EWI) (http://www.ewi-vlaanderen.be/en). +# +# https://github.com/easybuilders/easybuild +# +# EasyBuild is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation v2. +# +# EasyBuild is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with EasyBuild. If not, see . +## +""" +Dummy easyblock for flex +""" +from easybuild.framework.easyblock import EasyBlock + + +class EB_flex(EasyBlock): + pass diff --git a/test/framework/sandbox/easybuild/easyblocks/f/freetype.py b/test/framework/sandbox/easybuild/easyblocks/f/freetype.py new file mode 100644 index 0000000000..9149ab8e42 --- /dev/null +++ b/test/framework/sandbox/easybuild/easyblocks/f/freetype.py @@ -0,0 +1,32 @@ +## +# Copyright 2009-2025 Ghent University +# +# This file is part of EasyBuild, +# originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), +# with support of Ghent University (http://ugent.be/hpc), +# the Flemish Supercomputer Centre (VSC) (https://www.vscentrum.be), +# Flemish Research Foundation (FWO) (http://www.fwo.be/en) +# and the Department of Economy, Science and Innovation (EWI) (http://www.ewi-vlaanderen.be/en). +# +# https://github.com/easybuilders/easybuild +# +# EasyBuild is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation v2. +# +# EasyBuild is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with EasyBuild. If not, see . +## +""" +Dummy easyblock for freetype +""" +from easybuild.framework.easyblock import EasyBlock + + +class EB_freetype(EasyBlock): + pass diff --git a/test/framework/sandbox/easybuild/easyblocks/generic/bundle.py b/test/framework/sandbox/easybuild/easyblocks/generic/bundle.py new file mode 100644 index 0000000000..11cece6a3f --- /dev/null +++ b/test/framework/sandbox/easybuild/easyblocks/generic/bundle.py @@ -0,0 +1,34 @@ +## +# Copyright 2009-2025 Ghent University +# +# This file is part of EasyBuild, +# originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), +# with support of Ghent University (http://ugent.be/hpc), +# the Flemish Supercomputer Centre (VSC) (https://www.vscentrum.be), +# Flemish Research Foundation (FWO) (http://www.fwo.be/en) +# and the Department of Economy, Science and Innovation (EWI) (http://www.ewi-vlaanderen.be/en). +# +# https://github.com/easybuilders/easybuild +# +# EasyBuild is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation v2. +# +# EasyBuild is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with EasyBuild. If not, see . +## +""" +Dummy support for building and installing a bundle of applications. +""" +from easybuild.framework.easyblock import EasyBlock + + +class Bundle(EasyBlock): + """Dummy support for building and installing a bundle of applications.""" + + pass diff --git a/test/framework/sandbox/easybuild/easyblocks/generic/cmakemake.py b/test/framework/sandbox/easybuild/easyblocks/generic/cmakemake.py new file mode 100644 index 0000000000..d0728fabbe --- /dev/null +++ b/test/framework/sandbox/easybuild/easyblocks/generic/cmakemake.py @@ -0,0 +1,34 @@ +## +# Copyright 2009-2025 Ghent University +# +# This file is part of EasyBuild, +# originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), +# with support of Ghent University (http://ugent.be/hpc), +# the Flemish Supercomputer Centre (VSC) (https://www.vscentrum.be), +# Flemish Research Foundation (FWO) (http://www.fwo.be/en) +# and the Department of Economy, Science and Innovation (EWI) (http://www.ewi-vlaanderen.be/en). +# +# https://github.com/easybuilders/easybuild +# +# EasyBuild is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation v2. +# +# EasyBuild is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with EasyBuild. If not, see . +## +""" +Dummy support for building and installing applications with CMake. +""" +from easybuild.framework.easyblock import EasyBlock + + +class CMakeMake(EasyBlock): + """Dummy support for building and installing applications with CMake.""" + + pass diff --git a/test/framework/sandbox/easybuild/easyblocks/generic/cmdcp.py b/test/framework/sandbox/easybuild/easyblocks/generic/cmdcp.py new file mode 100644 index 0000000000..f0850dac39 --- /dev/null +++ b/test/framework/sandbox/easybuild/easyblocks/generic/cmdcp.py @@ -0,0 +1,34 @@ +## +# Copyright 2009-2025 Ghent University +# +# This file is part of EasyBuild, +# originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), +# with support of Ghent University (http://ugent.be/hpc), +# the Flemish Supercomputer Centre (VSC) (https://www.vscentrum.be), +# Flemish Research Foundation (FWO) (http://www.fwo.be/en) +# and the Department of Economy, Science and Innovation (EWI) (http://www.ewi-vlaanderen.be/en). +# +# https://github.com/easybuilders/easybuild +# +# EasyBuild is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation v2. +# +# EasyBuild is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with EasyBuild. If not, see . +## +""" +Dummy support for building and installing applications via a command and copy. +""" +from easybuild.framework.easyblock import EasyBlock + + +class CmdCp(EasyBlock): + """Dummy support for building and installing applications via a command and copy.""" + + pass diff --git a/test/framework/sandbox/easybuild/easyblocks/generic/mesonninja.py b/test/framework/sandbox/easybuild/easyblocks/generic/mesonninja.py new file mode 100644 index 0000000000..1251af1d0c --- /dev/null +++ b/test/framework/sandbox/easybuild/easyblocks/generic/mesonninja.py @@ -0,0 +1,34 @@ +## +# Copyright 2009-2025 Ghent University +# +# This file is part of EasyBuild, +# originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), +# with support of Ghent University (http://ugent.be/hpc), +# the Flemish Supercomputer Centre (VSC) (https://www.vscentrum.be), +# Flemish Research Foundation (FWO) (http://www.fwo.be/en) +# and the Department of Economy, Science and Innovation (EWI) (http://www.ewi-vlaanderen.be/en). +# +# https://github.com/easybuilders/easybuild +# +# EasyBuild is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation v2. +# +# EasyBuild is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with EasyBuild. If not, see . +## +""" +Dummy support for building and installing applications with Meson and Ninja. +""" +from easybuild.framework.easyblock import EasyBlock + + +class MesonNinja(EasyBlock): + """Dummy support for building and installing applications with Meson and Ninja.""" + + pass diff --git a/test/framework/sandbox/easybuild/easyblocks/generic/perlbundle.py b/test/framework/sandbox/easybuild/easyblocks/generic/perlbundle.py new file mode 100644 index 0000000000..0644157561 --- /dev/null +++ b/test/framework/sandbox/easybuild/easyblocks/generic/perlbundle.py @@ -0,0 +1,33 @@ +## +# Copyright 2009-2025 Ghent University +# +# This file is part of EasyBuild, +# originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), +# with support of Ghent University (http://ugent.be/hpc), +# the Flemish Supercomputer Centre (VSC) (https://www.vscentrum.be), +# Flemish Research Foundation (FWO) (http://www.fwo.be/en) +# and the Department of Economy, Science and Innovation (EWI) (http://www.ewi-vlaanderen.be/en). +# +# https://github.com/easybuilders/easybuild +# +# EasyBuild is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation v2. +# +# EasyBuild is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with EasyBuild. If not, see . +## +""" +Dummy easyblock for bundle of Perl modules. +""" +from easybuild.framework.easyblock import EasyBlock + + +class PerlBundle(EasyBlock): + """Dummy support for bundle of Perl modules.""" + pass diff --git a/test/framework/sandbox/easybuild/easyblocks/generic/pythonpackage.py b/test/framework/sandbox/easybuild/easyblocks/generic/pythonpackage.py new file mode 100644 index 0000000000..35bc926829 --- /dev/null +++ b/test/framework/sandbox/easybuild/easyblocks/generic/pythonpackage.py @@ -0,0 +1,44 @@ +## +# Copyright 2009-2025 Ghent University +# +# This file is part of EasyBuild, +# originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), +# with support of Ghent University (http://ugent.be/hpc), +# the Flemish Supercomputer Centre (VSC) (https://www.vscentrum.be), +# Flemish Research Foundation (FWO) (http://www.fwo.be/en) +# and the Department of Economy, Science and Innovation (EWI) (http://www.ewi-vlaanderen.be/en). +# +# https://github.com/easybuilders/easybuild +# +# EasyBuild is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation v2. +# +# EasyBuild is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with EasyBuild. If not, see . +## +""" +Dummy support for building and installing a Python package. +""" +from easybuild.framework.easyblock import EasyBlock +from easybuild.framework.easyconfig import CUSTOM + + +class PythonPackage(EasyBlock): + """Dummy support for building and installing a Python package.""" + + @staticmethod + def extra_options(extra_vars=None): + """Extra easyconfig parameters specific to ConfigureMake.""" + extra_vars = EasyBlock.extra_options(extra=extra_vars) + extra_vars.update({ + 'install_target': ['', "Just a test", CUSTOM], + 'options': ['', "Another test", CUSTOM], + 'use_pip': ['', "Test 1, 2, 3", CUSTOM], + }) + return extra_vars diff --git a/test/framework/sandbox/easybuild/easyblocks/generic/tarball.py b/test/framework/sandbox/easybuild/easyblocks/generic/tarball.py new file mode 100644 index 0000000000..012c05b67b --- /dev/null +++ b/test/framework/sandbox/easybuild/easyblocks/generic/tarball.py @@ -0,0 +1,34 @@ +## +# Copyright 2009-2025 Ghent University +# +# This file is part of EasyBuild, +# originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), +# with support of Ghent University (http://ugent.be/hpc), +# the Flemish Supercomputer Centre (VSC) (https://www.vscentrum.be), +# Flemish Research Foundation (FWO) (http://www.fwo.be/en) +# and the Department of Economy, Science and Innovation (EWI) (http://www.ewi-vlaanderen.be/en). +# +# https://github.com/easybuilders/easybuild +# +# EasyBuild is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation v2. +# +# EasyBuild is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with EasyBuild. If not, see . +## +""" +Dummy support for building and installing applications from a Tarball. +""" +from easybuild.framework.easyblock import EasyBlock + + +class Tarball(EasyBlock): + """Dummy support for building and installing applications from a Tarball.""" + + pass diff --git a/test/framework/sandbox/easybuild/easyblocks/l/libxml2.py b/test/framework/sandbox/easybuild/easyblocks/l/libxml2.py new file mode 100644 index 0000000000..d0153d43a3 --- /dev/null +++ b/test/framework/sandbox/easybuild/easyblocks/l/libxml2.py @@ -0,0 +1,32 @@ +## +# Copyright 2009-2025 Ghent University +# +# This file is part of EasyBuild, +# originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), +# with support of Ghent University (http://ugent.be/hpc), +# the Flemish Supercomputer Centre (VSC) (https://www.vscentrum.be), +# Flemish Research Foundation (FWO) (http://www.fwo.be/en) +# and the Department of Economy, Science and Innovation (EWI) (http://www.ewi-vlaanderen.be/en). +# +# https://github.com/easybuilders/easybuild +# +# EasyBuild is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation v2. +# +# EasyBuild is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with EasyBuild. If not, see . +## +""" +Dummy easyblock for libxml2 +""" +from easybuild.framework.easyblock import EasyBlock + + +class EB_libxml2(EasyBlock): + pass diff --git a/test/framework/sandbox/easybuild/easyblocks/l/llvm.py b/test/framework/sandbox/easybuild/easyblocks/l/llvm.py new file mode 100644 index 0000000000..b59bae4acb --- /dev/null +++ b/test/framework/sandbox/easybuild/easyblocks/l/llvm.py @@ -0,0 +1,32 @@ +## +# Copyright 2009-2025 Ghent University +# +# This file is part of EasyBuild, +# originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), +# with support of Ghent University (http://ugent.be/hpc), +# the Flemish Supercomputer Centre (VSC) (https://www.vscentrum.be), +# Flemish Research Foundation (FWO) (http://www.fwo.be/en) +# and the Department of Economy, Science and Innovation (EWI) (http://www.ewi-vlaanderen.be/en). +# +# https://github.com/easybuilders/easybuild +# +# EasyBuild is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation v2. +# +# EasyBuild is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with EasyBuild. If not, see . +## +""" +Dummy easyblock for LLVM +""" +from easybuild.framework.easyblock import EasyBlock + + +class EB_LLVM(EasyBlock): + pass diff --git a/test/framework/sandbox/easybuild/easyblocks/m/mesa.py b/test/framework/sandbox/easybuild/easyblocks/m/mesa.py new file mode 100644 index 0000000000..3086985eb1 --- /dev/null +++ b/test/framework/sandbox/easybuild/easyblocks/m/mesa.py @@ -0,0 +1,32 @@ +## +# Copyright 2009-2025 Ghent University +# +# This file is part of EasyBuild, +# originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), +# with support of Ghent University (http://ugent.be/hpc), +# the Flemish Supercomputer Centre (VSC) (https://www.vscentrum.be), +# Flemish Research Foundation (FWO) (http://www.fwo.be/en) +# and the Department of Economy, Science and Innovation (EWI) (http://www.ewi-vlaanderen.be/en). +# +# https://github.com/easybuilders/easybuild +# +# EasyBuild is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation v2. +# +# EasyBuild is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with EasyBuild. If not, see . +## +""" +Dummy easyblock for Mesa +""" +from easybuild.framework.easyblock import EasyBlock + + +class EB_Mesa(EasyBlock): + pass diff --git a/test/framework/sandbox/easybuild/easyblocks/o/openssl_wrapper.py b/test/framework/sandbox/easybuild/easyblocks/o/openssl_wrapper.py new file mode 100644 index 0000000000..d3f32361dd --- /dev/null +++ b/test/framework/sandbox/easybuild/easyblocks/o/openssl_wrapper.py @@ -0,0 +1,32 @@ +## +# Copyright 2009-2025 Ghent University +# +# This file is part of EasyBuild, +# originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), +# with support of Ghent University (http://ugent.be/hpc), +# the Flemish Supercomputer Centre (VSC) (https://www.vscentrum.be), +# Flemish Research Foundation (FWO) (http://www.fwo.be/en) +# and the Department of Economy, Science and Innovation (EWI) (http://www.ewi-vlaanderen.be/en). +# +# https://github.com/easybuilders/easybuild +# +# EasyBuild is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation v2. +# +# EasyBuild is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with EasyBuild. If not, see . +## +""" +Dummy easyblock for OpenSSL_wrapper +""" +from easybuild.framework.easyblock import EasyBlock + + +class EB_OpenSSL_wrapper(EasyBlock): + pass diff --git a/test/framework/sandbox/easybuild/easyblocks/p/perl.py b/test/framework/sandbox/easybuild/easyblocks/p/perl.py new file mode 100644 index 0000000000..463b14b57d --- /dev/null +++ b/test/framework/sandbox/easybuild/easyblocks/p/perl.py @@ -0,0 +1,32 @@ +## +# Copyright 2009-2025 Ghent University +# +# This file is part of EasyBuild, +# originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), +# with support of Ghent University (http://ugent.be/hpc), +# the Flemish Supercomputer Centre (VSC) (https://www.vscentrum.be), +# Flemish Research Foundation (FWO) (http://www.fwo.be/en) +# and the Department of Economy, Science and Innovation (EWI) (http://www.ewi-vlaanderen.be/en). +# +# https://github.com/easybuilders/easybuild +# +# EasyBuild is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation v2. +# +# EasyBuild is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with EasyBuild. If not, see . +## +""" +Dummy easyblock for Perl +""" +from easybuild.framework.easyblock import EasyBlock + + +class EB_Perl(EasyBlock): + pass diff --git a/test/framework/sandbox/easybuild/easyblocks/p/python.py b/test/framework/sandbox/easybuild/easyblocks/p/python.py new file mode 100644 index 0000000000..e6e43ed0cf --- /dev/null +++ b/test/framework/sandbox/easybuild/easyblocks/p/python.py @@ -0,0 +1,32 @@ +## +# Copyright 2009-2025 Ghent University +# +# This file is part of EasyBuild, +# originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), +# with support of Ghent University (http://ugent.be/hpc), +# the Flemish Supercomputer Centre (VSC) (https://www.vscentrum.be), +# Flemish Research Foundation (FWO) (http://www.fwo.be/en) +# and the Department of Economy, Science and Innovation (EWI) (http://www.ewi-vlaanderen.be/en). +# +# https://github.com/easybuilders/easybuild +# +# EasyBuild is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation v2. +# +# EasyBuild is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with EasyBuild. If not, see . +## +""" +Dummy easyblock for Python +""" +from easybuild.framework.easyblock import EasyBlock + + +class EB_Python(EasyBlock): + pass diff --git a/test/framework/sandbox/easybuild/easyblocks/x/xcrysden.py b/test/framework/sandbox/easybuild/easyblocks/x/xcrysden.py new file mode 100644 index 0000000000..4c46df68a0 --- /dev/null +++ b/test/framework/sandbox/easybuild/easyblocks/x/xcrysden.py @@ -0,0 +1,32 @@ +## +# Copyright 2009-2025 Ghent University +# +# This file is part of EasyBuild, +# originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), +# with support of Ghent University (http://ugent.be/hpc), +# the Flemish Supercomputer Centre (VSC) (https://www.vscentrum.be), +# Flemish Research Foundation (FWO) (http://www.fwo.be/en) +# and the Department of Economy, Science and Innovation (EWI) (http://www.ewi-vlaanderen.be/en). +# +# https://github.com/easybuilders/easybuild +# +# EasyBuild is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation v2. +# +# EasyBuild is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with EasyBuild. If not, see . +## +""" +Dummy easyblock for XCrySDen +""" +from easybuild.framework.easyblock import EasyBlock + + +class EB_XCrySDen(EasyBlock): + pass