mirror of
https://github.com/dwmkerr/hacker-laws.git
synced 2025-12-18 05:05:10 +01:00
chore: wip on site build
This commit is contained in:
62
.github/pages/generate_site.py
vendored
Normal file
62
.github/pages/generate_site.py
vendored
Normal file
@@ -0,0 +1,62 @@
|
||||
import argparse
|
||||
import markdown
|
||||
import os
|
||||
from jinja2 import Environment, FileSystemLoader
|
||||
|
||||
# Read environment variables with defaults
|
||||
TEMPLATE_FILE = os.getenv("TEMPLATE_FILE", "template.html")
|
||||
MARKDOWN_FILE = os.getenv("MARKDOWN_FILE", "laws.md")
|
||||
OUTPUT_FILE = os.getenv("OUTPUT_FILE", "output.html")
|
||||
TEMPLATE_DIR = os.getenv("TEMPLATE_DIR", ".")
|
||||
|
||||
|
||||
def load_template():
|
||||
"""Load Jinja2 template from the specified directory."""
|
||||
env = Environment(loader=FileSystemLoader(TEMPLATE_DIR))
|
||||
return env.get_template(TEMPLATE_FILE)
|
||||
|
||||
|
||||
def parse_markdown(md_file):
|
||||
"""Parse a Markdown file and return structured law sections."""
|
||||
with open(md_file, "r", encoding="utf-8") as f:
|
||||
md_content = f.read()
|
||||
|
||||
sections = md_content.split("\n## ") # Split by Markdown headings
|
||||
laws = []
|
||||
for section in sections:
|
||||
if section.strip():
|
||||
lines = section.split("\n", 1)
|
||||
title = lines[0].strip("# ").strip()
|
||||
# Skip sections which do not need to be processed.
|
||||
# print(f"found title: {title}")
|
||||
# if "hacker-laws" in title:
|
||||
# continue
|
||||
content = markdown.markdown(lines[1] if len(lines) > 1 else "")
|
||||
law_id = title.lower().replace(" ", "-")
|
||||
laws.append({"title": title, "content": content, "id": law_id})
|
||||
|
||||
return laws
|
||||
|
||||
|
||||
def generate_site():
|
||||
"""Generate the static HTML file from Markdown and Jinja2 template."""
|
||||
print(f"📝 Loading template from: {TEMPLATE_DIR}/{TEMPLATE_FILE}")
|
||||
print(f"📖 Loading markdown from: {MARKDOWN_FILE}")
|
||||
print(f"💾 Outputting HTML to: {OUTPUT_FILE}")
|
||||
|
||||
template = load_template()
|
||||
laws = parse_markdown(MARKDOWN_FILE)
|
||||
|
||||
with open(OUTPUT_FILE, "w", encoding="utf-8") as f:
|
||||
f.write(template.render(laws=laws))
|
||||
|
||||
print(f"✅ Static site generated: {OUTPUT_FILE}")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
parser = argparse.ArgumentParser(description="Generate a static site from Markdown.")
|
||||
parser.add_argument("--build", action="store_true", help="Build the static site.")
|
||||
args = parser.parse_args()
|
||||
|
||||
if args.build:
|
||||
generate_site()
|
||||
Reference in New Issue
Block a user