From 11b1e998ce1491f6bed9f5eda7ca5f6ac19fcf8d Mon Sep 17 00:00:00 2001 From: hb_alim Date: Sat, 25 Apr 2026 17:24:24 +0700 Subject: [PATCH] feat: setup MkDocs + Forgejo Actions deploy ke vm-edge --- .forgejo/workflows/deploy.yml | 67 ++++++++++++++++++ mkdocs.yml | 124 ++++++++++++++++++++++++++++++++++ scripts/sync-docs.py | 124 ++++++++++++++++++++++++++++++++++ 3 files changed, 315 insertions(+) create mode 100644 .forgejo/workflows/deploy.yml create mode 100644 mkdocs.yml create mode 100644 scripts/sync-docs.py diff --git a/.forgejo/workflows/deploy.yml b/.forgejo/workflows/deploy.yml new file mode 100644 index 0000000..07ce357 --- /dev/null +++ b/.forgejo/workflows/deploy.yml @@ -0,0 +1,67 @@ +name: Deploy Buku Online → helmibahara.my.id/book/sim/ + +on: + push: + branches: [main] + paths: + - "chapters/**" + - "backmatter/**" + - "foundation/RPS-SIM.md" + - "mkdocs.yml" + - "scripts/sync-docs.py" + workflow_dispatch: + +jobs: + deploy: + name: Build MkDocs & Deploy ke vm-edge + runs-on: ubuntu-latest # Forgejo self-hosted runner + + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Setup Python 3.12 + uses: actions/setup-python@v5 + with: + python-version: "3.12" + cache: "pip" + + - name: Install MkDocs + Material + run: | + pip install --upgrade pip + pip install \ + mkdocs==1.6.* \ + mkdocs-material==9.* \ + mkdocs-minify-plugin \ + pymdown-extensions + + - name: Sync chapters → docs/ + run: python scripts/sync-docs.py --verbose + + - name: Build site MkDocs + run: mkdocs build --strict + + # ── Deploy ke vm-edge via rsync over SSH ──────────────────────── + # Secret yang dibutuhkan di Forgejo repo → Settings → Secrets: + # DEPLOY_KEY → private key (ed25519) untuk akses vm-edge + # Di vm-edge tambahkan public key ke authorized_keys deploy user + # ───────────────────────────────────────────────────────────────── + - name: Setup SSH deploy key + run: | + mkdir -p ~/.ssh + echo "${{ secrets.DEPLOY_KEY }}" > ~/.ssh/deploy_key + chmod 600 ~/.ssh/deploy_key + ssh-keyscan -H 192.168.18.202 >> ~/.ssh/known_hosts + + - name: Rsync site/ → vm-edge:/var/www/sim-book/ + run: | + rsync -avz --delete \ + -e "ssh -i ~/.ssh/deploy_key -o StrictHostKeyChecking=no" \ + site/ \ + deploy@192.168.18.202:/var/www/sim-book/ + + - name: Cleanup SSH key + if: always() + run: rm -f ~/.ssh/deploy_key diff --git a/mkdocs.yml b/mkdocs.yml new file mode 100644 index 0000000..1dde6df --- /dev/null +++ b/mkdocs.yml @@ -0,0 +1,124 @@ +site_name: Sistem Informasi Manajemen di Era AI +site_description: Perspektif Strategis dan Pengambilan Keputusan — Helmi Bahar Alim, S.Kom., M.Kom. +site_author: Helmi Bahar Alim +site_url: https://helmibahara.my.id/book/sim/ # slug: ganti "sim" jika perlu + +repo_name: forgejo/sim-manajement-book +repo_url: https://forgejo.upb.ac.id/helmi-upb/sim-manajement-book # ganti host jika perlu +edit_uri: edit/main/chapters/ + +docs_dir: docs +site_dir: site + +theme: + name: material + language: id + palette: + - scheme: default + primary: indigo + accent: blue + toggle: + icon: material/weather-sunny + name: Beralih ke mode gelap + - scheme: slate + primary: indigo + accent: blue + toggle: + icon: material/weather-night + name: Beralih ke mode terang + font: + text: Source Serif 4 + code: JetBrains Mono + features: + - navigation.tabs + - navigation.tabs.sticky + - navigation.sections + - navigation.expand + - navigation.top + - navigation.footer + - search.highlight + - search.suggest + - content.action.edit + - content.code.copy + - toc.follow + icon: + repo: fontawesome/brands/git-alt + edit: material/pencil + +plugins: + - search: + lang: id + - minify: + minify_html: true + +markdown_extensions: + - admonition + - pymdownx.details + - pymdownx.superfences + - pymdownx.tabbed: + alternate_style: true + - pymdownx.emoji: + emoji_index: !!python/name:material.extensions.emoji.twemoji + emoji_generator: !!python/name:material.extensions.emoji.to_svg + - pymdownx.highlight: + anchor_linenums: true + - tables + - toc: + permalink: true + title: Daftar Isi Bab + - attr_list + - def_list + - footnotes + - md_in_html + +extra: + social: + - icon: fontawesome/brands/git-alt + link: https://forgejo.upb.ac.id/helmi-upb/sim-manajement-book + name: Source di Forgejo + generator: false + +copyright: > + © 2026 Helmi Bahar Alim — Universitas Putra Bangsa, Kebumen. + Hak cipta dilindungi. + +nav: + - Beranda: index.md + - Kata Pengantar: kata-pengantar.md + + - "Bagian I — Konteks Strategis": + - "Bab 1: Peran SI dalam Organisasi Modern": bab-01.md + - "Bab 2: Keselarasan Strategi Bisnis dan SI": bab-02.md + + - "Bagian II — Fondasi Berpikir Manajerial": + - "Bab 3: Data dan Informasi sebagai Aset": bab-03.md + - "Bab 4: Analisis Permasalahan Organisasi": bab-04.md + - "Bab 5: Kebutuhan Informasi Manajerial": bab-05.md + + - "Bagian III — SI dalam Proses Bisnis dan Keputusan": + - "Bab 6: SI dalam Fungsi Bisnis": bab-06.md + - "Bab 7: Sistem Perusahaan dan Integrasi": bab-07.md + - "Bab 8: Pengambilan Keputusan Berbasis Data": bab-08.md + - "Bab 9: Business Intelligence dan Analitik": bab-09.md + + - "Bagian IV — Perancangan Solusi SI": + - "Bab 10: Pemodelan Proses Bisnis": bab-10.md + - "Bab 11: Perancangan Konseptual SI": bab-11.md + - "Bab 12: Alternatif Solusi Custom-Komersial-Cloud": bab-12.md + + - "Bagian V — Implementasi, Evaluasi & Risiko": + - "Bab 13: Implementasi Sistem Informasi": bab-13.md + - "Bab 14: Evaluasi Kelayakan dan ROI": bab-14.md + - "Bab 15: Risiko, Keamanan, dan Tata Kelola SI": bab-15.md + + - "Bagian VI — Transformasi Digital, AI & Masa Depan": + - "Bab 16: Transformasi Digital dan E-Business": bab-16.md + - "Bab 17: AI dalam Pengambilan Keputusan": bab-17.md + - "Bab 18: Tren SI dan Masa Depan Organisasi": bab-18.md + + - Referensi & Back Matter: + - Daftar Referensi: references.md + - Glosarium: glosarium.md + - Indeks: indeks.md + - Tentang Penulis: tentang-penulis.md + - RPS Mata Kuliah: rps-sim.md diff --git a/scripts/sync-docs.py b/scripts/sync-docs.py new file mode 100644 index 0000000..4dc5b06 --- /dev/null +++ b/scripts/sync-docs.py @@ -0,0 +1,124 @@ +#!/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 | 1–2 | +| II | Fondasi Berpikir Manajerial | 3–5 | +| III | SI dalam Proses Bisnis & Keputusan | 6–9 | +| IV | Perancangan Solusi SI | 10–12 | +| V | Implementasi, Evaluasi & Risiko | 13–15 | +| VI | Transformasi Digital, AI & Masa Depan | 16–18 | + +## 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)