From 7847605153c9ab09c1f2e2ce4755a7e7f4d0d061 Mon Sep 17 00:00:00 2001
From: NotXia <35894453+NotXia@users.noreply.github.com>
Date: Thu, 30 May 2024 08:44:30 +0200
Subject: [PATCH] Add web viewer workflow
---
.github/prepare_web_viewer.py | 68 +++++++++++++++++++++++++++++++++++
.github/web-viewer/index.html | 22 ++++++++++++
.github/web-viewer/view.html | 23 ++++++++++++
.github/workflows/compile.yml | 28 +++++++++++++--
4 files changed, 138 insertions(+), 3 deletions(-)
create mode 100644 .github/prepare_web_viewer.py
create mode 100644 .github/web-viewer/index.html
create mode 100644 .github/web-viewer/view.html
diff --git a/.github/prepare_web_viewer.py b/.github/prepare_web_viewer.py
new file mode 100644
index 0000000..8679b41
--- /dev/null
+++ b/.github/prepare_web_viewer.py
@@ -0,0 +1,68 @@
+import argparse
+from read_metadata import readMetadata
+import re
+import os
+from pathlib import Path
+import shutil
+
+
+if __name__ == "__main__":
+ parser = argparse.ArgumentParser(prog="Web viewer formatter")
+ parser.add_argument("--src-path", type=str, required=True, help="Path to the .tex sources (for metadata)")
+ parser.add_argument("--out-path", type=str, required=True, help="Path of the output directory")
+ parser.add_argument("--pdfs-path", type=str, required=True, help="Path of the pdfs directory")
+ parser.add_argument("--template-path", type=str, default="./web-viewer", help="Path to the templates")
+ args = parser.parse_args()
+
+ notes_metadata = readMetadata(args.src_path)
+ table_of_content = ""
+ url_pdf_dir = "pdfs"
+ dest_pdf_dir = os.path.join(args.out_path, url_pdf_dir)
+ with open(os.path.join(args.template_path, "index.html"), "r") as f: index_template = f.read()
+ with open(os.path.join(args.template_path, "view.html"), "r") as f: viewer_template = f.read()
+
+ os.makedirs(args.out_path, exist_ok=True)
+ shutil.copytree(args.pdfs_path, dest_pdf_dir, dirs_exist_ok=True)
+
+
+ # Generate home page content
+ for year in sorted(notes_metadata.keys()):
+ for semester in sorted(notes_metadata[year].keys()):
+ for course in sorted(notes_metadata[year][semester]):
+ course_name = notes_metadata[year][semester][course]["name"]
+ course_content = notes_metadata[year][semester][course]["content"]
+
+ if (len(course_content) == 1) and (course_content[0]["name"] is None):
+ table_of_content += f"
\n"
+ else:
+ table_of_content += f"{course_name}
\n"
+ table_of_content += "\n"
+ for content in course_content:
+ table_of_content += f"\n"
+ table_of_content += "
\n"
+
+ with open(os.path.join(args.out_path, "index.html"), "w") as f:
+ f.write(
+ re.sub(
+ r"[\s\S]*",
+ f"\n{table_of_content}\n",
+ index_template
+ )
+ )
+
+
+ # Generate viewer content
+ for year in notes_metadata.keys():
+ for semester in notes_metadata[year].keys():
+ for course in notes_metadata[year][semester]:
+ course_name = notes_metadata[year][semester][course]["name"]
+ course_content = notes_metadata[year][semester][course]["content"]
+
+ for content in course_content:
+ content_local_path = os.path.join(url_pdf_dir, content["url"])
+ content_html_name = f"{Path(content['url']).stem}.html"
+ with open(os.path.join(args.out_path, content_html_name), "w") as f:
+ page_content = re.sub(r"{{pdf-path}}", f"{content_local_path}", viewer_template)
+ page_content = re.sub(r"{{course-name}}", f"{Path(content['url']).name}", page_content)
+ f.write(page_content)
+
diff --git a/.github/web-viewer/index.html b/.github/web-viewer/index.html
new file mode 100644
index 0000000..fea5f1f
--- /dev/null
+++ b/.github/web-viewer/index.html
@@ -0,0 +1,22 @@
+
+
+
+
+
+ Document
+
+
+
+
+
+ Table of contents
+
+
+
+
diff --git a/.github/web-viewer/view.html b/.github/web-viewer/view.html
new file mode 100644
index 0000000..eff300b
--- /dev/null
+++ b/.github/web-viewer/view.html
@@ -0,0 +1,23 @@
+
+
+
+
+
+ {{course-name}}
+
+
+
+
+
+
+
diff --git a/.github/workflows/compile.yml b/.github/workflows/compile.yml
index 19a6c6a..7a25ab4 100644
--- a/.github/workflows/compile.yml
+++ b/.github/workflows/compile.yml
@@ -37,7 +37,10 @@ jobs:
- name: Compile
run: |
- bash ${GITHUB_WORKSPACE}/utils/compile.sh src ${GITHUB_WORKSPACE}/.compiled ${GITHUB_WORKSPACE}/.currpdfs
+ bash ${GITHUB_WORKSPACE}/utils/compile.sh \
+ ${GITHUB_WORKSPACE}/src \
+ ${GITHUB_WORKSPACE}/.compiled \
+ ${GITHUB_WORKSPACE}/.currpdfs
- name: Generate README
run: |
@@ -47,14 +50,33 @@ jobs:
--readme-path ${GITHUB_WORKSPACE}/.compiled/README.md \
--gh-link https://github.com/NotXia/unibo-ai-notes/blob/pdfs
-
- name: Move to pdfs branch
uses: s0/git-publish-subdir-action@develop
env:
REPO: self
BRANCH: pdfs
- FOLDER: .compiled
+ FOLDER: ${GITHUB_WORKSPACE}/.compiled
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
COMMIT_NAME: "github-actions[bot]"
COMMIT_EMAIL: "github-actions[bot]@users.noreply.github.com"
MESSAGE: "🤖 Hello human, trying to not break anything ({sha})"
+
+
+ - name: Generate web viewer content
+ run: |
+ python3 ${GITHUB_WORKSPACE}/.github/prepare_web_viewer.py \
+ --src-path=${GITHUB_WORKSPACE}/src \
+ --out-path=/tmp/webviewer \
+ --pdfs-path=${GITHUB_WORKSPACE}/.compiled \
+ --template-path=${GITHUB_WORKSPACE}/.github/web-viewer \
+
+ - name: Move to pages branch
+ uses: s0/git-publish-subdir-action@develop
+ env:
+ REPO: self
+ BRANCH: pages
+ FOLDER: /tmp/webviewer
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ COMMIT_NAME: "github-actions[bot]"
+ COMMIT_EMAIL: "github-actions[bot]@users.noreply.github.com"
+ MESSAGE: "🤖 Web developer stuff"
\ No newline at end of file