Files
mitsu-chaiyaporn/gen_astro.py
kunthawat 9460be8c0e Rebuild as Astro static site (output identical to original)
- Move all 39 cloned pages + assets into public/ (Astro copies verbatim to dist/)
  -> dist/ is byte-identical to www.mitsuthailand.com (home 143633 bytes exact)
- Add Astro project: astro.config.mjs, package.json, src/layouts/Base.astro,
  src/pages/example.astro (sample Astro component page, builds to /example/)
- Multi-stage Dockerfile: pnpm build -> nginx serve + env-injecting entrypoint
- Env-configurable: GA_ID, FORM_EMAIL, GMAP_LAT/LNG/.env.example
- Remove Python crawl tooling and old nginx-static site/ layout
- Verified: astro build -> 39 pages + example; all routes serve 200 via preview
2026-08-06 14:41:36 +07:00

66 lines
2.2 KiB
Python

#!/usr/bin/env python3
"""
Generate Astro pages from the static clone.
Approach: Astro supports placing .html files directly under src/pages/ — building
copies them to dist/ verbatim (output identical to the original site). We copy
every cloned page's HTML into src/pages/ preserving its route, and copy all
non-HTML assets into public/ (Astro copies public/ -> dist/).
This gives a real Astro project (astro build -> dist/) whose output matches the
original website exactly, while all assets are self-hosted and URLs relative.
Run from repo root.
"""
import os, shutil
ROOT = os.path.dirname(os.path.abspath(__file__))
SOURCE = os.path.join(ROOT, "site")
PAGES = os.path.join(ROOT, "src", "pages")
ASSETS = os.path.join(ROOT, "public")
BUILD = os.path.join(ROOT, "dist")
# remove sample astro page
sample = os.path.join(PAGES, "index.astro")
if os.path.exists(sample):
os.remove(sample)
def main():
os.makedirs(PAGES, exist_ok=True)
os.makedirs(ASSETS, exist_ok=True)
# 1. Copy all assets (non-index.html) into public/ preserving structure
copied = 0
for dp, dns, fns in os.walk(SOURCE):
for fn in fns:
if fn == "index.html":
continue
src = os.path.join(dp, fn)
rel = os.path.relpath(src, SOURCE)
dst = os.path.join(ASSETS, rel)
os.makedirs(os.path.dirname(dst), exist_ok=True)
shutil.copy2(src, dst)
copied += 1
print(f"Copied {copied} asset files into public/")
# 2. Copy each page's HTML into src/pages/ preserving route as .html
gen = 0
for dp, dns, fns in os.walk(SOURCE):
if "index.html" not in fns:
continue
html_src = os.path.join(dp, "index.html")
rel_dir = os.path.relpath(os.path.dirname(html_src), SOURCE)
if rel_dir == ".":
page_rel = "index.html"
else:
page_rel = rel_dir + ".html" # e.g. catalog/item/X.html, catalog.html
page_dst = os.path.join(PAGES, page_rel)
os.makedirs(os.path.dirname(page_dst), exist_ok=True)
shutil.copy2(html_src, page_dst)
gen += 1
print(f" {page_rel}")
print(f"\nGenerated {gen} html pages under src/pages/")
if __name__ == "__main__":
main()