diff --git a/scripts/available_software/available_software.py b/scripts/available_software/available_software.py
index 9e0c871cee..dba2eaa7a8 100644
--- a/scripts/available_software/available_software.py
+++ b/scripts/available_software/available_software.py
@@ -16,6 +16,7 @@
import json
import os
import yaml
+from easybuild.tools import LooseVersion
from mdutils.tools.Table import Table
from string import Template
@@ -182,7 +183,9 @@ def generate_software_page(software_name: str, software_data: dict, path: str) -
n_cols = len(table_data)
n_rows = 1
- for version in sorted(software_data["versions"], key=lambda x: x["version"]):
+ for version in sorted(
+ software_data["versions"], key=lambda x: LooseVersion(x["module"]["module_version"]), reverse=True
+ ):
cpu_targets = format_cpu_arch_list(version["cpu_arch"])
gpu_targets = format_gpu_arch_list(version["gpu_arch"])
@@ -243,12 +246,14 @@ def generate_software_page(software_name: str, software_data: dict, path: str) -
table_data[0] = table_data[0] % ext_name
n_rows = 1
- for ext_version, ext_version_mods in sorted(ext_details.items(), key=lambda x: x[0]):
+ for ext_version, ext_version_mods in sorted(
+ ext_details.items(), key=lambda x: LooseVersion(x[0]), reverse=True
+ ):
n_rows += 1
table_data.extend(
[
ext_version,
- "
".join("`" + m + "`" for m in sorted(ext_version_mods)),
+ "
".join("`" + m + "`" for m in sorted(ext_version_mods, key=LooseVersion, reverse=True)),
]
)
@@ -271,9 +276,9 @@ def generate_software_page(software_name: str, software_data: dict, path: str) -
with open(filename, "w") as f:
# Add the software name
ldjson_software_data["name"] = software_name
- # Just output the supported versionsq
+ # Just output the supported versions
ldjson_software_data["version"] = sorted(
- list(set([version["version"] for version in software_data["versions"]])), reverse=True
+ list(set([version["version"] for version in software_data["versions"]])), key=LooseVersion, reverse=True
)
# Make the description safe for json (and remove surrounding quotes)
ldjson_software_data["description"] = json.dumps(ldjson_software_data["description"])[1:-1]
diff --git a/scripts/available_software/requirements.txt b/scripts/available_software/requirements.txt
index 6d558a8c4d..44b9377a8a 100644
--- a/scripts/available_software/requirements.txt
+++ b/scripts/available_software/requirements.txt
@@ -1,2 +1,3 @@
+easybuild-framework
mdutils
pyyaml
diff --git a/scripts/available_software/tests/reference_detail/ESPResSo.md b/scripts/available_software/tests/reference_detail/ESPResSo.md
index 14a051054d..969348cdfc 100644
--- a/scripts/available_software/tests/reference_detail/ESPResSo.md
+++ b/scripts/available_software/tests/reference_detail/ESPResSo.md
@@ -38,7 +38,7 @@ A software package for performing and analyzing scientific Molecular Dynamics si
|ESPResSo version|Supported CPU targets|Supported GPU targets|EESSI version|Module|
| --- | --- | --- | --- | --- |
-|4.2.1|`generic`: `aarch64`, `x86_64`
Arm: `a64fx`, `neoverse_n1`, `neoverse_v1`, `nvidia/grace`
AMD: `zen2`, `zen3`, `zen4`
Intel: `haswell`, `skylake_avx512`, `sapphirerapids`, `icelake`, `cascadelake`
|*(none)*|2023.06|`ESPResSo/4.2.1-foss-2023a`|
+|4.2.2|`generic`: `aarch64`, `x86_64`
Arm: `a64fx`, `neoverse_n1`, `neoverse_v1`, `nvidia/grace`
AMD: `zen2`, `zen3`, `zen4`
Intel: `haswell`, `skylake_avx512`, `sapphirerapids`, `icelake`, `cascadelake`
|*(none)*|2023.06|`ESPResSo/4.2.2-foss-2023b`|
|4.2.2|`generic`: `aarch64`, `x86_64`
Arm: `neoverse_n1`, `neoverse_v1`, `nvidia/grace`
AMD: `zen2`, `zen3`, `zen4`
Intel: `haswell`, `skylake_avx512`, `sapphirerapids`, `icelake`, `cascadelake`
|NVIDIA: `cc70`, `cc80`, `cc90`
|2023.06|`ESPResSo/4.2.2-foss-2023a-CUDA-12.1.1`|
|4.2.2|`generic`: `aarch64`, `x86_64`
Arm: `a64fx`, `neoverse_n1`, `neoverse_v1`, `nvidia/grace`
AMD: `zen2`, `zen3`, `zen4`
Intel: `haswell`, `skylake_avx512`, `sapphirerapids`, `icelake`, `cascadelake`
|*(none)*|2023.06|`ESPResSo/4.2.2-foss-2023a`|
-|4.2.2|`generic`: `aarch64`, `x86_64`
Arm: `a64fx`, `neoverse_n1`, `neoverse_v1`, `nvidia/grace`
AMD: `zen2`, `zen3`, `zen4`
Intel: `haswell`, `skylake_avx512`, `sapphirerapids`, `icelake`, `cascadelake`
|*(none)*|2023.06|`ESPResSo/4.2.2-foss-2023b`|
\ No newline at end of file
+|4.2.1|`generic`: `aarch64`, `x86_64`
Arm: `a64fx`, `neoverse_n1`, `neoverse_v1`, `nvidia/grace`
AMD: `zen2`, `zen3`, `zen4`
Intel: `haswell`, `skylake_avx512`, `sapphirerapids`, `icelake`, `cascadelake`
|*(none)*|2023.06|`ESPResSo/4.2.1-foss-2023a`|
\ No newline at end of file
diff --git a/scripts/available_software/tests/reference_detail/PMIx.md b/scripts/available_software/tests/reference_detail/PMIx.md
index c58557dc87..05d283e673 100644
--- a/scripts/available_software/tests/reference_detail/PMIx.md
+++ b/scripts/available_software/tests/reference_detail/PMIx.md
@@ -67,9 +67,9 @@ the desired level of scalability.
|PMIx version|Supported CPU targets|Supported GPU targets|EESSI version|Module|
| --- | --- | --- | --- | --- |
-|4.2.2|`generic`: `aarch64`, `x86_64`
Arm: `a64fx`, `neoverse_n1`, `neoverse_v1`, `nvidia/grace`
AMD: `zen2`, `zen3`, `zen4`
Intel: `haswell`, `skylake_avx512`, `sapphirerapids`, `icelake`, `cascadelake`
|*(none)*|2023.06|`PMIx/4.2.2-GCCcore-12.2.0`|
-|4.2.4|`generic`: `aarch64`, `x86_64`
Arm: `a64fx`, `neoverse_n1`, `neoverse_v1`, `nvidia/grace`
AMD: `zen2`, `zen3`, `zen4`
Intel: `haswell`, `skylake_avx512`, `sapphirerapids`, `icelake`, `cascadelake`
|*(none)*|2023.06|`PMIx/4.2.4-GCCcore-12.3.0`|
-|4.2.6|`generic`: `aarch64`, `x86_64`
Arm: `a64fx`, `neoverse_n1`, `neoverse_v1`, `nvidia/grace`
AMD: `zen2`, `zen3`, `zen4`
Intel: `haswell`, `skylake_avx512`, `sapphirerapids`, `icelake`, `cascadelake`
|*(none)*|2023.06|`PMIx/4.2.6-GCCcore-13.2.0`|
-|5.0.2|`generic`: `aarch64`, `x86_64`
Arm: `a64fx`, `neoverse_n1`, `neoverse_v1`, `nvidia/grace`
AMD: `zen2`, `zen3`, `zen4`
Intel: `haswell`, `skylake_avx512`, `sapphirerapids`, `icelake`, `cascadelake`
|*(none)*|2025.06|`PMIx/5.0.2-GCCcore-13.3.0`|
+|5.0.8|`generic`: `aarch64`, `x86_64`
Arm: `a64fx`, `neoverse_n1`, `neoverse_v1`, `nvidia/grace`
AMD: `zen2`, `zen3`, `zen4`
Intel: `haswell`, `skylake_avx512`, `sapphirerapids`, `icelake`, `cascadelake`
|*(none)*|2025.06|`PMIx/5.0.8-GCCcore-14.3.0`|
|5.0.6|`generic`: `aarch64`, `x86_64`
Arm: `a64fx`, `neoverse_n1`, `neoverse_v1`, `nvidia/grace`
AMD: `zen2`, `zen3`, `zen4`
Intel: `haswell`, `skylake_avx512`, `sapphirerapids`, `icelake`, `cascadelake`
|*(none)*|2025.06|`PMIx/5.0.6-GCCcore-14.2.0`|
-|5.0.8|`generic`: `aarch64`, `x86_64`
Arm: `a64fx`, `neoverse_n1`, `neoverse_v1`, `nvidia/grace`
AMD: `zen2`, `zen3`, `zen4`
Intel: `haswell`, `skylake_avx512`, `sapphirerapids`, `icelake`, `cascadelake`
|*(none)*|2025.06|`PMIx/5.0.8-GCCcore-14.3.0`|
\ No newline at end of file
+|5.0.2|`generic`: `aarch64`, `x86_64`
Arm: `a64fx`, `neoverse_n1`, `neoverse_v1`, `nvidia/grace`
AMD: `zen2`, `zen3`, `zen4`
Intel: `haswell`, `skylake_avx512`, `sapphirerapids`, `icelake`, `cascadelake`
|*(none)*|2025.06|`PMIx/5.0.2-GCCcore-13.3.0`|
+|4.2.6|`generic`: `aarch64`, `x86_64`
Arm: `a64fx`, `neoverse_n1`, `neoverse_v1`, `nvidia/grace`
AMD: `zen2`, `zen3`, `zen4`
Intel: `haswell`, `skylake_avx512`, `sapphirerapids`, `icelake`, `cascadelake`
|*(none)*|2023.06|`PMIx/4.2.6-GCCcore-13.2.0`|
+|4.2.4|`generic`: `aarch64`, `x86_64`
Arm: `a64fx`, `neoverse_n1`, `neoverse_v1`, `nvidia/grace`
AMD: `zen2`, `zen3`, `zen4`
Intel: `haswell`, `skylake_avx512`, `sapphirerapids`, `icelake`, `cascadelake`
|*(none)*|2023.06|`PMIx/4.2.4-GCCcore-12.3.0`|
+|4.2.2|`generic`: `aarch64`, `x86_64`
Arm: `a64fx`, `neoverse_n1`, `neoverse_v1`, `nvidia/grace`
AMD: `zen2`, `zen3`, `zen4`
Intel: `haswell`, `skylake_avx512`, `sapphirerapids`, `icelake`, `cascadelake`
|*(none)*|2023.06|`PMIx/4.2.2-GCCcore-12.2.0`|
\ No newline at end of file
diff --git a/scripts/available_software/tests/reference_detail/hatchling.md b/scripts/available_software/tests/reference_detail/hatchling.md
index 76b795750e..3615679a5b 100644
--- a/scripts/available_software/tests/reference_detail/hatchling.md
+++ b/scripts/available_software/tests/reference_detail/hatchling.md
@@ -40,11 +40,11 @@ a modern, extensible Python project manager.
|hatchling version|Supported CPU targets|Supported GPU targets|EESSI version|Module|
| --- | --- | --- | --- | --- |
-|1.18.0|`generic`: `aarch64`, `x86_64`
Arm: `a64fx`, `neoverse_n1`, `neoverse_v1`, `nvidia/grace`
AMD: `zen2`, `zen3`, `zen4`
Intel: `haswell`, `skylake_avx512`, `sapphirerapids`, `icelake`, `cascadelake`
|*(none)*|2023.06|`hatchling/1.18.0-GCCcore-12.3.0`|
-|1.18.0|`generic`: `aarch64`, `x86_64`
Arm: `a64fx`, `neoverse_n1`, `neoverse_v1`, `nvidia/grace`
AMD: `zen2`, `zen3`, `zen4`
Intel: `haswell`, `skylake_avx512`, `sapphirerapids`, `icelake`, `cascadelake`
|*(none)*|2023.06|`hatchling/1.18.0-GCCcore-13.2.0`|
-|1.24.2|`generic`: `aarch64`, `x86_64`
Arm: `a64fx`, `neoverse_n1`, `neoverse_v1`, `nvidia/grace`
AMD: `zen2`, `zen3`, `zen4`
Intel: `haswell`, `skylake_avx512`, `sapphirerapids`, `icelake`, `cascadelake`
|*(none)*|2025.06|`hatchling/1.24.2-GCCcore-13.3.0`|
-|1.27.0|`generic`: `aarch64`, `x86_64`
Arm: `a64fx`, `neoverse_n1`, `neoverse_v1`, `nvidia/grace`
AMD: `zen2`, `zen3`, `zen4`
Intel: `haswell`, `skylake_avx512`, `sapphirerapids`, `icelake`, `cascadelake`
|*(none)*|2025.06|`hatchling/1.27.0-GCCcore-14.2.0`|
|1.27.0|`generic`: `aarch64`, `x86_64`
Arm: `a64fx`, `neoverse_n1`, `neoverse_v1`, `nvidia/grace`
AMD: `zen2`, `zen3`, `zen4`
Intel: `haswell`, `skylake_avx512`, `sapphirerapids`, `icelake`, `cascadelake`
|*(none)*|2025.06|`hatchling/1.27.0-GCCcore-14.3.0`|
+|1.27.0|`generic`: `aarch64`, `x86_64`
Arm: `a64fx`, `neoverse_n1`, `neoverse_v1`, `nvidia/grace`
AMD: `zen2`, `zen3`, `zen4`
Intel: `haswell`, `skylake_avx512`, `sapphirerapids`, `icelake`, `cascadelake`
|*(none)*|2025.06|`hatchling/1.27.0-GCCcore-14.2.0`|
+|1.24.2|`generic`: `aarch64`, `x86_64`
Arm: `a64fx`, `neoverse_n1`, `neoverse_v1`, `nvidia/grace`
AMD: `zen2`, `zen3`, `zen4`
Intel: `haswell`, `skylake_avx512`, `sapphirerapids`, `icelake`, `cascadelake`
|*(none)*|2025.06|`hatchling/1.24.2-GCCcore-13.3.0`|
+|1.18.0|`generic`: `aarch64`, `x86_64`
Arm: `a64fx`, `neoverse_n1`, `neoverse_v1`, `nvidia/grace`
AMD: `zen2`, `zen3`, `zen4`
Intel: `haswell`, `skylake_avx512`, `sapphirerapids`, `icelake`, `cascadelake`
|*(none)*|2023.06|`hatchling/1.18.0-GCCcore-13.2.0`|
+|1.18.0|`generic`: `aarch64`, `x86_64`
Arm: `a64fx`, `neoverse_n1`, `neoverse_v1`, `nvidia/grace`
AMD: `zen2`, `zen3`, `zen4`
Intel: `haswell`, `skylake_avx512`, `sapphirerapids`, `icelake`, `cascadelake`
|*(none)*|2023.06|`hatchling/1.18.0-GCCcore-12.3.0`|
## Extensions
@@ -56,8 +56,8 @@ Overview of extensions included in hatchling installations
|`editables` version|hatchling modules that include it|
| --- | --- |
+|0.5|`hatchling/1.27.0-GCCcore-14.3.0`
`hatchling/1.27.0-GCCcore-14.2.0`
`hatchling/1.24.2-GCCcore-13.3.0`
`hatchling/1.18.0-GCCcore-13.2.0`|
|0.3|`hatchling/1.18.0-GCCcore-12.3.0`|
-|0.5|`hatchling/1.18.0-GCCcore-13.2.0`
`hatchling/1.24.2-GCCcore-13.3.0`
`hatchling/1.27.0-GCCcore-14.2.0`
`hatchling/1.27.0-GCCcore-14.3.0`|
### hatch-docstring-description
@@ -71,74 +71,74 @@ Overview of extensions included in hatchling installations
|`hatch-fancy-pypi-readme` version|hatchling modules that include it|
| --- | --- |
-|24.1.0|`hatchling/1.24.2-GCCcore-13.3.0`
`hatchling/1.27.0-GCCcore-14.2.0`|
|25.1.0|`hatchling/1.27.0-GCCcore-14.3.0`|
+|24.1.0|`hatchling/1.27.0-GCCcore-14.2.0`
`hatchling/1.24.2-GCCcore-13.3.0`|
### hatch-requirements-txt
|`hatch-requirements-txt` version|hatchling modules that include it|
| --- | --- |
-|0.4.1|`hatchling/1.18.0-GCCcore-12.3.0`
`hatchling/1.18.0-GCCcore-13.2.0`
`hatchling/1.24.2-GCCcore-13.3.0`
`hatchling/1.27.0-GCCcore-14.2.0`
`hatchling/1.27.0-GCCcore-14.3.0`|
+|0.4.1|`hatchling/1.27.0-GCCcore-14.3.0`
`hatchling/1.27.0-GCCcore-14.2.0`
`hatchling/1.24.2-GCCcore-13.3.0`
`hatchling/1.18.0-GCCcore-13.2.0`
`hatchling/1.18.0-GCCcore-12.3.0`|
### hatch-vcs
|`hatch-vcs` version|hatchling modules that include it|
| --- | --- |
-|0.4.0|`hatchling/1.24.2-GCCcore-13.3.0`
`hatchling/1.27.0-GCCcore-14.2.0`|
|0.5.0|`hatchling/1.27.0-GCCcore-14.3.0`|
+|0.4.0|`hatchling/1.27.0-GCCcore-14.2.0`
`hatchling/1.24.2-GCCcore-13.3.0`|
### hatch_fancy_pypi_readme
|`hatch_fancy_pypi_readme` version|hatchling modules that include it|
| --- | --- |
-|23.1.0|`hatchling/1.18.0-GCCcore-12.3.0`
`hatchling/1.18.0-GCCcore-13.2.0`|
+|23.1.0|`hatchling/1.18.0-GCCcore-13.2.0`
`hatchling/1.18.0-GCCcore-12.3.0`|
### hatch_vcs
|`hatch_vcs` version|hatchling modules that include it|
| --- | --- |
-|0.3.0|`hatchling/1.18.0-GCCcore-12.3.0`
`hatchling/1.18.0-GCCcore-13.2.0`|
+|0.3.0|`hatchling/1.18.0-GCCcore-13.2.0`
`hatchling/1.18.0-GCCcore-12.3.0`|
### hatchling
|`hatchling` version|hatchling modules that include it|
| --- | --- |
-|1.18.0|`hatchling/1.18.0-GCCcore-12.3.0`
`hatchling/1.18.0-GCCcore-13.2.0`|
+|1.27.0|`hatchling/1.27.0-GCCcore-14.3.0`
`hatchling/1.27.0-GCCcore-14.2.0`|
|1.24.2|`hatchling/1.24.2-GCCcore-13.3.0`|
-|1.27.0|`hatchling/1.27.0-GCCcore-14.2.0`
`hatchling/1.27.0-GCCcore-14.3.0`|
+|1.18.0|`hatchling/1.18.0-GCCcore-13.2.0`
`hatchling/1.18.0-GCCcore-12.3.0`|
### pathspec
|`pathspec` version|hatchling modules that include it|
| --- | --- |
-|0.11.1|`hatchling/1.18.0-GCCcore-12.3.0`|
+|0.12.1|`hatchling/1.27.0-GCCcore-14.3.0`
`hatchling/1.27.0-GCCcore-14.2.0`
`hatchling/1.24.2-GCCcore-13.3.0`|
|0.11.2|`hatchling/1.18.0-GCCcore-13.2.0`|
-|0.12.1|`hatchling/1.24.2-GCCcore-13.3.0`
`hatchling/1.27.0-GCCcore-14.2.0`
`hatchling/1.27.0-GCCcore-14.3.0`|
+|0.11.1|`hatchling/1.18.0-GCCcore-12.3.0`|
### pluggy
|`pluggy` version|hatchling modules that include it|
| --- | --- |
-|1.2.0|`hatchling/1.18.0-GCCcore-12.3.0`|
-|1.3.0|`hatchling/1.18.0-GCCcore-13.2.0`|
-|1.5.0|`hatchling/1.24.2-GCCcore-13.3.0`
`hatchling/1.27.0-GCCcore-14.2.0`|
|1.6.0|`hatchling/1.27.0-GCCcore-14.3.0`|
+|1.5.0|`hatchling/1.27.0-GCCcore-14.2.0`
`hatchling/1.24.2-GCCcore-13.3.0`|
+|1.3.0|`hatchling/1.18.0-GCCcore-13.2.0`|
+|1.2.0|`hatchling/1.18.0-GCCcore-12.3.0`|
### trove-classifiers
|`trove-classifiers` version|hatchling modules that include it|
| --- | --- |
-|2024.5.22|`hatchling/1.24.2-GCCcore-13.3.0`|
-|2025.2.18.16|`hatchling/1.27.0-GCCcore-14.2.0`|
|2025.5.9.12|`hatchling/1.27.0-GCCcore-14.3.0`|
+|2025.2.18.16|`hatchling/1.27.0-GCCcore-14.2.0`|
+|2024.5.22|`hatchling/1.24.2-GCCcore-13.3.0`|
### trove_classifiers