From 33b9ab44a2e48cebebafeb4e253487054add61fd Mon Sep 17 00:00:00 2001 From: Simon Branford Date: Sat, 1 Mar 2025 09:50:50 +0000 Subject: [PATCH 01/26] update github token tests for EB5 --- test/framework/github.py | 46 ++++++++++++-------------------- test/framework/options.py | 55 ++++++++++++++++++++------------------- 2 files changed, 44 insertions(+), 57 deletions(-) diff --git a/test/framework/github.py b/test/framework/github.py index d8bacfdcf6..86afdd5125 100644 --- a/test/framework/github.py +++ b/test/framework/github.py @@ -438,40 +438,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(): diff --git a/test/framework/options.py b/test/framework/options.py index 52ce65248d..6a8697e844 100644 --- a/test/framework/options.py +++ b/test/framework/options.py @@ -1441,60 +1441,61 @@ 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_pr22365 = [ + 'Environ-3.1-foss-2024a.eb', + 'QuantumESPRESSO-7.4-foss-2024a-Environ-3.1.eb', + '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', '22365'] 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"4 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_pr22365: 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', '22365', 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"4 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_pr22365: 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 = 'Environ-3.1-foss-2024a.eb' + args = ['--copy-ec', '--from-pr', '22365', 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 = 'Environ'", 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, 'Environ.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 .*/Environ.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 = 'Environ'", read_file(environ_ec)) change_dir(cwd) remove_dir(test_working_dir) @@ -1502,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', '22365', patch_fn, '.'] stdout = self.mocked_main(args) self.assertEqual(os.listdir(test_working_dir), [patch_fn]) @@ -1514,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', '22365', 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 = 'Environ'", 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', '22365', patch_fn] stdout = self.mocked_main(args) regex = re.compile(r"%s copied to .*/%s" % (patch_fn, os.path.basename(test_working_dir))) @@ -1539,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', '20545', test_ec] + ec_pr20545 = "HEEDS-2310.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_pr20545, 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 = 'HEEDS'", read_file(test_ec)) remove_file(test_ec) def test_copy_ec_from_commit(self): From 950728d9387ade1419ddd5534e9deee10aebdc0a Mon Sep 17 00:00:00 2001 From: Simon Branford Date: Sat, 1 Mar 2025 10:35:49 +0000 Subject: [PATCH 02/26] fix --- test/framework/options.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/framework/options.py b/test/framework/options.py index 6a8697e844..a04a76e975 100644 --- a/test/framework/options.py +++ b/test/framework/options.py @@ -1540,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', '20545', test_ec] - ec_pr20545 = "HEEDS-2310.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_pr20545, 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 = 'HEEDS'", read_file(test_ec)) + self.assertIn("name = 'PySide2'", read_file(test_ec)) remove_file(test_ec) def test_copy_ec_from_commit(self): From a7ab1e379967d3a17e1ca573e83e377b7ff14737 Mon Sep 17 00:00:00 2001 From: Simon Branford Date: Sat, 1 Mar 2025 10:40:43 +0000 Subject: [PATCH 03/26] test_github_fetch_easyblocks_from_pr --- test/framework/github.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/framework/github.py b/test/framework/github.py index 86afdd5125..a6b48558da 100644 --- a/test/framework/github.py +++ b/test/framework/github.py @@ -411,15 +411,15 @@ def test_github_fetch_easyblocks_from_pr(self): }) # 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(): From 8e3c029c2c00740baede5e15f14bc64424408474 Mon Sep 17 00:00:00 2001 From: Simon Branford Date: Sat, 1 Mar 2025 10:41:38 +0000 Subject: [PATCH 04/26] add comment --- test/framework/github.py | 1 + 1 file changed, 1 insertion(+) diff --git a/test/framework/github.py b/test/framework/github.py index a6b48558da..e019555c44 100644 --- a/test/framework/github.py +++ b/test/framework/github.py @@ -410,6 +410,7 @@ 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'] From 484023e5de70785c008af90e5b1cf8861ea4f367 Mon Sep 17 00:00:00 2001 From: Simon Branford Date: Sat, 1 Mar 2025 11:04:02 +0000 Subject: [PATCH 05/26] test_det_copy_ec_specs --- test/framework/easyconfig.py | 46 +++++++++++++++++++----------------- 1 file changed, 24 insertions(+), 22 deletions(-) diff --git a/test/framework/easyconfig.py b/test/framework/easyconfig.py index f8e11e30c8..72fe015d99 100644 --- a/test/framework/easyconfig.py +++ b/test/framework/easyconfig.py @@ -4800,60 +4800,62 @@ 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/22365 + from_pr = 22365 + environ_ec_fn = 'Environ-3.1-foss-2024a.eb' + qe1_ec_fn = 'QuantumESPRESSO-7.4-foss-2024a-Environ-3.1.eb' + qe2_ec_fn = 'QuantumESPRESSO-7.4-foss-2024a.eb' + qe_patch_fn = 'QuantumESPRESSO-7.4-parallel-symmetrization.patch' pr_files = [ - arrow_ec_fn, - bat_ec_fn, - bat_patch_fn, + environ_ec_fn, + qe1_ec_fn, + qe2_ec_fn, + qe_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), 4) 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 = [qe2_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]), qe2_ec_fn) self.assertEqual(target_path, 'target_dir') - args = [bat_ec_fn] + args = [qe2_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.assertEqual(os.path.basename(paths[0]), qe2_ec_fn) self.assertTrue(os.path.samefile(target_path, cwd)) - args = [arrow_ec_fn, bat_ec_fn] + args = [environ_ec_fn, qe1_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]), environ_ec_fn) + self.assertEqual(os.path.basename(paths[1]), qe1_ec_fn) self.assertTrue(os.path.samefile(target_path, cwd)) - args = [bat_ec_fn, bat_patch_fn] + args = [qe2_ec_fn, qe_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]), qe2_ec_fn) + self.assertEqual(os.path.basename(paths[1]), qe_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 = [environ_ec_fn, 'test.eb', 'test.patch', qe_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]), environ_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]), qe_patch_fn) self.assertTrue(os.path.samefile(target_path, cwd)) def test_recursive_module_unload(self): From 32d824250795a8d82615049822284a2872764672 Mon Sep 17 00:00:00 2001 From: Simon Branford Date: Sat, 1 Mar 2025 11:48:08 +0000 Subject: [PATCH 06/26] test_github_from_pr_token_log --- test/framework/options.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/framework/options.py b/test/framework/options.py index a04a76e975..da264a9fff 100644 --- a/test/framework/options.py +++ b/test/framework/options.py @@ -2125,8 +2125,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/files + '--from-pr=22227', '--dry-run', '--debug', # an argument must be specified to --robot, since easybuild-easyconfigs may not be installed From 1e31c311e12eaa8f69c7ccd1c40decfed505ed5c Mon Sep 17 00:00:00 2001 From: Simon Branford Date: Sat, 1 Mar 2025 11:48:31 +0000 Subject: [PATCH 07/26] test_github_add_pr_labels --- test/framework/github.py | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/test/framework/github.py b/test/framework/github.py index e019555c44..8baec2394d 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(22010) # 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("PR #22010 should be labelled 'update'", stdout) def test_github_fetch_pr_data(self): """Test fetch_pr_data function.""" From de9518e9625f99febcb45e1bbf60af5ca50dc6f0 Mon Sep 17 00:00:00 2001 From: Simon Branford Date: Sun, 2 Mar 2025 13:00:25 +0000 Subject: [PATCH 08/26] fix tests --- test/framework/github.py | 4 ++-- test/framework/options.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/test/framework/github.py b/test/framework/github.py index 8baec2394d..7c1bceb79c 100644 --- a/test/framework/github.py +++ b/test/framework/github.py @@ -262,11 +262,11 @@ def test_github_add_pr_labels(self): self.mock_stdout(True) self.mock_stderr(True) - gh.add_pr_labels(22010) # 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 #22010 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.""" diff --git a/test/framework/options.py b/test/framework/options.py index da264a9fff..9f96fe43eb 100644 --- a/test/framework/options.py +++ b/test/framework/options.py @@ -2125,7 +2125,7 @@ def test_github_from_pr_token_log(self): os.close(fd) args = [ - # PR for XCrySDen/1.6.2-foss-2024a, see https://github.com/easybuilders/easybuild-easyconfigs/pull/22227/files + # PR for XCrySDen/1.6.2-foss-2024a, see https://github.com/easybuilders/easybuild-easyconfigs/pull/22227 '--from-pr=22227', '--dry-run', '--debug', From 799b97a2b5d1959cc51f43889b2a4e1652d4f19c Mon Sep 17 00:00:00 2001 From: Simon Branford Date: Sun, 2 Mar 2025 13:01:33 +0000 Subject: [PATCH 09/26] needed lots more easyblocks --- .../easybuild/easyblocks/b/binutils.py | 34 ++++++++++++++ .../sandbox/easybuild/easyblocks/b/bzip2.py | 34 ++++++++++++++ .../sandbox/easybuild/easyblocks/c/cmake.py | 34 ++++++++++++++ .../sandbox/easybuild/easyblocks/f/fftwmpi.py | 34 ++++++++++++++ .../sandbox/easybuild/easyblocks/f/flex.py | 34 ++++++++++++++ .../easybuild/easyblocks/f/freetype.py | 34 ++++++++++++++ .../easybuild/easyblocks/generic/bundle.py | 36 +++++++++++++++ .../easybuild/easyblocks/generic/cmakemake.py | 36 +++++++++++++++ .../easybuild/easyblocks/generic/cmdcp.py | 36 +++++++++++++++ .../easyblocks/generic/mesonninja.py | 36 +++++++++++++++ .../easyblocks/generic/perlbundle.py | 44 ++++++++++++++++++ .../easyblocks/generic/pythonpackage.py | 46 +++++++++++++++++++ .../easybuild/easyblocks/generic/tarball.py | 36 +++++++++++++++ .../sandbox/easybuild/easyblocks/l/libxml2.py | 34 ++++++++++++++ .../sandbox/easybuild/easyblocks/l/llvm.py | 34 ++++++++++++++ .../sandbox/easybuild/easyblocks/m/mesa.py | 34 ++++++++++++++ .../easybuild/easyblocks/o/openssl_wrapper.py | 34 ++++++++++++++ .../sandbox/easybuild/easyblocks/p/perl.py | 34 ++++++++++++++ .../sandbox/easybuild/easyblocks/p/python.py | 34 ++++++++++++++ .../easybuild/easyblocks/x/xcrysden.py | 34 ++++++++++++++ 20 files changed, 712 insertions(+) create mode 100644 test/framework/sandbox/easybuild/easyblocks/b/binutils.py create mode 100644 test/framework/sandbox/easybuild/easyblocks/b/bzip2.py create mode 100644 test/framework/sandbox/easybuild/easyblocks/c/cmake.py create mode 100644 test/framework/sandbox/easybuild/easyblocks/f/fftwmpi.py create mode 100644 test/framework/sandbox/easybuild/easyblocks/f/flex.py create mode 100644 test/framework/sandbox/easybuild/easyblocks/f/freetype.py create mode 100644 test/framework/sandbox/easybuild/easyblocks/generic/bundle.py create mode 100644 test/framework/sandbox/easybuild/easyblocks/generic/cmakemake.py create mode 100644 test/framework/sandbox/easybuild/easyblocks/generic/cmdcp.py create mode 100644 test/framework/sandbox/easybuild/easyblocks/generic/mesonninja.py create mode 100644 test/framework/sandbox/easybuild/easyblocks/generic/perlbundle.py create mode 100644 test/framework/sandbox/easybuild/easyblocks/generic/pythonpackage.py create mode 100644 test/framework/sandbox/easybuild/easyblocks/generic/tarball.py create mode 100644 test/framework/sandbox/easybuild/easyblocks/l/libxml2.py create mode 100644 test/framework/sandbox/easybuild/easyblocks/l/llvm.py create mode 100644 test/framework/sandbox/easybuild/easyblocks/m/mesa.py create mode 100644 test/framework/sandbox/easybuild/easyblocks/o/openssl_wrapper.py create mode 100644 test/framework/sandbox/easybuild/easyblocks/p/perl.py create mode 100644 test/framework/sandbox/easybuild/easyblocks/p/python.py create mode 100644 test/framework/sandbox/easybuild/easyblocks/x/xcrysden.py 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..27d13856bd --- /dev/null +++ b/test/framework/sandbox/easybuild/easyblocks/b/binutils.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 easyblock for binutils + +@author: Kenneth Hoste (Ghent University) +""" +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..77ba16971c --- /dev/null +++ b/test/framework/sandbox/easybuild/easyblocks/b/bzip2.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 easyblock for bzip2 + +@author: Kenneth Hoste (Ghent University) +""" +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..2c48525490 --- /dev/null +++ b/test/framework/sandbox/easybuild/easyblocks/c/cmake.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 easyblock for CMake + +@author: Kenneth Hoste (Ghent University) +""" +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..c8f3ee3e7e --- /dev/null +++ b/test/framework/sandbox/easybuild/easyblocks/f/fftwmpi.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 easyblock for FFTW.MPI + +@author: Kenneth Hoste (Ghent University) +""" +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..34f65f424e --- /dev/null +++ b/test/framework/sandbox/easybuild/easyblocks/f/flex.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 easyblock for flex + +@author: Kenneth Hoste (Ghent University) +""" +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..f059af6cb6 --- /dev/null +++ b/test/framework/sandbox/easybuild/easyblocks/f/freetype.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 easyblock for freetype + +@author: Kenneth Hoste (Ghent University) +""" +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..1e8fbd3629 --- /dev/null +++ b/test/framework/sandbox/easybuild/easyblocks/generic/bundle.py @@ -0,0 +1,36 @@ +## +# 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. + +@author: Kenneth Hoste (Ghent University) +""" +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..9abf732ad8 --- /dev/null +++ b/test/framework/sandbox/easybuild/easyblocks/generic/cmakemake.py @@ -0,0 +1,36 @@ +## +# 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. + +@author: Kenneth Hoste (Ghent University) +""" +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..a773c89bcf --- /dev/null +++ b/test/framework/sandbox/easybuild/easyblocks/generic/cmdcp.py @@ -0,0 +1,36 @@ +## +# 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. + +@author: Kenneth Hoste (Ghent University) +""" +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..d3f1b6db5c --- /dev/null +++ b/test/framework/sandbox/easybuild/easyblocks/generic/mesonninja.py @@ -0,0 +1,36 @@ +## +# 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. + +@author: Kenneth Hoste (Ghent University) +""" +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..01c878b836 --- /dev/null +++ b/test/framework/sandbox/easybuild/easyblocks/generic/perlbundle.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 easyblock for Makecp. + +@author: Miguel Dias Costa (National University of Singapore) +""" +from easybuild.framework.easyblock import EasyBlock +from easybuild.framework.easyconfig import CUSTOM + + +class PerlBundle(EasyBlock): + """Dummy support for bundle of modules.""" + + @staticmethod + def extra_options(extra_vars=None): + if extra_vars is None: + extra_vars = {} + extra_vars.update({ + 'components': [(), "List of components to install: tuples w/ name, version and easyblock to use", CUSTOM], + }) + return EasyBlock.extra_options(extra_vars) 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..8a6443d273 --- /dev/null +++ b/test/framework/sandbox/easybuild/easyblocks/generic/pythonpackage.py @@ -0,0 +1,46 @@ +## +# 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. + +@author: Kenneth Hoste (Ghent University) +""" +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..9281c6ec2d --- /dev/null +++ b/test/framework/sandbox/easybuild/easyblocks/generic/tarball.py @@ -0,0 +1,36 @@ +## +# 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. + +@author: Kenneth Hoste (Ghent University) +""" +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..8b2e85c5ce --- /dev/null +++ b/test/framework/sandbox/easybuild/easyblocks/l/libxml2.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 easyblock for libxml2 + +@author: Kenneth Hoste (Ghent University) +""" +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..eb92e0dacb --- /dev/null +++ b/test/framework/sandbox/easybuild/easyblocks/l/llvm.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 easyblock for LLVM + +@author: Kenneth Hoste (Ghent University) +""" +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..9b3de8ed94 --- /dev/null +++ b/test/framework/sandbox/easybuild/easyblocks/m/mesa.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 easyblock for Mesa + +@author: Kenneth Hoste (Ghent University) +""" +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..7a270cbbee --- /dev/null +++ b/test/framework/sandbox/easybuild/easyblocks/o/openssl_wrapper.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 easyblock for OpenSSL_wrapper + +@author: Kenneth Hoste (Ghent University) +""" +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..613dab3c51 --- /dev/null +++ b/test/framework/sandbox/easybuild/easyblocks/p/perl.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 easyblock for Perl + +@author: Kenneth Hoste (Ghent University) +""" +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..ffa121a601 --- /dev/null +++ b/test/framework/sandbox/easybuild/easyblocks/p/python.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 easyblock for Python + +@author: Kenneth Hoste (Ghent University) +""" +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..b90f6e00d8 --- /dev/null +++ b/test/framework/sandbox/easybuild/easyblocks/x/xcrysden.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 easyblock for XCrySDen + +@author: Kenneth Hoste (Ghent University) +""" +from easybuild.framework.easyblock import EasyBlock + + +class EB_XCrySDen(EasyBlock): + pass From 9fd2a469df4fe4455f7a72a7f31063d9f0c0de16 Mon Sep 17 00:00:00 2001 From: Simon Branford Date: Sun, 2 Mar 2025 13:18:25 +0000 Subject: [PATCH 10/26] test_github_det_easyconfig_paths_from_pr --- test/framework/robot.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) 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('/')) From 322f92cdd0f030e9377d1e83a93f0f44fa3b3624 Mon Sep 17 00:00:00 2001 From: Simon Branford Date: Sun, 2 Mar 2025 13:40:16 +0000 Subject: [PATCH 11/26] oh look, I broke the tests! --- test/framework/docs.py | 120 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 120 insertions(+) diff --git a/test/framework/docs.py b/test/framework/docs.py index a3422ecf0e..6875f705dc 100644 --- a/test/framework/docs.py +++ b/test/framework/docs.py @@ -44,19 +44,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 @@ -68,8 +84,12 @@ | | |-- EB_toy_eula | | |-- EB_toytoy | |-- Toy_Extension +|-- MesonNinja |-- ModuleRC +|-- PerlBundle |-- PythonBundle +|-- PythonPackage +|-- Tarball |-- Toolchain Extension |-- ExtensionEasyBlock @@ -86,19 +106,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) @@ -110,8 +146,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 ) @@ -129,23 +169,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 @@ -167,8 +223,12 @@ * Toy_Extension + * MesonNinja * ModuleRC + * PerlBundle * PythonBundle + * PythonPackage + * Tarball * Toolchain * **Extension** @@ -199,23 +259,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) @@ -237,8 +313,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) @@ -268,19 +348,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 @@ -292,8 +388,12 @@ - EB_toy_eula - EB_toytoy - Toy_Extension + - MesonNinja - ModuleRC + - PerlBundle - PythonBundle + - PythonPackage + - Tarball - Toolchain - **Extension** - ExtensionEasyBlock @@ -310,19 +410,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) @@ -334,8 +450,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 ) From 8707b3cf417d15ac9921b450d10ef61823e7b750 Mon Sep 17 00:00:00 2001 From: Simon Branford Date: Sun, 2 Mar 2025 13:53:56 +0000 Subject: [PATCH 12/26] test_github_merge_pr --- test/framework/options.py | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/test/framework/options.py b/test/framework/options.py index 9f96fe43eb..f769a6b8dc 100644 --- a/test/framework/options.py +++ b/test/framework/options.py @@ -5216,25 +5216,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) @@ -5243,7 +5243,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, @@ -5251,12 +5251,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!", From 776cfef0df3f019e8b2dd93cad0585081cd49777 Mon Sep 17 00:00:00 2001 From: Simon Branford Date: Sun, 2 Mar 2025 13:56:35 +0000 Subject: [PATCH 13/26] oh look, I broke the tests! --- test/framework/docs.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/test/framework/docs.py b/test/framework/docs.py index 6875f705dc..7bd72d30d0 100644 --- a/test/framework/docs.py +++ b/test/framework/docs.py @@ -718,15 +718,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', From c996ba562de62e5ead3d55bf5b30278204ef3267 Mon Sep 17 00:00:00 2001 From: Simon Branford <4967+branfosj@users.noreply.github.com> Date: Sun, 2 Mar 2025 14:09:34 +0000 Subject: [PATCH 14/26] remove authorship --- test/framework/sandbox/easybuild/easyblocks/b/binutils.py | 2 -- test/framework/sandbox/easybuild/easyblocks/b/bzip2.py | 2 -- test/framework/sandbox/easybuild/easyblocks/c/cmake.py | 2 -- test/framework/sandbox/easybuild/easyblocks/f/fftwmpi.py | 2 -- test/framework/sandbox/easybuild/easyblocks/f/flex.py | 2 -- test/framework/sandbox/easybuild/easyblocks/f/freetype.py | 2 -- test/framework/sandbox/easybuild/easyblocks/generic/bundle.py | 2 -- .../framework/sandbox/easybuild/easyblocks/generic/cmakemake.py | 2 -- test/framework/sandbox/easybuild/easyblocks/generic/cmdcp.py | 2 -- .../sandbox/easybuild/easyblocks/generic/mesonninja.py | 2 -- .../sandbox/easybuild/easyblocks/generic/perlbundle.py | 2 -- .../sandbox/easybuild/easyblocks/generic/pythonpackage.py | 2 -- test/framework/sandbox/easybuild/easyblocks/generic/tarball.py | 2 -- test/framework/sandbox/easybuild/easyblocks/l/libxml2.py | 2 -- test/framework/sandbox/easybuild/easyblocks/l/llvm.py | 2 -- test/framework/sandbox/easybuild/easyblocks/m/mesa.py | 2 -- .../framework/sandbox/easybuild/easyblocks/o/openssl_wrapper.py | 2 -- test/framework/sandbox/easybuild/easyblocks/p/perl.py | 2 -- test/framework/sandbox/easybuild/easyblocks/p/python.py | 2 -- test/framework/sandbox/easybuild/easyblocks/x/xcrysden.py | 2 -- 20 files changed, 40 deletions(-) diff --git a/test/framework/sandbox/easybuild/easyblocks/b/binutils.py b/test/framework/sandbox/easybuild/easyblocks/b/binutils.py index 27d13856bd..abae626602 100644 --- a/test/framework/sandbox/easybuild/easyblocks/b/binutils.py +++ b/test/framework/sandbox/easybuild/easyblocks/b/binutils.py @@ -24,8 +24,6 @@ ## """ Dummy easyblock for binutils - -@author: Kenneth Hoste (Ghent University) """ from easybuild.framework.easyblock import EasyBlock diff --git a/test/framework/sandbox/easybuild/easyblocks/b/bzip2.py b/test/framework/sandbox/easybuild/easyblocks/b/bzip2.py index 77ba16971c..246da8f9d9 100644 --- a/test/framework/sandbox/easybuild/easyblocks/b/bzip2.py +++ b/test/framework/sandbox/easybuild/easyblocks/b/bzip2.py @@ -24,8 +24,6 @@ ## """ Dummy easyblock for bzip2 - -@author: Kenneth Hoste (Ghent University) """ from easybuild.framework.easyblock import EasyBlock diff --git a/test/framework/sandbox/easybuild/easyblocks/c/cmake.py b/test/framework/sandbox/easybuild/easyblocks/c/cmake.py index 2c48525490..3bf181b3ac 100644 --- a/test/framework/sandbox/easybuild/easyblocks/c/cmake.py +++ b/test/framework/sandbox/easybuild/easyblocks/c/cmake.py @@ -24,8 +24,6 @@ ## """ Dummy easyblock for CMake - -@author: Kenneth Hoste (Ghent University) """ from easybuild.framework.easyblock import EasyBlock diff --git a/test/framework/sandbox/easybuild/easyblocks/f/fftwmpi.py b/test/framework/sandbox/easybuild/easyblocks/f/fftwmpi.py index c8f3ee3e7e..d7c468a8a9 100644 --- a/test/framework/sandbox/easybuild/easyblocks/f/fftwmpi.py +++ b/test/framework/sandbox/easybuild/easyblocks/f/fftwmpi.py @@ -24,8 +24,6 @@ ## """ Dummy easyblock for FFTW.MPI - -@author: Kenneth Hoste (Ghent University) """ from easybuild.framework.easyblock import EasyBlock diff --git a/test/framework/sandbox/easybuild/easyblocks/f/flex.py b/test/framework/sandbox/easybuild/easyblocks/f/flex.py index 34f65f424e..d06874c3d4 100644 --- a/test/framework/sandbox/easybuild/easyblocks/f/flex.py +++ b/test/framework/sandbox/easybuild/easyblocks/f/flex.py @@ -24,8 +24,6 @@ ## """ Dummy easyblock for flex - -@author: Kenneth Hoste (Ghent University) """ from easybuild.framework.easyblock import EasyBlock diff --git a/test/framework/sandbox/easybuild/easyblocks/f/freetype.py b/test/framework/sandbox/easybuild/easyblocks/f/freetype.py index f059af6cb6..9149ab8e42 100644 --- a/test/framework/sandbox/easybuild/easyblocks/f/freetype.py +++ b/test/framework/sandbox/easybuild/easyblocks/f/freetype.py @@ -24,8 +24,6 @@ ## """ Dummy easyblock for freetype - -@author: Kenneth Hoste (Ghent University) """ from easybuild.framework.easyblock import EasyBlock diff --git a/test/framework/sandbox/easybuild/easyblocks/generic/bundle.py b/test/framework/sandbox/easybuild/easyblocks/generic/bundle.py index 1e8fbd3629..11cece6a3f 100644 --- a/test/framework/sandbox/easybuild/easyblocks/generic/bundle.py +++ b/test/framework/sandbox/easybuild/easyblocks/generic/bundle.py @@ -24,8 +24,6 @@ ## """ Dummy support for building and installing a bundle of applications. - -@author: Kenneth Hoste (Ghent University) """ from easybuild.framework.easyblock import EasyBlock diff --git a/test/framework/sandbox/easybuild/easyblocks/generic/cmakemake.py b/test/framework/sandbox/easybuild/easyblocks/generic/cmakemake.py index 9abf732ad8..d0728fabbe 100644 --- a/test/framework/sandbox/easybuild/easyblocks/generic/cmakemake.py +++ b/test/framework/sandbox/easybuild/easyblocks/generic/cmakemake.py @@ -24,8 +24,6 @@ ## """ Dummy support for building and installing applications with CMake. - -@author: Kenneth Hoste (Ghent University) """ from easybuild.framework.easyblock import EasyBlock diff --git a/test/framework/sandbox/easybuild/easyblocks/generic/cmdcp.py b/test/framework/sandbox/easybuild/easyblocks/generic/cmdcp.py index a773c89bcf..f0850dac39 100644 --- a/test/framework/sandbox/easybuild/easyblocks/generic/cmdcp.py +++ b/test/framework/sandbox/easybuild/easyblocks/generic/cmdcp.py @@ -24,8 +24,6 @@ ## """ Dummy support for building and installing applications via a command and copy. - -@author: Kenneth Hoste (Ghent University) """ from easybuild.framework.easyblock import EasyBlock diff --git a/test/framework/sandbox/easybuild/easyblocks/generic/mesonninja.py b/test/framework/sandbox/easybuild/easyblocks/generic/mesonninja.py index d3f1b6db5c..1251af1d0c 100644 --- a/test/framework/sandbox/easybuild/easyblocks/generic/mesonninja.py +++ b/test/framework/sandbox/easybuild/easyblocks/generic/mesonninja.py @@ -24,8 +24,6 @@ ## """ Dummy support for building and installing applications with Meson and Ninja. - -@author: Kenneth Hoste (Ghent University) """ from easybuild.framework.easyblock import EasyBlock diff --git a/test/framework/sandbox/easybuild/easyblocks/generic/perlbundle.py b/test/framework/sandbox/easybuild/easyblocks/generic/perlbundle.py index 01c878b836..4594ceb303 100644 --- a/test/framework/sandbox/easybuild/easyblocks/generic/perlbundle.py +++ b/test/framework/sandbox/easybuild/easyblocks/generic/perlbundle.py @@ -24,8 +24,6 @@ ## """ Dummy easyblock for Makecp. - -@author: Miguel Dias Costa (National University of Singapore) """ from easybuild.framework.easyblock import EasyBlock from easybuild.framework.easyconfig import CUSTOM diff --git a/test/framework/sandbox/easybuild/easyblocks/generic/pythonpackage.py b/test/framework/sandbox/easybuild/easyblocks/generic/pythonpackage.py index 8a6443d273..35bc926829 100644 --- a/test/framework/sandbox/easybuild/easyblocks/generic/pythonpackage.py +++ b/test/framework/sandbox/easybuild/easyblocks/generic/pythonpackage.py @@ -24,8 +24,6 @@ ## """ Dummy support for building and installing a Python package. - -@author: Kenneth Hoste (Ghent University) """ from easybuild.framework.easyblock import EasyBlock from easybuild.framework.easyconfig import CUSTOM diff --git a/test/framework/sandbox/easybuild/easyblocks/generic/tarball.py b/test/framework/sandbox/easybuild/easyblocks/generic/tarball.py index 9281c6ec2d..012c05b67b 100644 --- a/test/framework/sandbox/easybuild/easyblocks/generic/tarball.py +++ b/test/framework/sandbox/easybuild/easyblocks/generic/tarball.py @@ -24,8 +24,6 @@ ## """ Dummy support for building and installing applications from a Tarball. - -@author: Kenneth Hoste (Ghent University) """ from easybuild.framework.easyblock import EasyBlock diff --git a/test/framework/sandbox/easybuild/easyblocks/l/libxml2.py b/test/framework/sandbox/easybuild/easyblocks/l/libxml2.py index 8b2e85c5ce..d0153d43a3 100644 --- a/test/framework/sandbox/easybuild/easyblocks/l/libxml2.py +++ b/test/framework/sandbox/easybuild/easyblocks/l/libxml2.py @@ -24,8 +24,6 @@ ## """ Dummy easyblock for libxml2 - -@author: Kenneth Hoste (Ghent University) """ from easybuild.framework.easyblock import EasyBlock diff --git a/test/framework/sandbox/easybuild/easyblocks/l/llvm.py b/test/framework/sandbox/easybuild/easyblocks/l/llvm.py index eb92e0dacb..b59bae4acb 100644 --- a/test/framework/sandbox/easybuild/easyblocks/l/llvm.py +++ b/test/framework/sandbox/easybuild/easyblocks/l/llvm.py @@ -24,8 +24,6 @@ ## """ Dummy easyblock for LLVM - -@author: Kenneth Hoste (Ghent University) """ from easybuild.framework.easyblock import EasyBlock diff --git a/test/framework/sandbox/easybuild/easyblocks/m/mesa.py b/test/framework/sandbox/easybuild/easyblocks/m/mesa.py index 9b3de8ed94..3086985eb1 100644 --- a/test/framework/sandbox/easybuild/easyblocks/m/mesa.py +++ b/test/framework/sandbox/easybuild/easyblocks/m/mesa.py @@ -24,8 +24,6 @@ ## """ Dummy easyblock for Mesa - -@author: Kenneth Hoste (Ghent University) """ from easybuild.framework.easyblock import EasyBlock diff --git a/test/framework/sandbox/easybuild/easyblocks/o/openssl_wrapper.py b/test/framework/sandbox/easybuild/easyblocks/o/openssl_wrapper.py index 7a270cbbee..d3f32361dd 100644 --- a/test/framework/sandbox/easybuild/easyblocks/o/openssl_wrapper.py +++ b/test/framework/sandbox/easybuild/easyblocks/o/openssl_wrapper.py @@ -24,8 +24,6 @@ ## """ Dummy easyblock for OpenSSL_wrapper - -@author: Kenneth Hoste (Ghent University) """ from easybuild.framework.easyblock import EasyBlock diff --git a/test/framework/sandbox/easybuild/easyblocks/p/perl.py b/test/framework/sandbox/easybuild/easyblocks/p/perl.py index 613dab3c51..463b14b57d 100644 --- a/test/framework/sandbox/easybuild/easyblocks/p/perl.py +++ b/test/framework/sandbox/easybuild/easyblocks/p/perl.py @@ -24,8 +24,6 @@ ## """ Dummy easyblock for Perl - -@author: Kenneth Hoste (Ghent University) """ from easybuild.framework.easyblock import EasyBlock diff --git a/test/framework/sandbox/easybuild/easyblocks/p/python.py b/test/framework/sandbox/easybuild/easyblocks/p/python.py index ffa121a601..e6e43ed0cf 100644 --- a/test/framework/sandbox/easybuild/easyblocks/p/python.py +++ b/test/framework/sandbox/easybuild/easyblocks/p/python.py @@ -24,8 +24,6 @@ ## """ Dummy easyblock for Python - -@author: Kenneth Hoste (Ghent University) """ from easybuild.framework.easyblock import EasyBlock diff --git a/test/framework/sandbox/easybuild/easyblocks/x/xcrysden.py b/test/framework/sandbox/easybuild/easyblocks/x/xcrysden.py index b90f6e00d8..4c46df68a0 100644 --- a/test/framework/sandbox/easybuild/easyblocks/x/xcrysden.py +++ b/test/framework/sandbox/easybuild/easyblocks/x/xcrysden.py @@ -24,8 +24,6 @@ ## """ Dummy easyblock for XCrySDen - -@author: Kenneth Hoste (Ghent University) """ from easybuild.framework.easyblock import EasyBlock From 5bd31214440cbec8142dd8d63c64d7cbc5ea8e82 Mon Sep 17 00:00:00 2001 From: Simon Branford Date: Sun, 2 Mar 2025 14:02:01 +0000 Subject: [PATCH 15/26] test_github_fetch_files_from_pr_cache --- test/framework/github.py | 32 +++++++++++++------------------- 1 file changed, 13 insertions(+), 19 deletions(-) diff --git a/test/framework/github.py b/test/framework/github.py index 7c1bceb79c..ea862afb05 100644 --- a/test/framework/github.py +++ b/test/framework/github.py @@ -477,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 From 5a7d5a4e7afbc5263720b44daad84559d3d42315 Mon Sep 17 00:00:00 2001 From: Simon Branford Date: Sun, 2 Mar 2025 14:12:09 +0000 Subject: [PATCH 16/26] simplify --- .../easybuild/easyblocks/generic/perlbundle.py | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/test/framework/sandbox/easybuild/easyblocks/generic/perlbundle.py b/test/framework/sandbox/easybuild/easyblocks/generic/perlbundle.py index 4594ceb303..5908c9ff09 100644 --- a/test/framework/sandbox/easybuild/easyblocks/generic/perlbundle.py +++ b/test/framework/sandbox/easybuild/easyblocks/generic/perlbundle.py @@ -23,20 +23,12 @@ # along with EasyBuild. If not, see . ## """ -Dummy easyblock for Makecp. +Dummy easyblock for bundle of Perl modules. """ from easybuild.framework.easyblock import EasyBlock from easybuild.framework.easyconfig import CUSTOM class PerlBundle(EasyBlock): - """Dummy support for bundle of modules.""" - - @staticmethod - def extra_options(extra_vars=None): - if extra_vars is None: - extra_vars = {} - extra_vars.update({ - 'components': [(), "List of components to install: tuples w/ name, version and easyblock to use", CUSTOM], - }) - return EasyBlock.extra_options(extra_vars) + """Dummy support for bundle of Perl modules.""" + pass From dd6415b44a075b6852ee1cce342a7ad4617c99c6 Mon Sep 17 00:00:00 2001 From: Simon Branford Date: Sun, 2 Mar 2025 14:14:36 +0000 Subject: [PATCH 17/26] f8 --- .../framework/sandbox/easybuild/easyblocks/generic/perlbundle.py | 1 - 1 file changed, 1 deletion(-) diff --git a/test/framework/sandbox/easybuild/easyblocks/generic/perlbundle.py b/test/framework/sandbox/easybuild/easyblocks/generic/perlbundle.py index 5908c9ff09..0644157561 100644 --- a/test/framework/sandbox/easybuild/easyblocks/generic/perlbundle.py +++ b/test/framework/sandbox/easybuild/easyblocks/generic/perlbundle.py @@ -26,7 +26,6 @@ Dummy easyblock for bundle of Perl modules. """ from easybuild.framework.easyblock import EasyBlock -from easybuild.framework.easyconfig import CUSTOM class PerlBundle(EasyBlock): From 015dc6a35c055304019a4200b8be9562fa61eb74 Mon Sep 17 00:00:00 2001 From: Simon Branford Date: Sun, 2 Mar 2025 14:19:44 +0000 Subject: [PATCH 18/26] test_github_review_pr --- test/framework/options.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/framework/options.py b/test/framework/options.py index f769a6b8dc..65b1e8f5d0 100644 --- a/test/framework/options.py +++ b/test/framework/options.py @@ -4268,17 +4268,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) From b623f403cd8dc6e8e6863578fe7d41488e5eddd5 Mon Sep 17 00:00:00 2001 From: Simon Branford Date: Sun, 2 Mar 2025 14:46:09 +0000 Subject: [PATCH 19/26] test_github_from_pr_x --- test/framework/options.py | 42 ++++++++++++++++++--------------------- 1 file changed, 19 insertions(+), 23 deletions(-) diff --git a/test/framework/options.py b/test/framework/options.py index 65b1e8f5d0..bfe4daee11 100644 --- a/test/framework/options.py +++ b/test/framework/options.py @@ -2214,19 +2214,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) @@ -2237,8 +2233,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), ] @@ -3909,7 +3905,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, @@ -3923,7 +3919,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') @@ -3953,7 +3949,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, @@ -3967,9 +3963,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') @@ -4003,8 +3999,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=3547,3634', # PRs for Bundle and GROMACS easyblock '--unittest-file=%s' % self.logfile, '--github-user=%s' % GITHUB_TEST_ACCOUNT, '--extended-dry-run', @@ -4018,25 +4014,25 @@ 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 bundle.py included from PR #3547\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', 'x', 'XCrySDen', + 'XCrySDen-1.6.2-foss-2024a.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"Successfully obtained Bundle class instance from easybuild.easyblocks.generic.bundle", 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('PETSc') 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.generic.bundle'] def mk_eb_test_cmd(self, args): """Construct test command for 'eb' with given options.""" From 75f284394af1acaf6c18d71ac434f9fb442f1b2c Mon Sep 17 00:00:00 2001 From: Simon Branford Date: Sun, 2 Mar 2025 14:54:42 +0000 Subject: [PATCH 20/26] test_github_from_pr_listed_ecs --- test/framework/options.py | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/test/framework/options.py b/test/framework/options.py index bfe4daee11..f18a7526b1 100644 --- a/test/framework/options.py +++ b/test/framework/options.py @@ -2169,10 +2169,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, @@ -2185,10 +2185,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: From ea6911741da7cbb5721f26b61ce9f0438cec868f Mon Sep 17 00:00:00 2001 From: Simon Branford Date: Sun, 2 Mar 2025 14:55:29 +0000 Subject: [PATCH 21/26] f8 --- test/framework/options.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/framework/options.py b/test/framework/options.py index f18a7526b1..6b6f4f68f5 100644 --- a/test/framework/options.py +++ b/test/framework/options.py @@ -4022,7 +4022,8 @@ def test_github_xxx_include_easyblocks_from_pr(self): 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 Bundle class instance from easybuild.easyblocks.generic.bundle", re.M) + eb_regex = re.compile(r"Successfully obtained Bundle class instance from easybuild.easyblocks.generic.bundle", + re.M) self.assertTrue(eb_regex.search(logtxt), "Pattern '%s' found in: %s" % (eb_regex.pattern, logtxt)) # easyblock is found via get_easyblock_class From 4f32825d5a32b72cc95f1649229a0918a2426b73 Mon Sep 17 00:00:00 2001 From: Simon Branford Date: Sun, 2 Mar 2025 15:01:38 +0000 Subject: [PATCH 22/26] more --- test/framework/options.py | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/test/framework/options.py b/test/framework/options.py index 6b6f4f68f5..01e441aba2 100644 --- a/test/framework/options.py +++ b/test/framework/options.py @@ -2037,8 +2037,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'), @@ -2050,15 +2050,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('/')) @@ -2066,7 +2058,6 @@ 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)) From ee156f4a1a25f54da1d97bd17b5c941e0e1bab81 Mon Sep 17 00:00:00 2001 From: Simon Branford Date: Sun, 2 Mar 2025 15:31:18 +0000 Subject: [PATCH 23/26] test_github_xxx_include_easyblocks_from_pr --- test/framework/options.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/test/framework/options.py b/test/framework/options.py index 01e441aba2..8c205f0bef 100644 --- a/test/framework/options.py +++ b/test/framework/options.py @@ -3989,7 +3989,7 @@ def test_github_xxx_include_easyblocks_from_pr(self): args = [ '--from-pr=22227', # PR for Togl easyconfig - '--include-easyblocks-from-pr=3547,3634', # PRs for Bundle and GROMACS easyblock + '--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', @@ -4003,26 +4003,26 @@ def test_github_xxx_include_easyblocks_from_pr(self): logtxt = read_file(self.logfile) self.assertFalse(stderr) - self.assertEqual(stdout, "== easyblock bundle.py included from PR #3547\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_pr22227', 'x', 'XCrySDen', - 'XCrySDen-1.6.2-foss-2024a.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 Bundle class instance from easybuild.easyblocks.generic.bundle", - 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('PETSc') + 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.generic.bundle'] + del sys.modules['easybuild.easyblocks.xcrysden'] def mk_eb_test_cmd(self, args): """Construct test command for 'eb' with given options.""" From 0bf337e315c9917f71106d30deb8c7ef616aab46 Mon Sep 17 00:00:00 2001 From: Simon Branford Date: Sun, 2 Mar 2025 15:39:01 +0000 Subject: [PATCH 24/26] test_github_from_pr --- test/framework/options.py | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/test/framework/options.py b/test/framework/options.py index 8c205f0bef..395f2d6fc6 100644 --- a/test/framework/options.py +++ b/test/framework/options.py @@ -2058,10 +2058,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)) - 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: @@ -2071,8 +2068,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'), @@ -2084,8 +2081,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('/')) @@ -2093,11 +2090,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)) From 59974d1accfbf61affc54ead309dc8b7ba40ef56 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Mon, 17 Mar 2025 22:21:05 +0100 Subject: [PATCH 25/26] fix test_det_copy_ec_specs --- test/framework/easyconfig.py | 45 ++++++++++++++---------------------- 1 file changed, 17 insertions(+), 28 deletions(-) diff --git a/test/framework/easyconfig.py b/test/framework/easyconfig.py index b4728790fe..21a6066557 100644 --- a/test/framework/easyconfig.py +++ b/test/framework/easyconfig.py @@ -4824,62 +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/22365 - from_pr = 22365 - environ_ec_fn = 'Environ-3.1-foss-2024a.eb' - qe1_ec_fn = 'QuantumESPRESSO-7.4-foss-2024a-Environ-3.1.eb' - qe2_ec_fn = 'QuantumESPRESSO-7.4-foss-2024a.eb' - qe_patch_fn = 'QuantumESPRESSO-7.4-parallel-symmetrization.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 = [ - environ_ec_fn, - qe1_ec_fn, - qe2_ec_fn, - qe_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), 4) + 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 = [qe2_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]), qe2_ec_fn) + self.assertEqual(os.path.basename(paths[0]), ec_fn) self.assertEqual(target_path, 'target_dir') - args = [qe2_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]), qe2_ec_fn) - self.assertTrue(os.path.samefile(target_path, cwd)) - - args = [environ_ec_fn, qe1_ec_fn] - paths, target_path = det_copy_ec_specs(args, from_pr) - self.assertEqual(len(paths), 2) - self.assertEqual(os.path.basename(paths[0]), environ_ec_fn) - self.assertEqual(os.path.basename(paths[1]), qe1_ec_fn) + self.assertEqual(os.path.basename(paths[0]), ec_fn) self.assertTrue(os.path.samefile(target_path, cwd)) - args = [qe2_ec_fn, qe_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]), qe2_ec_fn) - self.assertEqual(os.path.basename(paths[1]), qe_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 = [environ_ec_fn, 'test.eb', 'test.patch', qe_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]), environ_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]), qe_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): From b0448fb37dd28f77891c98a946410fa21d5bc0a7 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Mon, 17 Mar 2025 22:30:18 +0100 Subject: [PATCH 26/26] fix test_github_copy_ec_from_pr --- test/framework/options.py | 36 +++++++++++++++++------------------- 1 file changed, 17 insertions(+), 19 deletions(-) diff --git a/test/framework/options.py b/test/framework/options.py index 9cd94e166a..4b561d9b2f 100644 --- a/test/framework/options.py +++ b/test/framework/options.py @@ -1443,61 +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_pr22365 = [ - 'Environ-3.1-foss-2024a.eb', - 'QuantumESPRESSO-7.4-foss-2024a-Environ-3.1.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', '22365'] + args = ['--copy-ec', '--from-pr', '22345'] stdout = self.mocked_main(args) - regex = re.compile(r"4 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_pr22365: + 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', '22365', test_target_dir] + args = ['--copy-ec', '--from-pr', '22345', test_target_dir] stdout = self.mocked_main(args) - regex = re.compile(r"4 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_pr22365: + 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 = 'Environ-3.1-foss-2024a.eb' - args = ['--copy-ec', '--from-pr', '22365', 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 = 'Environ'", 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 - environ_ec = os.path.join(self.test_prefix, 'Environ.eb') + 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 .*/Environ.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(environ_ec) - self.assertIn("name = 'Environ'", read_file(environ_ec)) + self.assertIn("name = 'QuantumESPRESSO'", read_file(environ_ec)) change_dir(cwd) remove_dir(test_working_dir) @@ -1506,7 +1504,7 @@ def test_github_copy_ec_from_pr(self): # test copying of a patch file from a PR via --copy-ec to current directory patch_fn = 'QuantumESPRESSO-7.4-parallel-symmetrization.patch' - args = ['--copy-ec', '--from-pr', '22365', patch_fn, '.'] + args = ['--copy-ec', '--from-pr', '22345', patch_fn, '.'] stdout = self.mocked_main(args) self.assertEqual(os.listdir(test_working_dir), [patch_fn]) @@ -1517,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', '22365', 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 = 'Environ'", 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', '22365', 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)))