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
This commit is contained in:
65
gen_astro.py
Normal file
65
gen_astro.py
Normal file
@@ -0,0 +1,65 @@
|
||||
#!/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()
|
||||
Reference in New Issue
Block a user