Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .github/workflows/test_overview_available_software.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,14 +31,15 @@ jobs:
mkdir -p ${data_dir}
cd ${data_dir}
curl -OL https://eessi.io/api_data/data/eessi_api_metadata_software.json
curl -OL https://eessi.io/api_data/data/eessi_api_metadata-riscv_software.json
cd -

python scripts/available_software/available_software.py
./scripts/update_generated_time.sh mkdocs.yml

# determine whether pull request would need to be opened:
# if detailed software pages in docs/available_software/detail have been updated, then a PR should be opened
if [[ $(git status --porcelain ./docs/available_software/detail) ]]; then
if [[ -n "$(git status --porcelain ./docs/available_software/detail ./docs/available_software_riscv/detail)" ]]; then
echo "Software pages have been changed, PR should be opened"
git diff ./docs/available_software/detail
else
Expand Down
5 changes: 4 additions & 1 deletion .github/workflows/update_available_software.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@ jobs:
mkdir -p ${data_dir}
cd ${data_dir}
curl -OL https://eessi.io/api_data/data/eessi_api_metadata_software.json
# Also download RISC-V data
curl -OL https://eessi.io/api_data/data/eessi_api_metadata-riscv_software.json
cd -

python scripts/available_software/available_software.py
Expand All @@ -40,7 +42,7 @@ jobs:

# determine whether pull request should be opened:
# if detailed software pages in docs/available_software/detail have been updated, then a PR should be opened
if [[ $(git status --porcelain ./docs/available_software/detail) ]]; then
if [[ -n "$(git status --porcelain ./docs/available_software/detail ./docs/available_software_riscv/detail)" ]]; then
echo "Software pages have been changed, PR should be opened"
echo "json_data_changed=yes" >> $GITHUB_OUTPUT
else
Expand All @@ -57,6 +59,7 @@ jobs:
with:
add-paths: |
docs/available_software
docs/available_software_riscv
mkdocs.yml
branch: update-software-overview
branch-suffix: timestamp
Expand Down
2 changes: 2 additions & 0 deletions docs/available_software/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@

Overview of software available in [EESSI's production repository `software.eessi.io`](../repositories/software.eessi.io.md).

(For an overview of the currently available RISC-V software see the [RISC-V specific available software page](../available_software_riscv/index.md))

<em>{{ data.n_software }} unique software projects (+ {{ data.n_extensions }} unique extensions)</em>

<!-- see also docs/available_software/javascripts/software-filter.js -->
Expand Down
15 changes: 12 additions & 3 deletions docs/available_software/macros.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
from pathlib import Path

EESSI_API_SOFTWARE_JSON_URL = 'https://www.eessi.io/api_data/data/eessi_api_metadata_software.json'
EESSI_API_SOFTWARE_RISCV_JSON_URL = 'https://www.eessi.io/api_data/data/eessi_api_metadata-riscv_software.json'

CPU_ARCHS = {
'x86_64': ['AMD', 'Intel'],
Expand All @@ -27,19 +28,27 @@
def define_env(env):

@env.macro
def load_json_eessi_software():
def load_json_eessi_software(riscv=False):
"""
Load JSON with metadata for software.eessi.io repository,
and return Python dictionary with relevant info to generate software overview in EESSI documentation.
"""
# https://eessi.io/api_data/data/eessi_api_metadata_software.json is expected to be downloaded to docs/available_software/data/
root_dir = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
json_path = os.path.join(root_dir, 'docs', 'available_software', 'data', 'eessi_api_metadata_software.json')
if riscv:
data_file='eessi_api_metadata-riscv_software.json'
else:
data_file='eessi_api_metadata_software.json'
json_path = os.path.join(root_dir, 'docs', 'available_software', 'data', data_file)
if os.path.exists(json_path):
with open(json_path) as fp:
data = json.loads(fp.read())
else:
with urllib.request.urlopen(EESSI_API_SOFTWARE_JSON_URL) as response:
if riscv:
data_url = EESSI_API_SOFTWARE_RISCV_JSON_URL
else:
data_url = EESSI_API_SOFTWARE_JSON_URL
with urllib.request.urlopen(data_url) as response:
data = json.loads(response.read().decode('utf-8'))

data_software = data['software']
Expand Down
63 changes: 63 additions & 0 deletions docs/available_software_riscv/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
{% set data = load_json_eessi_software(riscv=True) %}
{% set software = data.software %}

# Software available for RISC-V in EESSI

Overview of software available in [EESSI's development repository for RISC-V `dev.eessi.io/riscv`](../repositories/dev.eessi.io.md).

<em>{{ data.n_software }} unique software projects (+ {{ data.n_extensions }} unique extensions)</em>

<!-- see also docs/available_software/javascripts/software-filter.js -->
<input type="search" id="software-search" class="md-input"
placeholder="Filter software..."
style="width:100%; margin-bottom:1rem;">

<div class="grid cards" markdown>

{% for pkg in software %}
{% set pkg_slug = pkg.name | replace(' ', '-') %}
{% if pkg.is_extension -%}
- <span class="software-item software-card"
data-search="name:{{ pkg.name }} extension ext_type:{{ pkg.type }}" >
<span class="software-name">{{ pkg.name }}</span>
<span class="software-more-info"><small>(extension)</small></span>
<br/>
<p class="software-description">
{{ pkg.name }} is a {% if pkg.type == "python" -%} Python package{% elif pkg.type == "r" -%}R library{% elif pkg.type == "perl" -%}Perl module{% endif %}
that is included as extension in the following software installations:
<ul>
{% for parent in pkg.all_parent_names %}
{% set parent_slug = parent | replace(' ', '-') %}
<li><a href="detail/{{ parent_slug }}" target="_blank">{{ parent }}</a></li>
{% endfor %}
</p>
</ul>
</span>
{% else -%}
- <span class="software-item software-card"
data-search="name:{{ pkg.name }} {{ pkg.homepage }} {{ pkg.description }} {{ pkg.cpu_families }} {{ pkg.eessi_versions }} ">

<span class="software-name"><a href="detail/{{ pkg_slug }}" target="_blank">{{ pkg.name }}</a></span>
<!-- <span class="software-versions">{% if pkg.n_versions == 1 -%}({{ pkg.n_versions }} version){% else -%}({{ pkg.n_versions }} versions){% endif %}</span> -->
<span class="software-more-info"><a href="detail/{{ pkg_slug }}" target="_blank">(more details)</a></span>
<br/>
<span class="software-link">{{ pkg.homepages }}</span>
<br/>
<p class="software-description">
{{ pkg.description }}
</p>
<span class="software-eessi-versions">Available in EESSI versions: {% if '2023.06' in pkg.eessi_versions -%}<span class="software-eessi-version-202306">2023.06</span>{% endif %}{% if '2025.06' in pkg.eessi_versions -%}<span class="software-eessi-version-202506">2025.06</span>{% endif %}</span>
<br/>
<span class="software-cpus">Supported CPU families: {% if 'AMD' in pkg.cpu_families -%}<span class="software-cpu-amd">AMD</span>{% endif %}{% if 'Intel' in pkg.cpu_families -%}<span class="software-cpu-intel">Intel</span>{% endif %}{% if 'Arm' in pkg.cpu_families -%}<span class="software-cpu-arm">Arm</span>{% endif %}{% if 'RISC-V' in pkg.cpu_families -%}<span class="software-cpu-riscv">RISC-V</span>{% endif %}</span>
<br/>
<span class="software-gpus">Supported GPU families: {% if pkg.gpu_families == '' -%}<em>(none)</em>{% else -%}{% if 'AMD' in pkg.gpu_families -%}<span class="software-gpu-amd">AMD</span>{% endif %}{% if 'NVIDIA' in pkg.gpu_families -%}<span class="software-gpu-nvidia">NVIDIA</span>{% endif %}{% endif %}</span>
<br/>
</span>
{% endif %}
{% endfor %}

</div>

---

<small><em>Last update: {{ data.timestamp }}</em></small>
4 changes: 3 additions & 1 deletion mkdocs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,9 @@ nav:
- Software layer: software_layer.md
- Supported CPU targets: software_layer/cpu_targets.md
- Supported GPU targets: software_layer/gpu_targets.md
- Available software: available_software/index.md
- Available software:
- Production: available_software/index.md
- RISC-V: available_software_riscv/index.md
- Repositories:
- Production:
- Software: repositories/software.eessi.io.md
Expand Down
8 changes: 8 additions & 0 deletions scripts/available_software/available_software.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,14 @@ def main():
print("Generating software-specific pages... ", end="", flush=True)
api_data_software_json = os.path.join(path_data_dir, "eessi_api_metadata_software.json")
generate_software_pages(api_data_software_json, os.path.join(target_directory, "detail"))

print("Done!")

# Also handle RISC-V
print("Generating software-specific pages for RISC-V... ", end="", flush=True)
api_data_software_json = os.path.join(path_data_dir, "eessi_api_metadata-riscv_software.json")
generate_software_pages(api_data_software_json, os.path.join(target_directory + "_riscv", "detail"))

print("Done!")


Expand Down
Loading
Loading