sim-manajement-book/scripts/sync-docs.py
hb_alim 11b1e998ce
Some checks failed
Deploy Buku Online → helmibahara.my.id/book/sim/ / Build MkDocs & Deploy ke vm-edge (push) Has been cancelled
feat: setup MkDocs + Forgejo Actions deploy ke vm-edge
2026-04-25 17:24:24 +07:00

124 lines
3.6 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python3
"""
sync-docs.py — Salin chapters/ ke docs/ untuk MkDocs
=====================================================
Bersihkan:
- metadata block (```metainfo ... ```)
- HTML comment (<!-- ... -->)
- mermaid block → ganti dengan blockquote keterangan
- baris kosong berlebih (maks 2)
Buat docs/index.md dan docs/rps-sim.md otomatis.
"""
import re
import argparse
import shutil
from pathlib import Path
ROOT = Path(__file__).parent.parent
CHAPTERS = ROOT / "chapters"
BACKMATTER = ROOT / "backmatter"
FOUNDATION = ROOT / "foundation"
DOCS = ROOT / "docs"
def clean(text: str) -> str:
# 1. Hapus metadata block
text = re.sub(r"^```metainfo\s*\n.*?```\s*\n?", "", text,
flags=re.DOTALL | re.MULTILINE)
# 2. Hapus HTML comment
text = re.sub(r"<!--.*?-->", "", text, flags=re.DOTALL)
# 3. Ganti mermaid dengan keterangan
def mermaid_sub(m: re.Match) -> str:
first = m.group(1).strip().splitlines()[0] if m.group(1).strip() else "Diagram"
return f"\n> **[Diagram]** *{first}* — lihat versi cetak.\n"
text = re.sub(r"```mermaid\s*\n(.*?)```", mermaid_sub, text, flags=re.DOTALL)
# 4. Normalisasi baris kosong
text = re.sub(r"\n{3,}", "\n\n", text)
return text.strip() + "\n"
def write(dst: Path, content: str) -> None:
dst.write_text(content, encoding="utf-8")
def sync(verbose: bool) -> None:
if verbose:
print(f"docs/ → {DOCS}")
DOCS.mkdir(parents=True, exist_ok=True)
# Chapters
for src in sorted(CHAPTERS.glob("bab-*.md")):
write(DOCS / src.name, clean(src.read_text("utf-8")))
if verbose:
print(f"{src.name}")
# Backmatter
for name in ["kata-pengantar.md", "references.md", "glosarium.md",
"indeks.md", "tentang-penulis.md"]:
src = BACKMATTER / name
if src.exists():
write(DOCS / name, clean(src.read_text("utf-8")))
if verbose:
print(f"{name}")
# RPS
rps = FOUNDATION / "RPS-SIM.md"
if rps.exists():
write(DOCS / "rps-sim.md", clean(rps.read_text("utf-8")))
if verbose:
print(" ✓ rps-sim.md")
# index.md
index = """\
# Sistem Informasi Manajemen di Era AI
**Perspektif Strategis dan Pengambilan Keputusan**
*Helmi Bahar Alim, S.Kom., M.Kom.* — Universitas Putra Bangsa, Kebumen · Edisi 2025/2026
---
## Tentang Buku Ini
Buku ajar mata kuliah **Sistem Informasi Manajemen (SIM)** yang dirancang untuk era
kecerdasan buatan. Buku ini membekali mahasiswa dengan kerangka berpikir manajerial
untuk menggunakan SI sebagai senjata pengambilan keputusan.
## Struktur Buku
| Bagian | Topik | Bab |
|--------|-------|-----|
| I | Konteks Strategis | 12 |
| II | Fondasi Berpikir Manajerial | 35 |
| III | SI dalam Proses Bisnis & Keputusan | 69 |
| IV | Perancangan Solusi SI | 1012 |
| V | Implementasi, Evaluasi & Risiko | 1315 |
| VI | Transformasi Digital, AI & Masa Depan | 1618 |
## Navigasi Cepat
- [Kata Pengantar](kata-pengantar.md)
- [BAB 1 — Mulai dari sini →](bab-01.md)
- [Glosarium](glosarium.md)
- [Referensi](references.md)
- [RPS Mata Kuliah](rps-sim.md)
"""
write(DOCS / "index.md", index)
if verbose:
print(" ✓ index.md")
print("✅ Sync selesai → docs/")
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("--verbose", "-v", action="store_true")
parser.add_argument("--clean", action="store_true",
help="Hapus docs/ dulu sebelum sync")
args = parser.parse_args()
if args.clean and DOCS.exists():
shutil.rmtree(DOCS)
sync(args.verbose)