From 54f4fa352c340bace4a321a65de13ac6cdfcba09 Mon Sep 17 00:00:00 2001 From: vsc46128 vscuser Date: Fri, 2 May 2025 12:07:39 +0200 Subject: [PATCH 01/26] add ordering of targets to available software script --- .../available_software/available_software.py | 28 ++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/scripts/available_software/available_software.py b/scripts/available_software/available_software.py index e19e7ecef..267a25060 100644 --- a/scripts/available_software/available_software.py +++ b/scripts/available_software/available_software.py @@ -233,7 +233,33 @@ def modules_eessi() -> dict: if modulepath: module_unuse(modulepath) - targets = [t for t in targets_eessi() if not any(t.endswith(x) for x in EXCLUDE_CPU_TARGETS)] + targets = targets_eessi() + + # Order targets + generic_target_x86_64 = [] + generic_target_aarch64 = [] + targets_x86_64 = [] + targets_aarch64 = [] + for target in targets: + t = target.split('/') + if t[7] == 'aarch64': + if t[-1] == "generic": + generic_target_aarch64.append(target) + else: + targets_aarch64.append(target) + elif t[7] == 'x86_64': + if t[-1] == "generic": + generic_target_x86_64.append(target) + else: + targets_x86_64.append(target) + ordered_targets = [] + ordered_targets.extend(generic_target_x86_64) + ordered_targets.extend(np.sort(targets_x86_64)) + ordered_targets.extend(generic_target_aarch64) + ordered_targets.extend(np.sort(targets_aarch64)) + + targets = [t for t in ordered_targets if not any(t.endswith(x) for x in EXCLUDE_CPU_TARGETS)] + for target in targets: print(f"\t Collecting available modules for {target}... ", end="", flush=True) module_use(target + "/modules/all/") From 2e12ae56b13fba017e63aba0c3a19c5b479e6482 Mon Sep 17 00:00:00 2001 From: laraPPr Date: Fri, 2 May 2025 12:10:08 +0200 Subject: [PATCH 02/26] fix tests for adding ordered targets --- .../tests/data/test_json_simple_sol.json | 2 +- .../tests/data/test_json_simple_sol_detail.json | 2 +- .../available_software/tests/data/test_md_simple_sol.md | 6 +++--- .../tests/data/test_md_template_detailed_science_sol.md | 2 +- scripts/available_software/tests/test_json.py | 8 ++++---- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/scripts/available_software/tests/data/test_json_simple_sol.json b/scripts/available_software/tests/data/test_json_simple_sol.json index 5d14435a7..ed6fdd644 100644 --- a/scripts/available_software/tests/data/test_json_simple_sol.json +++ b/scripts/available_software/tests/data/test_json_simple_sol.json @@ -1 +1 @@ -{"time_generated":"dummy", "targets": ["/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/generic", "/cvmfs/software.eessi.io/versions/2023.06/software/linux/x86_64/amd/zen2"], "modules": {"Markov": [1, 0], "cfd": [1, 1], "llm": [0, 1], "science": [1, 1]}} +{"time_generated":"dummy", "targets": ["/cvmfs/software.eessi.io/versions/2023.06/software/linux/x86_64/amd/zen2", "/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/generic"], "modules": {"Markov": [0, 1], "cfd": [1, 1], "llm": [1, 0], "science": [1, 1]}} diff --git a/scripts/available_software/tests/data/test_json_simple_sol_detail.json b/scripts/available_software/tests/data/test_json_simple_sol_detail.json index e5df36b94..61d028cca 100644 --- a/scripts/available_software/tests/data/test_json_simple_sol_detail.json +++ b/scripts/available_software/tests/data/test_json_simple_sol_detail.json @@ -1 +1 @@ -{"targets": ["/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/generic", "/cvmfs/software.eessi.io/versions/2023.06/software/linux/x86_64/amd/zen2"], "software": {"cfd": {"targets": ["/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/generic", "/cvmfs/software.eessi.io/versions/2023.06/software/linux/x86_64/amd/zen2"], "versions": {"cfd/1.0": {"targets": ["/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/generic", "/cvmfs/software.eessi.io/versions/2023.06/software/linux/x86_64/amd/zen2"]}, "cfd/2.0": {"targets": ["/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/generic", "/cvmfs/software.eessi.io/versions/2023.06/software/linux/x86_64/amd/zen2"]}, "cfd/24": {"targets": ["/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/generic", "/cvmfs/software.eessi.io/versions/2023.06/software/linux/x86_64/amd/zen2"]}, "cfd/5.0": {"targets": ["/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/generic", "/cvmfs/software.eessi.io/versions/2023.06/software/linux/x86_64/amd/zen2"]}, "cfd/2.0afqsdf": {"targets": ["/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/generic", "/cvmfs/software.eessi.io/versions/2023.06/software/linux/x86_64/amd/zen2"]}, "cfd/3.0": {"targets": ["/cvmfs/software.eessi.io/versions/2023.06/software/linux/x86_64/amd/zen2"]}}}, "Markov": {"targets": ["/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/generic"], "versions": {"Markov/hidden-1.0.5": {"targets": ["/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/generic"]}, "Markov/hidden-1.0.10": {"targets": ["/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/generic"]}}}, "science": {"targets": ["/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/generic", "/cvmfs/software.eessi.io/versions/2023.06/software/linux/x86_64/amd/zen2"], "versions": {"science/5.3.0": {"targets": ["/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/generic", "/cvmfs/software.eessi.io/versions/2023.06/software/linux/x86_64/amd/zen2"]}, "science/7.2.0": {"targets": ["/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/generic", "/cvmfs/software.eessi.io/versions/2023.06/software/linux/x86_64/amd/zen2"]}}}, "llm": {"targets": ["/cvmfs/software.eessi.io/versions/2023.06/software/linux/x86_64/amd/zen2"], "versions": {"llm/20230627": {"targets": ["/cvmfs/software.eessi.io/versions/2023.06/software/linux/x86_64/amd/zen2"]}}}}, "time_generated": "Thu, 31 Aug 2023 at 14:00:22 CEST"} +{"targets": ["/cvmfs/software.eessi.io/versions/2023.06/software/linux/x86_64/amd/zen2", "/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/generic"], "software": {"cfd": {"targets": ["/cvmfs/software.eessi.io/versions/2023.06/software/linux/x86_64/amd/zen2", "/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/generic"], "versions": {"cfd/1.0": {"targets": ["/cvmfs/software.eessi.io/versions/2023.06/software/linux/x86_64/amd/zen2", "/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/generic"]}, "cfd/2.0": {"targets": ["/cvmfs/software.eessi.io/versions/2023.06/software/linux/x86_64/amd/zen2", "/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/generic"]}, "cfd/24": {"targets": ["/cvmfs/software.eessi.io/versions/2023.06/software/linux/x86_64/amd/zen2", "/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/generic"]}, "cfd/5.0": {"targets": ["/cvmfs/software.eessi.io/versions/2023.06/software/linux/x86_64/amd/zen2", "/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/generic"]}, "cfd/2.0afqsdf": {"targets": ["/cvmfs/software.eessi.io/versions/2023.06/software/linux/x86_64/amd/zen2", "/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/generic"]}, "cfd/3.0": {"targets": ["/cvmfs/software.eessi.io/versions/2023.06/software/linux/x86_64/amd/zen2"]}}}, "Markov": {"targets": ["/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/generic"], "versions": {"Markov/hidden-1.0.5": {"targets": ["/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/generic"]}, "Markov/hidden-1.0.10": {"targets": ["/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/generic"]}}}, "science": {"targets": ["/cvmfs/software.eessi.io/versions/2023.06/software/linux/x86_64/amd/zen2", "/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/generic"], "versions": {"science/5.3.0": {"targets": ["/cvmfs/software.eessi.io/versions/2023.06/software/linux/x86_64/amd/zen2", "/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/generic"]}, "science/7.2.0": {"targets": ["/cvmfs/software.eessi.io/versions/2023.06/software/linux/x86_64/amd/zen2", "/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/generic"]}}}, "llm": {"targets": ["/cvmfs/software.eessi.io/versions/2023.06/software/linux/x86_64/amd/zen2"], "versions": {"llm/20230627": {"targets": ["/cvmfs/software.eessi.io/versions/2023.06/software/linux/x86_64/amd/zen2"]}}}}, "time_generated": "Thu, 31 Aug 2023 at 14:00:22 CEST"} diff --git a/scripts/available_software/tests/data/test_md_simple_sol.md b/scripts/available_software/tests/data/test_md_simple_sol.md index 88812fe34..d26b56912 100644 --- a/scripts/available_software/tests/data/test_md_simple_sol.md +++ b/scripts/available_software/tests/data/test_md_simple_sol.md @@ -2,9 +2,9 @@ Overview Modules ================ -| |/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/generic|/cvmfs/software.eessi.io/versions/2023.06/software/linux/x86_64/amd/zen2| +| |/cvmfs/software.eessi.io/versions/2023.06/software/linux/x86_64/amd/zen2|/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/generic| | :---: | :---: | :---: | -|Markov|X| | +|Markov| |X| |cfd|X|X| -|llm| |X| +|llm|X| | |science|X|X| diff --git a/scripts/available_software/tests/data/test_md_template_detailed_science_sol.md b/scripts/available_software/tests/data/test_md_template_detailed_science_sol.md index de4f56f4e..491d635d7 100644 --- a/scripts/available_software/tests/data/test_md_template_detailed_science_sol.md +++ b/scripts/available_software/tests/data/test_md_template_detailed_science_sol.md @@ -44,7 +44,7 @@ module load science/7.2.0 *(This data was automatically generated on {{ generated_date }})* -| |aarch64/generic|x86_64/amd/zen2| +| |x86_64/amd/zen2|aarch64/generic| | :---: | :---: | :---: | |science/7.2.0|x|x| |science/5.3.0|x|x| diff --git a/scripts/available_software/tests/test_json.py b/scripts/available_software/tests/test_json.py index b7fec5778..8c7b254d4 100644 --- a/scripts/available_software/tests/test_json.py +++ b/scripts/available_software/tests/test_json.py @@ -6,7 +6,7 @@ import os import json -GENERIC = "/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/generic" +GENERIC_ARM = "/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/generic" ZEN2 = "/cvmfs/software.eessi.io/versions/2023.06/software/linux/x86_64/amd/zen2" @@ -39,11 +39,11 @@ def test_json_generate_simple(self): modules = modules_eessi() json_data = generate_json_overview_data(modules) assert len(json_data.keys()) == 3 - assert list(json_data["targets"]) == [GENERIC, ZEN2] + assert list(json_data["targets"]) == [ZEN2, GENERIC_ARM] assert json_data["modules"] == { - "Markov": [1, 0], + "Markov": [0, 1], "cfd": [1, 1], - "llm": [0, 1], + "llm": [1, 0], "science": [1, 1] } From 9f56640710dc8a523b37e14682b39310d9795ad1 Mon Sep 17 00:00:00 2001 From: laraPPr Date: Fri, 2 May 2025 12:19:48 +0200 Subject: [PATCH 03/26] add __pycache__ to gitignore --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index b5a6cebc8..594179dac 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ site/ venv* +scripts/available_software/__pycache__ +scripts/available_software/tests/__pycache__ From d39c0fa38da014f134369763f612e899f6a71b18 Mon Sep 17 00:00:00 2001 From: laraPPr Date: Fri, 2 May 2025 12:22:40 +0200 Subject: [PATCH 04/26] implement new order in overview.md --- docs/available_software/overview.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/available_software/overview.md b/docs/available_software/overview.md index 6cda3e1de..e22d03cfe 100644 --- a/docs/available_software/overview.md +++ b/docs/available_software/overview.md @@ -7,19 +7,16 @@ This table gives an overview of all the available software in EESSI per specific Name - aarch64 x86_64 + aarch64 - amd intel + - generic - neoverse_n1 - neoverse_v1 generic zen2 zen3 @@ -27,6 +24,9 @@ This table gives an overview of all the available software in EESSI per specific haswell skylake_avx512 sapphirerapids + generic + neoverse_n1 + neoverse_v1 From 65af95aa634216dd83762240475aa041917a7ecf Mon Sep 17 00:00:00 2001 From: laraPPr Date: Fri, 2 May 2025 12:26:40 +0200 Subject: [PATCH 05/26] make linter happy --- scripts/available_software/available_software.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/available_software/available_software.py b/scripts/available_software/available_software.py index 267a25060..f8413e930 100644 --- a/scripts/available_software/available_software.py +++ b/scripts/available_software/available_software.py @@ -257,7 +257,7 @@ def modules_eessi() -> dict: ordered_targets.extend(np.sort(targets_x86_64)) ordered_targets.extend(generic_target_aarch64) ordered_targets.extend(np.sort(targets_aarch64)) - + targets = [t for t in ordered_targets if not any(t.endswith(x) for x in EXCLUDE_CPU_TARGETS)] for target in targets: From 6af53632da1d49cdd16a26726c07d42ff1a28913 Mon Sep 17 00:00:00 2001 From: laraPPr Date: Fri, 2 May 2025 12:32:33 +0200 Subject: [PATCH 06/26] add scrollbar --- docs/available_software/javascripts/populate_overview.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/available_software/javascripts/populate_overview.js b/docs/available_software/javascripts/populate_overview.js index 822342deb..3f2bd69ae 100644 --- a/docs/available_software/javascripts/populate_overview.js +++ b/docs/available_software/javascripts/populate_overview.js @@ -43,7 +43,8 @@ function populate_overview(json_data) { targets: "_all", className: 'dt-body-center' } - ] + ], + scrollX: true, }); console.log(table) From 8abbb5565861153ce46127d9a8167989418826b3 Mon Sep 17 00:00:00 2001 From: Lara Ramona Peeters <49882639+laraPPr@users.noreply.github.com> Date: Fri, 2 May 2025 14:12:53 +0200 Subject: [PATCH 07/26] remove names of columns These names get generated by Javascript maybe it is easiest to add a test in the CI to check if the number of colums correspond with the data in the json files. --- docs/available_software/overview.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/docs/available_software/overview.md b/docs/available_software/overview.md index e22d03cfe..4bf29c250 100644 --- a/docs/available_software/overview.md +++ b/docs/available_software/overview.md @@ -17,16 +17,16 @@ This table gives an overview of all the available software in EESSI per specific - generic - zen2 - zen3 - zen4 - haswell - skylake_avx512 - sapphirerapids - generic - neoverse_n1 - neoverse_v1 + + + + + + + + + + From f99910434126f67095f66a47ef4133032075a793 Mon Sep 17 00:00:00 2001 From: laraPPr Date: Fri, 2 May 2025 17:35:32 +0200 Subject: [PATCH 08/26] add workflow for checking the overview.md page of available software --- .../test_overview_available_software.py | 64 +++++++++++++++++++ .../test_overview_available_software.yml | 28 ++++++++ docs/available_software/overview.md | 2 +- 3 files changed, 93 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/scripts/test_overview_available_software.py create mode 100644 .github/workflows/test_overview_available_software.yml diff --git a/.github/workflows/scripts/test_overview_available_software.py b/.github/workflows/scripts/test_overview_available_software.py new file mode 100644 index 000000000..61aa22976 --- /dev/null +++ b/.github/workflows/scripts/test_overview_available_software.py @@ -0,0 +1,64 @@ +import os +import json +from bs4 import BeautifulSoup + +path = os.path.dirname(os.path.realpath(__file__)) +path_overview = "/../../../docs/available_software/overview.md" +path_data = "/../../../docs/available_software/data/json_data.json" +if os.path.exists(path + path_overview) and os.path.exists(path + path_data): + with open(path + path_data) as json_data: + data = json.load(json_data) + with open(path + path_overview) as f: + soup = BeautifulSoup(f, "html.parser") +else: + os.write(1, b'Error: Could not find overview.md and/or data/json_data.json') + +# parse the numbers for the different targets +targets = data["targets"] +ARM_targets = [] +x86_targets = [] +amd_targets = [] +intel_targets = [] +nvidia_targets = [] + +for target in targets: + t = target.split('/') + if t[7] == 'aarch64': + ARM_targets.append(target) + else: + x86_targets.append(target) + if t[8] == "amd": + amd_targets.append(target) + elif t[8] == "intel": + intel_targets.append(target) + elif t[8] == 'nvidia': + nvidia_targets.append(target) + +# parse the overview.md page to check the number of colums in rows +table = soup.find("table", {"class": "table"}) +for row in table.find_all("tr"): + for column in row.find_all('th'): + if column.text == "x86_64": + print(f'the value for x86_64 is {column.get("colspan")} in the overview page but there are {len(x86_targets)} targets in json_data.json.) + if int(column.get("colspan")) != len(x86_targets): + os.write(2, b'Error: Please make sure the values for x86_64 in json_data.json and overview.md are the same.') + elif column.text == "aarch64": + print(f'the value for aarch64 is {column.get("colspan")} in the overview page but there are {len(ARM_targets)} targets in json_data.json.) + if int(column.get("colspan")) != len(ARM_targets): + os.write(2, b'Error: Please make sure the values for aarch64 in json_data.json and overview.md are the same.') + elif column.text == "amd": + print(f'the value for amd is {column.get("colspan")} in the overview page but there are {len(amd_targets)} targets in json_data.json.) + if int(column.get("colspan")) != len(amd_targets): + os.write(2, b'Error: Please make sure the values for amd in json_data.json and overview.md are the same.') + elif column.text == "intel": + print(f'the value for intel is {column.get("colspan")} in the overview page but there are {len(intel_targets)} targets in json_data.json.) + if int(column.get("colspan")) != len(intel_targets): + os.write(2, b'Error: Please make sure the values for intel in json_data.json and overview.md are the same.') + elif column.text == "nvidia": + print(f'the value for nvidia is {column.get("colspan")} in the overview page but there are {len(nvidia_targets)} targets in json_data.json.) + if int(column.get("colspan")) != len(nvidia_targets): + os.write(2, b'Error: Please make sure the values for nvidia in json_data.json and overview.md are the same.') +last_row = table.find_all("tr")[-1] +print(f'there are {len(last_row.find_all("th"))} columns in the overview page but {len(targets)} targets in json_data.json.') +if len(last_row.find_all("th")) != len(targets): + os.write(2, b'Error: Please make sure there are correct number of elements in the last element in overview.md for JavaScript to generate the table.') diff --git a/.github/workflows/test_overview_available_software.yml b/.github/workflows/test_overview_available_software.yml new file mode 100644 index 000000000..09c1dbe2c --- /dev/null +++ b/.github/workflows/test_overview_available_software.yml @@ -0,0 +1,28 @@ +name: Update overview of available software in EESSI +on: + push: + paths: + - ".github/**" + - "docs/available_software/data/**" +jobs: + check targets in overview.md and json_data.json: + if: github.repository_owner == 'EESSI' # Prevent running on forks + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6 + + - name: set up Python + uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d # v5.1.0 + with: + python-version: '3.10' + architecture: x64 + + - name: test overview available software + id: test_overview_available_software + run: | + # install required Python packages in virtual environment + python -m venv venv + . venv/bin/activate + pip install -r mkdocs-ldjson-plugin/requirements.txt + + python .github/workflows/scripts/test_overview_available_software.py diff --git a/docs/available_software/overview.md b/docs/available_software/overview.md index 4bf29c250..cfdfba690 100644 --- a/docs/available_software/overview.md +++ b/docs/available_software/overview.md @@ -10,7 +10,7 @@ This table gives an overview of all the available software in EESSI per specific x86_64 aarch64 - + amd intel From df848e1b9b07ab0f4839b12945a463cc287a9855 Mon Sep 17 00:00:00 2001 From: laraPPr Date: Fri, 2 May 2025 17:39:50 +0200 Subject: [PATCH 09/26] change name of workflow --- .github/workflows/test_overview_available_software.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test_overview_available_software.yml b/.github/workflows/test_overview_available_software.yml index 09c1dbe2c..60f3a8b31 100644 --- a/.github/workflows/test_overview_available_software.yml +++ b/.github/workflows/test_overview_available_software.yml @@ -1,4 +1,4 @@ -name: Update overview of available software in EESSI +name: Test overview of available software in EESSI on: push: paths: From 4aa8a6dc79a9cfadd6e2e49bafe0402d87d4be82 Mon Sep 17 00:00:00 2001 From: laraPPr Date: Fri, 2 May 2025 17:59:28 +0200 Subject: [PATCH 10/26] change action so that it will run for all not just prs with EESSI as owner --- .github/workflows/test_overview_available_software.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/test_overview_available_software.yml b/.github/workflows/test_overview_available_software.yml index 60f3a8b31..298d2f2d2 100644 --- a/.github/workflows/test_overview_available_software.yml +++ b/.github/workflows/test_overview_available_software.yml @@ -6,7 +6,6 @@ on: - "docs/available_software/data/**" jobs: check targets in overview.md and json_data.json: - if: github.repository_owner == 'EESSI' # Prevent running on forks runs-on: ubuntu-22.04 steps: - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6 From 6fb1c32665f71c4e614151f8366245d206e3b4fa Mon Sep 17 00:00:00 2001 From: laraPPr Date: Fri, 2 May 2025 18:07:15 +0200 Subject: [PATCH 11/26] fix indentation in yml file --- .github/workflows/test_overview_available_software.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test_overview_available_software.yml b/.github/workflows/test_overview_available_software.yml index 298d2f2d2..e2ffcfeef 100644 --- a/.github/workflows/test_overview_available_software.yml +++ b/.github/workflows/test_overview_available_software.yml @@ -2,8 +2,8 @@ name: Test overview of available software in EESSI on: push: paths: - - ".github/**" - - "docs/available_software/data/**" + - ".github/**" + - "docs/available_software/data/**" jobs: check targets in overview.md and json_data.json: runs-on: ubuntu-22.04 From 2d7e3eb0d30219f267295c9cf8636c445d5f23ae Mon Sep 17 00:00:00 2001 From: laraPPr Date: Fri, 2 May 2025 18:16:42 +0200 Subject: [PATCH 12/26] test new workflow --- .github/workflows/test_overview_available_software.yml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/.github/workflows/test_overview_available_software.yml b/.github/workflows/test_overview_available_software.yml index e2ffcfeef..63b610610 100644 --- a/.github/workflows/test_overview_available_software.yml +++ b/.github/workflows/test_overview_available_software.yml @@ -1,9 +1,6 @@ name: Test overview of available software in EESSI on: - push: - paths: - - ".github/**" - - "docs/available_software/data/**" + push jobs: check targets in overview.md and json_data.json: runs-on: ubuntu-22.04 From b40475c7f0c2473ec524478bc73e02f3e0dfc1c5 Mon Sep 17 00:00:00 2001 From: laraPPr Date: Fri, 2 May 2025 18:32:59 +0200 Subject: [PATCH 13/26] fix github workflow parsing error --- .github/workflows/test_overview_available_software.yml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test_overview_available_software.yml b/.github/workflows/test_overview_available_software.yml index 63b610610..19fec5b07 100644 --- a/.github/workflows/test_overview_available_software.yml +++ b/.github/workflows/test_overview_available_software.yml @@ -1,8 +1,12 @@ name: Test overview of available software in EESSI on: - push + push: + paths: + - ".github/**" + - "docs/available_software/data/**" jobs: - check targets in overview.md and json_data.json: + check_targets: + name: check targets in overview.md and json_data.json runs-on: ubuntu-22.04 steps: - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6 From 0f8992853d96622ede2909c25f66559d566c8b92 Mon Sep 17 00:00:00 2001 From: laraPPr Date: Fri, 2 May 2025 18:37:57 +0200 Subject: [PATCH 14/26] fix test_overview_available_software.py script --- .../scripts/test_overview_available_software.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/scripts/test_overview_available_software.py b/.github/workflows/scripts/test_overview_available_software.py index 61aa22976..ece9e3f00 100644 --- a/.github/workflows/scripts/test_overview_available_software.py +++ b/.github/workflows/scripts/test_overview_available_software.py @@ -39,26 +39,26 @@ for row in table.find_all("tr"): for column in row.find_all('th'): if column.text == "x86_64": - print(f'the value for x86_64 is {column.get("colspan")} in the overview page but there are {len(x86_targets)} targets in json_data.json.) + print(f'the value for x86_64 is {column.get("colspan")} in the overview page and there are {len(x86_targets)} targets in json_data.json.') if int(column.get("colspan")) != len(x86_targets): os.write(2, b'Error: Please make sure the values for x86_64 in json_data.json and overview.md are the same.') elif column.text == "aarch64": - print(f'the value for aarch64 is {column.get("colspan")} in the overview page but there are {len(ARM_targets)} targets in json_data.json.) + print(f'the value for aarch64 is {column.get("colspan")} in the overview page and there are {len(ARM_targets)} targets in json_data.json.') if int(column.get("colspan")) != len(ARM_targets): os.write(2, b'Error: Please make sure the values for aarch64 in json_data.json and overview.md are the same.') elif column.text == "amd": - print(f'the value for amd is {column.get("colspan")} in the overview page but there are {len(amd_targets)} targets in json_data.json.) + print(f'the value for amd is {column.get("colspan")} in the overview page and there are {len(amd_targets)} targets in json_data.json.') if int(column.get("colspan")) != len(amd_targets): os.write(2, b'Error: Please make sure the values for amd in json_data.json and overview.md are the same.') elif column.text == "intel": - print(f'the value for intel is {column.get("colspan")} in the overview page but there are {len(intel_targets)} targets in json_data.json.) + print(f'the value for intel is {column.get("colspan")} in the overview page and there are {len(intel_targets)} targets in json_data.json.') if int(column.get("colspan")) != len(intel_targets): os.write(2, b'Error: Please make sure the values for intel in json_data.json and overview.md are the same.') elif column.text == "nvidia": - print(f'the value for nvidia is {column.get("colspan")} in the overview page but there are {len(nvidia_targets)} targets in json_data.json.) + print(f'the value for nvidia is {column.get("colspan")} in the overview page and there are {len(nvidia_targets)} targets in json_data.json.') if int(column.get("colspan")) != len(nvidia_targets): os.write(2, b'Error: Please make sure the values for nvidia in json_data.json and overview.md are the same.') last_row = table.find_all("tr")[-1] -print(f'there are {len(last_row.find_all("th"))} columns in the overview page but {len(targets)} targets in json_data.json.') +print(f'there are {len(last_row.find_all("th"))} columns in the overview page and {len(targets)} targets in json_data.json.') if len(last_row.find_all("th")) != len(targets): os.write(2, b'Error: Please make sure there are correct number of elements in the last element in overview.md for JavaScript to generate the table.') From e4ef4d1dac32c56e913a131abff7d63fb85b4088 Mon Sep 17 00:00:00 2001 From: laraPPr Date: Wed, 7 May 2025 16:24:50 +0200 Subject: [PATCH 15/26] add comparison definition to sort targets --- .../available_software/available_software.py | 49 +++++---- .../tests/data/test_json_simple_sol.json | 2 +- .../data/test_json_simple_sol_detail.json | 2 +- .../tests/data/test_md_simple_sol.md | 7 +- .../test_md_template_detailed_science_sol.md | 100 +++++++++--------- scripts/available_software/tests/test_json.py | 6 +- 6 files changed, 86 insertions(+), 80 deletions(-) diff --git a/scripts/available_software/available_software.py b/scripts/available_software/available_software.py index f8413e930..4e1711de2 100644 --- a/scripts/available_software/available_software.py +++ b/scripts/available_software/available_software.py @@ -24,6 +24,7 @@ import numpy as np from mdutils.mdutils import MdUtils from natsort import natsorted +from functools import cmp_to_key EESSI_TOPDIR = "/cvmfs/software.eessi.io/versions/2023.06" @@ -219,6 +220,31 @@ def targets_eessi() -> np.ndarray: return targets +def eessi_target_compare(a, b): + """ + A comparison funtion to compare the EESSI targets and order them + @return: 0, 1, -1 + """ + if a == b: + return 0 + + a_split = a.rsplit('/') + b_split = b.rsplit('/') + + # We first compare the main architecture (aarch64, x86_64, ...), which is the 7th field + if a_split[7] == b_split[7]: + # Check if one item is for generic builds (last field), These should always be listed first + if a_split[-1] == 'generic': + return -1 + if b_split[-1] == 'generic': + return 1 + # If the number of fields are not equal, one has an extra vendor subdirectory (e.g. amd, intel, nvidia). + # These should always come after the ones without this extra level. + if len(a_split) != len(b_split): + return 1 if len(a_split) > len(b_split) else -1 + + # In all other cases we just do an alphabetical sort of the strings. + return 1 if a > b else -1 def modules_eessi() -> dict: """ @@ -236,27 +262,8 @@ def modules_eessi() -> dict: targets = targets_eessi() # Order targets - generic_target_x86_64 = [] - generic_target_aarch64 = [] - targets_x86_64 = [] - targets_aarch64 = [] - for target in targets: - t = target.split('/') - if t[7] == 'aarch64': - if t[-1] == "generic": - generic_target_aarch64.append(target) - else: - targets_aarch64.append(target) - elif t[7] == 'x86_64': - if t[-1] == "generic": - generic_target_x86_64.append(target) - else: - targets_x86_64.append(target) - ordered_targets = [] - ordered_targets.extend(generic_target_x86_64) - ordered_targets.extend(np.sort(targets_x86_64)) - ordered_targets.extend(generic_target_aarch64) - ordered_targets.extend(np.sort(targets_aarch64)) + eessi_target_compare_key = cmp_to_key(eessi_target_compare) + ordered_targets = sorted(targets, key=eessi_target_compare_key) targets = [t for t in ordered_targets if not any(t.endswith(x) for x in EXCLUDE_CPU_TARGETS)] diff --git a/scripts/available_software/tests/data/test_json_simple_sol.json b/scripts/available_software/tests/data/test_json_simple_sol.json index ed6fdd644..5d14435a7 100644 --- a/scripts/available_software/tests/data/test_json_simple_sol.json +++ b/scripts/available_software/tests/data/test_json_simple_sol.json @@ -1 +1 @@ -{"time_generated":"dummy", "targets": ["/cvmfs/software.eessi.io/versions/2023.06/software/linux/x86_64/amd/zen2", "/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/generic"], "modules": {"Markov": [0, 1], "cfd": [1, 1], "llm": [1, 0], "science": [1, 1]}} +{"time_generated":"dummy", "targets": ["/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/generic", "/cvmfs/software.eessi.io/versions/2023.06/software/linux/x86_64/amd/zen2"], "modules": {"Markov": [1, 0], "cfd": [1, 1], "llm": [0, 1], "science": [1, 1]}} diff --git a/scripts/available_software/tests/data/test_json_simple_sol_detail.json b/scripts/available_software/tests/data/test_json_simple_sol_detail.json index 61d028cca..e5df36b94 100644 --- a/scripts/available_software/tests/data/test_json_simple_sol_detail.json +++ b/scripts/available_software/tests/data/test_json_simple_sol_detail.json @@ -1 +1 @@ -{"targets": ["/cvmfs/software.eessi.io/versions/2023.06/software/linux/x86_64/amd/zen2", "/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/generic"], "software": {"cfd": {"targets": ["/cvmfs/software.eessi.io/versions/2023.06/software/linux/x86_64/amd/zen2", "/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/generic"], "versions": {"cfd/1.0": {"targets": ["/cvmfs/software.eessi.io/versions/2023.06/software/linux/x86_64/amd/zen2", "/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/generic"]}, "cfd/2.0": {"targets": ["/cvmfs/software.eessi.io/versions/2023.06/software/linux/x86_64/amd/zen2", "/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/generic"]}, "cfd/24": {"targets": ["/cvmfs/software.eessi.io/versions/2023.06/software/linux/x86_64/amd/zen2", "/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/generic"]}, "cfd/5.0": {"targets": ["/cvmfs/software.eessi.io/versions/2023.06/software/linux/x86_64/amd/zen2", "/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/generic"]}, "cfd/2.0afqsdf": {"targets": ["/cvmfs/software.eessi.io/versions/2023.06/software/linux/x86_64/amd/zen2", "/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/generic"]}, "cfd/3.0": {"targets": ["/cvmfs/software.eessi.io/versions/2023.06/software/linux/x86_64/amd/zen2"]}}}, "Markov": {"targets": ["/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/generic"], "versions": {"Markov/hidden-1.0.5": {"targets": ["/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/generic"]}, "Markov/hidden-1.0.10": {"targets": ["/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/generic"]}}}, "science": {"targets": ["/cvmfs/software.eessi.io/versions/2023.06/software/linux/x86_64/amd/zen2", "/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/generic"], "versions": {"science/5.3.0": {"targets": ["/cvmfs/software.eessi.io/versions/2023.06/software/linux/x86_64/amd/zen2", "/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/generic"]}, "science/7.2.0": {"targets": ["/cvmfs/software.eessi.io/versions/2023.06/software/linux/x86_64/amd/zen2", "/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/generic"]}}}, "llm": {"targets": ["/cvmfs/software.eessi.io/versions/2023.06/software/linux/x86_64/amd/zen2"], "versions": {"llm/20230627": {"targets": ["/cvmfs/software.eessi.io/versions/2023.06/software/linux/x86_64/amd/zen2"]}}}}, "time_generated": "Thu, 31 Aug 2023 at 14:00:22 CEST"} +{"targets": ["/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/generic", "/cvmfs/software.eessi.io/versions/2023.06/software/linux/x86_64/amd/zen2"], "software": {"cfd": {"targets": ["/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/generic", "/cvmfs/software.eessi.io/versions/2023.06/software/linux/x86_64/amd/zen2"], "versions": {"cfd/1.0": {"targets": ["/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/generic", "/cvmfs/software.eessi.io/versions/2023.06/software/linux/x86_64/amd/zen2"]}, "cfd/2.0": {"targets": ["/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/generic", "/cvmfs/software.eessi.io/versions/2023.06/software/linux/x86_64/amd/zen2"]}, "cfd/24": {"targets": ["/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/generic", "/cvmfs/software.eessi.io/versions/2023.06/software/linux/x86_64/amd/zen2"]}, "cfd/5.0": {"targets": ["/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/generic", "/cvmfs/software.eessi.io/versions/2023.06/software/linux/x86_64/amd/zen2"]}, "cfd/2.0afqsdf": {"targets": ["/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/generic", "/cvmfs/software.eessi.io/versions/2023.06/software/linux/x86_64/amd/zen2"]}, "cfd/3.0": {"targets": ["/cvmfs/software.eessi.io/versions/2023.06/software/linux/x86_64/amd/zen2"]}}}, "Markov": {"targets": ["/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/generic"], "versions": {"Markov/hidden-1.0.5": {"targets": ["/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/generic"]}, "Markov/hidden-1.0.10": {"targets": ["/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/generic"]}}}, "science": {"targets": ["/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/generic", "/cvmfs/software.eessi.io/versions/2023.06/software/linux/x86_64/amd/zen2"], "versions": {"science/5.3.0": {"targets": ["/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/generic", "/cvmfs/software.eessi.io/versions/2023.06/software/linux/x86_64/amd/zen2"]}, "science/7.2.0": {"targets": ["/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/generic", "/cvmfs/software.eessi.io/versions/2023.06/software/linux/x86_64/amd/zen2"]}}}, "llm": {"targets": ["/cvmfs/software.eessi.io/versions/2023.06/software/linux/x86_64/amd/zen2"], "versions": {"llm/20230627": {"targets": ["/cvmfs/software.eessi.io/versions/2023.06/software/linux/x86_64/amd/zen2"]}}}}, "time_generated": "Thu, 31 Aug 2023 at 14:00:22 CEST"} diff --git a/scripts/available_software/tests/data/test_md_simple_sol.md b/scripts/available_software/tests/data/test_md_simple_sol.md index d26b56912..c4cf4e3da 100644 --- a/scripts/available_software/tests/data/test_md_simple_sol.md +++ b/scripts/available_software/tests/data/test_md_simple_sol.md @@ -1,10 +1,9 @@ - Overview Modules ================ -| |/cvmfs/software.eessi.io/versions/2023.06/software/linux/x86_64/amd/zen2|/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/generic| +| |/cvmfs/software.eessi.io/versions/2023.06/software/linux/aarch64/generic|/cvmfs/software.eessi.io/versions/2023.06/software/linux/x86_64/amd/zen2| | :---: | :---: | :---: | -|Markov| |X| +|Markov|X| | |cfd|X|X| -|llm|X| | +|llm| |X| |science|X|X| diff --git a/scripts/available_software/tests/data/test_md_template_detailed_science_sol.md b/scripts/available_software/tests/data/test_md_template_detailed_science_sol.md index 491d635d7..55fced209 100644 --- a/scripts/available_software/tests/data/test_md_template_detailed_science_sol.md +++ b/scripts/available_software/tests/data/test_md_template_detailed_science_sol.md @@ -1,50 +1,50 @@ ---- -hide: -- toc -json_ld: - '@context': https://schema.org - '@type': SoftwareApplication - applicationCategory: DeveloperApplication - description: '' - license: Not confirmed - name: science - offers: - '@type': Offer - price: 0 - operatingSystem: LINUX - review: - '@type': Review - author: - '@type': Organization - name: EESSI - reviewBody: Application has been successfully made available on all architectures - supported by EESSI - reviewRating: - '@type': Rating - ratingValue: 5 - softwareRequirements: See https://www.eessi.io/docs/ for how to make EESSI available - on your system - softwareVersion: '[''science/5.3.0'', ''science/7.2.0'']' - url: '' ---- - -science -======= - -# Available modules - - -The overview below shows which science installations are available per target architecture in EESSI, ordered based on software version (new to old). - -To start using science, load one of these modules using a `module load` command like: - -```shell -module load science/7.2.0 -``` - -*(This data was automatically generated on {{ generated_date }})* - -| |x86_64/amd/zen2|aarch64/generic| -| :---: | :---: | :---: | -|science/7.2.0|x|x| -|science/5.3.0|x|x| +--- +hide: +- toc +json_ld: + '@context': https://schema.org + '@type': SoftwareApplication + applicationCategory: DeveloperApplication + description: '' + license: Not confirmed + name: science + offers: + '@type': Offer + price: 0 + operatingSystem: LINUX + review: + '@type': Review + author: + '@type': Organization + name: EESSI + reviewBody: Application has been successfully made available on all architectures + supported by EESSI + reviewRating: + '@type': Rating + ratingValue: 5 + softwareRequirements: See https://www.eessi.io/docs/ for how to make EESSI available + on your system + softwareVersion: '[''science/5.3.0'', ''science/7.2.0'']' + url: '' +--- + +science +======= + +# Available modules + + +The overview below shows which science installations are available per target architecture in EESSI, ordered based on software version (new to old). + +To start using science, load one of these modules using a `module load` command like: + +```shell +module load science/7.2.0 +``` + +*(This data was automatically generated on {{ generated_date }})* + +| |aarch64/generic|x86_64/amd/zen2| +| :---: | :---: | :---: | +|science/7.2.0|x|x| +|science/5.3.0|x|x| \ No newline at end of file diff --git a/scripts/available_software/tests/test_json.py b/scripts/available_software/tests/test_json.py index 8c7b254d4..e12d0666b 100644 --- a/scripts/available_software/tests/test_json.py +++ b/scripts/available_software/tests/test_json.py @@ -39,11 +39,11 @@ def test_json_generate_simple(self): modules = modules_eessi() json_data = generate_json_overview_data(modules) assert len(json_data.keys()) == 3 - assert list(json_data["targets"]) == [ZEN2, GENERIC_ARM] + assert list(json_data["targets"]) == [GENERIC_ARM, ZEN2] assert json_data["modules"] == { - "Markov": [0, 1], + "Markov": [1, 0], "cfd": [1, 1], - "llm": [1, 0], + "llm": [0, 1], "science": [1, 1] } From 86fdced44846735de746570f3af6a3cd2a1e22ea Mon Sep 17 00:00:00 2001 From: laraPPr Date: Wed, 7 May 2025 16:30:33 +0200 Subject: [PATCH 16/26] fix failing available software test --- scripts/available_software/tests/data/test_md_simple_sol.md | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/available_software/tests/data/test_md_simple_sol.md b/scripts/available_software/tests/data/test_md_simple_sol.md index c4cf4e3da..88812fe34 100644 --- a/scripts/available_software/tests/data/test_md_simple_sol.md +++ b/scripts/available_software/tests/data/test_md_simple_sol.md @@ -1,3 +1,4 @@ + Overview Modules ================ From 9b70e507f78dcacc74e9b577b5aed430da4d2d9e Mon Sep 17 00:00:00 2001 From: laraPPr Date: Wed, 7 May 2025 16:33:01 +0200 Subject: [PATCH 17/26] remove trailing whitespace --- scripts/available_software/available_software.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/scripts/available_software/available_software.py b/scripts/available_software/available_software.py index 4e1711de2..a2bee4b29 100644 --- a/scripts/available_software/available_software.py +++ b/scripts/available_software/available_software.py @@ -220,6 +220,7 @@ def targets_eessi() -> np.ndarray: return targets + def eessi_target_compare(a, b): """ A comparison funtion to compare the EESSI targets and order them @@ -244,7 +245,8 @@ def eessi_target_compare(a, b): return 1 if len(a_split) > len(b_split) else -1 # In all other cases we just do an alphabetical sort of the strings. - return 1 if a > b else -1 + return 1 if a > b else -1 + def modules_eessi() -> dict: """ @@ -262,7 +264,7 @@ def modules_eessi() -> dict: targets = targets_eessi() # Order targets - eessi_target_compare_key = cmp_to_key(eessi_target_compare) + eessi_target_compare_key = cmp_to_key(eessi_target_compare) ordered_targets = sorted(targets, key=eessi_target_compare_key) targets = [t for t in ordered_targets if not any(t.endswith(x) for x in EXCLUDE_CPU_TARGETS)] From ff35d0caeee30b23318b308eecd94888e72dde57 Mon Sep 17 00:00:00 2001 From: laraPPr Date: Wed, 7 May 2025 16:34:56 +0200 Subject: [PATCH 18/26] fix failing test --- .../tests/data/test_md_template_detailed_science_sol.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/available_software/tests/data/test_md_template_detailed_science_sol.md b/scripts/available_software/tests/data/test_md_template_detailed_science_sol.md index 55fced209..e7a035a2b 100644 --- a/scripts/available_software/tests/data/test_md_template_detailed_science_sol.md +++ b/scripts/available_software/tests/data/test_md_template_detailed_science_sol.md @@ -47,4 +47,4 @@ module load science/7.2.0 | |aarch64/generic|x86_64/amd/zen2| | :---: | :---: | :---: | |science/7.2.0|x|x| -|science/5.3.0|x|x| \ No newline at end of file +|science/5.3.0|x|x| From f2282efed2d011c835999c99f535948a802fa5c5 Mon Sep 17 00:00:00 2001 From: laraPPr Date: Wed, 7 May 2025 16:51:13 +0200 Subject: [PATCH 19/26] remove trailing whitespace --- .../tests/data/test_md_template_detailed_science_sol.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/available_software/tests/data/test_md_template_detailed_science_sol.md b/scripts/available_software/tests/data/test_md_template_detailed_science_sol.md index e7a035a2b..0b697ef26 100644 --- a/scripts/available_software/tests/data/test_md_template_detailed_science_sol.md +++ b/scripts/available_software/tests/data/test_md_template_detailed_science_sol.md @@ -42,7 +42,7 @@ To start using science, load one of these modules using a `module load` command module load science/7.2.0 ``` -*(This data was automatically generated on {{ generated_date }})* +*(This data was automatically generated on {{ generated_date }})* | |aarch64/generic|x86_64/amd/zen2| | :---: | :---: | :---: | From 1e22b474378b2c60509d96f9101cacb16ac5143c Mon Sep 17 00:00:00 2001 From: laraPPr Date: Wed, 7 May 2025 16:52:58 +0200 Subject: [PATCH 20/26] remove trailing whitespace --- .../tests/data/test_md_template_detailed_science_sol.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/available_software/tests/data/test_md_template_detailed_science_sol.md b/scripts/available_software/tests/data/test_md_template_detailed_science_sol.md index 0b697ef26..e7a035a2b 100644 --- a/scripts/available_software/tests/data/test_md_template_detailed_science_sol.md +++ b/scripts/available_software/tests/data/test_md_template_detailed_science_sol.md @@ -42,7 +42,7 @@ To start using science, load one of these modules using a `module load` command module load science/7.2.0 ``` -*(This data was automatically generated on {{ generated_date }})* +*(This data was automatically generated on {{ generated_date }})* | |aarch64/generic|x86_64/amd/zen2| | :---: | :---: | :---: | From aa60709af468f2fd37e5c359ab906553b65a718a Mon Sep 17 00:00:00 2001 From: laraPPr Date: Wed, 7 May 2025 17:06:40 +0200 Subject: [PATCH 21/26] fix test --- .../test_md_template_detailed_science_sol.md | 100 +++++++++--------- 1 file changed, 50 insertions(+), 50 deletions(-) diff --git a/scripts/available_software/tests/data/test_md_template_detailed_science_sol.md b/scripts/available_software/tests/data/test_md_template_detailed_science_sol.md index e7a035a2b..de4f56f4e 100644 --- a/scripts/available_software/tests/data/test_md_template_detailed_science_sol.md +++ b/scripts/available_software/tests/data/test_md_template_detailed_science_sol.md @@ -1,50 +1,50 @@ ---- -hide: -- toc -json_ld: - '@context': https://schema.org - '@type': SoftwareApplication - applicationCategory: DeveloperApplication - description: '' - license: Not confirmed - name: science - offers: - '@type': Offer - price: 0 - operatingSystem: LINUX - review: - '@type': Review - author: - '@type': Organization - name: EESSI - reviewBody: Application has been successfully made available on all architectures - supported by EESSI - reviewRating: - '@type': Rating - ratingValue: 5 - softwareRequirements: See https://www.eessi.io/docs/ for how to make EESSI available - on your system - softwareVersion: '[''science/5.3.0'', ''science/7.2.0'']' - url: '' ---- - -science -======= - -# Available modules - - -The overview below shows which science installations are available per target architecture in EESSI, ordered based on software version (new to old). - -To start using science, load one of these modules using a `module load` command like: - -```shell -module load science/7.2.0 -``` - -*(This data was automatically generated on {{ generated_date }})* - -| |aarch64/generic|x86_64/amd/zen2| -| :---: | :---: | :---: | -|science/7.2.0|x|x| -|science/5.3.0|x|x| +--- +hide: +- toc +json_ld: + '@context': https://schema.org + '@type': SoftwareApplication + applicationCategory: DeveloperApplication + description: '' + license: Not confirmed + name: science + offers: + '@type': Offer + price: 0 + operatingSystem: LINUX + review: + '@type': Review + author: + '@type': Organization + name: EESSI + reviewBody: Application has been successfully made available on all architectures + supported by EESSI + reviewRating: + '@type': Rating + ratingValue: 5 + softwareRequirements: See https://www.eessi.io/docs/ for how to make EESSI available + on your system + softwareVersion: '[''science/5.3.0'', ''science/7.2.0'']' + url: '' +--- + +science +======= + +# Available modules + + +The overview below shows which science installations are available per target architecture in EESSI, ordered based on software version (new to old). + +To start using science, load one of these modules using a `module load` command like: + +```shell +module load science/7.2.0 +``` + +*(This data was automatically generated on {{ generated_date }})* + +| |aarch64/generic|x86_64/amd/zen2| +| :---: | :---: | :---: | +|science/7.2.0|x|x| +|science/5.3.0|x|x| From 1dc05c69d5ef6d87a0e536d577e3f30c68abb4eb Mon Sep 17 00:00:00 2001 From: laraPPr Date: Wed, 7 May 2025 17:09:55 +0200 Subject: [PATCH 22/26] set correct table hierarchy in overview.md --- docs/available_software/overview.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/available_software/overview.md b/docs/available_software/overview.md index cfdfba690..f9f8506f3 100644 --- a/docs/available_software/overview.md +++ b/docs/available_software/overview.md @@ -7,14 +7,14 @@ This table gives an overview of all the available software in EESSI per specific Name - x86_64 aarch64 + x86_64 + amd intel - From d5cdce9ded75e79d9ddb17ccbcf7c7e8d831d2ea Mon Sep 17 00:00:00 2001 From: laraPPr Date: Wed, 7 May 2025 17:11:03 +0200 Subject: [PATCH 23/26] set correct table hierarchy in overview.md --- docs/available_software/overview.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/available_software/overview.md b/docs/available_software/overview.md index f9f8506f3..92dea7dab 100644 --- a/docs/available_software/overview.md +++ b/docs/available_software/overview.md @@ -11,8 +11,8 @@ This table gives an overview of all the available software in EESSI per specific x86_64 - + amd intel From 19769c49ee83faa55537a74182a0ea9f9c4037c9 Mon Sep 17 00:00:00 2001 From: laraPPr Date: Wed, 7 May 2025 17:13:18 +0200 Subject: [PATCH 24/26] spellcheck --- scripts/available_software/available_software.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/available_software/available_software.py b/scripts/available_software/available_software.py index a2bee4b29..c441f396b 100644 --- a/scripts/available_software/available_software.py +++ b/scripts/available_software/available_software.py @@ -223,7 +223,7 @@ def targets_eessi() -> np.ndarray: def eessi_target_compare(a, b): """ - A comparison funtion to compare the EESSI targets and order them + A comparison function to compare the EESSI targets and order them @return: 0, 1, -1 """ if a == b: From bdfee65e0fb964ae986b96b63cb8f9a7f981a22e Mon Sep 17 00:00:00 2001 From: Lara Ramona Peeters <49882639+laraPPr@users.noreply.github.com> Date: Wed, 14 May 2025 11:40:35 +0200 Subject: [PATCH 25/26] expand docstring Co-authored-by: Pedro Santos Neves <10762799+Neves-P@users.noreply.github.com> --- scripts/available_software/available_software.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/scripts/available_software/available_software.py b/scripts/available_software/available_software.py index c441f396b..8243225f7 100644 --- a/scripts/available_software/available_software.py +++ b/scripts/available_software/available_software.py @@ -223,7 +223,12 @@ def targets_eessi() -> np.ndarray: def eessi_target_compare(a, b): """ - A comparison function to compare the EESSI targets and order them + A comparison function to compare the EESSI targets and order them. + + First the main architecture is ordered alphabetically, then within them + the CPU targets are again ordered alphabetically, except for the + generic target, which always comes first. Targets that include an extra + vendor subdir always after those without a vendor subdir. @return: 0, 1, -1 """ if a == b: From e246c0676bd8c528e328a7554f6c6c4bd49f0b95 Mon Sep 17 00:00:00 2001 From: Pedro Santos Neves <10762799+Neves-P@users.noreply.github.com> Date: Wed, 14 May 2025 11:44:51 +0200 Subject: [PATCH 26/26] Make linter happy Co-authored-by: Lara Ramona Peeters <49882639+laraPPr@users.noreply.github.com> --- scripts/available_software/available_software.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/scripts/available_software/available_software.py b/scripts/available_software/available_software.py index 8243225f7..d583f1da1 100644 --- a/scripts/available_software/available_software.py +++ b/scripts/available_software/available_software.py @@ -224,9 +224,8 @@ def targets_eessi() -> np.ndarray: def eessi_target_compare(a, b): """ A comparison function to compare the EESSI targets and order them. - First the main architecture is ordered alphabetically, then within them - the CPU targets are again ordered alphabetically, except for the + the CPU targets are again ordered alphabetically, except for the generic target, which always comes first. Targets that include an extra vendor subdir always after those without a vendor subdir. @return: 0, 1, -1