From bdfd400e29d81b9e98733e4058ca611234ec3073 Mon Sep 17 00:00:00 2001
From: Karel van Klink <karel.vanklink@geant.org>
Date: Fri, 29 Nov 2024 09:51:59 +0100
Subject: [PATCH] Add a script that auto-generates redirects to all workflow
 pages

---
 .gitignore                       |  1 +
 docs/scripts/gen_wf_redirects.py | 38 ++++++++++++++++++++++++++++++++
 mkdocs.yml                       | 10 +--------
 3 files changed, 40 insertions(+), 9 deletions(-)
 create mode 100644 docs/scripts/gen_wf_redirects.py

diff --git a/.gitignore b/.gitignore
index 6bed6746..b803f492 100644
--- a/.gitignore
+++ b/.gitignore
@@ -17,6 +17,7 @@ vale/styles/*
 !vale/styles/config/
 !vale/styles/custom/
 .DS_Store
+wf_redirects.yaml
 
 .idea
 .venv
diff --git a/docs/scripts/gen_wf_redirects.py b/docs/scripts/gen_wf_redirects.py
new file mode 100644
index 00000000..9e48581c
--- /dev/null
+++ b/docs/scripts/gen_wf_redirects.py
@@ -0,0 +1,38 @@
+"""Generate pages to forward workflow URLs.
+
+This will redirect `/workflow/workflow_name` to `reference/gso/workflow/module/workflow_name`. This is required since
+URLs cannot be changed in the GUI.
+"""
+
+from pathlib import Path
+
+import yaml
+
+root = Path(__file__).parent.parent.parent
+src = root / "gso"
+redirect_map = {}
+
+for path in sorted(src.rglob("*.py")):
+    module_path = path.relative_to(root).with_suffix("")
+    parts = tuple(module_path.parts)
+
+    if parts[-1] == "__init__":
+        parts = parts[:-1]
+    elif parts[-1] == "__main__":
+        continue
+
+    if len(parts) == 4 and "workflows" in parts:
+        redirect_map["workflow/" + parts[3] + "/index.md"] = "https://docs.gap.geant.org/reference/" + "/".join(parts)
+
+with open(root / "wf_redirects.yaml", 'w') as redirect_file:
+    file_content = {
+        "plugins":
+            [
+                "search",
+                {"gen-files": {"scripts": ["docs/scripts/gen_ref_pages.py"]}},
+                {"redirects": {"redirect_maps": redirect_map}},
+                {"literate-nav": {"nav_file": "SUMMARY.md"}},
+                "mkdocstrings",
+            ]
+    }
+    yaml.dump(file_content, redirect_file)
diff --git a/mkdocs.yml b/mkdocs.yml
index a90ca43f..c6808360 100644
--- a/mkdocs.yml
+++ b/mkdocs.yml
@@ -1,3 +1,4 @@
+INHERIT: wf_redirects.yaml
 # General
 site_name: GÉANT Automation Platform
 site_url: https://docs.gap.geant.org/
@@ -44,15 +45,6 @@ theme:
 extra_css:
   - assets/stylesheets/extra.css
 
-plugins:
-  - search
-  - gen-files:
-      scripts:
-        - docs/scripts/gen_ref_pages.py
-  - literate-nav:
-      nav_file: SUMMARY.md
-  - mkdocstrings
-
 # Page tree
 nav:
   - Home: index.md
-- 
GitLab